Я создал модель 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>"
}


Вам необходим токен доступа для доступа к ресурсам внутри рабочей области машинного обучения.
Чтобы получить токен и использовать его в запросе 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.
Следуйте этому, чтобы получить токен с помощью принципала службы.
Примечание. Я настоятельно рекомендую использовать управляемое удостоверение вместо токена.
На самом деле вам необходимо пройти аутентификацию на самом ресурсе Azure ml, поскольку индекс находится в ресурсе ml. Рад, что это сработало.
Большое спасибо за это. Это полностью сработало; Я не осознавал, что это такой тип аутентификации, и думал, что это
access-tokenили API-ключ для самих сервисов. Еще раз спасибо за это, очень ценю это.