Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Připojte agenty Microsoft Foundry k externím rozhraním API pomocí specifikací OpenAPI 3.0 a 3.1. Model Foundry, který pohání agenta, může volat externí služby, načítat data v reálném čase a rozšiřovat jeho možnosti nad rámec zabudovaných funkcí.
Specifikace OpenAPI definují standardní způsob popisu rozhraní HTTP API, abyste mohli integrovat stávající služby s vašimi agenty. Microsoft Foundry podporuje tři metody ověřování: anonymous, API key a managed identity. Nápovědu k volbě metody ověřování najdete v tématu Volba metody ověřování.
Podpora využití
Následující tabulka ukazuje podporu sady SDK a nastavení.
| podpora Microsoft Foundry | Python SDK | C# SDK | JavaScript SDK | Java SDK | REST API | Základní nastavení agenta | Nastavení standardního agenta |
|---|---|---|---|---|---|---|---|
| ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Poznámka
Pro Java použijte balíček com.azure:azure-ai-agents pro nástroje agenta OpenAPI. Balíček com.azure:azure-ai-projects v současné době nezpřístupňuje typy nástrojů agenta OpenAPI.
Požadavky
Než začnete, ujistěte se, že máte:
- Předplatné Azure se správnými oprávněními.
- Role RBAC Azure: Přispěvatel nebo Vlastník projektu Foundry.
- Projekt Foundry vytvořený s nakonfigurovaným koncovým bodem
- Model AI nasazený ve vašem projektu
- Základní nebo standardní prostředí agenta.
- Sada SDK nainstalovaná pro preferovaný jazyk:
- Python:
azure-ai-projects - C#:
Azure.AI.Extensions.OpenAI - TypeScript/JavaScript:
@azure/ai-projects - Java:
com.azure:azure-ai-agents
- Python:
Proměnné prostředí
| Proměnné | Popis |
|---|---|
FOUNDRY_PROJECT_ENDPOINT |
Adresa URL koncového bodu projektu Foundry (ne externí koncový bod služby OpenAPI). |
FOUNDRY_MODEL_DEPLOYMENT_NAME |
Název vašeho nasazeného modelu. |
OPENAPI_PROJECT_CONNECTION_NAME |
(Pro ověřování klíčů rozhraní API) Název připojení projektu pro službu OpenAPI. |
- Soubor specifikace OpenAPI 3.0 nebo 3.1, který splňuje tyto požadavky:
- Každá funkce musí mít
operationId(vyžadováno pro nástroj OpenAPI). -
operationIdby měla obsahovat pouze písmena,-a_. - Používejte popisné názvy, aby modely mohly efektivně rozhodnout, kterou funkci použít.
- Podporované typy obsahu textu požadavku:
application/json,application/json-patch+json
- Každá funkce musí mít
- Pro ověřování spravované identity: Role čtenáře nebo vyšší u cílových prostředků služby.
- Pro ověřování pomocí klíče nebo tokenu rozhraní API: připojení k projektu nakonfigurované s klíčem nebo tokenem rozhraní API. Viz Přidání nového připojení k projektu.
Poznámka
Hodnota FOUNDRY_PROJECT_ENDPOINT odkazuje na koncový bod projektu Microsoft Foundry, nikoli na externí koncový bod služby OpenAPI. Tento koncový bod najdete na portálu Microsoft Foundry na stránce Přehled projektu. Tento koncový bod je nutný k ověření služby agenta a je oddělený od všech koncových bodů OpenAPI definovaných v souboru specifikace.
Vysvětlení omezení
- Specifikace OpenAPI musí obsahovat
operationIdpro každou operaci aoperationIdmůže obsahovat pouze písmena a-_. - Podporované typy obsahu textu požadavku:
application/json,application/json-patch+json. - Pro ověřování klíčů rozhraní API použijte jedno schéma zabezpečení klíče rozhraní API na každý nástroj OpenAPI. Pokud potřebujete více schémat zabezpečení, vytvořte několik nástrojů OpenAPI.
Příklad kódu
Poznámka
- Potřebujete nejnovější balíček sady SDK. Sada .NET SDK je aktuálně ve verzi Preview. Podrobnosti najdete v průvodci rychlým startem.
- Pokud k ověřování používáte klíč rozhraní API, vaše ID připojení by mělo být ve formátu
/subscriptions/{{subscriptionID}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.CognitiveServices/accounts/{{foundryAccountName}}/projects/{{foundryProjectName}}/connections/{{foundryConnectionName}}.
Důležité
Aby ověřování pomocí klíče rozhraní API fungovalo, musí soubor specifikace OpenAPI obsahovat:
- Oddíl
securitySchemess konfigurací klíče rozhraní API, například název hlavičky a název parametru. - Oddíl
security, který odkazuje na schéma zabezpečení. - Připojení projektu je nakonfigurováno s odpovídajícím názvem klíče a jeho hodnotou.
Bez těchto konfigurací klíč rozhraní API není součástí požadavků. Podrobné pokyny k nastavení najdete v části Ověřování pomocí klíče rozhraní API .
Můžete také použít ověřování na základě tokenu (například nosný token) uložením tokenu do připojení k projektu. V případě ověřování nosným tokenem vytvořte připojení vlastních klíčů s klíčem nastaveným na Authorization a hodnotou na Bearer <token> (nahraďte <token> skutečným tokenem).
Bearer Slovo následované mezerou musí být součástí hodnoty. Podrobnosti najdete v Nastavit připojení Bearer token.
Kompletní příklad
import os
import jsonref
from typing import Any, cast
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import (
PromptAgentDefinition,
OpenApiTool,
OpenApiFunctionDefinition,
OpenApiAnonymousAuthDetails,
)
# Format: "https://resource_name.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
OPENAPI_CONNECTION_NAME = "my-openapi-connection"
# Create clients to call Foundry API
project = AIProjectClient(
endpoint=PROJECT_ENDPOINT,
credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()
weather_asset_file_path = os.path.abspath(
os.path.join(os.path.dirname(__file__), "../assets/weather_openapi.json")
)
with open(weather_asset_file_path, "r") as f:
openapi_weather = cast(dict[str, Any], jsonref.loads(f.read()))
# Initialize agent OpenAPI tool using the read in OpenAPI spec
weather_tool = OpenApiTool(
openapi=OpenApiFunctionDefinition(
name="get_weather",
spec=openapi_weather,
description="Retrieve weather information for a location.",
auth=OpenApiAnonymousAuthDetails(),
)
)
# If you want to use key-based authentication
# IMPORTANT: Your OpenAPI spec must include securitySchemes and security sections
# Example spec structure for API key auth:
# {
# "components": {
# "securitySchemes": {
# "apiKeyHeader": {
# "type": "apiKey",
# "name": "x-api-key", # This must match the key name in your project connection
# "in": "header"
# }
# }
# },
# "security": [{"apiKeyHeader": []}]
# }
#
# For Bearer token authentication, use this securitySchemes structure instead:
# {
# "components": {
# "securitySchemes": {
# "bearerAuth": {
# "type": "apiKey",
# "name": "Authorization",
# "in": "header"
# }
# }
# },
# "security": [{"bearerAuth": []}]
# }
# Then set connection key = "Authorization" and value = "Bearer <token>"
# The word "Bearer" followed by a space MUST be included in the value.
openapi_connection = project.connections.get(OPENAPI_CONNECTION_NAME)
connection_id = openapi_connection.id
openapi_key_auth_tool = {
"type": "openapi",
"openapi": {
"name": "get_weather",
"spec": openapi_weather, # Must include securitySchemes and security sections
"auth": {
"type": "project_connection",
"security_scheme": {
"project_connection_id": connection_id
}
},
}
}
# If you want to use Managed Identity authentication
openapi_mi_auth_tool = {
"type": "openapi",
"openapi": {
"name": "get_weather",
"description": "Retrieve weather information for a location.",
"spec": openapi_weather,
"auth": {
"type": "managed_identity",
"security_scheme": {
"audience": "https://storage.azure.com" # Resource identifier of the target service
}
},
}
}
agent = project.agents.create_version(
agent_name="MyAgent",
definition=PromptAgentDefinition(
model="gpt-4.1-mini",
instructions="You are a helpful assistant.",
tools=[weather_tool],
),
)
response = openai.responses.create(
input="What's the weather in Seattle?",
extra_body={"agent_reference": {"name": agent.name, "type": "agent_reference"}},
)
print(response.output_text)
# Clean up resources
project.agents.delete_version(agent_name=agent.name, agent_version=agent.version)
Co tento kód dělá
Tento příklad vytvoří agenta s nástrojem OpenAPI, který volá API pro počasí wttr.in pomocí anonymního ověřování. Při spuštění kódu:
- Načte specifikaci OpenAPI počasí z místního souboru JSON.
- Vytvoří agenta s nástrojem pro počasí nakonfigurovaným pro anonymní přístup.
- Odešle dotaz s dotazem o počasí v Seattlu.
- Agent používá nástroj OpenAPI k volání rozhraní API pro počasí a vrací formátované výsledky.
- Program vyčistí odstraněním verze agenta.
Požadované vstupy
- Řetězcové hodnoty v horní části skriptu:
PROJECT_ENDPOINT,OPENAPI_CONNECTION_NAME - Místní soubor:
weather_openapi.json(specifikace OpenAPI)
Očekávaný výstup
Agent created (id: asst_abc123, name: MyAgent23, version: 1)
Response created: The weather in Seattle is currently cloudy with a temperature of 52°F (11°C)...
Cleaning up...
Agent deleted
Běžné chyby
-
FileNotFoundError: V zadané cestě nebyl nalezen soubor specifikace OpenAPI. -
AuthenticationError: Neplatné přihlašovací údaje nebo nedostatečná oprávnění nebo chybějícísecuritySchemesve specifikaci OpenAPI pro ověřování klíčů rozhraní API - Neplatný
operationIdformát ve specifikaci OpenAPI způsobuje selhání registrace nástroje -
Klíč rozhraní API nebyl vložen: Ověřte, že specifikace OpenAPI zahrnuje jak oddíl
securitySchemes, tak oddílsecurity, a že název klíče odpovídá připojení k projektu.
Ukázka použití agentů s nástrojem OpenAPI
Tento příklad ukazuje, jak používat služby popsané specifikací OpenAPI pomocí agenta. Používá službu wttr.in k získání počasí a souboru specifikace weather_openapi.json. Vyberte Prompt Agents, chcete-li pomocí sady Azure AI Projects SDK vytvořit serverového agenta pro prompty, nebo Hosted Agents, chcete-li pomocí Microsoft Agent Framework vytvořit dočasného agenta v procesu.
Tento příklad používá synchronní metody klientské knihovny Azure AI Projects. Příklad s asynchronními metodami najdete v ukázce v úložišti Azure SDK pro .NET na GitHubu.
using System;
using System.IO;
using System.Runtime.CompilerServices;
using Azure.AI.Projects;
using Azure.AI.Extensions.OpenAI;
using Azure.Identity;
class OpenAPIDemo
{
// Utility method to get the OpenAPI specification file from the Assets folder.
private static string GetFile([CallerFilePath] string pth = "")
{
var dirName = Path.GetDirectoryName(pth) ?? "";
return Path.Combine(dirName, "Assets", "weather_openapi.json");
}
public static void Main()
{
// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
var projectEndpoint = "your_project_endpoint";
// Create project client to call Foundry API
AIProjectClient projectClient = new(
endpoint: new Uri(projectEndpoint),
tokenProvider: new DefaultAzureCredential());
// Create an Agent with `OpenAPIAgentTool` and anonymous authentication.
string filePath = GetFile();
OpenAPIFunctionDefinition toolDefinition = new(
name: "get_weather",
spec: BinaryData.FromBytes(File.ReadAllBytes(filePath)),
auth: new OpenAPIAnonymousAuthenticationDetails()
);
toolDefinition.Description = "Retrieve weather information for a location.";
OpenAPITool openapiTool = new(toolDefinition);
// Create the agent definition and the agent version.
DeclarativeAgentDefinition agentDefinition = new(model: "gpt-4.1-mini")
{
Instructions = "You are a helpful assistant.",
Tools = { openapiTool }
};
AgentVersion agentVersion = projectClient.AgentAdministrationClient.CreateAgentVersion(
agentName: "myAgent",
options: new(agentDefinition));
// Create a response object and ask the question about the weather in Seattle, WA.
ProjectResponsesClient responseClient = projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(agentVersion.Name);
ResponseResult response = responseClient.CreateResponse(
userInputText: "Use the OpenAPI tool to print out, what is the weather in Seattle, WA today."
);
Console.WriteLine(response.GetOutputText());
// Finally, delete all the resources created in this sample.
projectClient.AgentAdministrationClient.DeleteAgentVersion(agentName: agentVersion.Name, agentVersion: agentVersion.Version);
}
}
Co tento kód dělá
Tento příklad jazyka C# vytvoří agenta s nástrojem OpenAPI, který načte informace o počasí z wttr.in pomocí anonymního ověřování. Při spuštění kódu:
- Čte specifikaci OpenAPI počasí z místního souboru JSON.
- Vytvoří agenta s nakonfigurovaným nástrojem pro počasí.
- Odešle žádost o počasí v Seattlu pomocí nástroje OpenAPI.
- Agent volá API pro počasí a vrací výsledky.
- Vyčištění je provedeno odstraněním agenta.
Požadované vstupy
- Hodnota vloženého řetězce:
projectEndpoint(koncový bod projektu Foundry) - Místní soubor:
Assets/weather_openapi.json(specifikace OpenAPI)
Očekávaný výstup
The weather in Seattle, WA today is cloudy with temperatures around 52°F...
Běžné chyby
-
FileNotFoundException: Soubor specifikace OpenAPI nebyl ve složce Assets nalezen. -
UnauthorizedAccessException: Neplatné přihlašovací údaje nebo nedostatečná oprávnění RBAC -
Klíč API nebyl vložen: Ověřte, že specifikace OpenAPI obsahuje jak
securitySchemes(vcomponents), tak isecurityv oddílech s odpovídajícími názvy schémat.
Ukázka použití agentů s nástrojem OpenAPI ve webové službě, která vyžaduje ověření
V tomto příkladu použijete služby se specifikací OpenAPI pomocí agenta ve scénáři, který vyžaduje ověření. Použijete specifikaci TripAdvisoru.
Služba TripAdvisor vyžaduje ověřování na základě klíčů. Pokud chcete vytvořit připojení na portálu Azure, otevřete Microsoft Foundry a na levém panelu vyberte Centra správy a pak vyberte Připojené prostředky. Nakonec vytvořte nové připojení typu Vlastní klíče . Pojmenujte ho tripadvisor a přidejte pár hodnot klíče. Přidejte klíč s názvem key a zadejte hodnotu s klíčem TripAdvisoru.
class OpenAPIConnectedDemo
{
// Utility method to get the OpenAPI specification file from the Assets folder.
private static string GetFile([CallerFilePath] string pth = "")
{
var dirName = Path.GetDirectoryName(pth) ?? "";
return Path.Combine(dirName, "Assets", "tripadvisor_openapi.json");
}
public static void Main()
{
// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
var projectEndpoint = "your_project_endpoint";
// Create project client to call Foundry API
AIProjectClient projectClient = new(
endpoint: new Uri(projectEndpoint),
tokenProvider: new DefaultAzureCredential());
// Create an Agent with `OpenAPIAgentTool` and authentication by project connection security scheme.
string filePath = GetFile();
AIProjectConnection tripadvisorConnection = projectClient.Connections.GetConnection("tripadvisor");
OpenAPIFunctionDefinition toolDefinition = new(
name: "tripadvisor",
spec: BinaryData.FromBytes(File.ReadAllBytes(filePath)),
auth: new OpenAPIProjectConnectionAuthenticationDetails(new OpenAPIProjectConnectionSecurityScheme(
projectConnectionId: tripadvisorConnection.Id
))
);
toolDefinition.Description = "Trip Advisor API to get travel information.";
OpenAPITool openapiTool = new(toolDefinition);
// Create the agent definition and the agent version.
DeclarativeAgentDefinition agentDefinition = new(model: "gpt-4.1-mini")
{
Instructions = "You are a helpful assistant.",
Tools = { openapiTool }
};
AgentVersion agentVersion = projectClient.AgentAdministrationClient.CreateAgentVersion(
agentName: "myAgent",
options: new(agentDefinition));
// Create a response object and ask the question about the hotels in France.
// Test the Web service access before you run production scenarios.
// It can be done by setting:
// ToolChoice = ResponseToolChoice.CreateRequiredChoice()`
// in the ResponseCreationOptions. This setting will
// force Agent to use tool and will trigger the error if it is not accessible.
ProjectResponsesClient responseClient = projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(agentVersion.Name);
CreateResponseOptions responseOptions = new()
{
ToolChoice = ResponseToolChoice.CreateRequiredChoice(),
InputItems =
{
ResponseItem.CreateUserMessageItem("Recommend me 5 top hotels in paris, France."),
}
};
ResponseResult response = responseClient.CreateResponse(
options: responseOptions
);
Console.WriteLine(response.GetOutputText());
// Finally, delete all the resources we have created in this sample.
projectClient.AgentAdministrationClient.DeleteAgentVersion(agentName: agentVersion.Name, agentVersion: agentVersion.Version);
}
}
Co tento kód dělá
Tento příklad jazyka C# ukazuje použití nástroje OpenAPI s ověřováním pomocí klíče rozhraní API prostřednictvím připojení projektu. Při spuštění kódu:
- Načte specifikaci OpenAPI webu TripAdvisor z místního souboru.
-
tripadvisorNačte připojení projektu obsahující klíč rozhraní API. - Vytvoří agenta s nástrojem TripAdvisor nakonfigurovaným pro ověřování pomocí připojení.
- Odešle žádost o hotelová doporučení v Paříži.
- Agent volá rozhraní API TripAdvisoru pomocí uloženého klíče rozhraní API a vrací výsledky.
- Vyčištění je provedeno odstraněním agenta.
Požadované vstupy
- Hodnota vloženého řetězce:
projectEndpoint(koncový bod projektu Foundry) - Místní soubor:
Assets/tripadvisor_openapi.json - Projektové připojení:
tripadvisors platným nakonfigurovaným klíčem rozhraní API
Očekávaný výstup
Here are 5 top hotels in Paris, France:
1. Hotel Name - Rating: 4.5/5, Location: ...
2. Hotel Name - Rating: 4.4/5, Location: ...
...
Běžné chyby
-
ConnectionNotFoundException: Nebylo nalezeno žádné připojení k projektu s názvemtripadvisor. -
AuthenticationException: Neplatný klíč rozhraní API v připojení k projektu nebo chybějící nebo nesprávnásecuritySchemeskonfigurace ve specifikaci OpenAPI. - Nástroj se nepoužívá: Ověřte
ToolChoice = ResponseToolChoice.CreateRequiredChoice()použití nástroje. -
Klíč rozhraní API nebyl předán: Ujistěte se, že specifikace OpenAPI a její
securitySchemesoddílysecurityjsou správně nakonfigurovány.
Vytvoření agenta Java s možnostmi nástroje OpenAPI
Tento Java příklad vytvoří agenta s nástrojem OpenAPI pomocí com.azure:azure-ai-agents a místního souboru specifikace OpenAPI. Ukázka používá anonymní ověřování a volá koncový bod veřejného rozhraní API.
import com.azure.ai.agents.AgentsClient;
import com.azure.ai.agents.AgentsClientBuilder;
import com.azure.ai.agents.ConversationsClient;
import com.azure.ai.agents.ResponsesClient;
import com.azure.ai.agents.models.*;
import com.azure.core.util.BinaryData;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.json.JsonProviders;
import com.azure.json.JsonReader;
import com.openai.models.conversations.Conversation;
import com.openai.models.conversations.items.ItemCreateParams;
import com.openai.models.responses.EasyInputMessage;
import com.openai.models.responses.Response;
import com.openai.models.responses.ResponseCreateParams;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Map;
public class OpenApiAgentJavaSample {
public static void main(String[] args) throws Exception {
// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
String projectEndpoint = "your_project_endpoint";
AgentsClientBuilder builder = new AgentsClientBuilder()
.endpoint(projectEndpoint)
.credential(new DefaultAzureCredentialBuilder().build());
AgentsClient agentsClient = builder.buildAgentsClient();
ResponsesClient responsesClient = builder.buildResponsesClient();
ConversationsClient conversationsClient = builder.buildConversationsClient();
Map<String, BinaryData> spec = OpenApiFunctionDefinition.readSpecFromFile(
Paths.get("openapi_spec.json"));
OpenApiFunctionDefinition toolDefinition = new OpenApiFunctionDefinition(
"httpbin_get",
spec,
new OpenApiAnonymousAuthDetails())
.setDescription("Get request metadata from an OpenAPI endpoint.");
PromptAgentDefinition agentDefinition = new PromptAgentDefinition("gpt-4.1-mini")
.setInstructions("Use the OpenAPI tool for HTTP request metadata.")
.setTools(Arrays.asList(new OpenApiTool(toolDefinition)));
AgentVersionDetails agentVersion = agentsClient.createAgentVersion("openapiValidationAgentJava", agentDefinition);
System.out.println("Agent: " + agentVersion.getName() + ", version: " + agentVersion.getVersion());
Conversation conversation = conversationsClient.getConversationService().create();
conversationsClient.getConversationService().items().create(
ItemCreateParams.builder()
.conversationId(conversation.id())
.addItem(EasyInputMessage.builder()
.role(EasyInputMessage.Role.USER)
.content("Use the OpenAPI tool and summarize the returned URL and origin in one sentence.")
.build())
.build());
try {
AgentReference agentReference = new AgentReference(agentVersion.getName()).setVersion(agentVersion.getVersion());
ResponseCreateParams.Builder options = ResponseCreateParams.builder().maxOutputTokens(300L);
Response response = responsesClient.createAzureResponse(
new AzureCreateResponseOptions().setAgentReference(agentReference),
options.conversation(conversation.id()));
String text = response.output().stream()
.filter(item -> item.isMessage())
.map(item -> item.asMessage().content()
.get(item.asMessage().content().size() - 1)
.asOutputText()
.text())
.reduce((first, second) -> second)
.orElse("<no message output>");
System.out.println("Status: " + response.status().map(Object::toString).orElse("unknown"));
System.out.println("Response: " + text);
} finally {
agentsClient.deleteAgentVersion(agentVersion.getName(), agentVersion.getVersion());
System.out.println("Agent deleted");
}
}
}
Co tento kód dělá
Tento Java příklad vytvoří agenta s nástrojem OpenAPI a spustí odpověď s oborem konverzace:
- Načte specifikaci OpenAPI z
openapi_spec.json. - Vytvoří verzi agenta s
OpenApiTool. - Vytvoří konverzaci a přidá zprávu uživatele.
- Vytvoří odpověď předáním
AgentReferencea ID konverzace. - Program vyčistí odstraněním verze agenta.
Požadované vstupy
- Hodnota vloženého řetězce:
projectEndpoint(koncový bod projektu Foundry) - Místní soubor:
openapi_spec.json(specifikace OpenAPI 3.0 nebo 3.1)
Očekávaný výstup
Agent: openapiValidationAgentJava, version: 1
Status: completed
Response: The API response reports URL ... and origin ...
Agent deleted
Běžné chyby
-
Invalid OpenAPI specification: Parsujte JSON OpenAPI do objektu před jeho předánímOpenApiFunctionDefinition. -
Invalid conversation id: Vytvořte konverzaci a předejteconversation.id()jicreateAzureResponseprostřednictvímResponseCreateParams.builder().conversation(). -
AuthenticationFailedException: Ověřte, zdaDefaultAzureCredentialmůže získat token pro váš přihlášený účet.
Následující příklady ukazují, jak volat nástroj OpenAPI pomocí rozhraní REST API.
Získání přístupového tokenu:
export AGENT_TOKEN=$(az account get-access-token --scope "https://ai.azure.com/.default" --query accessToken -o tsv)
Anonymní ověřování
curl --request POST \
--url "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/responses" \
--header "Authorization: Bearer $AGENT_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"model": "'$FOUNDRY_MODEL_DEPLOYMENT_NAME'",
"input": "Use the OpenAPI tool to get the weather in Seattle, WA today.",
"tools": [
{
"type": "openapi",
"openapi": {
"name": "weather",
"description": "Tool to get weather data",
"auth": { "type": "anonymous" },
"spec": {
"openapi": "3.1.0",
"info": {
"title": "get weather data",
"description": "Retrieves current weather data for a location.",
"version": "v1.0.0"
},
"servers": [{ "url": "https://wttr.in" }],
"paths": {
"/{location}": {
"get": {
"description": "Get weather information for a specific location",
"operationId": "GetCurrentWeather",
"parameters": [
{
"name": "location",
"in": "path",
"description": "City or location to retrieve the weather for",
"required": true,
"schema": { "type": "string" }
},
{
"name": "format",
"in": "query",
"description": "Format in which to return data. Always use 3.",
"required": true,
"schema": { "type": "integer", "default": 3 }
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"text/plain": {
"schema": { "type": "string" }
}
}
},
"404": { "description": "Location not found" }
}
}
}
}
}
}
}
]
}'
Ověřování klíče rozhraní API (připojení k projektu)
curl --request POST \
--url "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/responses" \
--header "Authorization: Bearer $AGENT_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"model": "'$FOUNDRY_MODEL_DEPLOYMENT_NAME'",
"input": "Use the OpenAPI tool to get the weather in Seattle, WA today.",
"tools": [
{
"type": "openapi",
"openapi": {
"name": "weather",
"description": "Tool to get weather data",
"auth": {
"type": "project_connection",
"security_scheme": {
"project_connection_id": "'$WEATHER_APP_PROJECT_CONNECTION_ID'"
}
},
"spec": {
"openapi": "3.1.0",
"info": {
"title": "get weather data",
"description": "Retrieves current weather data for a location.",
"version": "v1.0.0"
},
"servers": [{ "url": "https://wttr.in" }],
"paths": {
"/{location}": {
"get": {
"description": "Get weather information for a specific location",
"operationId": "GetCurrentWeather",
"parameters": [
{
"name": "location",
"in": "path",
"description": "City or location to retrieve the weather for",
"required": true,
"schema": { "type": "string" }
},
{
"name": "format",
"in": "query",
"description": "Format in which to return data. Always use 3.",
"required": true,
"schema": { "type": "integer", "default": 3 }
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"text/plain": {
"schema": { "type": "string" }
}
}
},
"404": { "description": "Location not found" }
}
}
}
},
"components": {
"securitySchemes": {
"apiKeyHeader": {
"type": "apiKey",
"name": "x-api-key",
"in": "header"
}
}
},
"security": [
{ "apiKeyHeader": [] }
]
}
}
}
]
}'
Ověřování spravované identity
curl --request POST \
--url "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/responses" \
--header "Authorization: Bearer $AGENT_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"model": "'$FOUNDRY_MODEL_DEPLOYMENT_NAME'",
"input": "Use the OpenAPI tool to get the weather in Seattle, WA today.",
"tools": [
{
"type": "openapi",
"openapi": {
"name": "weather",
"description": "Tool to get weather data",
"auth": {
"type": "managed_identity",
"security_scheme": {
"audience": "'$MANAGED_IDENTITY_AUDIENCE'"
}
},
"spec": {
"openapi": "3.1.0",
"info": {
"title": "get weather data",
"description": "Retrieves current weather data for a location.",
"version": "v1.0.0"
},
"servers": [{ "url": "https://wttr.in" }],
"paths": {
"/{location}": {
"get": {
"description": "Get weather information for a specific location",
"operationId": "GetCurrentWeather",
"parameters": [
{
"name": "location",
"in": "path",
"description": "City or location to retrieve the weather for",
"required": true,
"schema": { "type": "string" }
},
{
"name": "format",
"in": "query",
"description": "Format in which to return data. Always use 3.",
"required": true,
"schema": { "type": "integer", "default": 3 }
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"text/plain": {
"schema": { "type": "string" }
}
}
},
"404": { "description": "Location not found" }
}
}
}
}
}
}
}
]
}'
Co tento kód dělá
Tento příklad rozhraní REST API ukazuje, jak volat nástroj OpenAPI s různými metodami ověřování. Požadavek:
- Pošle agentovi dotaz na počasí v Seattlu.
- Obsahuje definici nástroje OpenAPI v souladu se specifikací rozhraní API pro počasí.
- Zobrazuje tři možnosti ověřování (anonymní klíč rozhraní API prostřednictvím připojení k projektu, spravovaná identita) jako okomentované alternativy.
- Agent používá nástroj k volání rozhraní API pro počasí a vrací formátované výsledky.
Požadované vstupy
- Proměnné prostředí:
FOUNDRY_PROJECT_ENDPOINT,AGENT_TOKEN.FOUNDRY_MODEL_DEPLOYMENT_NAME - Pro autentizaci pomocí klíče API:
WEATHER_APP_PROJECT_CONNECTION_ID. - Pro ověřování spravované identity:
MANAGED_IDENTITY_AUDIENCE. - Vložená specifikace OpenAPI v textu požadavku.
Očekávaný výstup
{
"id": "resp_abc123",
"object": "response",
"output": [
{
"type": "message",
"content": [
{
"type": "text",
"text": "The weather in Seattle, WA today is cloudy with a temperature of 52°F (11°C)..."
}
]
}
]
}
Běžné chyby
-
401 Unauthorized: Neplatný nebo chybějícíAGENT_TOKEN, nebo klíč rozhraní API není vložen, protožesecuritySchemesasecuritychybí ve specifikaci OpenAPI. -
404 Not Found: Nesprávný koncový bod nebo název nasazení modelu -
400 Bad Request: Poškozená specifikace OpenAPI nebo neplatná konfigurace ověřování - Klíč rozhraní API nebyl odeslán s požadavkem: Ověřte, že je oddíl ve specifikaci OpenAPI správně nakonfigurován (není prázdný) a shoduje se s názvem klíče připojení projektu.
Vytvoření agenta s možnostmi nástrojů OpenAPI
Následující příklad kódu TypeScript ukazuje, jak vytvořit agenta AI s funkcemi nástroje OpenAPI pomocí OpenApiTool a synchronního klienta projektu Azure AI. Agent může volat externí rozhraní API definovaná specifikacemi OpenAPI. Verzi JavaScriptu tohoto příkladu najdete v GitHub v sample v úložišti Azure SDK pro JavaScript.
import { DefaultAzureCredential } from "@azure/identity";
import {
AIProjectClient,
OpenApiTool,
OpenApiFunctionDefinition,
OpenApiAnonymousAuthDetails,
} from "@azure/ai-projects";
import * as fs from "fs";
import * as path from "path";
// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
const PROJECT_ENDPOINT = "your_project_endpoint";
const weatherSpecPath = path.resolve(__dirname, "../assets", "weather_openapi.json");
function loadOpenApiSpec(specPath: string): unknown {
if (!fs.existsSync(specPath)) {
throw new Error(`OpenAPI specification not found at: ${specPath}`);
}
try {
const data = fs.readFileSync(specPath, "utf-8");
return JSON.parse(data);
} catch (error) {
throw new Error(`Failed to read or parse OpenAPI specification at ${specPath}: ${error}`);
}
}
function createWeatherTool(spec: unknown): OpenApiTool {
const auth: OpenApiAnonymousAuthDetails = { type: "anonymous" };
const definition: OpenApiFunctionDefinition = {
name: "get_weather",
description: "Retrieve weather information for a location using wttr.in",
spec,
auth,
};
return {
type: "openapi",
openapi: definition,
};
}
export async function main(): Promise<void> {
const weatherSpec = loadOpenApiSpec(weatherSpecPath);
// Create clients to call Foundry API
const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
const openai = project.getOpenAIClient();
// Create an agent with the OpenAPI weather tool
const agent = await project.agents.createVersion("MyOpenApiAgent", {
kind: "prompt",
model: "gpt-4.1-mini",
instructions:
"You are a helpful assistant that can call external APIs defined by OpenAPI specs to answer user questions.",
tools: [createWeatherTool(weatherSpec)],
});
// Send a request and stream the response
const streamResponse = await openai.responses.create(
{
input:
"What's the weather in Seattle and how should I plan my outfit for the day based on the forecast?",
stream: true,
},
{
body: {
agent: { name: agent.name, type: "agent_reference" },
tool_choice: "required",
},
},
);
// Process the streaming response
for await (const event of streamResponse) {
if (event.type === "response.output_text.delta") {
process.stdout.write(event.delta);
} else if (event.type === "response.output_text.done") {
console.log("\n");
}
}
// Clean up resources
await project.agents.deleteVersion(agent.name, agent.version);
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
Co tento kód dělá
Tento příklad TypeScriptu vytvoří agenta s nástrojem OpenAPI pro data o počasí pomocí anonymního ověřování. Při spuštění kódu:
- Načte specifikaci OpenAPI počasí z místního souboru JSON.
- Vytvoří agenta s nakonfigurovaným nástrojem pro počasí.
- Odešle žádost o streamování s dotazem na počasí a plánování oblečení v Seattlu.
- Zpracuje streamovanou odpověď a zobrazí rozdíly při jejich příchodu.
- Vynutí použití nástroje s
tool_choice: "required", aby se zajistilo volání API. - Vyčištění je provedeno odstraněním agenta.
Požadované vstupy
- Hodnota vloženého řetězce:
PROJECT_ENDPOINT(koncový bod projektu Foundry) - Místní soubor:
../assets/weather_openapi.json(specifikace OpenAPI)
Očekávaný výstup
Loading OpenAPI specifications from assets directory...
Creating agent with OpenAPI tool...
Agent created (id: asst_abc123, name: MyOpenApiAgent, version: 1)
Sending request to OpenAPI-enabled agent with streaming...
Follow-up response created with ID: resp_xyz789
The weather in Seattle is currently...
Tool call completed: get_weather
Follow-up completed!
Cleaning up resources...
Agent deleted
OpenAPI agent sample completed!
Běžné chyby
-
Error: OpenAPI specification not found: Nesprávná cesta k souboru nebo chybějící soubor -
AuthenticationError: Neplatné přihlašovací údaje Azure -
Klíč rozhraní API nefunguje: Pokud přecházíte z anonymního na ověřování pomocí klíče rozhraní API, ujistěte se, že specifikace OpenAPI má
securitySchemesasecuritysprávně nakonfigurovanou.
Vytvoření agenta, který používá nástroje OpenAPI ověřené pomocí připojení k projektu
Následující příklad kódu TypeScript ukazuje, jak vytvořit agenta AI, který používá nástroje OpenAPI ověřené prostřednictvím připojení projektu. Agent načte specifikaci OpenAPI webu TripAdvisor z místních prostředků a může vyvolat rozhraní API prostřednictvím nakonfigurovaného připojení projektu. Verzi JavaScriptu tohoto příkladu najdete v GitHub v sample v úložišti Azure SDK pro JavaScript.
import { DefaultAzureCredential } from "@azure/identity";
import {
AIProjectClient,
OpenApiTool,
OpenApiFunctionDefinition,
OpenApiProjectConnectionAuthDetails,
} from "@azure/ai-projects";
import * as fs from "fs";
import * as path from "path";
// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
const PROJECT_ENDPOINT = "your_project_endpoint";
const TRIPADVISOR_CONNECTION_ID = "your-tripadvisor-connection-id";
const tripAdvisorSpecPath = path.resolve(__dirname, "../assets", "tripadvisor_openapi.json");
function loadOpenApiSpec(specPath: string): unknown {
if (!fs.existsSync(specPath)) {
throw new Error(`OpenAPI specification not found at: ${specPath}`);
}
try {
const data = fs.readFileSync(specPath, "utf-8");
return JSON.parse(data);
} catch (error) {
throw new Error(`Failed to read or parse OpenAPI specification at ${specPath}: ${error}`);
}
}
function createTripAdvisorTool(spec: unknown): OpenApiTool {
const auth: OpenApiProjectConnectionAuthDetails = {
type: "project_connection",
security_scheme: {
project_connection_id: TRIPADVISOR_CONNECTION_ID,
},
};
const definition: OpenApiFunctionDefinition = {
name: "get_tripadvisor_location_details",
description:
"Fetch TripAdvisor location details, reviews, or photos using the Content API via project connection auth.",
spec,
auth,
};
return {
type: "openapi",
openapi: definition,
};
}
export async function main(): Promise<void> {
const tripAdvisorSpec = loadOpenApiSpec(tripAdvisorSpecPath);
// Create clients to call Foundry API
const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
const openai = project.getOpenAIClient();
// Create an agent with the OpenAPI project-connection tool
const agent = await project.agents.createVersion("MyOpenApiConnectionAgent", {
kind: "prompt",
model: "gpt-4.1-mini",
instructions:
"You are a travel assistant that consults the TripAdvisor Content API via project connection to answer user questions about locations.",
tools: [createTripAdvisorTool(tripAdvisorSpec)],
});
// Send a request and stream the response
const streamResponse = await openai.responses.create(
{
input:
"Provide a quick overview of the TripAdvisor location 293919 including its name, rating, and review count.",
stream: true,
},
{
body: {
agent: { name: agent.name, type: "agent_reference" },
tool_choice: "required",
},
},
);
// Process the streaming response
for await (const event of streamResponse) {
if (event.type === "response.output_text.delta") {
process.stdout.write(event.delta);
} else if (event.type === "response.output_text.done") {
console.log("\n");
}
}
// Clean up resources
await project.agents.deleteVersion(agent.name, agent.version);
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
Co tento kód dělá
Tento příklad TypeScriptu ukazuje použití nástroje OpenAPI s ověřováním klíče rozhraní API prostřednictvím připojení projektu. Při spuštění kódu:
- Načte specifikaci OpenAPI webu TripAdvisor z místního souboru.
- Konfiguruje ověřování pomocí konstanty
TRIPADVISOR_CONNECTION_ID. - Vytvoří agenta pomocí nástroje TripAdvisor, který používá projektové připojení pro autentizaci klíčem API.
- Odešle žádost o streamování podrobností o poloze na TripAdvisor.
- Vynutí použití nástroje s
tool_choice: "required", aby se zajistilo volání API. - Zpracovává a zobrazuje streamovanou odpověď.
- Vyčistí se odstraněním agenta.
Požadované vstupy
- Vložené řetězcové hodnoty:
PROJECT_ENDPOINT,TRIPADVISOR_CONNECTION_ID - Místní soubor:
../assets/tripadvisor_openapi.json - Připojení projektu nakonfigurované pomocí klíče rozhraní API webu TripAdvisor
Očekávaný výstup
Loading TripAdvisor OpenAPI specification from assets directory...
Creating agent with OpenAPI project-connection tool...
Agent created (id: asst_abc123, name: MyOpenApiConnectionAgent, version: 1)
Sending request to TripAdvisor OpenAPI agent with streaming...
Follow-up response created with ID: resp_xyz789
Location 293919 is the Eiffel Tower in Paris, France. It has a rating of 4.5 stars with over 140,000 reviews...
Tool call completed: get_tripadvisor_location_details
Follow-up completed!
Cleaning up resources...
Agent deleted
TripAdvisor OpenAPI agent sample completed!
Běžné chyby
-
Error: OpenAPI specification not found: Zkontrolujte cestu k souboru. - Připojení se nenašlo: Ověřte, zda
TRIPADVISOR_CONNECTION_IDje správné a zda připojení existuje. -
AuthenticationException: Neplatný klíč rozhraní API v připojení projektu. -
Klíč rozhraní API nebyl vložen do požadavků: Specifikace OpenAPI musí obsahovat správné
securitySchemes(v částicomponents) asecuritysekce. NázevsecuritySchemesklíče musí odpovídat klíči v připojení k projektu. -
Content type is not supported: V současné době jsou podporovány pouze tyto dva typy obsahu textu požadavku:application/jsonaapplication/json-patch+json. Typy obsahu odpovědi nejsou omezeny.
Aspekty zabezpečení a dat
Když připojíte agenta k nástroji OpenAPI, může agent odesílat parametry požadavku odvozené ze vstupu uživatele do cílového rozhraní API.
- Používejte připojení k projektům pro tajné kódy (klíče rozhraní API a tokeny). Vyhněte se vkládání tajných kódů do souboru specifikace OpenAPI nebo zdrojového kódu.
- Než použijete nástroj v produkčním prostředí, zkontrolujte, jaká data rozhraní API přijímá a co vrací.
- Použijte přístup s nejnižšími oprávněními. Pro spravovanou identitu přiřaďte jenom role, které cílová služba vyžaduje.
Ověřování pomocí klíče rozhraní API
Pomocí ověřování pomocí klíče rozhraní API můžete ověřit specifikaci OpenAPI pomocí různých metod, jako je klíč rozhraní API nebo nosný token. Pro každou specifikaci OpenAPI můžete použít pouze jedno schéma zabezpečení klíče rozhraní API. Pokud potřebujete více schémat zabezpečení, vytvořte několik nástrojů specifikace OpenAPI.
Aktualizujte schémata zabezpečení specifikace OpenAPI. Má
securitySchemesoddíl a jedno schéma typuapiKey. Příklad:"securitySchemes": { "apiKeyHeader": { "type": "apiKey", "name": "x-api-key", "in": "header" } }Obvykle potřebujete pouze aktualizovat to pole
name, které odpovídá názvukeyv připojení. Pokud schémata zabezpečení obsahují více schémat, ponechejte pouze jedno z nich.Aktualizujte specifikaci OpenAPI tak, aby obsahovala
securityoddíl:"security": [ { "apiKeyHeader": [] } ]Odeberte všechny parametry ve specifikaci OpenAPI, které potřebují klíč rozhraní API, protože klíč rozhraní API je uložený a předán prostřednictvím připojení, jak je popsáno dále v tomto článku.
Vytvořte připojení pro uložení klíče rozhraní API.
Přejděte na portál Foundry a otevřete projekt.
Vytvořte nebo vyberte připojení, které ukládá tajný klíč. Viz Přidání nového připojení k projektu.
Poznámka
Pokud klíč rozhraní API znovu vygenerujete později, musíte připojení aktualizovat novým klíčem.
Zadejte následující informace.
key:
namepole vašeho schématu zabezpečení. V tomto příkladu by měl býtx-api-key"securitySchemes": { "apiKeyHeader": { "type": "apiKey", "name": "x-api-key", "in": "header" } }hodnota: YOUR_API_KEY
Po vytvoření připojení ho můžete použít prostřednictvím sady SDK nebo rozhraní REST API. Použijte karty v horní části stránky, abyste si mohli zobrazit příklady kódu.
Nastavit připojení pomocí Bearer tokenu
Můžete použít ověřování založené na tokenech (například nosný token) se stejným project_connection typem ověřování, který se používá pro klíče rozhraní API. Klíčovým rozdílem je způsob konfigurace specifikace OpenAPI i připojení projektu.
Specifikace OpenAPI bude vypadat takto:
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
Potřebujete:
Aktualizujte specifikaci
securitySchemesOpenAPI tak, aby se používalaAuthorizationjako název hlavičky:"securitySchemes": { "bearerAuth": { "type": "apiKey", "name": "Authorization", "in": "header" } }securityPřidejte oddíl, který odkazuje na schéma:"security": [ { "bearerAuth": [] } ]Vytvořte připojení typu Custom Keys ve vašem projektu Foundry.
- Přejděte na portál Foundry a otevřete projekt.
- Vytvořte nebo vyberte připojení, které ukládá tajný klíč. Viz Přidání nového připojení k projektu.
- Zadejte následující hodnoty:
-
key:
Authorization(musí odpovídatnamepoli ve vašemsecuritySchemes) -
value:
Bearer <token>(nahraďte<token>skutečným tokenem)
-
key:
Důležité
Hodnota musí obsahovat slovo
Bearernásledované mezerou před tokenem. Příklad:Bearer eyJhbGciOiJSUzI1NiIs.... Pokud vynecháteBearer, rozhraní API obdrží nezpracovaný token bez požadované předpony schématu autorizace a požadavek selže.Po vytvoření připojení ho použijte s
project_connectiontypem ověřování v kódu stejným způsobem jako pro ověřování klíčů rozhraní API. ID připojení používá stejný formát:/subscriptions/{{subscriptionID}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.CognitiveServices/accounts/{{foundryAccountName}}/projects/{{foundryProjectName}}/connections/{{foundryConnectionName}}.
Ověřování pomocí spravované identity (Microsoft Entra ID)
Microsoft Entra ID je cloudová služba pro správu identit a přístupu, kterou vaši zaměstnanci můžou použít pro přístup k externím prostředkům. Pomocí Microsoft Entra ID můžete do rozhraní API přidat další zabezpečení, aniž byste museli používat klíče rozhraní API. Když nastavíte ověřování spravované identity, agent se ověří pomocí nástroje Foundry, který používá.
Důležité
Ověřování spravované identity funguje jenom v případech, kdy cílová služba přijímá Microsoft Entra ID tokeny. Pokud cílové rozhraní API používá vlastní schéma ověřování, které nepodporuje Microsoft Entra ID, použijte místo toho ověřování pomocí klíče API nebo tokenu Bearer.
Pochopení identifikátoru URI cílové skupiny
Identifikátor audience (někdy označovaný jako identifikátor zdroje nebo URI ID aplikace) říká Microsoft Entra ID, která služba nebo API je cílem tokenu. Hodnota cílové skupiny musí odpovídat tomu, co cílová služba očekává, nebo ověřování selže s chybou 401.
Poznámka
Cílová skupina není vaším koncovým bodem projektu Foundry. Jedná se o identifikátor prostředku cílové služby, kterou nástroj OpenAPI volá.
Následující tabulka uvádí identifikátory URI cílové skupiny pro běžné služby Azure:
| Cílová služba | Identifikátor URI cílové skupiny |
|---|---|
| Azure Storage | https://storage.azure.com |
| Azure Key Vault | https://vault.azure.net |
| Azure AI Vyhledávač | https://search.azure.com |
| Azure Logic Apps | https://logic.azure.com |
| Azure API Management (správní vrstva) | https://management.azure.com |
| Rozhraní API chráněné registrací aplikace Microsoft Entra (včetně rozhraní APIM s OAuth) |
Identifikátor URI ID aplikace z registrace aplikace (napříkladapi://<client-id>) |
Tip
Pokud používáte Azure API Management k ochraně vlastního rozhraní API pomocí zásad ověřování OAuth 2.0, cílová skupina je identifikátor URI ID aplikace z registrace aplikace, která chrání rozhraní API – nikoli https://management.azure.com. Cílová skupina úrovně správy se vztahuje pouze na operace Azure Resource Manageru na samotném prostředku APIM.
Další informace o tom, jak se agenti ověřují pomocí Microsoft Entra ID, najdete v tématu Identita a ověřování agentů.
Vyhledání a ověření cílové skupiny
Pomocí následujících kroků určete a ověřte správnou hodnotu cílové skupiny:
- Pro služby Azure: Zkontrolujte dokumentaci služby pro identifikátor prostředku Microsoft Entra ID. Většina služeb Azure uvádí identifikátor URI cílové skupiny v dokumentaci k ověřování.
- Pro rozhraní API chráněná registrací aplikace Microsoft Entra: Na portálu Azure přejděte na Microsoft Entra ID>, Registrace aplikace>, vyberte svou aplikaci > a zpřístupněte API. Identifikátor URI ID aplikace v horní části stránky je hodnota cílové skupiny.
-
Ověření cílové skupiny tokenu: Dekódujte přístupový token https://jwt.ms a zkontrolujte
auddeklaraci identity. Hodnotaaudmusí odpovídat cílové skupině, kterou vaše cílová služba očekává.
Nastavení ověřování spravovaných identit
Nastavení ověřování pomocí spravované identity:
Ujistěte se, že váš prostředek Foundry má povolenou spravovanou identitu přiřazenou systémem.
Vytvořte prostředek pro službu, ke které se chcete připojit prostřednictvím specifikace OpenAPI.
Přiřaďte k prostředku správný přístup.
Vyberte Access Control pro váš zdroj.
Vyberte Přidat a potom přidejte přiřazení role v horní části obrazovky.
Vyberte požadované správné přiřazení role, obvykle vyžaduje alespoň roli ČTENÁŘ . Pak vyberte Další.
Vyberte Spravovanou identitu a pak vyberte členy.
V rozevírací nabídce spravované identity vyhledejte Účet Foundry a pak vyberte účet Foundry vašeho agenta.
Vyberte Dokončit.
Po dokončení instalace můžete pokračovat pomocí nástroje prostřednictvím portálu Foundry, sady SDK nebo rozhraní REST API. Pomocí karet v horní části tohoto článku zobrazíte ukázky kódu.
Řešení běžných chyb
| Příznak | Pravděpodobná příčina | Rozlišení |
|---|---|---|
| Klíč rozhraní API není součástí požadavků. | Chybí sekce securitySchemes nebo security ve specifikaci OpenAPI. |
Ověřte, že specifikace OpenAPI obsahuje oddíl components.securitySchemes i oddíl nejvyšší úrovně security . Ujistěte se, že schéma name odpovídá názvu klíče v připojení k projektu. |
| Agent nevolá nástroj OpenAPI. | Volba nástroje není nastavena nebo operationId není popisná. |
Použijte tool_choice="required" pro vynucení vyvolání nástroje. Ujistěte se operationId , že hodnoty jsou popisné, aby model mohl zvolit správnou operaci. |
| Ověřování pro spravovanou identitu se nezdařilo. | Spravovaná identita není povolená nebo chybí přiřazení role. | Povolte spravovanou identitu přiřazenou systémem pro váš prostředek Foundry. Přiřaďte požadovanou roli (Čtenář nebo vyšší) na cílovou službu. |
| Spravovaná identita vrací hodnotu 401, i když je přiřazená role. | Identifikátor URI cílové skupiny neodpovídá tomu, co cílová služba očekává. | Ověřte, že identifikátor URI cílové skupiny odpovídá identifikátoru prostředku cílové služby. Informace o Azure službách najdete v dokumentaci ke službě. Pro rozhraní API chráněná službou Microsoft Entra použijte identifikátor URI ID aplikace z registrace vaší aplikace. Dekódujte token na https://jwt.ms a potvrďte, že nárok aud odpovídá. Viz Vysvětlení identifikátoru URI cílové skupiny. |
| Token spravované identity odmítnutý cílovým rozhraním API | Cílová služba nepřijímá tokeny Microsoft Entra ID. | Ověřte, že cílová služba podporuje ověřování Microsoft Entra ID. Pokud ne, použijte místo toho klíč rozhraní API nebo ověřování pomocí přenosového tokenu. |
| Požadavek selže s chybou 400 Chybný požadavek. | Specifikace OpenAPI neodpovídá skutečnému rozhraní API. | Ověřte specifikaci OpenAPI vůči skutečnému rozhraní API. Zkontrolujte názvy parametrů, typy a povinná pole. |
| Požadavek selže s chybou 401 Neautorizováno. | Klíč rozhraní API nebo token je neplatný nebo vypršela jeho platnost. | Znovu vygenerujte klíč nebo token rozhraní API a aktualizujte připojení k projektu. Ověřte správnost ID připojení. |
| Nástroj vrátí neočekávaný formát odpovědi. | Schéma odpovědi není definováno ve specifikaci OpenAPI. | Přidejte schémata odpovědí do specifikace OpenAPI, abyste lépe porozuměli modelu. |
operationId chyba ověření. |
Neplatné znaky v operationId. |
Používejte pouze písmena -a _ v operationId hodnotách. Odeberte čísla a speciální znaky. |
| Chyba: Připojení nebylo nalezeno. | Neshoda názvu nebo ID připojení | Ověřte, že OPENAPI_PROJECT_CONNECTION_NAME odpovídá názvu připojení v projektu Foundry. |
| Nosný token se neodesílal správně. | Chybí předpona Bearer u hodnoty připojení. |
Nastavte hodnotu připojení na Bearer <token> (se slovem Bearer a mezerou před tokenem). Ověřte, že specifikace securitySchemes OpenAPI používá "name": "Authorization". |
Volba metody ověřování
Následující tabulka vám pomůže zvolit správnou metodu ověřování pro nástroj OpenAPI:
| Metoda ověřování | Nejlepší pro | Složitost nastavení |
|---|---|---|
| Anonymní | Veřejná rozhraní API bez ověřování | Nízké |
| klíč rozhraní API | Rozhraní API jiná než Microsoft s přístupem na základě klíčů | Střední |
| Spravovaná identita | Služby Azure a rozhraní API chráněná pomocí Microsoft Entra ID. Vyžaduje, aby cílová služba přijímala tokeny Microsoft Entra ID a podporovala řízení přístupu na základě role v Azure nebo přístupové řízení založené na Microsoft Entra. | Středně vysoká |