Вводный курс Microsoft AI Agent: планирование и проектирование
краткое содержание
В этой статье мы расскажем о следующем:
- Определите четкие всеобъемлющие цели и разбейте сложные задачи на управляемые подзадачи.
- Получайте более надежные и машиночитаемые ответы со структурированными результатами.
- Применяйте событийно-ориентированный подход к динамичным задачам и неожиданным поступлениям.
цель обучения
После прочтения этой статьи вы будете иметь представление о следующем:
- Определите и установите общие цели для агента ИИ, чтобы он имел четкое представление о том, чего нужно достичь.
- Разбейте сложные задачи на управляемые подзадачи и организуйте их в логическую последовательность.
- Оснастите агента необходимыми инструментами (например, средствами поиска или анализа данных), решите, когда и как их использовать, и решайте непредвиденные ситуации по мере их возникновения.
- Оценивайте результаты выполнения подзадач, измеряйте производительность и повторяйте операции, чтобы улучшить конечный результат.
Определение общих целей и разбивка задач

Большинство реальных задач слишком сложны, чтобы их можно было решить за один шаг. Агенту искусственного интеллекта нужна четкая цель, чтобы направлять его планирование и действия. Например, рассмотрим следующую задачу:
“生成一个 3 天的旅行行程。”
Несмотря на простоту формулировки, она все же нуждается в доработке. Чем четче сформулирована цель, тем лучше агент (и все его сотрудники) могут сосредоточиться на достижении нужного результата, например на создании комплексного маршрута с вариантами перелета, рекомендациями отелей и предложениями по активному отдыху.
Разбивка задач
Большие или сложные задачи становятся более управляемыми, если разбить их на более мелкие, ориентированные на достижение цели подзадачи. В примере с маршрутом путешествия цель можно разбить на:
- Бронирование авиабилетов
- Бронирование отелей
- прокат автомобилей
- персонализированный
Каждая подзадача может выполняться отдельным агентом или процессом. Один агент может специализироваться на поиске лучших предложений по перелетам, другой - на бронировании отелей и так далее. Затем агент-координатор или "нисходящий" агент может скомпоновать эти результаты в целостный маршрут, который будет представлен конечному пользователю.
Такой модульный подход также позволяет вносить дополнительные усовершенствования. Например, можно добавить специализированных агентов, которые будут давать рекомендации по питанию или предлагать местные развлечения и со временем уточнять маршрут.
Структурированный вывод
Большие языковые модели (LLM) могут генерировать структурированный вывод (например, JSON), что облегчает разбор и обработку последующими агентами или сервисами. Это особенно полезно в многоагентных средах, где мы можем выполнять эти задачи после получения результатов планирования. См. здесьЗаписи в блогедля быстрого обзора.
Следующий фрагмент кода на Python демонстрирует простой агент планирования, который разбивает цели на подзадачи и генерирует структурированный план:
Агент планирования с многоагентной оркестровкой
В этом примере агент семантической маршрутизации получает запрос пользователя (например, "Мне нужен план отеля для моей поездки"). .
Затем - планировщик:
- Получение плана отеля: Планировщик получает сообщения от пользователя и генерирует структурированный план поездки на основе подсказок системы, включая подробную информацию о доступных Агентах.
- Список агентов и их инструментов: Реестр агентов содержит список агентов (например, по перелетам, гостиницам, прокату автомобилей и мероприятиям) и предоставляемые ими функции или инструменты.
- Направьте план соответствующему агенту: в зависимости от количества подзадач планировщик либо отправляет сообщение непосредственно выделенному агенту (для сценариев с одной задачей), либо координирует его через менеджер группового чата для совместной работы нескольких агентов.
- Подведение итогов: Наконец, планировщик обобщает сгенерированный план для наглядности. Следующий пример кода на языке Python иллюстрирует эти шаги:
from pydantic import BaseModel
from enum import Enum
from typing import List, Optional, Union
class AgentEnum(str, Enum):
FlightBooking = "flight_booking"
HotelBooking = "hotel_booking"
CarRental = "car_rental"
ActivitiesBooking = "activities_booking"
DestinationInfo = "destination_info"
DefaultAgent = "default_agent"
GroupChatManager = "group_chat_manager"
# Travel SubTask Model
class TravelSubTask(BaseModel):
task_details: str
assigned_agent: AgentEnum # we want to assign the task to the agent
class TravelPlan(BaseModel):
main_task: str
subtasks: List[TravelSubTask]
is_greeting: bool
import json
import os
from typing import Optional
from autogen_core.models import UserMessage, SystemMessage, AssistantMessage
from autogen_ext.models.openai import AzureOpenAIChatCompletionClient
# Create the client with type-checked environment variables
client = AzureOpenAIChatCompletionClient(
azure_deployment=os.getenv("AZURE_OPENAI_DEPLOYMENT_NAME"),
model=os.getenv("AZURE_OPENAI_DEPLOYMENT_NAME"),
api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"),
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
)
from pprint import pprint
# Define the user message
messages = [
SystemMessage(content="""你是一个规划 Agent。
你的工作是根据用户的请求决定运行哪些 Agent。
以下是专门负责不同任务的可用 Agent:
- FlightBooking: 用于预订航班和提供航班信息
- HotelBooking: 用于预订酒店和提供酒店信息
- CarRental: 用于预订汽车和提供汽车租赁信息
- ActivitiesBooking: 用于预订活动和提供活动信息
- DestinationInfo: 用于提供有关目的地的信息
- DefaultAgent: 用于处理一般请求""", source="system"),
UserMessage(content="为一个有两个孩子的家庭创建一个从新加坡到墨尔本的旅行计划", source="user"),
]
response = await client.create(messages=messages, extra_create_args={"response_format": TravelPlan})
# Ensure the response content is a valid JSON string before loading it
response_content: Optional[str] = response.content if isinstance(response.content, str) else None
if response_content is None:
raise ValueError("Response content is not a valid JSON string")
# Print the response content after loading it as JSON
pprint(json.loads(response_content))
Ниже приведен вывод предыдущего кода, и этот структурированный вывод может быть использован для маршрутизации в assigned_agent
и обобщить планы поездок для конечного пользователя.
{
"is_greeting": "False",
"main_task": "Plan a family trip from Singapore to Melbourne.",
"subtasks": [
{
"assigned_agent": "flight_booking",
"task_details": "Book round-trip flights from Singapore to Melbourne."
},
{
"assigned_agent": "hotel_booking",
"task_details": "Find family-friendly hotels in Melbourne."
},
{
"assigned_agent": "car_rental",
"task_details": "Arrange a car rental suitable for a family of four in Melbourne."
},
{
"assigned_agent": "activities_booking",
"task_details": "List family-friendly activities in Melbourne."
},
{
"assigned_agent": "destination_info",
"task_details": "Provide information about Melbourne as a travel destination."
}
]
}
Образец блокнота, содержащий предыдущий пример кода, можно найти вздесь (литературный)Найти.
Итеративное планирование
Некоторые задачи требуют итерации или перепланирования, когда результат выполнения одной подзадачи влияет на выполнение следующей. Например, если агент обнаружит неожиданный формат данных при бронировании рейса, ему может потребоваться скорректировать свою стратегию, прежде чем продолжить бронирование отеля.
Кроме того, обратная связь с пользователем (например, пользователь решает, что предпочитает более ранний рейс) может привести к частичному перепланированию. Такой динамичный итерационный подход гарантирует, что окончательное решение будет соответствовать реальным ограничениям и меняющимся предпочтениям пользователей.
Например, пример кода
```python
from autogen_core.models import UserMessage, SystemMessage, AssistantMessage
#.. same as previous code and pass on the user history, current plan
messages = [
SystemMessage(content="""你是一个规划 Agent,负责优化旅行计划。
你的工作是根据用户的请求决定运行哪些 Agent。
以下是专门负责不同任务的可用 Agent:
- FlightBooking: 用于预订航班和提供航班信息
- HotelBooking: 用于预订酒店和提供酒店信息
- CarRental: 用于预订汽车和提供汽车租赁信息
- ActivitiesBooking: 用于预订活动和提供活动信息
- DestinationInfo: 用于提供有关目的地的信息
- DefaultAgent: 用于处理一般请求""", source="system"),
UserMessage(content="为一个有两个孩子的家庭创建一个从新加坡到墨尔本的旅行计划", source="user"),
AssistantMessage(content=f"先前的旅行计划 - {TravelPlan}", source="assistant")
]
# .. re-plan and send the tasks to respective agents
要获得更全面的规划,请查看 Magnetic One [博客文章](https://www.microsoft.com/research/articles/magentic-one-a-generalist-multi-agent-system-for-solving-complex-tasks),了解如何解决复杂任务。
## 总结
[](https://github.com/microsoft/ai-agents-for-beginners/blob/main/07-planning-design/README.md#summary)
在本文中,我们研究了一个示例,说明了如何创建一个规划器,该规划器可以动态选择定义的可用 Agent。规划器的输出分解任务并分配 Agent,以便执行它们。假设 Agent 可以访问执行任务所需的功能/工具。除了 Agent 之外,你还可以包括其他模式,如反思、摘要器和循环聊天以进行进一步定制。
## 其他资源
[](https://github.com/microsoft/ai-agents-for-beginners/blob/main/07-planning-design/README.md#additional-resources)
* AutoGen Magentic One - 一个通用的多 Agent 系统,用于解决复杂的任务,并在多个具有挑战性的 Agent 基准测试中取得了令人印象深刻的结果。参考:[autogen-magentic-one](https://github.com/microsoft/autogen/tree/main/python/packages/autogen-magentic-one)。在此实现中,编排器创建特定于任务的计划并将这些任务委派给可用的 Agent。除了规划之外,编排器还采用跟踪机制来监控任务的进度并根据需要重新规划。
© заявление об авторских правах
Авторское право на статью Круг обмена ИИ Пожалуйста, не воспроизводите без разрешения.
Похожие статьи
Нет комментариев...