Como usar o Serviço do Agente de IA do Azure com ferramentas especificadas para OpenAPI
Agora você pode conectar seu Agente de IA do Azure a uma API externa usando uma ferramenta especificada do OpenAPI 3.0, permitindo uma interoperabilidade escalonável com vários aplicativos. Habilite suas ferramentas personalizadas para autenticar o acesso e as conexões com identidades gerenciadas (ID do Microsoft Entra) para maior segurança, tornando-a ideal para a integração com a infraestrutura ou os serviços Web existentes.
A ferramenta Especificada do OpenAPI melhora sua experiência de chamada de função fornecendo integrações de API padronizadas, automatizadas e escalonáveis que aprimoram os recursos e a eficiência do agente.
Especificações OpenAPI fornecem um padrão formal para descrever APIs HTTP. Isso permite que as pessoas entendam como uma API funciona, como uma sequência de APIs funcionam juntas, geram código do cliente, criam testes, aplicam padrões de design e muito mais. Atualmente, há suporte para 3 tipos de autenticação com as ferramentas especificadas do OpenAPI 3.0: anonymous
, API key
, managed identity
.
Suporte de uso
Suporte de fundição do IA do Azure | SDK do Python | SDK do C# | REST API | Configuração básica do agente | Configuração do agente padrão |
---|---|---|---|---|---|
✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Pré-requisitos
Verifique se você concluiu os pré-requisitos e as etapas de instalação no início rápido.
Verifique a especificação OpenAPI para os seguintes requisitos:
-
operationId
deve conter apenas letras,-
e_
. Você pode modificá-lo para atender ao requisito. Recomendamos usar um nome descritivo para ajudar os modelos a decidirem com eficiência qual função usar.
-
Autenticação com chave de API
Verifique se a especificação OpenAPI suporta chaves de API: ela tem a seção
securitySchemes
e tem um esquema do tipoapiKey
. Por exemplo:"securitySchemes": { "apiKeyHeader": { "type": "apiKey", "name": "x-api-key", "in": "header" } }
Se os esquemas de segurança incluírem vários esquemas, recomendamos manter apenas um deles.
Remova qualquer parâmetro na especificação OpenAPI que exija chave de API, pois a chave de API será armazenada e passada por meio de uma conexão, conforme descrito posteriormente neste artigo.
Crie uma conexão
custom keys
para armazenar sua chave de API.Acesse o portal do IA do Azure Foundry e selecione o Projeto de IA. Clique em recursos conectados.
Selecione + nova conexão na página de configurações.
Observação
Se você regenerar a chave de API posteriormente, precisará atualizar a conexão com a nova chave.
Selecione chaves personalizadas em outros tipos de recurso.
Insira as seguintes informações
- chave:
name
do seu esquema de segurança. Neste exemplo, deve serx-api-key
"securitySchemes": { "apiKeyHeader": { "type": "apiKey", "name": "x-api-key", "in": "header" } }
- value: YOUR_API_KEY
- Nome da conexão: YOUR_CONNECTION_NAME (Você usará este nome de conexão no código de exemplo abaixo.)
- Acesso: você pode escolher somente este projeto ou compartilhado com todos os projetos. Apenas verifique se, no código de exemplo abaixo, o projeto para o qual você inseriu a cadeia de conexão tem acesso a essa conexão.
- chave:
Etapa 1: Criar um cliente de projeto
Crie um objeto cliente, que conterá a cadeia de conexão para se conectar ao projeto de IA e a outros recursos.
import os
import jsonref
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
from azure.ai.projects.models import OpenApiTool, OpenApiAnonymousAuthDetails
# Create an Azure AI Client from a connection string, copied from your Azure AI Foundry project.
# At the moment, it should be in the format "<HostName>;<AzureSubscriptionId>;<ResourceGroup>;<HubName>"
# Customer needs to login to Azure subscription via Azure CLI and set the environment variables
project_client = AIProjectClient.from_connection_string(
credential=DefaultAzureCredential(),
conn_str=os.environ["PROJECT_CONNECTION_STRING"],
)
Etapa 2: Crie a definição da ferramenta OpenAPI Spec
Talvez você queira armazenar a especificação OpenAPI em outro arquivo e importar o conteúdo para inicializar a ferramenta. Observe que o código de exemplo está usando anonymous
como tipo de autenticação.
with open('./weather_openapi.json', 'r') as f:
openapi_spec = jsonref.loads(f.read())
# Create Auth object for the OpenApiTool (note that connection or managed identity auth setup requires additional setup in Azure)
auth = OpenApiAnonymousAuthDetails()
# Initialize agent OpenAPI tool using the read in OpenAPI spec
openapi = OpenApiTool(name="get_weather", spec=openapi_spec, description="Retrieve weather information for a location", auth=auth)
Se você quiser usar a conexão, que armazena a chave de API, para autenticação, substitua a linha por
auth = OpenApiConnectionAuthDetails(security_scheme=OpenApiConnectionSecurityScheme(connection_id="your_connection_id"))
Sua ID de conexão se parece com /subscriptions/{subscription ID}/resourceGroups/{resource group name}/providers/Microsoft.MachineLearningServices/workspaces/{project name}/connections/{connection name}
.
Se você quiser usar a identidade gerenciada para autenticação, substitua a linha por
auth = OpenApiManagedAuthDetails(security_scheme=OpenApiManagedSecurityScheme(audience="https://your_identity_scope.com"))
Um exemplo do público-alvo seria https://cognitiveservices.azure.com/
.
Etapa 3: Crie um agente e um thread
# Create agent with OpenAPI tool and process assistant run
with project_client:
agent = project_client.agents.create_agent(
model="gpt-4o",
name="my-assistant",
instructions="You are a helpful assistant",
tools=openapi.definitions
)
print(f"Created agent, ID: {agent.id}")
# Create thread for communication
thread = project_client.agents.create_thread()
print(f"Created thread, ID: {thread.id}")
Etapa 4: Criar uma execução e verificar a saída
Crie uma execução e observe que o modelo usa a ferramenta Especificação OpenAPI para fornecer uma resposta à pergunta do usuário.
# Create message to thread
message = project_client.agents.create_message(
thread_id=thread.id,
role="user",
content="What's the weather in Seattle?",
)
print(f"Created message, ID: {message.id}")
# Create and process agent run in thread with tools
run = project_client.agents.create_and_process_run(thread_id=thread.id, assistant_id=agent.id)
print(f"Run finished with status: {run.status}")
if run.status == "failed":
print(f"Run failed: {run.last_error}")
# Delete the assistant when done
project_client.agents.delete_agent(agent.id)
print("Deleted agent")
# Fetch and log all messages
messages = project_client.agents.list_messages(thread_id=thread.id)
print(f"Messages: {messages}")