Служба Microsoft Foundry Agent использует три основных компонента среды выполнения — агенты, беседы и ответы — для управления сохранением состояния и многоэтапными взаимодействиями. Агент определяет модель, инструкции и средства для использования. Беседа сохраняет историю в разных поворотах. Ответ — это выходные данные, которые агент создает при обработке входных данных.
В этой статье рассматриваются все компоненты и показано, как использовать их вместе в коде. Вы узнаете, как создать агента, запустить разговор, создать ответы (с агентом или без него), добавить последующие сообщения и потоковые результаты с примерами в Python, C#, JavaScript, Java и REST API.
Совместная работа компонентов среды выполнения
При работе с агентом следует следовать согласованному шаблону:
-
Создайте агент: определите агент для начала отправки сообщений и получения ответов.
-
Создайте беседу (необязательно): используйте беседу для поддержания истории в разных обменах. Если вы не ведёте беседу, сохраняйте контекст, используя выходные данные из предыдущего ответа.
-
Создайте ответ: агент обрабатывает входные элементы в беседе и все инструкции, предоставленные в запросе. Агент может добавлять элементы в беседу.
-
Проверьте состояние ответа: отслеживайте ответ, пока он не завершится (особенно в режиме потоковой передачи или фонового режима).
-
Получение ответа: отображение созданного ответа пользователю.
На следующей схеме показано, как эти компоненты взаимодействуют в типичном цикле агента.
Вы предоставляете входные данные пользователя (и при необходимости журнал бесед), служба создает ответ (включая вызовы инструментов при настройке), а результирующий элемент можно повторно использовать в качестве контекста для следующего шага.
Предпосылки
Чтобы выполнить примеры в этой статье, вам потребуется:
pip install "azure-ai-projects>=2.0.0"
pip install azure-identity
dotnet add package Azure.AI.Projects
dotnet add package Azure.AI.Projects.Agents
dotnet add package Azure.AI.Extensions.OpenAI
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</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.15.4</version>
</dependency>
Установка пакета SDK не требуется. Используйте Azure CLI для получения токена доступа.
az login
Создание агента
Агент — это устойчивое определение оркестрации, которое объединяет модели ИИ, инструкции, код, инструменты, параметры и необязательные элементы управления безопасностью или руководящие элементы.
Храните агентов как именованные активы с версиями в Microsoft Foundry. Во время создания ответа определение агента работает с журналом взаимодействия (беседой или предыдущим ответом) для обработки и реагирования на входные данные пользователя.
В следующем примере создается агент запроса с именем, моделью и инструкциями. Используйте клиент проекта для создания и управления версиями агента.
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 DeclarativeAgentDefinition("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."
}
}'
Замечание
Теперь агенты определяются с помощью имени агента и версии агента. У них больше нет GUID с именем AgentID.
Дополнительные типы агентов (рабочий процесс, размещение) см. в разделе жизненного цикла разработки агента.
Средства расширяют возможности агента за пределами создания текста. При присоединении средств к агенту агент может вызывать внешние службы, выполнять код, файлы поиска и получать доступ к источникам данных во время создания ответов с помощью таких средств, как веб-поиск или вызов функций.
При создании агента можно подключить один или несколько инструментов. Во время создания ответа агент решает, следует ли вызывать средство на основе входных данных пользователя и его инструкций. В следующем примере создается агент с подключенным средством поиска в Интернете.
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 DeclarativeAgentDefinition("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" }]
}
}'
Полный список доступных средств см. в обзоре инструментов. Лучшие практики см. в разделе Лучшие практики использования инструментов.
Создание ответов
Генерация ответа инициирует обращение к агенту. Агент использует свою конфигурацию и любой предоставленный журнал (беседу или предыдущий ответ) для выполнения задач путем вызова моделей и инструментов. В рамках создания ответов агент добавляет элементы в беседу.
Вы также можете создать ответ без определения агента. В этом случае вы предоставляете все конфигурации непосредственно в запросе и используете их только для этого ответа. Этот подход полезен для простых сценариев с минимальными инструментами.
Кроме того, можно разветвить диалог с помощью идентификатора первого ответа или второго ответа.
Создание ответа с помощью агента
В следующем примере сначала создается ответ с использованием ссылки на агент, а затем отправляется следующий вопрос, используя предыдущий ответ в качестве контекста.
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.ProjectOpenAIClient.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"
}
}'
Когда агент использует средства во время создания ответа, выходные данные ответа содержат элементы вызова средства вместе с окончательным сообщением. Вы можете выполнить итерацию response.output для проверки каждого элемента и вызовов инструментов отображения, таких как веб-поиск, вызовы функций или поиски файлов перед печатью текстового ответа.
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.ProjectOpenAIClient.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'
Создание ответа без хранения
По умолчанию служба хранит историю ответов на сервере, чтобы можно было ссылаться previous_response_id на контекст нескольких взаимодействий. Если задано значение storefalse, служба не сохраняет ответ. Вы должны самостоятельно продолжить контекст беседы, передавая предыдущие выходные данные в качестве входных для следующего запроса.
Этот подход полезен, если требуется полный контроль над состоянием беседы, требуется свести к минимуму сохраненные данные или работать в среде хранения без данных.
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.ProjectOpenAIClient.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"
}
}'
Беседы и элементы беседы
Беседы — это устойчивые объекты с уникальными идентификаторами. После создания их можно повторно использовать в сеансах.
Беседы хранят элементы, которые могут включать сообщения, вызовы инструментов, выходные данные и другие данные.
Создание беседы
В следующем примере создается беседа с начальным сообщением пользователя. Используйте клиент OpenAI (полученный от клиента проекта) для бесед и ответов.
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.ProjectOpenAIClient.GetProjectConversationsClient().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?"
}
]
}'
Когда следует использовать беседу
Используйте беседу при желании:
-
Непрерывность нескольких поворотов: сохраняйте стабильную историю в разных поворотах без перестроения контекста самостоятельно.
-
Непрерывность межсеансовых данных: Повторное использование одного и того же диалога для пользователя, возвращающегося позже.
-
Упрощенная отладка: проверьте, что произошло с течением времени (например, вызовы инструментов и выходные данные).
Когда беседа используется для создания ответа (с агентом или без нее), полная беседа предоставляется в качестве входных данных модели. Затем созданный ответ добавляется в ту же беседу.
Замечание
Если диалог превышает поддерживаемый размер контекста модели, модель автоматически усечёт входной контекст. Сама беседа не усечена, но для формирования ответа используется только подмножество её содержания.
Если вы не создаете беседу, можно всё равно создавать многоэтапные потоки, используя выходные данные из предыдущего ответа в качестве отправной точки для следующего запроса. Этот подход обеспечивает большую гибкость, чем старый шаблон на основе потоков, где состояние было тесно связано с объектами потоков. Инструкции по миграции см. в разделе "Миграция в пакет SDK для агентов".
Типы элементов беседы
Беседы хранят элементы , а не только сообщения чата. Элементы фиксируют произошедшее во время создания ответов, чтобы следующий ход мог повторно использовать этот контекст.
Распространенные типы элементов включают:
-
Элементы сообщения: сообщения пользователя или помощника.
-
Элементы вызова инструмента: записи вызовов инструментов, которые агент пытался выполнить.
-
Выходные элементы средства: выходные данные, возвращаемые инструментами (например, результаты извлечения).
-
Выходные элементы: содержимое ответа, отображаемое пользователю.
Добавление элементов в беседу
После создания беседы используйте conversations.items.create() для добавления последующих сообщений пользователей или других элементов.
# 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?"
}
]
}'
Использование беседы с агентом
Объедините диалог с ссылкой на агента для сохранения истории в нескольких итерациях. Агент обрабатывает все элементы беседы и добавляет выходные данные автоматически.
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.ProjectOpenAIClient.GetProjectConversationsClient().CreateProjectConversationAsync();
// First turn
ProjectResponsesClient responsesClient
= projectClient.ProjectOpenAIClient.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"
}
}'
Примеры, показывающие, как беседы и ответы работают вместе в коде, см. в статье "Создание и использование памяти в службе агента Foundry".
Потоковая трансляция и фоновые отклики
Для длительных операций можно возвращать результаты постепенно с помощью streaming или полностью асинхронно использовать background режим. В таких случаях вы обычно отслеживаете ответ, пока он не завершится, а затем потребляют конечные выходные элементы.
Потоковая передача ответа
Потоковая передача возвращает частичные результаты по мере их генерации. Этот подход полезен для отображения выходных данных пользователям в режиме реального времени.
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.ProjectOpenAIClient.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"
}
}'
Дополнительные сведения о режимах отклика и использовании выходных данных см. в API ответов.
Запуск агента в фоновом режиме
Фоновый режим выполняет агент асинхронно, что полезно для длительной задачи, такой как сложное умозаключение или генерация изображений. Установите background в true, а затем проверьте состояние ответа, пока оно не завершится.
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.ProjectOpenAIClient.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'
Подключение памяти к агенту (предварительная версия)
Память дает агентам возможность сохранять информацию в сеансах, чтобы они могли персонализировать ответы и отзывать предпочтения пользователей с течением времени. Без памяти каждая беседа начинается с нуля.
Служба агента Foundry предоставляет решение управляемой памяти (предварительная версия), которое вы настраиваете с помощью хранилищ памяти. Хранилище памяти определяет, какие типы сведений, которые должен хранить агент. Подключите хранилище памяти к агенту, а агент использует сохраненные воспоминания в качестве дополнительного контекста во время создания ответа.
В следующем примере создается хранилище памяти и подключается к агенту.
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
}
}
}'
Для получения концептуальных деталей см. "Memory in Foundry Agent Service". Полные рекомендации по реализации см. в разделе "Создание и использование памяти".
Безопасность и обработка данных
Так как беседы и ответы могут сохранять предоставленные пользователем содержимое и выходные данные инструментов, обрабатывают данные среды выполнения, такие как данные приложения:
-
Избегайте хранения секретов в запросах или журнале бесед. Используйте подключения и управляемые хранилища секретов (например, Настройте подключение к Key Vault).
-
Используйте минимальные привилегии для доступа к инструментам. Когда средство обращается к внешним системам, агент может потенциально считывать или отправлять данные через это средство.
-
Будьте осторожны со службами, отличными от Майкрософт. Если агент вызывает средства, поддерживаемые службами, отличными от Майкрософт, некоторые данные могут передаваться в эти службы. Для связанных аспектов см. инструменты в разделе Foundry Tools.
Предельные значения и ограничения
Ограничения могут зависеть от модели, региона и присоединенных средств (например, поддержки потоковой передачи и поддержки инструментов). Сведения о текущей доступности и ограничениях для ответов см. в разделе API ответов.
Связанный контент