Вопрос или проблема
Я получаю следующую ошибку каждый раз, когда включаю инструмент извлечения в запросе API. Чтобы подтвердить, вызов работает нормально без добавления инструмента извлечения.
Я отправляю POST-запрос на этот конечный пункт:
https://us-central1-aiplatform.googleapis.com/v1/projects/%5C%5C\<project_id\>/locations/us-central1/publishers/google/models/gemini-1.0-pro-001:generateContent
И с полезной нагрузкой:
{
"contents": [{
"role": "user",
"parts": [{
"text": <prompt>
}]
}],
"model": "projects/<project_id>/locations/us/publishers/google/models/gemini-1.0-pro-001"
}
Работает нормально, но добавление этого в полезную нагрузку:
"tools": [{
"retrieval": {
"vertexAiSearch": {
"datastore": "projects/<project_id>/locations/us/collections/default_collection/dataStores/<datastore_id>"
}
}
}]
Вызывает ошибку 400:
{
"error": {
"code": 400,
"message": "Запрос содержит недопустимый аргумент.",
"status": "INVALID_ARGUMENT"
}
}
Вещи, предложенные в других темах Stack Overflow, которые не помогли:
-
убедитесь, что приложение и корзина находятся в одном регионе (они в одном)
-
убедитесь, что есть достаточные права (и подождите, пока изменения прав вступят в силу) (права в порядке)
-
убедитесь, что приложение и корзина находятся в одном регионе (они в одном)
-
убедитесь, что достаточные права (и подождите, пока изменения прав вступят в силу) (права в порядке)
-
убедитесь, что активирована функция Enterprise (я уверен, что она была отмечена при создании хранилища данных)
-
убедитесь, что создано приложение для поиска, связанное с облачным хранилищем (корзина) – я это сделал, однако приложение для поиска полностью отделено от агентского приложения (я не вижу, как между ними есть связь), так что я уверен, что это не помогает, но все равно.
И просто чтобы подтвердить (так как это может помочь другим), иерархия объектов в Vertex такова:
- Конечная точка – местоположение в URL должно быть конкретным местоположением (например, us-central1) или “глобальным”, но не может быть большим регионом (например, “us”) – я выбрал “us-central1”
- Проект (просто контейнер для всего остального) – проекты не имеют местоположений.
- Приложение (может быть агентом, поиском или чатом) – вы можете выбрать конкретный регион (например, us-central1) или более крупный регион (us). Я выбрал “us”.
- Хранилища данных (связывают приложение с данными – данные могут быть веб-сайтом, облачным хранилищем, API и т.д.) – я выбрал “облачное хранилище”.
- Облачное хранилище (фактические данные) – вы можете выбрать только более крупную область (например, us) для корзины – поэтому я выбрал “us”.
Логи показывают, что корзина индексируется нормально, я могу спрашивать модель об одном тестовом документе, который я загрузил (используя Workbench), и это работает нормально.
Я пробовал устанавливать все различные типы местоположений. Никаких успехов.
Я знаю, что агент подключается нормально к облачному хранилищу, потому что если есть какие-либо проблемы с правами, вам не дадут сохранить ваши выборы.
Я использую gemini-1.0-pro-001 (не gemini-1.0-pro-002) во всех случаях, потому что gemini-1.0-pro-002 не является опцией в агенте. Я не хотел конфликтов моделей.
Я не могу придумать, что еще проверить.
Ответ или решение
Когда вы получаете ошибку 400 (INVALID_ARGUMENT) при вызове Google Vertex API с использованием функции "retrieval", это может быть вызвано несколькими причинами. Давайте рассмотрим эту проблему более подробно.
Ошибка 400: Понимание проблемы
Ошибка 400 означает, что сервер не может или не будет обрабатывать запрос, потому что он содержит неверные параметры. Ваша исходная структура запроса работает без использования инструмента "retrieval", что говорит о том, что базовые параметры передаются корректно, а значит, причина проблемы, скорее всего, кроется в добавлении конкретной структуры "tools".
Анализ запроса
Ваш запрос выглядит следующим образом:
{
"contents": [{
"role": "user",
"parts": [{
"text": <prompt>
}]
}],
"model": "projects/<project_id>/locations/us/publishers/google/models/gemini-1.0-pro-001",
"tools": [{
"retrieval": {
"vertexAiSearch": {
"datastore": "projects/<project_id>/locations/us/collections/default_collection/dataStores/<datastore_id>"
}
}
}]
}
Потенциальные проблемы
-
Идентификаторы и параметры:
- Убедитесь, что
<project_id>
и<datastore_id>
заполнены корректно и соответствуют вашим проектам в Google Cloud. Это должно быть значение проекта, которое вы на самом деле используете.
- Убедитесь, что
-
Структура коллекций:
- Описание вашего пути к хранилищу данных должно соответствовать фактической иерархии структуры в вашем проекте. Проверьте, существует ли
<datastore_id>
и правильно ли вы указали путь.
- Описание вашего пути к хранилищу данных должно соответствовать фактической иерархии структуры в вашем проекте. Проверьте, существует ли
-
Параметры модели:
- Проверьте, что вы действительно используете модель "gemini-1.0-pro-001", и что она поддерживает функцию "retrieval".
-
Ограничения по местоположению:
- Ошибка может быть связана с неправильными местоположениями хранилищ данных и ресурсов. Убедитесь, что все ресурсы (модель, хранилище данных и ваша API-запрос) находятся в одном регионе. Вы однозначно указали
us-central1
, так что сконцентрируйтесь на проверке всех других компонентов.
- Ошибка может быть связана с неправильными местоположениями хранилищ данных и ресурсов. Убедитесь, что все ресурсы (модель, хранилище данных и ваша API-запрос) находятся в одном регионе. Вы однозначно указали
-
Разрешения:
- Убедитесь, что ваша команда (service account или пользователь) имеет необходимые разрешения для доступа к ресурсам, особенно к datastore.
-
Активированные функции Enterprise:
- Проверьте, действительно ли нужные функции, такие как Enterprise, активированы для вашего проекта. Обратитесь к консоли Google Cloud для дальнейшей проверки.
Рекомендации по отладке
- Логи: Воспользуйтесь логами Google Cloud для более глубокого анализа ошибок. Логи могут привести вас к конкретным проблемам при обработке запроса.
- Тестирование:
- Попробуйте выполнять запросы с минимальными данными, постепенно добавляя конфигурации до тех пор, пока не возникнет ошибка.
- Попробуйте другие наборы данных, чтобы убедиться, что проблема не связана с конкретным набором данных.
Заключение
Ошибки 400 могут быть непростыми в диагностике, поскольку необходимо проверить много аспектов запроса. Убедитесь, что все идентификаторы и пути заполнены правильно, ресурсы располагаются в соответствии с выбранным регионом, а также что правильные разрешения для API корректны. Исходя из вашего описания, вы уже исследовали множество общих причин, что говорит о хорошем понимании системы. Если ошибки продолжают возникать, рассмотрите возможность обращения в поддержку Google Cloud для более глубокого анализа проблемы.
Если у вас будут дополнительные вопросы или потребуется помощь, не стесняйтесь обратиться за консультацией.