AIパーソナル・ラーニング
と実践的なガイダンス
讯飞绘镜

マイクロソフトAIエージェント入門コース:プランニングとデザイン

簡単

この記事では以下のことを取り上げる:

  • 明確な包括的目標を定め、複雑なタスクを管理可能なサブタスクに分解する。
  • 構造化された出力で、より信頼性の高い、機械可読の応答を得る。
  • ダイナミックなタスクや予期せぬ入力に対して、イベント駆動型のアプローチを適用する。

 

学習目標

この記事を読み終えた後、あなたは以下のことを理解するだろう:

  • AIエージェントが達成すべきことを明確に把握できるよう、包括的な目標を特定し、設定する。
  • 複雑なタスクを管理可能なサブタスクに分解し、論理的な順序に整理する。
  • エージェントに適切なツール(検索ツールやデータ分析ツールなど)を装備させ、いつ、どのように使用するかを決定し、不測の事態が発生した場合に対処する。
  • サブタスクの結果を評価し、パフォーマンスを測定し、操作を繰り返して最終的なアウトプットを改善する。

 

全体目標の定義とタスクの内訳

微软 AI Agent 入门课程:规划设计-1

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シェアリングサークル " マイクロソフトAIエージェント入門コース:プランニングとデザイン
ja日本語