Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
Функции оркестрации агентов во фреймворке агентов находятся на стадии эксперимента. Они находятся в активной разработке и могут значительно измениться до перехода к стадии предварительной версии или кандидата на выпуск.
В последовательной оркестрации агенты организованы в конвейере. Каждый агент обрабатывает задачу в свою очередь, передавая выходные данные следующему агенту в последовательности. Это идеально подходит для рабочих процессов, в которых каждый шаг строится на основе предыдущего, например проверки документов, конвейеров обработки данных или многоэтапного рассуждения.
Дополнительные сведения о шаблоне, например о том, когда следует использовать шаблон или когда избежать шаблона в рабочей нагрузке, см. в разделе "Последовательная оркестрация".
Распространенные варианты использования
Документ проходит через агент краткого изложения, затем агент перевода и, наконец, агент проверки качества, каждый из которых работает, основываясь на предыдущих результатах.
Цели обучения
- Определение последовательности агентов с специализированной ролью
- Как управлять работой этих агентов так, чтобы каждый из них обрабатывал результаты работы предыдущего.
- Как наблюдать промежуточные выходные данные и собирать окончательный результат
Определение агентов
Агенты — специализированные сущности, обрабатывающие задачи последовательно. Здесь мы определим три агента: аналитик, копирайтер и редактор.
Подсказка
Используется ChatCompletionAgent здесь, но можно использовать любой тип агента.
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Agents;
using Microsoft.SemanticKernel.Agents.Orchestration;
using Microsoft.SemanticKernel.Agents.Orchestration.Sequential;
using Microsoft.SemanticKernel.Agents.Runtime.InProcess;
// Create a kernel with an AI service
Kernel kernel = ...;
ChatCompletionAgent analystAgent = new ChatCompletionAgent {
Name = "Analyst",
Instructions = "You are a marketing analyst. Given a product description, identify:\n- Key features\n- Target audience\n- Unique selling points",
Kernel = kernel,
};
ChatCompletionAgent writerAgent = new ChatCompletionAgent {
Name = "Copywriter",
Instructions = "You are a marketing copywriter. Given a block of text describing features, audience, and USPs, compose a compelling marketing copy (like a newsletter section) that highlights these points. Output should be short (around 150 words), output just the copy as a single text block.",
Kernel = kernel,
};
ChatCompletionAgent editorAgent = new ChatCompletionAgent {
Name = "Editor",
Instructions = "You are an editor. Given the draft copy, correct grammar, improve clarity, ensure consistent tone, give format and make it polished. Output the final improved copy as a single text block.",
Kernel = kernel,
};
Необязательно: Наблюдайте за ответами агента
Вы можете создать обратный вызов для получения ответов агента по мере продвижения последовательности через свойство ResponseCallback.
ChatHistory history = [];
ValueTask responseCallback(ChatMessageContent response)
{
history.Add(response);
return ValueTask.CompletedTask;
}
Настройка последовательной оркестрации
Создайте объект SequentialOrchestration, передав указанных агентов и необязательный обратный вызов ответа.
SequentialOrchestration orchestration = new(analystAgent, writerAgent, editorAgent)
{
ResponseCallback = responseCallback,
};
Запуск среды выполнения
Среда выполнения необходима для управления выполнением агентов. Здесь мы используем InProcessRuntime и запускаем его перед вызовом оркестрации.
InProcessRuntime runtime = new InProcessRuntime();
await runtime.StartAsync();
Вызов оркестрации
Запустите процесс оркестрации с вашей начальной задачей (например, описание продукта). Выходные данные будут передаваться через каждого агента в последовательности.
var result = await orchestration.InvokeAsync(
"An eco-friendly stainless steel water bottle that keeps drinks cold for 24 hours",
runtime);
Сбор результатов
Дождитесь, пока завершится оркестрация, и получите окончательные выходные данные.
string output = await result.GetValueAsync(TimeSpan.FromSeconds(20));
Console.WriteLine($"\n# RESULT: {text}");
Console.WriteLine("\n\nORCHESTRATION HISTORY");
foreach (ChatMessageContent message in history)
{
this.WriteAgentChatMessage(message);
}
Необязательно: Остановите среду выполнения
После завершения обработки остановите среду выполнения, чтобы очистить ресурсы.
await runtime.RunUntilIdleAsync();
Образец вывода
# RESULT: Introducing our Eco-Friendly Stainless Steel Water Bottles – the perfect companion for those who care about the planet while staying hydrated! Our bottles ...
ORCHESTRATION HISTORY
# Assistant - Analyst: **Key Features:**
- Made from eco-friendly stainless steel
- Insulation technology that maintains cold temperatures for up to 24 hours
- Reusable and sustainable design
- Various sizes and colors available (assumed based on typical offerings)
- Leak-proof cap
- BPA-free ...
# Assistant - copywriter: Introducing our Eco-Friendly Stainless ...
# Assistant - editor: Introducing our Eco-Friendly Stainless Steel Water Bottles – the perfect companion for those who care about the planet while staying hydrated! Our bottles ...
Подсказка
Полный пример кода доступен здесь
Определение агентов
Каждый агент в последовательности несет определенную ответственность. В этом примере у нас есть:
- ConceptExtractorAgent: извлекает ключевые функции, целевую аудиторию и уникальные точки продажи из описания продукта.
- WriterAgent: создает маркетинговую копию на основе извлеченных сведений.
- FormatProofAgent: редактирует и полирует черновик для ясности и согласованности.
Подсказка
Здесь ChatCompletionAgent используется Azure OpenAI, однако вы можете использовать любой тип агента или службу модели.
from semantic_kernel.agents import Agent, ChatCompletionAgent
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
def get_agents() -> list[Agent]:
concept_extractor_agent = ChatCompletionAgent(
name="ConceptExtractorAgent",
instructions=(
"You are a marketing analyst. Given a product description, identify:\n"
"- Key features\n"
"- Target audience\n"
"- Unique selling points\n\n"
),
service=AzureChatCompletion(),
)
writer_agent = ChatCompletionAgent(
name="WriterAgent",
instructions=(
"You are a marketing copywriter. Given a block of text describing features, audience, and USPs, "
"compose a compelling marketing copy (like a newsletter section) that highlights these points. "
"Output should be short (around 150 words), output just the copy as a single text block."
),
service=AzureChatCompletion(),
)
format_proof_agent = ChatCompletionAgent(
name="FormatProofAgent",
instructions=(
"You are an editor. Given the draft copy, correct grammar, improve clarity, ensure consistent tone, "
"give format and make it polished. Output the final improved copy as a single text block."
),
service=AzureChatCompletion(),
)
return [concept_extractor_agent, writer_agent, format_proof_agent]
Необязательно: Наблюдайте за ответами агента
Вы можете определить обратный вызов для наблюдения и печати выходных данных каждого агента по мере выполнения последовательности.
from semantic_kernel.contents import ChatMessageContent
def agent_response_callback(message: ChatMessageContent) -> None:
print(f"# {message.name}\n{message.content}")
Настройка последовательной оркестрации
Передавайте объект SequentialOrchestration, передавая данных агентов и при необходимости функцию обратного вызова.
from semantic_kernel.agents import SequentialOrchestration
agents = get_agents()
sequential_orchestration = SequentialOrchestration(
members=agents,
agent_response_callback=agent_response_callback,
)
Запуск среды выполнения
Запустите выполнение для управления работой агента.
from semantic_kernel.agents.runtime import InProcessRuntime
runtime = InProcessRuntime()
runtime.start()
Вызов оркестрации
Запустите процесс оркестрации с вашей начальной задачей (например, описание продукта). Выходные данные будут передаваться через каждого агента в последовательности.
orchestration_result = await sequential_orchestration.invoke(
task="An eco-friendly stainless steel water bottle that keeps drinks cold for 24 hours",
runtime=runtime,
)
Сбор результатов
Дождитесь завершения оркестрации.
value = await orchestration_result.get(timeout=20)
print(f"***** Final Result *****\n{value}")
Необязательно: Остановите среду выполнения
После завершения обработки остановите среду выполнения, чтобы очистить ресурсы.
await runtime.stop_when_idle()
Образец вывода
# ConceptExtractorAgent
- Key Features:
- Made of eco-friendly stainless steel
- Keeps drinks cold for 24 hours
...
# WriterAgent
Keep your beverages refreshingly chilled all day long with our eco-friendly stainless steel bottles...
# FormatProofAgent
Keep your beverages refreshingly chilled all day long with our eco-friendly stainless steel bottles...
***** Final Result *****
Keep your beverages refreshingly chilled all day long with our eco-friendly stainless steel bottles...
Подсказка
Полный пример кода доступен здесь.
Замечание
Оркестрация агентов пока недоступна в пакете SDK для Java.