Le service Microsoft Foundry Agent utilise trois composants d’exécution principaux ( agents, conversations et réponses) pour alimenter les interactions avec état et multitours. Un agent définit le modèle, les instructions et les outils à utiliser. Une conversation se poursuit avec son historique à travers les différents tours de discussion. Une réponse est la sortie produite par l’agent lorsqu’il traite l’entrée.
Cet article décrit chaque composant et explique comment les utiliser ensemble dans le code. Vous allez apprendre à créer un agent, démarrer une conversation, générer des réponses (avec ou sans agent), ajouter des messages de suivi et diffuser en continu des résultats, avec des exemples en Python, C#, JavaScript, JavaScript et l’API REST.
Fonctionnement des composants runtime
Lorsque vous travaillez avec un agent, vous suivez un modèle cohérent :
-
Créer un agent : définissez un agent pour commencer à envoyer des messages et recevoir des réponses.
-
Créer une conversation (facultative) : utilisez une conversation pour conserver l’historique à travers les tours. Si vous n’utilisez pas de conversation, transférez le contexte à l’aide de la sortie d’une réponse précédente.
-
Générez une réponse : l’agent traite les éléments d’entrée dans la conversation et toutes les instructions fournies dans la demande. L’agent peut ajouter des éléments à la conversation.
-
Vérifier l’état de la réponse : surveillez la réponse jusqu’à ce qu’elle se termine (en particulier en mode streaming ou en mode arrière-plan).
-
Récupérez la réponse : affichez la réponse générée à l’utilisateur.
Le diagramme suivant illustre l’interaction de ces composants dans une loop d’agent classique.
Vous fournissez une entrée utilisateur (et éventuellement l’historique des conversations), le service génère une réponse (y compris les appels d’outils en cas de configuration) et les éléments résultants peuvent être réutilisés en tant que contexte pour le tour suivant.
Prerequisites
Pour exécuter les exemples de cet article, vous avez besoin des éléments suivants :
pip install "azure-ai-projects>=2.0.0"
pip install azure-identity
dotnet add package Azure.AI.Projects --prerelease
dotnet add package Azure.AI.Projects.OpenAI --prerelease
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.2</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.15.4</version>
</dependency>
Aucune installation du Kit de développement logiciel (SDK) n’est requise. Utilisez Azure CLI pour obtenir un jeton d’accès :
az login
Créer un agent
Un agent est une définition d’orchestration persistante qui combine des modèles IA, des instructions, du code, des outils, des paramètres et des contrôles de sécurité ou de gouvernance facultatifs.
Stockez les agents sous la forme de ressources nommées et avec version dans Microsoft Foundry. Pendant la génération de réponse, la définition de l’agent fonctionne avec l’historique des interactions (conversation ou réponse précédente) pour traiter et répondre à l’entrée utilisateur.
L’exemple suivant crée un agent de saisie avec un nom, un modèle et des instructions. Utilisez le client de projet pour la création et le contrôle de version de l’agent.
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
var 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.Value.Name}, Version: {agent.Value.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."
}
}'
Note
Les agents sont maintenant identifiés à l’aide du nom de l’agent et de la version de l’agent. Ils n’ont plus de GUID appelé AgentID .
Pour obtenir des types d’agents supplémentaires (workflow, hébergés), consultez le cycle de vie du développement d’un agent.
Les outils étendent ce qu’un agent peut faire au-delà de la génération de texte. Lorsque vous attachez des outils à un agent, l’agent peut appeler des services externes, exécuter du code, rechercher des fichiers et accéder aux sources de données pendant la génération de réponse, à l’aide d’outils tels que la recherche web ou l’appel de fonction.
Vous pouvez attacher un ou plusieurs outils lorsque vous créez un agent. Pendant la génération de réponse, l’agent décide s’il faut appeler un outil en fonction de l’entrée de l’utilisateur et de ses instructions. L’exemple suivant crée un agent avec un outil de recherche web attaché.
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
var 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.Value.Name}, Version: {agent.Value.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" }]
}
}'
Pour obtenir la liste complète des outils disponibles, consultez la vue d’ensemble des outils. Pour connaître les meilleures pratiques, consultez Les meilleures pratiques pour l’utilisation d’outils.
Générer des réponses
La génération de réponses appelle l’agent. L’agent utilise sa configuration et tout historique fourni (conversation ou réponse précédente) pour effectuer des tâches en appelant des modèles et des outils. Dans le cadre de la génération de réponse, l’agent ajoute des éléments à la conversation.
Vous pouvez également générer une réponse sans définir d’agent. Dans ce cas, vous fournissez toutes les configurations directement dans la demande et les utilisez uniquement pour cette réponse. Cette approche est utile pour les scénarios simples avec des outils minimaux.
De plus, vous pouvez bifurquer la conversation à partir de l’identifiant de la première réponse ou de celui de la deuxième réponse
Générer une réponse avec un agent
L’exemple suivant génère une réponse à l’aide d’une référence d’agent, puis envoie une question de suivi à l’aide de la réponse précédente en tant que contexte.
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.Projects.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
ResponsesClient responsesClient
= projectClient.OpenAI.GetProjectResponsesClientForAgent(
new AgentReference { Name = 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(
"What is the population of that city?",
previousResponseId: response.Id);
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.identity.DefaultAzureCredentialBuilder;
// 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.createWithAgent(
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.createWithAgent(
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"
}
}'
Lorsqu’un agent utilise des outils pendant la génération de réponse, la sortie de la réponse contient des éléments d’appel d’outil en même temps que le message final. Vous pouvez effectuer une response.output itération pour inspecter chaque élément et afficher les appels d’outils( tels que les recherches web, les appels de fonction ou les recherches de fichiers) avant d’imprimer la réponse texte.
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.Projects.OpenAI;
var projectEndpoint = "your_project_endpoint";
var agentName = "your_agent_name";
AIProjectClient projectClient = new(
endpoint: new Uri(projectEndpoint),
tokenProvider: new DefaultAzureCredential());
ResponsesClient responsesClient
= projectClient.OpenAI.GetProjectResponsesClientForAgent(
new AgentReference { Name = 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.*;
import com.azure.identity.DefaultAzureCredentialBuilder;
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.createWithAgent(
agentRef,
ResponseCreateParams.builder()
.input("What happened in the news today?"));
// Print each output item, including tool calls
for (ResponseOutputItem item : response.getOutput()) {
String type = item.getType();
if ("web_search_call".equals(type)) {
System.out.println("[Tool] Web search: status=" + item.getStatus());
} else if ("function_call".equals(type)) {
System.out.println("[Tool] Function call: " + item.getName()
+ "(" + item.getArguments() + ")");
} else if ("file_search_call".equals(type)) {
System.out.println("[Tool] File search: status=" + item.getStatus());
} else if ("message".equals(type)) {
System.out.println("[Assistant] " + item.getContent().get(0).getText());
}
}
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'
Générer une réponse sans stocker
Par défaut, le service stocke l'historique des réponses côté serveur, vous permettant ainsi de consulter previous_response_id pour le contexte multitour. Si vous définissez store sur false, le service ne conserve pas de manière persistante la réponse. Vous devez transférer le contexte de conversation vous-même en transmettant les éléments de sortie précédents comme entrée à la requête suivante.
Cette approche est utile lorsque vous avez besoin d’un contrôle total sur l’état de conversation, de réduire les données stockées ou de travailler dans un environnement de rétention de données zéro.
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.Projects.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
ResponsesClient responsesClient
= projectClient.OpenAI.GetProjectResponsesClientForAgent(
new AgentReference { Name = agentName });
ResponseResult response = await responsesClient.CreateResponseAsync(
"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 ResponseCreationOptions
{
Instructions = null,
Input = ResponseInput.FromItems(
new ResponseInputItem.Message
{
Role = "user",
Content = "What is the largest city in France?"
},
new ResponseInputItem.Message
{
Role = "assistant",
Content = response.GetOutputText()
},
new ResponseInputItem.Message
{
Role = "user",
Content = "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.identity.DefaultAzureCredentialBuilder;
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.createWithAgent(
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.createWithAgent(
agentRef,
ResponseCreateParams.builder()
.input(List.of(
new InputMessage("user", "What is the largest city in France?"),
new InputMessage("assistant", response.output()),
new InputMessage("user", "What is the population of that city?")))
.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"
}
}'
Conversations et éléments de conversation
Les conversations sont des objets durables avec des identificateurs uniques. Après la création, vous pouvez les réutiliser entre les sessions.
Les conversations stockent des éléments, qui peuvent inclure des messages, des appels d’outils, des sorties d’outil et d’autres données.
Créer une conversation
L’exemple suivant crée une conversation avec un message utilisateur initial. Utilisez le client OpenAI (obtenu à partir du client de projet) pour les conversations et les réponses.
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.Projects.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.ai.agents.ConversationsClient;
import com.azure.identity.DefaultAzureCredentialBuilder;
// Format: "https://resource_name.services.ai.azure.com/api/projects/project_name"
String projectEndpoint = "your_project_endpoint";
// Create conversations client to call Foundry API
ConversationsClient conversationsClient = new AgentsClientBuilder()
.credential(new DefaultAzureCredentialBuilder().build())
.endpoint(projectEndpoint)
.buildConversationsClient();
// Create a conversation
var conversation = conversationsClient.getConversationService().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?"
}
]
}'
Quand utiliser une conversation
Utilisez une conversation lorsque vous souhaitez :
-
Continuité multitour : conservez une histoire stable à travers les tours sans reconstruire vous-même le contexte.
-
Continuité intersession : réutiliser la même conversation pour un utilisateur qui retourne ultérieurement.
-
Débogage plus facile : inspectez ce qui s’est passé au fil du temps (par exemple, les appels d’outils et les sorties).
Lorsqu’une conversation est utilisée pour générer une réponse (avec ou sans agent), la conversation complète est fournie en tant qu’entrée au modèle. La réponse générée est ensuite ajoutée à la même conversation.
Note
Si la conversation dépasse la taille de contexte prise en charge du modèle, le modèle tronque automatiquement le contexte d’entrée. La conversation elle-même n’est pas tronquée, mais uniquement un sous-ensemble utilisé pour générer la réponse.
Si vous ne créez pas de conversation, vous pouvez toujours générer des flux à plusieurs tour en utilisant la sortie d’une réponse précédente comme point de départ pour la requête suivante. Cette approche vous offre plus de flexibilité que le modèle basé sur un thread plus ancien, où l’état a été étroitement couplé aux objets de thread. Pour obtenir des conseils sur la migration, consultez Migrer vers le Kit de développement logiciel (SDK) Agents.
Types d’éléments de conversation
Les conversations stockent des éléments plutôt que des messages de conversation uniquement. Les éléments capturent ce qui s’est passé pendant la génération de réponse afin que le tour suivant puisse réutiliser ce contexte.
Les types d’éléments courants sont les suivants :
-
Éléments de message : messages utilisateur ou assistant.
-
Éléments d'appel d'outil : enregistrements des appels d’outil tentés par l’agent.
-
Éléments de sortie de l’outil : sorties retournées par les outils (par exemple, résultats de récupération).
-
Éléments de sortie : contenu de réponse que vous affichez à l’utilisateur.
Ajouter des éléments à une conversation
Après avoir créé une conversation, utilisez cette option conversations.items.create() pour ajouter des messages utilisateur ou d’autres éléments suivants.
# 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.createWithAgent(
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?"
}
]
}'
Utiliser une conversation avec un agent
Associez une conversation à une référence d’agent afin de conserver l’historique sur plusieurs échanges. L’agent traite tous les éléments de la conversation et ajoute automatiquement son résultat.
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.Projects.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
ResponsesClient responsesClient
= projectClient.OpenAI.GetProjectResponsesClientForAgent(
new AgentReference { Name = agentName },
conversation.Id);
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.identity.DefaultAzureCredentialBuilder;
String projectEndpoint = "your_project_endpoint";
String agentName = "your_agent_name";
AgentsClientBuilder builder = new AgentsClientBuilder()
.credential(new DefaultAzureCredentialBuilder().build())
.endpoint(projectEndpoint);
ResponsesClient responsesClient = builder.buildResponsesClient();
ConversationsClient conversationsClient = builder.buildConversationsClient();
// Create a conversation for multi-turn chat
var conversation = conversationsClient.getConversationService().create();
// First turn
AgentReference agentRef = new AgentReference(agentName);
Response response = responsesClient.createWithAgentConversation(
agentRef, conversation.id(),
ResponseCreateParams.builder()
.input("What is the largest city in France?"));
System.out.println(response.output());
// Follow-up turn in the same conversation
Response followUp = responsesClient.createWithAgentConversation(
agentRef, conversation.id(),
ResponseCreateParams.builder()
.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"
}
}'
Pour obtenir des exemples qui montrent comment les conversations et les réponses fonctionnent ensemble dans le code, consultez Créer et utiliser la mémoire dans le service De l’agent Foundry.
Diffusion en continu et réponses en arrière-plan
Pour les opérations de longue durée, vous pouvez retourner des résultats de manière incrémentielle à l’aide streaming ou exécuter complètement de manière asynchrone à l’aide du background mode. Dans ces cas, vous surveillez généralement la réponse jusqu’à ce qu’elle se termine, puis consommez les éléments de sortie finaux.
Diffuser en continu une réponse
Le streaming retourne des résultats partiels au fur et à mesure qu’ils sont générés. Cette approche est utile pour montrer la sortie aux utilisateurs en temps réel.
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.Projects.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
ResponsesClient responsesClient
= projectClient.OpenAI.GetProjectResponsesClientForAgent(
new AgentReference { Name = agentName });
await foreach (var update in responsesClient.CreateResponseStreamingAsync(
"Explain how agents work in one paragraph."))
{
Console.Write(update.Text);
}
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);
}
}
Note
La diffusion en continu n’est pas encore prise en charge dans le Kit de développement logiciel (SDK) Java. Consultez les notes de publication d’azure-ai-agents pour connaître les mises à jour.
// Streaming is not yet supported in the Java SDK.
// Use a synchronous response call instead.
import com.azure.ai.agents.*;
import com.azure.ai.agents.models.AgentReference;
import com.azure.identity.DefaultAzureCredentialBuilder;
String projectEndpoint = "your_project_endpoint";
String agentName = "your_agent_name";
ResponsesClient responsesClient = new AgentsClientBuilder()
.credential(new DefaultAzureCredentialBuilder().build())
.endpoint(projectEndpoint)
.buildResponsesClient();
AgentReference agentRef = new AgentReference(agentName);
Response response = responsesClient.createWithAgent(
agentRef,
ResponseCreateParams.builder()
.input("Explain how agents work in one paragraph."));
System.out.println(response.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"
# 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"
}
}'
Pour plus d’informations sur les modes de réponse et sur la façon de consommer des sorties, consultez l’API Réponses.
Exécuter un agent en mode arrière-plan
Le mode d’arrière-plan exécute l’agent de manière asynchrone, ce qui est utile pour les tâches longues telles que le raisonnement complexe ou la génération d’images. Définissez background sur true, puis vérifiez l’état de la réponse jusqu’à ce que l’opération soit terminée.
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.Projects.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
ResponsesClient responsesClient
= projectClient.OpenAI.GetProjectResponsesClientForAgent(
new AgentReference { Name = agentName });
ResponseResult response = await responsesClient.CreateResponseAsync(
"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);
Note
Le mode en arrière-plan avec interrogation n’est pas encore entièrement pris en charge dans le Kit de développement logiciel (SDK) Java. Consultez les notes de publication d’azure-ai-agents pour connaître les mises à jour.
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'
Attacher de la mémoire à un agent (version préliminaire)
La mémoire permet aux agents de conserver des informations entre les sessions, afin qu’ils puissent personnaliser les réponses et rappeler les préférences utilisateur au fil du temps. Sans mémoire, chaque conversation commence à partir de zéro.
Le service Agent Foundry fournit une solution de mémoire gérée (aperçu) que vous configurez via des magasins de mémoire. Un magasin de mémoire définit les types d’informations que l’agent doit conserver. Attachez un magasin de mémoire à votre agent et l’agent utilise des mémoires stockées comme contexte supplémentaire pendant la génération de réponse.
L’exemple suivant crée un magasin de mémoire et l’attache à un agent.
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
}
}
}'
Pour plus d’informations conceptuelles, consultez Memory in Foundry Agent Service. Pour obtenir des instructions complètes sur l’implémentation, consultez Créer et utiliser la mémoire.
Gestion de la sécurité et des données
Étant donné que les conversations et les réponses peuvent conserver le contenu et les sorties d’outils fournis par l’utilisateur, traitez les données d’exécution comme les données d’application :
-
Évitez de stocker des secrets dans les invites ou l’historique des conversations. Utilisez plutôt des connexions et des magasins de secrets managés (par exemple, Configurez une connexion Key Vault).
-
Utilisez le privilège minimum pour l'accès à l'outil. Lorsqu’un outil accède à des systèmes externes, l’agent peut potentiellement lire ou envoyer des données via cet outil.
-
Soyez prudent avec les services non-Microsoft. Si votre agent appelle des outils soutenus par des services non-Microsoft, certaines données peuvent être transmises à ces services. Pour connaître les considérations connexes, consultez Découvrir les outils dans les outils Foundry.
Limites et contraintes
Les limites peuvent dépendre du modèle, de la région et des outils que vous attachez (par exemple, la disponibilité en streaming et la prise en charge des outils). Pour connaître la disponibilité et les contraintes actuelles des réponses, consultez l’API Réponses.
Contenu connexe