AzureOpenAI: отсутствуют учетные данные `api_key`, `azure_ad_token`, `azure_ad_token_provider`

Я пытаюсь использовать модель Azure OpenAI для создания комментариев на основе данных из моей таблицы BigQuery в GCP с помощью облачных функций. Вот скрипт Python, над которым я работал:

from azure_openai import AzureOpenAI
def generate_comment(month, year, country, column_name, current_value, previous_value):
        prompt_ = ("")
    
        client = AzureOpenAI(
            api_key=os.getenv("AZURE_OPENAI_API_KEY"), ## tried also api_key = "AZURE_OPENAI_API_KEY"
            api_version = "2023-09-15-preview",
            azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT")
        )
    
        response = client.completions.create(model = "MODEL_NAME", prompt=prompt_, max_tokens=50, temperature=0.35)
        return response.choices[0].text

Раньше я пробовал старую версию, но получил ошибку openai.lib._old_api.APIRemovedInV1:

openai.api_type = "azure"
openai.api_base = "https://xxx.openai.azure.com/"
openai.api_version = "2023-09-15-preview"
openai.api_key = "xxx"

response = openai.Completion.create(
engine = "xxx",
prompt=prompt_,
temperature=0.35)

return response['choices'][0]['message']['content']

Однако я сталкиваюсь с внутренней ошибкой сервера 500 с сообщением:

ValueError: Must provide one of the `base_url` or `azure_endpoint` arguments, or the `AZURE_OPENAI_ENDPOINT` environment variable

Я проверил конфигурацию Azure OpenAI и убедился, что ключ API и конечная точка верны. Может ли кто-нибудь помочь мне определить, что может быть причиной этой ошибки?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
66
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуйте заменить client.completions.create() на client.chat.completions.create(). Обновите версию opeani, если вы этого еще не сделали. Ниже приведен код для openai_1.19.0, он должен работать с параллельными версиями.

from azure_openai import AzureOpenAI
def generate_comment():
        messages = [{"role" : "system", "content" : "You are an assitant"}]
        messages.append({"role" : "user", "content" : "YOUR_PROMPT_HERE"})
    
        client = AzureOpenAI(
            api_key = "YOUR_API_KEY",
            api_version = "2023-09-15-preview",
            azure_endpoint = "YOUR_AZURE_OPENAI_ENDPOINT"
        )
    
        response = client.chat.completions.create(model = "YOUR_DEPLOYED_MODEL_NAME",
                                                  messages=messages,
                                                  max_tokens=50, 
                                                  temperature=0.35)
        return response.choices[0].message.content

Поскольку вы используете os.getenv() для нескольких параметров, убедитесь, что они настроены, иначе вы можете напрямую скопировать и вставить строки.

Спасибо за ваши комментарии. Я все еще получаю сообщение об ошибке типа: TypeError: объект ChatCompletionMessage не подлежит подписке. Пробовал разные версии, но пока не работает.

Badia Alfathi 22.07.2024 10:27
Ответ принят как подходящий

Это работало следующим образом:

import openai
# Set up the Azure OpenAI configuration
openai.api_type = "azure"
openai.api_base = "https://XXXX.openai.azure.com/"
openai.api_key = "XXXX"
openai.api_version = "XXXX"

def generate_comment():
prompt_ = ""
    messages = [
        {"role": "system", "content": "You will generate comments based on the given data."},
        {"role": "user", "content": prompt_}
    ]
    # Send a completion call to Azure OpenAI to generate a comment
    response = openai.ChatCompletion.create(
        engine = "XXXX", # engine = "deployment_name"
        messages=[
            {"role": "system", "content": "You will generate comments based on the given data."},
            {"role": "user", "content": prompt_}
        ],
        max_tokens=50,
        temperature=0.35
    )
    return response['choices'][0]['message']['content']

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

Есть ли способ проверить, какую политику обновлений безопасности использует функция Google Cloud (в Google Cloud Console)?
Обновление документов Firestore с использованием облачных функций Firebase происходит очень медленно
[email protected] отсутствует, вместо него у меня есть [email protected]
Аутентификация Firebase с помощью облачных функций не удалась: «Запрос не был аутентифицирован»
Ошибка развертывания функций gcloud: один или несколько пользователей, указанных в политике, не принадлежат разрешенному клиенту
@firestore_fn.on_document_created ограничение на облачные функции Firebase (2-го поколения)
Обновление документа Firestore несколько раз с помощью функции триггера события перезаписывает или прекращает обновление после нескольких триггеров
Ошибка при развертывании определенной облачной функции Firebase. Невозможно загрузить предоставленный модуль
Изменить формат времени в GCP Logs Explorer
Как запланировать резервное копирование внешнего PostgreSQL с помощью Google Cloud Serverless?