Troubleshooting of Google Vertex AI Search

From LemonWiki共筆
Jump to navigation Jump to search

Resolving Issues with Google Vertex AI Search and its API

🌐 Switch language: EN, 漢字


Issues[edit]

Troubleshooting: Vertex AI Search: Data Repository Requires Enterprise Features[edit]

Error: When creating an application, encountered the error message "This application cannot currently use 4 data stores are..." Expanding the data repository list shows "Website data repository can only be linked to Enterprise version of Vertex AI Search applications"

Solution: When creating the application, enable "Enterprise Edition Features"

Troubleshooting: SearchLite API Blocked" Error in Discovery Engine[edit]

Issue Description: When attempting to retrieve search results using Google Vertex AI API[1], the following error occurs:

curl -X POST -H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:searchLite?key=API_KEY" \
-d '{
"servingConfig": "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search",
"query": "QUERY",
}'

Met the error

{
  "code" : 403,
  "message" : "Requests to this API discoveryengine.googleapis.com method google.cloud.discoveryengine.v1.SearchService.SearchLite are blocked.",
  "status" : "PERMISSION_DENIED",
  "details" : [
    {
      "@type" : "type.googleapis.com/google.rpc.ErrorInfo",
      "reason" : "API_KEY_SERVICE_BLOCKED",
      "domain" : "googleapis.com",
      "metadata" : {
        "service" : "discoveryengine.googleapis.com",
        "methodName" : "google.cloud.discoveryengine.v1.SearchService.SearchLite",
        "apiName" : "discoveryengine.googleapis.com",
        "consumer" : "projects/xxx"
      }
    },
    {
      "@type" : "type.googleapis.com/google.rpc.LocalizedMessage",
      "locale" : "en-US",
      "message" : "Requests to this API discoveryengine.googleapis.com method google.cloud.discoveryengine.v1.SearchService.SearchLite are blocked."
    }
  ]
}

Resolution Steps: Check API Key Restrictions

  • Verify if the key is restricted to specific APIs:
    1. Navigate to the API Key Management page in Google Cloud Console.
    2. Locate the API key being used and check if it is restricted to specific APIs. If the restriction includes discoveryengine.googleapis.com, ensure it is correctly configured.
    3. Remove unnecessary restrictions: If the key is restricted to unrelated IP addresses or applications, remove those restrictions.
  • Enable the Discovery Engine API
    1. Go to the API & Services page in Google Cloud Console.
    2. Search for Discovery Engine API and ensure it is enabled.

Troubleshooting: "Requested Entity Already Exists" Error When Saving Data Stores[edit]

Error: When saving site indexing, the following error message appears[2]:

Failed to save sites
Requested entity already exists
Tracking number: <mix of English and numeric characters>

Root Cause: Conflicting URL patterns exist simultaneously in "Specify URL patterns to index":

example.com

and

*.example.com/*

These two patterns conflict with each other, causing the system to treat them as duplicate entities. The detailed linking rules are mentioned in the official documentation:

You can use the operations listed below
Entire site: www.mysite.com/*
Parts of site: www.mysite.com/faq/*
Entire domain: *.mysite.com/*
Quotes for exact match: "www.mysite.com/faq"
Sites without quotes will match any path after the specified address:
www.mysite.com/faq → www.mysite.com/faq*.

Solution: Simply remove one of the patterns to resolve the issue. It's recommended to keep the broader pattern *.example.com/* as it already includes example.com.

Troubleshooting: "Quota exceeded for Search lite requests" Error in Discovery Engine[edit]

Issue Description: When using Discovery Engine API to retrieve search results, the following error occurs:

{
  "error" : {
    "code" : 429,
    "message" : "Quota exceeded for quota metric 'Search lite requests' and limit 'Search lite requests per minute' of service 'discoveryengine.googleapis.com' for consumer 'project_number:XXX'.",
    "status" : "RESOURCE_EXHAUSTED",
    ...
  }
}

Root cause:

The metadata in the error response has indicated that the quota value is 100 requests per minute

Resolution Steps: Resolve API Quota Limit Exceedance

Option 1: Increase the delay time between requests

  1. Implement this timing delay in your code to prevent 429 errors. 60 seconds ÷ 100 requests = 0.6 seconds per request e.g. Add a 0.6 ~ 1 second pause between each request to stay within rate limits
  2. Adjust the delay time as needed based on your quota and request patterns

Option 2: Increase quota limit

  1. Go to the Quotas page in Google Cloud Console and find "Search lite requests per minute"
  2. Select the relevant quota, click "EDIT QUOTAS", and submit a request for a higher limit
  3. Wait for Google Cloud Support to review and approve

Option 3: Implement exponential backoff retry mechanism

  1. Detect HTTP 429 errors in your application and set an initial delay (e.g., 1 second)
  2. Increase the delay time with each failed retry (e.g., 2 seconds, 4 seconds, 8 seconds, etc.)
  3. Continue retrying until the request succeeds or maximum retry count is reached


Troubleshooting: Vertex AI Search: Engine Not Found Error[edit]

Error: When using Vertex AI Search API, encountering a 404 error:

{
  "error": {
    "code": 404,
    "message": "Engine projects/<YOUR_PROJECT_ID>/locations/global/collections/default_collection/engines/<YOUR_APP_ID> not found.",
    "status": "NOT_FOUND"
  }
}

Solution:

1. Verify the correct APP ID (Engine ID): Open your browser and replace <YOUR_APP_ID> in the URL with the actual APP ID:

https://console.cloud.google.com/gen-app-builder/locations/global/engines/<YOUR_APP_ID>/overview

2. Update the app_id in your code:

3. Validate the API endpoint: Ensure the curl request uses the correct engine ID:

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1alpha/projects/<YOUR_PROJECT_ID>/locations/global/collections/default_collection/engines/<YOUR_APP_ID>/servingConfigs/default_search:search" \
-d '{"query":"<QUERY>","pageSize":10,"queryExpansionSpec":{"condition":"AUTO"},"spellCorrectionSpec":{"mode":"AUTO"},"languageCode":"zh-TW","userInfo":{"timeZone":"Asia/Taipei"}}'


Troubleshooting: Vertex AI Search: Path Format Error When Enabling Grounding[edit]

Error encountered when enabling "Grounding with Vertex AI Search":

Error message:

Path must follow this format: projects/{project_id}/locations/{location}/collections/{collection_name}/dataStores/{datastore_name}

Solution: How to find the correct path parameters:

  1. Navigate to https://console.cloud.google.com/gen-app-builder/engines
  2. Select your datastore
  3. Click the "Integration" tab
  4. Look for the example command under "Run sample request in Cloud Shell"

Example curl command:

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1alpha/projects/987654321000/locations/global/collections/default_collection/engines/vertex-search_123/servingConfigs/default_search:search" \
-d '{"query":"<QUERY>","pageSize":10,"queryExpansionSpec":{"condition":"AUTO"},"spellCorrectionSpec":{"mode":"AUTO"},"languageCode":"zh-TW","userInfo":{"timeZone":"Asia/Taipei"}}'

Parameter extraction from the URL: From the URL path

/projects/987654321000/locations/global/collections/default_collection/engines/vertex-search_123/

  1. {project_id}: `987654321000` (the number after `/projects/`)
  2. {location}: `global` (the string after `/locations/`) Icon_exclaim.gif Note: Do not enter the geographic areas of GCP server. You will met the error message e.g. "Invalid location in serving config: asia-east1"
  3. {collection_name}: `default_collection` (the string after `/collections/`)
  4. {datastore_name}: Found on the datastore overview page as "Datastore ID" (e.g., `XXX_1234567890123`) Icon_exclaim.gif Note: The datastore_name is not visible in the engine URL - you need to check the datastore overview page to find the "Datastore ID".

Related Pages[edit]

Further readings[edit]

References[edit]