개요
이 문서에서는 다음 내용을 다룹니다:
- 중요한 목표를 명확하게 정의하고 복잡한 작업을 관리 가능한 하위 작업으로 세분화하세요.
- 구조화된 출력으로 더욱 안정적이고 기계가 읽을 수 있는 응답을 얻으세요.
- 동적 작업과 예기치 않은 입력에 이벤트 중심 접근 방식을 적용하세요.
학습 목표
이 도움말을 완료하면 다음 사항에 대해 이해할 수 있습니다:
- AI 에이전트가 달성해야 할 목표를 명확하게 파악할 수 있도록 중요한 목표를 식별하고 설정하세요.
- 복잡한 작업을 관리하기 쉬운 하위 작업으로 나누고 논리적인 순서로 정리하세요.
- 상담원에게 적절한 도구(예: 검색 도구 또는 데이터 분석 도구)를 제공하고, 언제 어떻게 사용할지 결정하고, 예상치 못한 상황이 발생하면 이를 처리하세요.
- 하위 작업 결과를 평가하고, 성과를 측정하고, 작업을 반복하여 최종 결과물을 개선하세요.
전체 목표의 정의 및 작업의 분류

대부분의 실제 작업은 너무 복잡해서 한 번에 완료할 수 없으며, AI 에이전트는 계획과 행동을 안내할 수 있는 간결한 목표가 필요합니다. 예를 들어 다음 목표를 생각해 보세요:
“生成一个 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。除了规划之外,编排器还采用跟踪机制来监控任务的进度并根据需要重新规划。
© 저작권 정책
文章版权归 AI 공유 서클 所有,未经允许请勿转载。
관련 문서
댓글 없음...