Azure AI Studio — вызовы API развертывания индекса ML GPT4 не работают из-за ошибки access_token

Я создал модель Azure AI GPT4 и начал использовать ее в обычном режиме через вызовы API, и все работало нормально. Недавно я создал индекс поиска и машинного обучения Azure, чтобы предоставить ему некоторые пользовательские данные в чате. Все это сработало и работает на игровой площадке Azure AI Studio.

Однако, когда я использовал код JSON, предоставленный для настройки моего API, я получаю следующий возврат от API:

{
  "error": {
    "requestid": "<request_id>",
    "code": 400,
    "message": "Failed to access workspace /subscriptions/<subscription_guid>/resourceGroups/<resource_group_name>/providers/Microsoft.MachineLearningServices/workspaces/<workspace_name> due to invalid token. Response: {\"error\":{\"code\":\"InvalidAuthenticationToken\",\"message\":\"The access token is invalid.\"}}"
  }
}

Код, предоставленный Microsoft на игровой площадке Azure AI Studio, предлагает вам использовать аутентификацию access_token, но на самом деле не предоставляет значения или параметров. Я нашел синтаксис в этой документации и добавил то, что, как мне казалось, было в комплекте access_token, но это всегда терпело неудачу.

Я просмотрел всю документацию, которую смог найти, а также портал Azure, но не могу найти, где можно было бы включить access token.

Если я настрою API для использования AI-поиска вместо индекса Azure ML, он будет работать, но не будет использовать индекс ML, что неправильно.

Как заставить это работать правильно или где я могу найти или сгенерировать токен доступа?

Полный (запутанный) код моего вызова API ниже:

{
  "data_sources": [
    {
      "type": "azure_ml_index",
      "parameters": {
        "project_resource_id": "/subscriptions/<subscription_guid>/resourceGroups/<resource_group_name>/providers/Microsoft.MachineLearningServices/workspaces/<workspace_name>",
        "name": "<index name>",
        "version": "1",
        "authentication": {
          "type": "access_token",
          "access_token": "<UNKNOWN>"
        },
        "query_type": "vector",
        "in_scope": true,
        "role_information": "<system prompt>",
        "strictness": 3,
        "top_n_documents": 5,
        "endpoint": "<azure search endpoint>",
        "key": "<azure search key>",
        "indexName": "<gpt4 index name>"
      }
    }
  ],
  "messages": [
    {
      "role": "system",
      "content": "<system prompt>"
    },
    {
      "role": "user",
      "content": "<content prompt>"
    },
    {
      "role": "assistant",
      "content": "<response prompt>"
    }
  ],
  "deployment": "<gpt4model>",
  "temperature": 0.5,
  "top_p": 1,
  "max_tokens": 1800,
  "stop": null,
  "stream": true,
  "frequency_penalty": 0.25,
  "presence_penalty": 0.35,
  "azureSearchEndpoint": "<azure search endpoint>",
  "azureSearchKey": "<azure search key>"
}
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
82
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам необходим токен доступа для доступа к ресурсам внутри рабочей области машинного обучения.

Чтобы получить токен и использовать его в запросе POST, используйте приведенные ниже команды Azure CLI:

token_response=$(az account get-access-token --resource=https://management.core.windows.net/)

access_token=$(echo "$token_response" | jq -r '.accessToken')

az rest --method POST --uri https://jgsopenai.openai.azure.com/openai/deployments/tst/chat/completions?api-version=2024-02-15-preview --resource https://cognitiveservices.azure.com/ --body '
{
    "data_sources": [
      {
        "type": "azure_ml_index",
        "parameters": {
          "project_resource_id": "/subscriptions/b83c1ed3-xxxxxxxxxx/resourceGroups/<xxx-yyy>/providers/Microsoft.MachineLearningServices/workspaces/<ml-workspace-name>",
          "name": "maroon-gyro-lw5ss1dmjt",
          "version": "1",
          "authentication": {
          "type": "access_token",
          "access_token": "'"$access_token"'"
        }
        }
      }
    ],
    "messages": [
      {
        "role": "user",
        "content": "What is the amount due paid for the current bill?"
      }
    ]
}
'

Здесь я сначала получаю токен доступа и предоставляю его в запросе POST. Также убедитесь, что вы выполнили az login в CLI bash.

Выход:

Вы также можете получить токен с помощью субъекта-службы.

Ниже приведены команды для получения токена с использованием субъекта-службы.


token_response=$(curl -X POST https://login.microsoftonline.com/<tenent_id>/oauth2/token -d "grant_type=client_credentials&resource=https%3A%2F%2Fmanagement.azure.com%2F&client_id=<client_id>&client_secret=<client_seceret>")

access_token=$(echo "$token_response" | jq -r '.access_token')


az rest --method POST --uri https://jgsopenai.openai.azure.com/openai/deployments/tst/chat/completions?api-version=2024-02-15-preview --resource https://cognitiveservices.azure.com/ --body '
{
    "data_sources": [
      {
        "type": "azure_ml_index",
        "parameters": {
          "project_resource_id": "/subscriptions/<sub_id>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<ml-workspace>",
          "name": "maroon-gyro-lw5ss1dmjt",
          "version": "1",
          "authentication": {
          "type": "access_token",
          "access_token": "'"$access_token"'"
        }
        }
      }
    ],
    "messages": [
      {
        "role": "user",
        "content": "What is the address in the current bill?"
      }
    ]
}
'

Убедитесь, что вы предоставили необходимое разрешение своему субъекту-службе в рабочей области Azure ml.

Следуйте этому, чтобы получить токен с помощью принципала службы.

Примечание. Я настоятельно рекомендую использовать управляемое удостоверение вместо токена.

Большое спасибо за это. Это полностью сработало; Я не осознавал, что это такой тип аутентификации, и думал, что это access-token или API-ключ для самих сервисов. Еще раз спасибо за это, очень ценю это.

RazorKillBen 07.05.2024 12:27

На самом деле вам необходимо пройти аутентификацию на самом ресурсе Azure ml, поскольку индекс находится в ресурсе ml. Рад, что это сработало.

JayashankarGS 07.05.2024 13:55

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

Похожие вопросы

Роли, назначенные управляемому удостоверению в Azure, отсутствуют в токене
Могу ли я иметь секреты, срок действия которых не истекает в системе единого входа Microsoft через Azure Microsoft Entra ID?
Az Powershell – невозможно прочитать содержимое файла CSV
Бета-версия C# Graph позволяет получить все типы назначений с их правилами обнаружения для всех Win32LobApps за один вызов
Служба связи Azure — ошибка «Приложение пытается получить доступ к службе 1fd5118e-2576-4263-8130-9503064c837a». Тогда известное решение не работает
Распространение самостоятельного расширения Chrome через организацию, управляемую Azure
Можно ли использовать PhraseListGrammar с IntentRecouncer в Microsoft Speech SDK для Java?
Публикация артефакта в Azure Devops Pipeline: ошибка получения разрешения на доступ к пути
Сбой контейнера Grobid при использовании приложений-контейнеров Azure
Функции Azure добавляют пользовательскую переменную среды во время публикации