Como usar o Serviço Azure AI Agent com Ferramentas Especificadas OpenAPI
Agora você pode conectar seu Agente de IA do Azure a uma API externa usando uma ferramenta especificada da OpenAPI 3.0, permitindo interoperabilidade escalável com vários aplicativos. Habilite suas ferramentas personalizadas para autenticar acesso e conexões com identidades gerenciadas (Microsoft Entra ID) para maior segurança, tornando-o ideal para integração com infraestrutura ou serviços Web existentes.
A ferramenta OpenAPI Specified melhora sua experiência de chamada de função fornecendo integrações de API padronizadas, automatizadas e escaláveis que aprimoram os recursos e a eficiência do seu agente.
As 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 funciona em conjunto, gera código de cliente, cria testes, aplica padrões de design e muito mais. Atualmente, suportamos 3 tipos de autenticação com as ferramentas especificadas OpenAPI 3.0: anonymous
, API key
, managed identity
.
Suporte de uso
Suporte de fundição de IA do Azure | Python SDK | SDK C# | API REST | Configuração básica do agente | Configuração padrão do agente |
---|---|---|---|---|---|
✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Pré-requisitos
Certifique-se de ter concluído os pré-requisitos e as etapas de configuraçã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 o uso de nome descritivo para ajudar os modelos a decidir 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
securitySchemes
seção 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 regimes, recomendamos manter apenas um deles.
Remova qualquer parâmetro na especificação OpenAPI que precise de chave API, porque a chave API será armazenada e passada através de uma conexão, conforme descrito mais adiante neste artigo.
Crie uma
custom keys
conexão para armazenar sua chave de API.Vá para o portal do Azure AI Foundry e selecione o Projeto AI. Clique em recursos conectados.
Selecione + nova conexão na página de configurações.
Nota
Se você regenerar a chave da API em uma data posterior, precisará atualizar a conexão com a nova chave.
Selecione chaves personalizadas em outros tipos de recursos.
Introduza 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" } }
- Valor: YOUR_API_KEY
- Nome da conexão: YOUR_CONNECTION_NAME (Você usará esse nome de conexão no código de exemplo abaixo.)
- Acesso: pode escolher apenas este projeto ou partilhado com todos os projetos. Apenas certifique-se de que, no código de exemplo abaixo, o projeto para o qual você inseriu a cadeia de conexão tenha 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 seu projeto de IA e 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: Criar 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 da API, para autenticação, substitua a linha por
auth = OpenApiConnectionAuthDetails(security_scheme=OpenApiConnectionSecurityScheme(connection_id="your_connection_id"))
O seu ID de ligação tem o aspeto de /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 seria https://cognitiveservices.azure.com/
.
Etapa 3: Criar 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 OpenAPI Spec 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}")