Microsoft Foundry Agent Service verwendet drei Kern-Laufzeitkomponenten (Agents, Unterhaltungen und Antworten), um zustandsbehaftete, mehrstufige Interaktionen zu ermöglichen. Ein Agent definiert, welches Modell, welche Anweisungen und Tools verwendet werden sollen. Eine Unterhaltung bewahrt den Verlauf über mehrere Unterhaltungsrunden. Eine Antwort ist die Ausgabe, die der Agent erzeugt, wenn er Eingaben verarbeitet.
In diesem Artikel werden die einzelnen Komponenten durchgearbeitet und gezeigt, wie sie im Code zusammen verwendet werden. Sie erfahren, wie Sie einen Agent erstellen, eine Unterhaltung starten, Antworten generieren (mit oder ohne Agent), Nachverfolgungsnachrichten hinzufügen und Ergebnisse streamen – mit Beispielen in Python, C#, JavaScript, Java und REST-API.
Wie die Laufzeitkomponenten zusammenarbeiten
Wenn Sie mit einem Agenten arbeiten, folgen Sie einem konsistenten Muster:
-
Erstellen Sie einen Agent: Definieren Sie einen Agent, um mit dem Senden von Nachrichten und empfangenden Antworten zu beginnen.
-
Erstellen einer Unterhaltung (optional): Verwenden Sie eine Unterhaltung, um den Verlauf über mehrere Runden hinweg beizubehalten. Wenn Sie keine Unterhaltung verwenden, können Sie den Kontext fortführen, indem Sie die Ausgabe aus einer vorherigen Antwort verwenden.
-
Generieren sie eine Antwort: Der Agent verarbeitet Eingabeelemente in der Unterhaltung und alle Anweisungen in der Anforderung. Der Agent fügt möglicherweise Elemente an die Unterhaltung an.
-
Überprüfen sie den Antwortstatus: Überwachen Sie die Antwort, bis sie abgeschlossen ist (insbesondere im Streaming- oder Hintergrundmodus).
-
Abrufen der Antwort: Anzeigen der generierten Antwort für den Benutzer.
Das folgende Diagramm veranschaulicht, wie diese Komponenten in einem typischen Agent-loop interagieren.
Sie stellen Benutzereingaben (und optional Unterhaltungsverlauf) bereit, der Dienst generiert eine Reaktion (einschließlich Toolaufrufe, wenn konfiguriert), und die resultierenden Elemente können als Kontext für die nächste Interaktion wiederverwendet werden.
Voraussetzungen
Zum Ausführen der Beispiele in diesem Artikel benötigen Sie Folgendes:
pip install "azure-ai-projects>=2.0.0"
pip install azure-identity
dotnet add package Azure.AI.Projects --version 2.0.0-beta.2
dotnet add package Azure.Identity
npm install @azure/ai-projects@2.0.0
npm install @azure/identity
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-ai-agents</artifactId>
<version>2.0.0-beta.3</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.15.4</version>
</dependency>
Es ist keine SDK-Installation erforderlich. Verwenden Sie Azure CLI , um ein Zugriffstoken abzurufen:
az login
Einen Agent erstellen
Ein Agent ist eine permanente Orchestrierungsdefinition, die KI-Modelle, Anweisungen, Code, Tools, Parameter und optionale Sicherheits- oder Governancesteuerelemente kombiniert.
Speichern Sie Agents als benannte, versionsierte Ressourcen in Microsoft Foundry. Während der Reaktionsgenerierung funktioniert die Agentdefinition mit dem Interaktionsverlauf (Unterhaltung oder vorheriger Antwort), um Benutzereingaben zu verarbeiten und darauf zu reagieren.
Im folgenden Beispiel wird ein Eingabeaufforderungs-Agent mit einem Namen, Modell und Anweisungen erstellt. Verwenden Sie den Projektclient für die Agenterstellung und Versionsverwaltung.
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import PromptAgentDefinition
# Format: "https://resource_name.services.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
# Create project client to call Foundry API
project = AIProjectClient(
endpoint=PROJECT_ENDPOINT,
credential=DefaultAzureCredential(),
)
# Create a prompt agent
agent = project.agents.create_version(
agent_name="my-agent",
definition=PromptAgentDefinition(
model="gpt-5-mini",
instructions="You are a helpful assistant.",
),
)
print(f"Agent: {agent.name}, Version: {agent.version}")
using Azure.Identity;
using Azure.AI.Projects;
// Format: "https://resource_name.services.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 a prompt agent
AgentVersion agent = await projectClient.Agents
.CreateAgentVersionAsync(
agentName: "my-agent",
options: new(
new PromptAgentDefinition("gpt-5-mini")
{
Instructions = "You are a helpful assistant.",
}));
Console.WriteLine($"Agent: {agent.Name}, Version: {agent.Version}");
import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
// Format: "https://resource_name.services.ai.azure.com/api/projects/project_name"
const PROJECT_ENDPOINT = "your_project_endpoint";
// Create project client to call Foundry API
const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
// Create a prompt agent
const agent = await project.agents.createVersion(
"my-agent",
{
kind: "prompt",
model: "gpt-5-mini",
instructions: "You are a helpful assistant.",
},
);
console.log(`Agent: ${agent.name}, Version: ${agent.version}`);
import com.azure.ai.agents.AgentsClientBuilder;
import com.azure.ai.agents.AgentsClient;
import com.azure.ai.agents.models.PromptAgentDefinition;
import com.azure.identity.DefaultAzureCredentialBuilder;
// Format: "https://resource_name.services.ai.azure.com/api/projects/project_name"
String projectEndpoint = "your_project_endpoint";
// Create agents client to call Foundry API
AgentsClient agentsClient = new AgentsClientBuilder()
.credential(new DefaultAzureCredentialBuilder().build())
.endpoint(projectEndpoint)
.buildAgentsClient();
// Create a prompt agent
PromptAgentDefinition definition = new PromptAgentDefinition("gpt-5-mini");
definition.setInstructions("You are a helpful assistant.");
var agent = agentsClient.createAgentVersion("my-agent", definition);
System.out.println("Agent: " + agent.getName() + ", Version: " + agent.getVersion());
# Configuration
ENDPOINT="https://{resource_name}.services.ai.azure.com/api/projects/{project_name}"
ACCESS_TOKEN="$(az account get-access-token --resource https://ai.azure.com/ --query accessToken -o tsv)"
# Create a prompt agent
curl -X POST "${ENDPOINT}/agents?api-version=v1" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"name": "my-agent",
"definition": {
"kind": "prompt",
"model": "gpt-5-mini",
"instructions": "You are a helpful assistant."
}
}'
Hinweis
Agents werden jetzt mithilfe des Agentnamens und der Agentversion identifiziert. Sie haben keine GUID namens AgentID mehr.
Weitere Agenttypen (Workflow, gehostet) finden Sie unter Agent Development Lifecycle.
Tools erweitern, was ein Agent über das Generieren von Text hinaus tun kann. Wenn Sie Tools an einen Agent anfügen, kann der Agent externe Dienste aufrufen, Code ausführen, Dateien durchsuchen und während der Antwortgenerierung auf Datenquellen zugreifen – z. B. Websuche oder Funktionsaufrufe.
Sie können ein oder mehrere Tools anfügen, wenn Sie einen Agent erstellen. Während der Reaktionsgenerierung entscheidet der Agent, ob ein Tool basierend auf der Benutzereingabe und den zugehörigen Anweisungen aufgerufen werden soll. Im folgenden Beispiel wird ein Agent mit einem angefügten Websuchtool erstellt.
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import PromptAgentDefinition, WebSearchTool
PROJECT_ENDPOINT = "your_project_endpoint"
project = AIProjectClient(
endpoint=PROJECT_ENDPOINT,
credential=DefaultAzureCredential(),
)
# Create an agent with a web search tool
agent = project.agents.create_version(
agent_name="my-tool-agent",
definition=PromptAgentDefinition(
model="gpt-5-mini",
instructions="You are a helpful assistant that can search the web.",
tools=[WebSearchTool()],
),
)
print(f"Agent: {agent.name}, Version: {agent.version}")
using Azure.Identity;
using Azure.AI.Projects;
var projectEndpoint = "your_project_endpoint";
AIProjectClient projectClient = new(
endpoint: new Uri(projectEndpoint),
tokenProvider: new DefaultAzureCredential());
// Create an agent with a web search tool
AgentVersion agent = await projectClient.Agents
.CreateAgentVersionAsync(
agentName: "my-tool-agent",
options: new(
new PromptAgentDefinition("gpt-5-mini")
{
Instructions = "You are a helpful assistant that can search the web.",
Tools = { ResponseTool.CreateWebSearchTool() },
}));
Console.WriteLine($"Agent: {agent.Name}, Version: {agent.Version}");
import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
const PROJECT_ENDPOINT = "your_project_endpoint";
const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
// Create an agent with a web search tool
const agent = await project.agents.createVersion(
"my-tool-agent",
{
kind: "prompt",
model: "gpt-5-mini",
instructions: "You are a helpful assistant that can search the web.",
tools: [{ type: "web_search_preview" }],
},
);
console.log(`Agent: ${agent.name}, Version: ${agent.version}`);
import com.azure.ai.agents.AgentsClientBuilder;
import com.azure.ai.agents.AgentsClient;
import com.azure.ai.agents.models.PromptAgentDefinition;
import com.azure.ai.agents.models.WebSearchPreviewTool;
import com.azure.identity.DefaultAzureCredentialBuilder;
import java.util.Collections;
String projectEndpoint = "your_project_endpoint";
AgentsClient agentsClient = new AgentsClientBuilder()
.credential(new DefaultAzureCredentialBuilder().build())
.endpoint(projectEndpoint)
.buildAgentsClient();
// Create an agent with a web search tool
WebSearchPreviewTool webSearchTool = new WebSearchPreviewTool();
PromptAgentDefinition definition = new PromptAgentDefinition("gpt-5-mini");
definition.setInstructions("You are a helpful assistant that can search the web.");
definition.setTools(Collections.singletonList(webSearchTool));
var agent = agentsClient.createAgentVersion("my-tool-agent", definition);
System.out.println("Agent: " + agent.getName() + ", Version: " + agent.getVersion());
ENDPOINT="https://{resource_name}.services.ai.azure.com/api/projects/{project_name}"
ACCESS_TOKEN="$(az account get-access-token --resource https://ai.azure.com/ --query accessToken -o tsv)"
# Create an agent with a web search tool
curl -X POST "${ENDPOINT}/agents?api-version=v1" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"name": "my-tool-agent",
"definition": {
"kind": "prompt",
"model": "gpt-5-mini",
"instructions": "You are a helpful assistant that can search the web.",
"tools": [{ "type": "web_search_preview" }]
}
}'
Die vollständige Liste der verfügbaren Tools finden Sie in der Übersicht über die Tools. Bewährte Methoden finden Sie unter "Bewährte Methoden für die Verwendung von Tools".
Generieren von Antworten
Die Antwortgenerierung ruft den Agent auf. Der Agent verwendet seine Konfiguration und jeden bereitgestellten Verlauf (Unterhaltung oder vorherige Antwort), um Aufgaben durch Aufrufen von Modellen und Tools auszuführen. Im Rahmen der Reaktionsgenerierung fügt der Agent Elemente an die Unterhaltung an.
Sie können auch eine Antwort generieren, ohne einen Agent zu definieren. In diesem Fall stellen Sie alle Konfigurationen direkt in der Anforderung bereit und verwenden sie nur für diese Antwort. Dieser Ansatz ist nützlich für einfache Szenarien mit minimalen Tools.
Zusätzlich können Sie die Unterhaltung bei der ersten oder zweiten Antwort-ID forken.
Eine Antwort mit einem Agenten generieren
Im folgenden Beispiel wird eine Antwort mit einem Agentverweis generiert und dann eine Nachverfolgungsfrage mithilfe der vorherigen Antwort als Kontext gesendet.
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
# Format: "https://resource_name.services.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
AGENT_NAME = "your_agent_name"
# Create clients to call Foundry API
project = AIProjectClient(
endpoint=PROJECT_ENDPOINT,
credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()
# Generate a response using the agent
response = openai.responses.create(
extra_body={
"agent_reference": {
"name": AGENT_NAME,
"type": "agent_reference",
}
},
input="What is the largest city in France?",
)
print(response.output_text)
# Ask a follow-up question using the previous response
follow_up = openai.responses.create(
extra_body={
"agent_reference": {
"name": AGENT_NAME,
"type": "agent_reference",
}
},
previous_response_id=response.id,
input="What is the population of that city?",
)
print(follow_up.output_text)
using Azure.Identity;
using Azure.AI.Projects;
using Azure.AI.Extensions.OpenAI;
// Format: "https://resource_name.services.ai.azure.com/api/projects/project_name"
var projectEndpoint = "your_project_endpoint";
var agentName = "your_agent_name";
// Create project client to call Foundry API
AIProjectClient projectClient = new(
endpoint: new Uri(projectEndpoint),
tokenProvider: new DefaultAzureCredential());
// Generate a response using the agent
ProjectResponsesClient responsesClient
= projectClient.OpenAI.GetProjectResponsesClientForAgent(agentName);
ResponseResult response = await responsesClient.CreateResponseAsync(
"What is the largest city in France?");
Console.WriteLine(response.GetOutputText());
// Ask a follow-up question using the previous response
ResponseResult followUp = await responsesClient.CreateResponseAsync(
new CreateResponseOptions
{
PreviousResponseId = response.Id,
InputItems = { ResponseItem.CreateUserMessageItem(
"What is the population of that city?") },
});
Console.WriteLine(followUp.GetOutputText());
import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
// Format: "https://resource_name.services.ai.azure.com/api/projects/project_name"
const PROJECT_ENDPOINT = "your_project_endpoint";
const AGENT_NAME = "your_agent_name";
// Create clients to call Foundry API
const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
const openai = await project.getOpenAIClient();
// Generate a response using the agent
const response = await openai.responses.create({
input: "What is the largest city in France?",
agent_reference: {
name: AGENT_NAME,
type: "agent_reference",
},
});
console.log(response.output_text);
// Ask a follow-up question using the previous response
const followUp = await openai.responses.create({
input: "What is the population of that city?",
previous_response_id: response.id,
agent_reference: {
name: AGENT_NAME,
type: "agent_reference",
},
});
console.log(followUp.output_text);
import com.azure.ai.agents.*;
import com.azure.ai.agents.models.AgentReference;
import com.azure.ai.agents.models.AzureCreateResponseOptions;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.openai.models.responses.Response;
import com.openai.models.responses.ResponseCreateParams;
// Format: "https://resource_name.services.ai.azure.com/api/projects/project_name"
String projectEndpoint = "your_project_endpoint";
String agentName = "your_agent_name";
// Create clients to call Foundry API
AgentsClientBuilder builder = new AgentsClientBuilder()
.credential(new DefaultAzureCredentialBuilder().build())
.endpoint(projectEndpoint);
ResponsesClient responsesClient = builder.buildResponsesClient();
// Generate a response using the agent
AgentReference agentRef = new AgentReference(agentName);
Response response = responsesClient.createAzureResponse(
new AzureCreateResponseOptions().setAgentReference(agentRef),
ResponseCreateParams.builder()
.input("What is the largest city in France?"));
System.out.println(response.output());
// Ask a follow-up question using the previous response
Response followUp = responsesClient.createAzureResponse(
new AzureCreateResponseOptions().setAgentReference(agentRef),
ResponseCreateParams.builder()
.input("What is the population of that city?")
.previousResponseId(response.id()));
System.out.println(followUp.output());
# Configuration
ENDPOINT="https://{resource_name}.services.ai.azure.com/api/projects/{project_name}"
ACCESS_TOKEN="$(az account get-access-token --resource https://ai.azure.com/ --query accessToken -o tsv)"
AGENT_NAME="your_agent_name"
# Generate a response using an agent
RESPONSE=$(curl -s -X POST "${ENDPOINT}/openai/v1/responses" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"input": "What is the largest city in France?",
"agent_reference": {
"name": "'"${AGENT_NAME}"'",
"type": "agent_reference"
}
}')
RESPONSE_ID=$(echo "$RESPONSE" | jq -r '.id')
# Ask a follow-up question using the previous response
curl -X POST "${ENDPOINT}/openai/v1/responses" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"input": "What is the population of that city?",
"previous_response_id": "'"${RESPONSE_ID}"'",
"agent_reference": {
"name": "'"${AGENT_NAME}"'",
"type": "agent_reference"
}
}'
Wenn ein Agent Tools während der Antwortgenerierung verwendet, enthält die Antwortausgabe Toolaufrufelemente zusammen mit der endgültigen Nachricht. Sie können über response.output iterieren, um jedes Element zu inspizieren und Toolaufrufe anzuzeigen, z. B. Websuchen, Funktionsaufrufe oder Dateisuchen, bevor Sie die Textantwort ausgeben.
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
PROJECT_ENDPOINT = "your_project_endpoint"
AGENT_NAME = "your_agent_name"
project = AIProjectClient(
endpoint=PROJECT_ENDPOINT,
credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()
response = openai.responses.create(
extra_body={
"agent_reference": {
"name": AGENT_NAME,
"type": "agent_reference",
}
},
input="What happened in the news today?",
)
# Print each output item, including tool calls
for item in response.output:
if item.type == "web_search_call":
print(f"[Tool] Web search: status={item.status}")
elif item.type == "function_call":
print(f"[Tool] Function call: {item.name}({item.arguments})")
elif item.type == "file_search_call":
print(f"[Tool] File search: status={item.status}")
elif item.type == "message":
print(f"[Assistant] {item.content[0].text}")
using Azure.Identity;
using Azure.AI.Projects;
using Azure.AI.Extensions.OpenAI;
var projectEndpoint = "your_project_endpoint";
var agentName = "your_agent_name";
AIProjectClient projectClient = new(
endpoint: new Uri(projectEndpoint),
tokenProvider: new DefaultAzureCredential());
ProjectResponsesClient responsesClient
= projectClient.OpenAI.GetProjectResponsesClientForAgent(agentName);
ResponseResult response = await responsesClient.CreateResponseAsync(
"What happened in the news today?");
// Print each output item, including tool calls
foreach (var item in response.OutputItems)
{
switch (item)
{
case ResponseWebSearchCallItem webSearch:
Console.WriteLine($"[Tool] Web search: status={webSearch.Status}");
break;
case ResponseFunctionCallItem functionCall:
Console.WriteLine($"[Tool] Function call: {functionCall.Name}({functionCall.Arguments})");
break;
case ResponseFileSearchCallItem fileSearch:
Console.WriteLine($"[Tool] File search: status={fileSearch.Status}");
break;
case ResponseOutputMessage message:
Console.WriteLine($"[Assistant] {message.Content[0].Text}");
break;
}
}
import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
const PROJECT_ENDPOINT = "your_project_endpoint";
const AGENT_NAME = "your_agent_name";
const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
const openai = await project.getOpenAIClient();
const response = await openai.responses.create({
input: "What happened in the news today?",
agent_reference: {
name: AGENT_NAME,
type: "agent_reference",
},
});
// Print each output item, including tool calls
for (const item of response.output) {
switch (item.type) {
case "web_search_call":
console.log(`[Tool] Web search: status=${item.status}`);
break;
case "function_call":
console.log(`[Tool] Function call: ${item.name}(${item.arguments})`);
break;
case "file_search_call":
console.log(`[Tool] File search: status=${item.status}`);
break;
case "message":
console.log(`[Assistant] ${item.content[0].text}`);
break;
}
}
import com.azure.ai.agents.*;
import com.azure.ai.agents.models.AgentReference;
import com.azure.ai.agents.models.AzureCreateResponseOptions;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.openai.models.responses.Response;
import com.openai.models.responses.ResponseCreateParams;
import com.openai.models.responses.ResponseOutputItem;
String projectEndpoint = "your_project_endpoint";
String agentName = "your_agent_name";
AgentsClientBuilder builder = new AgentsClientBuilder()
.credential(new DefaultAzureCredentialBuilder().build())
.endpoint(projectEndpoint);
ResponsesClient responsesClient = builder.buildResponsesClient();
AgentReference agentRef = new AgentReference(agentName);
Response response = responsesClient.createAzureResponse(
new AzureCreateResponseOptions().setAgentReference(agentRef),
ResponseCreateParams.builder()
.input("What happened in the news today?"));
// Print each output item, including tool calls
for (ResponseOutputItem item : response.output()) {
item.webSearchCall().ifPresent(ws ->
System.out.println("[Tool] Web search: status=" + ws.status()));
item.functionCall().ifPresent(fc ->
System.out.println("[Tool] Function call: " + fc.name()
+ "(" + fc.arguments() + ")"));
item.fileSearchCall().ifPresent(fs ->
System.out.println("[Tool] File search: status=" + fs.status()));
item.message().ifPresent(msg ->
System.out.println("[Assistant] "
+ msg.content().get(0).asOutputText().text()));
}
ENDPOINT="https://{resource_name}.services.ai.azure.com/api/projects/{project_name}"
ACCESS_TOKEN="$(az account get-access-token --resource https://ai.azure.com/ --query accessToken -o tsv)"
AGENT_NAME="your_agent_name"
RESPONSE=$(curl -s -X POST "${ENDPOINT}/openai/v1/responses" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"input": "What happened in the news today?",
"agent_reference": {
"name": "'"${AGENT_NAME}"'",
"type": "agent_reference"
}
}')
# Print each output item, including tool calls
echo "$RESPONSE" | jq -r '.output[] |
if .type == "web_search_call" then "[Tool] Web search: status=\(.status)"
elif .type == "function_call" then "[Tool] Function call: \(.name)(\(.arguments))"
elif .type == "file_search_call" then "[Tool] File search: status=\(.status)"
elif .type == "message" then "[Assistant] \(.content[0].text)"
else "[Unknown] \(.type)"
end'
Generieren einer Antwort ohne Speichern
Standardmäßig speichert der Dienst den Antwortverlauf serverseitig, sodass Sie auf previous_response_id für Kontext über mehrere Runden verweisen können. Wenn Sie store auf false festlegen, speichert der Dienst die Antwort nicht. Sie müssen den Unterhaltungskontext selbst weiterleiten, indem Sie vorherige Ausgabeelemente als Eingabe an die nächste Anforderung übergeben.
Dieser Ansatz ist nützlich, wenn Sie die vollständige Kontrolle über den Unterhaltungszustand benötigen, gespeicherte Daten minimieren oder in einer Umgebung mit null Datenaufbewahrung arbeiten möchten.
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
PROJECT_ENDPOINT = "your_project_endpoint"
AGENT_NAME = "your_agent_name"
project = AIProjectClient(
endpoint=PROJECT_ENDPOINT,
credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()
# Generate a response without storing
response = openai.responses.create(
extra_body={
"agent_reference": {
"name": AGENT_NAME,
"type": "agent_reference",
}
},
input="What is the largest city in France?",
store=False,
)
print(response.output_text)
# Carry forward context client-side by passing previous output as input
follow_up = openai.responses.create(
extra_body={
"agent_reference": {
"name": AGENT_NAME,
"type": "agent_reference",
}
},
input=[
{"role": "user", "content": "What is the largest city in France?"},
{"role": "assistant", "content": response.output_text},
{"role": "user", "content": "What is the population of that city?"},
],
store=False,
)
print(follow_up.output_text)
using Azure.Identity;
using Azure.AI.Projects;
using Azure.AI.Extensions.OpenAI;
var projectEndpoint = "your_project_endpoint";
var agentName = "your_agent_name";
AIProjectClient projectClient = new(
endpoint: new Uri(projectEndpoint),
tokenProvider: new DefaultAzureCredential());
// Generate a response without storing
ProjectResponsesClient responsesClient
= projectClient.OpenAI.GetProjectResponsesClientForAgent(agentName);
ResponseResult response = await responsesClient.CreateResponseAsync(
new CreateResponseOptions
{
InputItems = { ResponseItem.CreateUserMessageItem(
"What is the largest city in France?") },
Store = false,
});
Console.WriteLine(response.GetOutputText());
// Carry forward context client-side by passing previous output as input
ResponseResult followUp = await responsesClient.CreateResponseAsync(
new CreateResponseOptions
{
InputItems =
{
ResponseItem.CreateUserMessageItem(
"What is the largest city in France?"),
ResponseItem.CreateAssistantMessageItem(
response.GetOutputText()),
ResponseItem.CreateUserMessageItem(
"What is the population of that city?"),
},
Store = false,
});
Console.WriteLine(followUp.GetOutputText());
import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
const PROJECT_ENDPOINT = "your_project_endpoint";
const AGENT_NAME = "your_agent_name";
const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
const openai = await project.getOpenAIClient();
// Generate a response without storing
const response = await openai.responses.create({
input: "What is the largest city in France?",
store: false,
agent_reference: {
name: AGENT_NAME,
type: "agent_reference",
},
});
console.log(response.output_text);
// Carry forward context client-side by passing previous output as input
const followUp = await openai.responses.create({
input: [
{ role: "user", content: "What is the largest city in France?" },
{ role: "assistant", content: response.output_text },
{ role: "user", content: "What is the population of that city?" },
],
store: false,
agent_reference: {
name: AGENT_NAME,
type: "agent_reference",
},
});
console.log(followUp.output_text);
import com.azure.ai.agents.*;
import com.azure.ai.agents.models.AgentReference;
import com.azure.ai.agents.models.AzureCreateResponseOptions;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.openai.models.responses.Response;
import com.openai.models.responses.ResponseCreateParams;
import com.openai.models.responses.EasyInputMessage;
import java.util.List;
String projectEndpoint = "your_project_endpoint";
String agentName = "your_agent_name";
AgentsClientBuilder builder = new AgentsClientBuilder()
.credential(new DefaultAzureCredentialBuilder().build())
.endpoint(projectEndpoint);
ResponsesClient responsesClient = builder.buildResponsesClient();
// Generate a response without storing
AgentReference agentRef = new AgentReference(agentName);
Response response = responsesClient.createAzureResponse(
new AzureCreateResponseOptions().setAgentReference(agentRef),
ResponseCreateParams.builder()
.input("What is the largest city in France?")
.store(false));
System.out.println(response.output());
// Carry forward context client-side by passing previous output as input
Response followUp = responsesClient.createAzureResponse(
new AzureCreateResponseOptions().setAgentReference(agentRef),
ResponseCreateParams.builder()
.inputOfResponse(List.of(
EasyInputMessage.builder()
.role(EasyInputMessage.Role.USER)
.content("What is the largest city in France?").build(),
EasyInputMessage.builder()
.role(EasyInputMessage.Role.ASSISTANT)
.content(response.outputText()).build(),
EasyInputMessage.builder()
.role(EasyInputMessage.Role.USER)
.content("What is the population of that city?").build()))
.store(false));
System.out.println(followUp.output());
ENDPOINT="https://{resource_name}.services.ai.azure.com/api/projects/{project_name}"
ACCESS_TOKEN="$(az account get-access-token --resource https://ai.azure.com/ --query accessToken -o tsv)"
AGENT_NAME="your_agent_name"
# Generate a response without storing
RESPONSE=$(curl -s -X POST "${ENDPOINT}/openai/v1/responses" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"input": "What is the largest city in France?",
"store": false,
"agent_reference": {
"name": "'"${AGENT_NAME}"'",
"type": "agent_reference"
}
}')
OUTPUT_TEXT=$(echo "$RESPONSE" | jq -r '.output[] | select(.type=="message") | .content[0].text')
# Carry forward context client-side by passing previous output as input
curl -X POST "${ENDPOINT}/openai/v1/responses" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"input": [
{"role": "user", "content": "What is the largest city in France?"},
{"role": "assistant", "content": "'"${OUTPUT_TEXT}"'"},
{"role": "user", "content": "What is the population of that city?"}
],
"store": false,
"agent_reference": {
"name": "'"${AGENT_NAME}"'",
"type": "agent_reference"
}
}'
Unterhaltungen und Gesprächsobjekte
Unterhaltungen sind dauerhafte Objekte mit eindeutigen Bezeichnern. Nach der Erstellung können Sie sie über Sitzungen hinweg wiederverwenden.
Unterhaltungen speichern Elemente, die Nachrichten, Toolaufrufe, Toolausgaben und andere Daten enthalten können.
Erstellen einer Unterhaltung
Im folgenden Beispiel wird eine Unterhaltung mit einer anfänglichen Benutzernachricht erstellt. Verwenden Sie den OpenAI-Client (abgerufen vom Projektclient) für Unterhaltungen und Antworten.
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
# Format: "https://resource_name.services.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
# Create clients to call Foundry API
project = AIProjectClient(
endpoint=PROJECT_ENDPOINT,
credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()
# Create a conversation with an initial user message
conversation = openai.conversations.create(
items=[
{
"type": "message",
"role": "user",
"content": "What is the largest city in France?",
}
],
)
print(f"Conversation ID: {conversation.id}")
using Azure.Identity;
using Azure.AI.Projects;
using Azure.AI.Extensions.OpenAI;
// Format: "https://resource_name.services.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 a conversation
ProjectConversation conversation
= await projectClient.OpenAI.Conversations.CreateProjectConversationAsync();
Console.WriteLine($"Conversation ID: {conversation.Id}");
import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
// Format: "https://resource_name.services.ai.azure.com/api/projects/project_name"
const PROJECT_ENDPOINT = "your_project_endpoint";
// Create clients to call Foundry API
const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
const openai = await project.getOpenAIClient();
// Create a conversation with an initial user message
const conversation = await openai.conversations.create({
items: [
{
type: "message",
role: "user",
content: "What is the largest city in France?",
},
],
});
console.log(`Conversation ID: ${conversation.id}`);
import com.azure.ai.agents.AgentsClientBuilder;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.openai.models.conversations.Conversation;
import com.openai.services.blocking.ConversationService;
// Format: "https://resource_name.services.ai.azure.com/api/projects/project_name"
String projectEndpoint = "your_project_endpoint";
// Create conversations client to call Foundry API
ConversationService conversationService = new AgentsClientBuilder()
.credential(new DefaultAzureCredentialBuilder().build())
.endpoint(projectEndpoint)
.buildOpenAIClient()
.conversations();
// Create a conversation
Conversation conversation = conversationService.create();
System.out.println("Conversation ID: " + conversation.id());
# Configuration
ENDPOINT="https://{resource_name}.services.ai.azure.com/api/projects/{project_name}"
ACCESS_TOKEN="$(az account get-access-token --resource https://ai.azure.com/ --query accessToken -o tsv)"
# Create a conversation with an initial user message
curl -X POST "${ENDPOINT}/openai/v1/conversations" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"items": [
{
"type": "message",
"role": "user",
"content": "What is the largest city in France?"
}
]
}'
Wann eine Unterhaltung geführt werden sollte
Verwenden Sie eine Unterhaltung, wenn Sie Folgendes wünschen:
-
Multi-Turn-Kontinuität: Bewahren Sie eine stabile Geschichte, ohne den Kontext selbst neu zu erstellen.
-
Sitzungsübergreifende Kontinuität: Verwenden Sie dieselbe Unterhaltung für einen Benutzer, der später zurückkehrt.
-
Einfacheres Debuggen: Überprüfen Sie, was im Laufe der Zeit passiert ist (z. B. Toolaufrufe und Ausgaben).
Wenn eine Unterhaltung verwendet wird, um eine Antwort (mit oder ohne Agent) zu generieren, wird die vollständige Unterhaltung als Eingabe für das Modell bereitgestellt. Die generierte Antwort wird dann an dieselbe Unterhaltung angefügt.
Hinweis
Wenn die Unterhaltung die unterstützte Kontextgröße des Modells überschreitet, schneidet das Modell den Eingabekontext automatisch ab. Die Konversation selbst wird nicht gekürzt, sondern nur eine Teilmenge davon wird verwendet, um die Antwort zu erstellen.
Wenn Sie kein Gespräch erstellen, können Sie trotzdem mehrstufige Prozesse erstellen, indem Sie die Ausgabe einer vorherigen Antwort als Ausgangspunkt für die nächste Anforderung verwenden. Dieser Ansatz bietet Ihnen mehr Flexibilität als das ältere threadbasierte Muster, bei dem der Zustand eng mit Threadobjekten gekoppelt war. Anleitungen zur Migration finden Sie unter Migrieren zum Agents SDK.
Konversationselementtypen
Unterhaltungen speichern Elemente und nicht nur Chatnachrichten. Elemente erfassen, was während der Antwortgenerierung passiert ist, damit der nächste Schritt diesen Kontext wiederverwenden kann.
Zu den allgemeinen Elementtypen gehören:
-
Nachrichtenelemente: Benutzer- oder Assistentennachrichten.
-
Toolaufrufelemente: Datensätze von Toolaufrufen, die der Agent versucht hat.
-
Toolausgabeelemente: Von Tools zurückgegebene Ausgaben (z. B. Abrufergebnisse).
-
Ausgabeelemente: Der Antwortinhalt, den Sie dem Benutzer wieder anzeigen.
Hinzufügen von Elementen zu einer Unterhaltung
Nachdem Sie eine Unterhaltung erstellt haben, verwenden Sie conversations.items.create(), um nachfolgende Benutzernachrichten oder andere Elemente hinzuzufügen.
# Add a follow-up message to an existing conversation
openai.conversations.items.create(
conversation_id=conversation.id,
items=[
{
"type": "message",
"role": "user",
"content": "What about Germany?",
}
],
)
// In C#, send follow-up input directly
// through the responses client
var followUp = await responsesClient.CreateResponseAsync(
"What about Germany?");
Console.WriteLine(followUp.GetOutputText());
// Add a follow-up message to an existing conversation
await openai.conversations.items.create(
conversation.id,
{
items: [
{
type: "message",
role: "user",
content: "What about Germany?",
},
],
},
);
// In Java, send follow-up input directly
// through the responses client
AgentReference agentRef = new AgentReference("my-agent");
Response followUp = responsesClient.createAzureResponse(
new AzureCreateResponseOptions().setAgentReference(agentRef),
ResponseCreateParams.builder()
.input("What about Germany?"));
System.out.println(followUp.output());
# Add items to an existing conversation
CONVERSATION_ID="conv_abc123"
curl -X POST "${ENDPOINT}/openai/v1/conversations/${CONVERSATION_ID}/items" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"items": [
{
"type": "message",
"role": "user",
"content": "What about Germany?"
}
]
}'
Eine Unterhaltung mit einem Agenten führen
Kombinieren Sie eine Unterhaltung mit einem Agent-Verweis, um den Verlauf über mehrere Runden hinweg aufrechtzuerhalten. Der Agent verarbeitet alle Elemente in der Unterhaltung und fügt ihre Ausgabe automatisch an.
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
PROJECT_ENDPOINT = "your_project_endpoint"
AGENT_NAME = "your_agent_name"
# Create clients to call Foundry API
project = AIProjectClient(
endpoint=PROJECT_ENDPOINT,
credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()
# Create a conversation for multi-turn chat
conversation = openai.conversations.create()
# First turn
response = openai.responses.create(
conversation=conversation.id,
extra_body={
"agent_reference": {
"name": AGENT_NAME,
"type": "agent_reference",
}
},
input="What is the largest city in France?",
)
print(response.output_text)
# Follow-up turn in the same conversation
follow_up = openai.responses.create(
conversation=conversation.id,
extra_body={
"agent_reference": {
"name": AGENT_NAME,
"type": "agent_reference",
}
},
input="What is the population of that city?",
)
print(follow_up.output_text)
using Azure.Identity;
using Azure.AI.Projects;
using Azure.AI.Extensions.OpenAI;
var projectEndpoint = "your_project_endpoint";
var agentName = "your_agent_name";
AIProjectClient projectClient = new(
endpoint: new Uri(projectEndpoint),
tokenProvider: new DefaultAzureCredential());
// Create a conversation for multi-turn chat
ProjectConversation conversation
= await projectClient.OpenAI.Conversations.CreateProjectConversationAsync();
// First turn
ProjectResponsesClient responsesClient
= projectClient.OpenAI.GetProjectResponsesClientForAgent(
agentName, conversation);
ResponseResult response = await responsesClient.CreateResponseAsync(
"What is the largest city in France?");
Console.WriteLine(response.GetOutputText());
// Follow-up turn in the same conversation
ResponseResult followUp = await responsesClient.CreateResponseAsync(
"What is the population of that city?");
Console.WriteLine(followUp.GetOutputText());
import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
const PROJECT_ENDPOINT = "your_project_endpoint";
const AGENT_NAME = "your_agent_name";
const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
const openai = await project.getOpenAIClient();
// Create a conversation for multi-turn chat
const conversation = await openai.conversations.create();
// First turn
const response = await openai.responses.create({
conversation: conversation.id,
input: "What is the largest city in France?",
agent_reference: {
name: AGENT_NAME,
type: "agent_reference",
},
});
console.log(response.output_text);
// Follow-up turn in the same conversation
const followUp = await openai.responses.create({
conversation: conversation.id,
input: "What is the population of that city?",
agent_reference: {
name: AGENT_NAME,
type: "agent_reference",
},
});
console.log(followUp.output_text);
import com.azure.ai.agents.*;
import com.azure.ai.agents.models.AgentReference;
import com.azure.ai.agents.models.AzureCreateResponseOptions;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.openai.models.conversations.Conversation;
import com.openai.models.responses.Response;
import com.openai.models.responses.ResponseCreateParams;
import com.openai.services.blocking.ConversationService;
String projectEndpoint = "your_project_endpoint";
String agentName = "your_agent_name";
AgentsClientBuilder builder = new AgentsClientBuilder()
.credential(new DefaultAzureCredentialBuilder().build())
.endpoint(projectEndpoint);
ResponsesClient responsesClient = builder.buildResponsesClient();
ConversationService conversationService
= builder.buildOpenAIClient().conversations();
// Create a conversation for multi-turn chat
Conversation conversation = conversationService.create();
// First turn
AgentReference agentRef = new AgentReference(agentName);
Response response = responsesClient.createAzureResponse(
new AzureCreateResponseOptions().setAgentReference(agentRef),
ResponseCreateParams.builder()
.conversation(conversation.id())
.input("What is the largest city in France?"));
System.out.println(response.output());
// Follow-up turn in the same conversation
Response followUp = responsesClient.createAzureResponse(
new AzureCreateResponseOptions().setAgentReference(agentRef),
ResponseCreateParams.builder()
.conversation(conversation.id())
.input("What is the population of that city?"));
System.out.println(followUp.output());
ENDPOINT="https://{resource_name}.services.ai.azure.com/api/projects/{project_name}"
ACCESS_TOKEN="$(az account get-access-token --resource https://ai.azure.com/ --query accessToken -o tsv)"
AGENT_NAME="your_agent_name"
# Create a conversation
CONVERSATION=$(curl -s -X POST "${ENDPOINT}/openai/v1/conversations" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{}')
CONVERSATION_ID=$(echo "$CONVERSATION" | jq -r '.id')
# First turn
curl -s -X POST "${ENDPOINT}/openai/v1/responses" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"input": "What is the largest city in France?",
"conversation": "'"${CONVERSATION_ID}"'",
"agent_reference": {
"name": "'"${AGENT_NAME}"'",
"type": "agent_reference"
}
}'
# Follow-up turn in the same conversation
curl -X POST "${ENDPOINT}/openai/v1/responses" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"input": "What is the population of that city?",
"conversation": "'"${CONVERSATION_ID}"'",
"agent_reference": {
"name": "'"${AGENT_NAME}"'",
"type": "agent_reference"
}
}'
Beispiele, die zeigen, wie Unterhaltungen und Antworten im Code zusammenarbeiten, finden Sie unter Erstellen und Verwenden von Arbeitsspeicher im Foundry Agent Service.
Streaming- und Hintergrundantworten
Bei Vorgängen mit langer Ausführungszeit können Sie Ergebnisse inkrementell im streaming-Modus zurückgeben oder die Ausführung vollständig asynchron im background-Modus durchführen. In diesen Fällen überwachen Sie die Antwort in der Regel, bis sie abgeschlossen ist, und verwenden dann die endgültigen Ausgabeelemente.
Übertragung einer Antwort
Streaming gibt partielle Ergebnisse zurück, während sie generiert werden. Dieser Ansatz ist nützlich, um die Ausgabe für Benutzer in Echtzeit anzuzeigen.
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
# Format: "https://resource_name.services.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
AGENT_NAME = "your_agent_name"
# Create clients to call Foundry API
project = AIProjectClient(
endpoint=PROJECT_ENDPOINT,
credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()
# Stream a response using the agent
stream = openai.responses.create(
extra_body={
"agent_reference": {
"name": AGENT_NAME,
"type": "agent_reference",
}
},
input="Explain how agents work in one paragraph.",
stream=True,
)
for event in stream:
if hasattr(event, "delta") and event.delta:
print(event.delta, end="", flush=True)
using Azure.Identity;
using Azure.AI.Projects;
using Azure.AI.Extensions.OpenAI;
// Format: "https://resource_name.services.ai.azure.com/api/projects/project_name"
var projectEndpoint = "your_project_endpoint";
var agentName = "your_agent_name";
// Create project client to call Foundry API
AIProjectClient projectClient = new(
endpoint: new Uri(projectEndpoint),
tokenProvider: new DefaultAzureCredential());
// Stream a response using the agent
ProjectResponsesClient responsesClient
= projectClient.OpenAI.GetProjectResponsesClientForAgent(agentName);
await foreach (StreamingResponseUpdate update
in responsesClient.CreateResponseStreamingAsync(
"Explain how agents work in one paragraph."))
{
if (update is StreamingResponseOutputTextDeltaUpdate textDelta)
{
Console.Write(textDelta.Delta);
}
}
import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
// Format: "https://resource_name.services.ai.azure.com/api/projects/project_name"
const PROJECT_ENDPOINT = "your_project_endpoint";
const AGENT_NAME = "your_agent_name";
// Create clients to call Foundry API
const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
const openai = await project.getOpenAIClient();
// Stream a response using the agent
const stream = await openai.responses.create({
input: "Explain how agents work in one paragraph.",
stream: true,
agent_reference: {
name: AGENT_NAME,
type: "agent_reference",
},
});
for await (const event of stream) {
if (event.type === "response.output_text.delta") {
process.stdout.write(event.delta);
}
}
import com.azure.ai.agents.*;
import com.azure.ai.agents.models.AgentReference;
import com.azure.ai.agents.models.AzureCreateResponseOptions;
import com.azure.core.util.IterableStream;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.openai.models.responses.ResponseCreateParams;
import com.openai.models.responses.ResponseStreamEvent;
// Format: "https://resource_name.services.ai.azure.com/api/projects/project_name"
String projectEndpoint = "your_project_endpoint";
String agentName = "your_agent_name";
AgentsClientBuilder builder = new AgentsClientBuilder()
.credential(new DefaultAzureCredentialBuilder().build())
.endpoint(projectEndpoint);
ResponsesClient responsesClient = builder.buildResponsesClient();
// Stream a response using the agent
AgentReference agentRef = new AgentReference(agentName);
IterableStream<ResponseStreamEvent> events =
responsesClient.createStreamingAzureResponse(
new AzureCreateResponseOptions()
.setAgentReference(agentRef),
ResponseCreateParams.builder()
.input("Explain how agents work in one paragraph."));
for (ResponseStreamEvent event : events) {
event.outputTextDelta()
.ifPresent(textEvent ->
System.out.print(textEvent.delta()));
}
# Configuration
ENDPOINT="https://{resource_name}.services.ai.azure.com/api/projects/{project_name}"
ACCESS_TOKEN="$(az account get-access-token --resource https://ai.azure.com/ --query accessToken -o tsv)"
AGENT_NAME="your_agent_name"
# Stream a response using an agent (returns server-sent events)
curl -N -X POST "${ENDPOINT}/openai/v1/responses" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"input": "Explain how agents work in one paragraph.",
"stream": true,
"agent_reference": {
"name": "'"${AGENT_NAME}"'",
"type": "agent_reference"
}
}'
Ausführliche Informationen zu Antwortmodi und zur Nutzung von Ausgaben finden Sie unter Antwort-API.
Ausführen eines Agents im Hintergrundmodus
Der Hintergrundmodus führt den Agenten asynchron aus, was für lang andauernde Aufgaben wie komplexe Berechnungen oder die Bildgenerierung nützlich ist. Legen Sie background auf true fest, und fragen Sie dann den Antwortstatus ab, bis der Vorgang abgeschlossen ist.
from time import sleep
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
PROJECT_ENDPOINT = "your_project_endpoint"
AGENT_NAME = "your_agent_name"
# Create clients to call Foundry API
project = AIProjectClient(
endpoint=PROJECT_ENDPOINT,
credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()
# Start a background response using the agent
response = openai.responses.create(
extra_body={
"agent_reference": {
"name": AGENT_NAME,
"type": "agent_reference",
}
},
input="Write a detailed analysis of renewable energy trends.",
background=True,
)
# Poll until the response completes
while response.status in ("queued", "in_progress"):
sleep(2)
response = openai.responses.retrieve(response.id)
print(response.output_text)
using Azure.Identity;
using Azure.AI.Projects;
using Azure.AI.Extensions.OpenAI;
var projectEndpoint = "your_project_endpoint";
var agentName = "your_agent_name";
AIProjectClient projectClient = new(
endpoint: new Uri(projectEndpoint),
tokenProvider: new DefaultAzureCredential());
// Start a background response using the agent
ProjectResponsesClient responsesClient
= projectClient.OpenAI.GetProjectResponsesClientForAgent(agentName);
ResponseResult response = await responsesClient.CreateResponseAsync(
new CreateResponseOptions
{
InputItems = { ResponseItem.CreateUserMessageItem(
"Write a detailed analysis of renewable energy trends.") },
Background = true,
});
// Poll until the response completes
while (response.Status is "queued" or "in_progress")
{
await Task.Delay(2000);
response = await responsesClient.RetrieveResponseAsync(response.Id);
}
Console.WriteLine(response.GetOutputText());
import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
const PROJECT_ENDPOINT = "your_project_endpoint";
const AGENT_NAME = "your_agent_name";
const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
const openai = await project.getOpenAIClient();
// Start a background response using the agent
let response = await openai.responses.create({
input: "Write a detailed analysis of renewable energy trends.",
background: true,
agent_reference: {
name: AGENT_NAME,
type: "agent_reference",
},
});
// Poll until the response completes
while (response.status === "queued" || response.status === "in_progress") {
await new Promise((r) => setTimeout(r, 2000));
response = await openai.responses.retrieve(response.id);
}
console.log(response.output_text);
import com.azure.ai.agents.*;
import com.azure.ai.agents.models.AgentReference;
import com.azure.ai.agents.models.AzureCreateResponseOptions;
import com.azure.core.util.IterableStream;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.openai.models.responses.Response;
import com.openai.models.responses.ResponseCreateParams;
import com.openai.models.responses.ResponseStreamEvent;
import com.openai.helpers.ResponseAccumulator;
String projectEndpoint = "your_project_endpoint";
String agentName = "your_agent_name";
// Create clients to call Foundry API
AgentsClientBuilder builder = new AgentsClientBuilder()
.credential(new DefaultAzureCredentialBuilder().build())
.endpoint(projectEndpoint);
ResponsesClient responsesClient = builder.buildResponsesClient();
// Start a background response using the agent
AgentReference agentRef = new AgentReference(agentName);
ResponseAccumulator accumulator = ResponseAccumulator.create();
IterableStream<ResponseStreamEvent> events =
responsesClient.createStreamingAzureResponse(
new AzureCreateResponseOptions()
.setAgentReference(agentRef),
ResponseCreateParams.builder()
.input("Write a detailed analysis of "
+ "renewable energy trends."));
for (ResponseStreamEvent event : events) {
accumulator.accumulate(event);
}
Response response = accumulator.response();
System.out.println(response.output());
ENDPOINT="https://{resource_name}.services.ai.azure.com/api/projects/{project_name}"
ACCESS_TOKEN="$(az account get-access-token --resource https://ai.azure.com/ --query accessToken -o tsv)"
AGENT_NAME="your_agent_name"
# Start a background response using an agent
RESPONSE=$(curl -s -X POST "${ENDPOINT}/openai/v1/responses" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"input": "Write a detailed analysis of renewable energy trends.",
"background": true,
"agent_reference": {
"name": "'"${AGENT_NAME}"'",
"type": "agent_reference"
}
}')
RESPONSE_ID=$(echo "$RESPONSE" | jq -r '.id')
# Poll until the response completes
STATUS=$(echo "$RESPONSE" | jq -r '.status')
while [ "$STATUS" = "queued" ] || [ "$STATUS" = "in_progress" ]; do
sleep 2
RESPONSE=$(curl -s -X GET "${ENDPOINT}/openai/v1/responses/${RESPONSE_ID}" \
-H "Authorization: Bearer ${ACCESS_TOKEN}")
STATUS=$(echo "$RESPONSE" | jq -r '.status')
done
echo "$RESPONSE" | jq -r '.output[0].content[0].text'
Anhängen von Arbeitsspeicher an einen Agenten (Vorschau)
Der Speicher bietet Agents die Möglichkeit, Informationen über Sitzungen hinweg aufzubewahren, sodass sie Antworten personalisieren und Benutzereinstellungen im Laufe der Zeit zurückrufen können. Ohne Arbeitsspeicher beginnt jede Unterhaltung von Grund auf neu.
Der Foundry Agent Service bietet eine verwaltete Speicherlösung (Vorschau), die Sie über Speicher konfigurieren. Ein Speicher definiert, welche Arten von Informationen der Agent beibehalten soll. Fügen Sie einen Speicher an Ihren Agent an, und der Agent verwendet gespeicherte Erinnerungen als zusätzlichen Kontext während der Reaktionsgenerierung.
Im folgenden Beispiel wird ein Speicher erstellt und an einen Agent angefügt.
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import (
MemoryStoreDefaultDefinition,
MemoryStoreDefaultOptions,
)
PROJECT_ENDPOINT = "your_project_endpoint"
project = AIProjectClient(
endpoint=PROJECT_ENDPOINT,
credential=DefaultAzureCredential(),
)
# Create a memory store
options = MemoryStoreDefaultOptions(
chat_summary_enabled=True,
user_profile_enabled=True,
)
definition = MemoryStoreDefaultDefinition(
chat_model="gpt-5.2",
embedding_model="text-embedding-3-small",
options=options,
)
memory_store = project.beta.memory_stores.create(
name="my_memory_store",
definition=definition,
description="Memory store for my agent",
)
print(f"Memory store: {memory_store.name}")
using Azure.Identity;
using Azure.AI.Projects;
#pragma warning disable AAIP001
var projectEndpoint = "your_project_endpoint";
AIProjectClient projectClient = new(
new Uri(projectEndpoint),
new DefaultAzureCredential());
// Create a memory store
MemoryStoreDefaultDefinition memoryStoreDefinition = new(
chatModel: "gpt-5.2",
embeddingModel: "text-embedding-3-small");
memoryStoreDefinition.Options = new(
userProfileEnabled: true,
chatSummaryEnabled: true);
MemoryStore memoryStore = await projectClient.MemoryStores
.CreateMemoryStoreAsync(
name: "my_memory_store",
definition: memoryStoreDefinition,
description: "Memory store for my agent");
Console.WriteLine($"Memory store: {memoryStore.Name}");
import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
const PROJECT_ENDPOINT = "your_project_endpoint";
const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
// Create a memory store
const memoryStore = await project.beta.memoryStores.create(
"my_memory_store",
{
kind: "default",
chat_model: "gpt-5.2",
embedding_model: "text-embedding-3-small",
options: {
user_profile_enabled: true,
chat_summary_enabled: true,
},
},
{ description: "Memory store for my agent" },
);
console.log(`Memory store: ${memoryStore.name}`);
import com.azure.ai.agents.AgentsClientBuilder;
import com.azure.ai.agents.MemoryStoresClient;
import com.azure.ai.agents.models.MemoryStoreDefaultDefinition;
import com.azure.ai.agents.models.MemoryStoreDetails;
import com.azure.identity.DefaultAzureCredentialBuilder;
String projectEndpoint = "your_project_endpoint";
// Create memory stores client
MemoryStoresClient memoryStoresClient = new AgentsClientBuilder()
.credential(new DefaultAzureCredentialBuilder().build())
.endpoint(projectEndpoint)
.buildMemoryStoresClient();
// Create a memory store
MemoryStoreDefaultDefinition definition =
new MemoryStoreDefaultDefinition("gpt-5.2", "text-embedding-3-small");
MemoryStoreDetails memoryStore = memoryStoresClient
.createMemoryStore("my_memory_store", definition,
"Memory store for my agent", null);
System.out.println("Memory store: " + memoryStore.getName());
ENDPOINT="https://{resource_name}.services.ai.azure.com/api/projects/{project_name}"
API_VERSION="2025-11-15-preview"
ACCESS_TOKEN="$(az account get-access-token --resource https://ai.azure.com/ --query accessToken -o tsv)"
# Create a memory store
curl -X POST "${ENDPOINT}/memory_stores?api-version=${API_VERSION}" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"name": "my_memory_store",
"description": "Memory store for my agent",
"definition": {
"kind": "default",
"chat_model": "gpt-5.2",
"embedding_model": "text-embedding-3-small",
"options": {
"chat_summary_enabled": true,
"user_profile_enabled": true
}
}
}'
Konzeptionelle Details finden Sie unter "Memory in Foundry Agent Service". Vollständige Implementierungsanleitungen finden Sie unter Erstellen und Verwenden von Arbeitsspeicher.
Sicherheit und Datenverarbeitung
Da Unterhaltungen und Antworten vom Benutzer bereitgestellte Inhalte und Toolausgaben beibehalten können, behandeln Sie Laufzeitdaten wie Anwendungsdaten:
-
Vermeiden Sie das Speichern von Geheimnissen in Eingabeaufforderungen oder im Gesprächsverlauf. Verwenden Sie stattdessen Verbindungen und verwaltete Geheimdatenspeicher (z. B. Richten Sie eine Schlüsseltresorverbindung ein).
-
Verwenden Sie das geringste Privileg für den Werkzeugzugang. Wenn ein Tool auf externe Systeme zugreift, kann der Agent daten potenziell über dieses Tool lesen oder senden.
-
Achten Sie bei Nicht-Microsoft-Diensten darauf. Wenn Ihr Agent Tools aufruft, die von Nicht-Microsoft-Diensten unterstützt werden, fließen einige Daten möglicherweise zu diesen Diensten. Verwandte Überlegungen finden Sie unter Entdecken von Tools in den Foundry Tools.
Grenzen und Einschränkungen
Grenzwerte können vom Modell, der Region und den tools abhängen, die Sie anfügen (z. B. Streamingverfügbarkeit und Toolunterstützung). Aktuelle Verfügbarkeit und Einschränkungen für Antworten finden Sie unter "Antworten-API".
Verwandte Inhalte