Så här använder du Azure AI Agent Service med OpenAPI-angivna verktyg
Nu kan du ansluta din Azure AI-agent till ett externt API med ett OpenAPI 3.0-angivet verktyg, vilket möjliggör skalbar samverkan med olika program. Aktivera dina anpassade verktyg för att autentisera åtkomst och anslutningar med hanterade identiteter (Microsoft Entra-ID) för ökad säkerhet, vilket gör det idealiskt för integrering med befintlig infrastruktur eller webbtjänster.
OpenAPI-angivet verktyg förbättrar funktionens samtalsupplevelse genom att tillhandahålla standardiserade, automatiserade och skalbara API-integreringar som förbättrar agentens funktioner och effektivitet.
OpenAPI-specifikationer tillhandahåller en formell standard för att beskriva HTTP-API:er. På så sätt kan användarna förstå hur ett API fungerar, hur en sekvens med API:er fungerar tillsammans, generera klientkod, skapa tester, tillämpa designstandarder med mera. För närvarande stöder vi tre autentiseringstyper med de OpenAPI 3.0-angivna verktygen: anonymous
, API key
, managed identity
.
Förutsättningar
Kontrollera att du har slutfört förutsättningarna och installationsstegen i snabbstarten.
Kontrollera OpenAPI-specifikationen för följande krav:
-
operationId
får endast innehålla bokstäver-
och_
. Du kan ändra den för att uppfylla kravet. Vi rekommenderar att du använder beskrivande namn för att hjälpa modeller att effektivt bestämma vilken funktion som ska användas.
-
Autentisera med API-nyckel
Kontrollera att OpenAPI-specifikationen stöder API-nycklar: den har
securitySchemes
avsnittet och har ett schema av typen "apiKey". Ett exempel är:"securitySchemes": { "apiKeyHeader": { "type": "apiKey", "name": "x-api-key", "in": "header" } }
Om säkerhetsschemana innehåller flera scheman rekommenderar vi att du bara behåller ett av dem.
Ta bort alla parametrar i OpenAPI-specifikationen som behöver API-nyckel, eftersom API-nyckeln lagras och skickas via en anslutning, enligt beskrivningen senare i den här artikeln.
Skapa en
custom keys
anslutning för att lagra din API-nyckel.Gå till Azure AI Foundry-portalen och välj AI-projektet. Klicka på Anslutna resurser.
Välj + ny anslutning på inställningssidan.
Kommentar
Om du återskapar API-nyckeln vid ett senare tillfälle måste du uppdatera anslutningen med den nya nyckeln.
Välj anpassade nycklar i andra resurstyper.
Ange följande information:
- nyckel:
name
i ditt säkerhetsschema. I det här exemplet bör det varax-api-key
"securitySchemes": { "apiKeyHeader": { "type": "apiKey", "name": "x-api-key", "in": "header" } }
- värde: YOUR_API_KEY
- Anslutningsnamn: YOUR_CONNECTION_NAME (Du använder det här anslutningsnamnet i exempelkoden nedan.)
- Åtkomst: du kan välja antingen endast det här projektet eller delas till alla projekt. Se bara till att det projekt som du angav anslutningssträng för i exempelkoden nedan har åtkomst till den här anslutningen.
- nyckel:
Steg 1: Skapa en agent med verktyget OpenAPI Spec
Skapa ett klientobjekt som innehåller anslutningssträng för att ansluta till ditt AI-projekt och andra resurser.
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"],
)
Steg 2: Aktivera verktyget OpenAPI Spec
Du kanske vill lagra OpenAPI-specifikationen i en annan fil och importera innehållet för att initiera verktyget. Observera att exempelkoden använder anonymous
som autentiseringstyp.
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)
Om du vill använda anslutningen, som lagrar API-nyckeln, för autentisering ersätter du raden med
auth = OpenApiConnectionAuthDetails(security_scheme=OpenApiConnectionSecurityScheme(connection_id="your_connection_id"))
Ditt anslutnings-ID ser ut som /subscriptions/{subscription ID}/resourceGroups/{resource group name}/providers/Microsoft.MachineLearningServices/workspaces/{project name}/connections/{connection name}
.
Om du vill använda hanterad identitet för autentisering ersätter du raden med
auth = OpenApiManagedAuthDetails(security_scheme=OpenApiManagedSecurityScheme(audience="https://your_identity_scope.com"))
Ett exempel på målgruppen skulle vara https://cognitiveservices.azure.com/
.
Steg 3: Skapa en tråd
# Create agent with OpenAPI tool and process assistant run
with project_client:
agent = project_client.agents.create_agent(
model="gpt-4o-mini",
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}")
Steg 4: Skapa en körning och kontrollera utdata
Skapa en körning och observera att modellen använder verktyget OpenAPI Spec för att ge ett svar på användarens fråga.
# 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}")