Генеративный API Google с Palm: 403 Запрос имел недостаточные области аутентификации. [причина: «ACCESS_TOKEN_SCOPE_INSUFFICIENT»

Я пытался использовать Palm API и функцию palm.chat() с новым генеративным API Google. Я был в лабиринте документации и ошибок и, похоже, не могу пройти мимо этого. Мой код очень прост, и ошибка возникает из-за простого запроса с помощью Palm.chat(). У меня есть ключ API, который работает, когда я тестирую его с помощью Curl. Я также загрузил учетные данные. Я настроил экран согласия OAuth, так как думал, что это поможет мне добавить нужную мне область, но я не вижу, каковы будут требования к области для Palm.chat. Вот мой код:

      import google.generativeai as palm
import os
palm.configure(api_key='XXXXXXXXXXXXXXXXXXXXX')

os.environ['GOOGLE_APPLICATION_CREDENTIALS']='XXXXXXXXX/.config/gcloud/application_default_credentials.json'

response = palm.chat(messages='Hello')

response.last

Точная ошибка, которую я получаю:

Файл "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/google/api_core/grpc_helpers.py", строка 67, в error_remapped_callable вызывает исключения.from_grpc_error(exc) из exc google. api_core.Exceptions.PermissionDenied: 403 Запрос имел недостаточные области аутентификации. [причина: «ACCESS_TOKEN_SCOPE_INSUFFICIENT» домен: «googleapis.com» метаданные {ключ: «метод» значение: «google.ai.generativelanguage.v1beta2.TextService.GenerateText» } метаданные {ключ: значение «service»: «generativelanguage.googleapis. ком" }

Я понятия не имею, что я делаю не так, и весь день работал над устранением этой ошибки. Любая помощь приветствуется. Спасибо!

6 ответов

Я столкнулся с той же ошибкой при использованииvirtualenv, но когда я перешёл наpyenvс тем же кодом все работало нормально. Полагаю, это означает, что что-то не так со средой Python, я не совсем уверен. Кроме того, вам даже не нужно устанавливать Google Cloud CLI, поскольку у вас есть ключ API.

Для получения более подробной информации обратитесь к https://github.com/google/generative-ai-python/issues/50 .

Рекомендуемым решением будет использование ключа API отдельно, но если вам необходимо использовать ADC, вы можете использоватьgcloudчтобы установить области:

      gcloud config set account your@account.com
gcloud config set project name-of-your-cloud-project

gcloud auth application-default login --scopes="https://www.googleapis.com/auth/generative-language,https://www.googleapis.com/auth/cloud-platform"

И не смешивайте учетные данные — используйте либо ключ API , либо ADC, но не то и другое. Это может сработать, но неясно, какой механизм аутентификации будет иметь приоритет в том или ином пути кода.

Подробнее в выпуске GitHub.

Я думаю, что что-то не так с версиями Python/pip, в итоге переключился на другое устройство, и с первой попытки все заработало идеально.

Наконец-то я заставил его работать на другом компьютере. Я подозревал, что в одном из модулей что-то повреждено. Создал файл req.txt, содержащий следующие модули:cachetools-5.3.1 google-ai-generativelanguage-0.2.0 google-api-core-2.11.1 google-auth-2.22.0 google-generativeai-0.1.0 googleapis-common-protos-1.59.1 grpcio-1.56.2 grpcio-status-1.56.2 proto-plus-1.22.3 protobuf-4.23.4 pyasn1-0.5.0 pyasn1-modules-0.3.0 rsa-4.9Ран:pip uninstall -y -r reqs.txt pip install google-generativeaiТеперь он работает так, как ожидалось

Получил ту же ошибку при попытке использовать langchainVirtualEmbeddings(). Внутри virtualenv просто нужно было сделатьgcloud auth application-default loginи ошибка ушла.

Что мне подходит, так это аутентификация с использованием учетных данных вместо api_key, это означает, что вам нужно сначала его сгенерировать.

      from google.oauth2 import service_account
credentials = service_account.Credentials.from_service_account_file('./credentials.json')
palm.configure(credentials=credentials)
print([m for m in palm.list_models() ]) # should work!

Тем не менее, я поддерживаю идею, что что-то повреждено или есть ошибка в генеративной библиотеке. Эта проблема возникает только у меня в локальном ядре Jupiter, но при запуске скрипта Python, команды Curl или даже Google Colab, как вы можете видеть в быстрый старт работает хорошо. https://colab.research.google.com/github/google/generative-ai-docs/blob/main/site/en/tutorials/text_quickstart.ipynb , и вам нужно только передать api_key.

Другие вопросы по тегам