AI Personal Learning
und praktische Anleitung
讯飞绘镜

Microsoft AI Agent Einführungskurs: Planung und Design

kurz

Dieser Artikel befasst sich mit den folgenden Punkten:

  • Definieren Sie klare übergreifende Ziele und unterteilen Sie komplexe Aufgaben in überschaubare Teilaufgaben.
  • Erhalten Sie zuverlässigere und maschinenlesbare Antworten mit strukturierten Ausgaben.
  • Anwendung eines ereignisgesteuerten Ansatzes für dynamische Aufgaben und unerwartete Eingaben.

 

Lernziel

Nach der Lektüre dieses Artikels werden Sie die folgenden Punkte verstehen:

  • Identifizieren und setzen Sie übergreifende Ziele für den KI-Agenten, um sicherzustellen, dass er eine klare Vorstellung davon hat, was erreicht werden muss.
  • Zerlegen Sie komplexe Aufgaben in überschaubare Teilaufgaben und organisieren Sie diese in einer logischen Reihenfolge.
  • Rüsten Sie den Agenten mit den richtigen Werkzeugen aus (z. B. Such- oder Datenanalysewerkzeuge), entscheiden Sie, wann und wie sie eingesetzt werden sollen, und gehen Sie mit unerwarteten Situationen um, sobald sie auftreten.
  • Bewerten Sie die Ergebnisse von Teilaufgaben, messen Sie die Leistung, und wiederholen Sie die Vorgänge, um das Endergebnis zu verbessern.

 

Definition der Gesamtziele und Aufteilung der Aufgaben

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

Die meisten Aufgaben in der realen Welt sind zu komplex, um in einem Schritt erledigt zu werden. Betrachten wir zum Beispiel das folgende Ziel:

“生成一个 3 天的旅行行程。”

Die Aussage ist zwar einfach, aber dennoch verbesserungsbedürftig. Je klarer das Ziel ist, desto besser kann sich der Agent (und alle menschlichen Mitarbeiter) auf das richtige Ergebnis konzentrieren, z. B. die Erstellung einer umfassenden Reiseroute mit Flugoptionen, Hotelempfehlungen und Vorschlägen für Aktivitäten.

Aufschlüsselung der Aufgaben

Große oder komplexe Aufgaben werden überschaubarer, wenn sie in kleinere, zielorientierte Teilaufgaben zerlegt werden. Für das Beispiel mit dem Reiseplan kann das Ziel in folgende Aufgaben unterteilt werden:

  • Flug buchen
  • Hotel buchen
  • Autovermietung
  • Personalisierte

Jede Teilaufgabe kann dann von einem speziellen Agenten oder Prozess bearbeitet werden. Ein Agent könnte sich auf die Suche nach den besten Flugangeboten spezialisieren, ein anderer auf die Hotelbuchung und so weiter. Der Coordinating Agent oder "Downstream"-Agent kann diese Ergebnisse dann zu einer zusammenhängenden Reiseroute zusammenstellen, die dem Endbenutzer präsentiert wird.


Dieser modulare Ansatz ermöglicht auch schrittweise Erweiterungen. So können beispielsweise spezialisierte Agenten hinzugefügt werden, die Essensempfehlungen oder Vorschläge für lokale Aktivitäten geben und die Reiseroute im Laufe der Zeit verfeinern.

Strukturierte Ausgabe

Große Sprachmodelle (LLMs) können strukturierte Ausgaben (z. B. JSON) erzeugen, die von nachgelagerten Agenten oder Diensten leichter geparst und verarbeitet werden können. Dies ist besonders in Multi-Agenten-Umgebungen nützlich, wo wir diese Aufgaben nach Erhalt der Planungsausgabe durchführen können. Siehe hierBlog-Beiträgefür einen schnellen Überblick.

Der folgende Python-Codeausschnitt demonstriert einen einfachen Planungsagenten, der Ziele in Teilaufgaben zerlegt und einen strukturierten Plan erstellt:

Planungsagent mit Multi-Agenten-Orchestrierung

In diesem Beispiel erhält der Semantic Routing Agent eine Benutzeranfrage (z. B. "Ich brauche einen Hotelplan für meine Reise."). .

Dann der Planer:

  • Hotelplan empfangen: Der Planer empfängt Nachrichten vom Benutzer und erstellt auf der Grundlage von Systemaufforderungen einen strukturierten Reiseplan, der auch Angaben zu verfügbaren Agenten enthält.
  • Liste der Vermittler und ihrer Tools: Das Vermittlerregister enthält eine Liste der Vermittler (z. B. für Flüge, Hotels, Mietwagen und Veranstaltungen) und der von ihnen angebotenen Funktionen oder Tools.
  • Weiterleitung des Plans an den entsprechenden Agenten: Je nach Anzahl der Teilaufgaben sendet der Planer die Nachricht entweder direkt an den entsprechenden Agenten (für Einzelaufgabenszenarien) oder koordiniert sie über den Gruppen-Chat-Manager für die Zusammenarbeit mehrerer Agenten.
  • Zusammenfassen der Ergebnisse: Abschließend fasst der Planer den generierten Plan zur Übersichtlichkeit zusammen. Das folgende Python-Codebeispiel veranschaulicht diese Schritte:
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))

Es folgt die Ausgabe des vorangegangenen Codes, und diese strukturierte Ausgabe kann dann verwendet werden, um die assigned_agent und fassen die Reisepläne für den Endnutzer zusammen.

{
"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."
}
]
}

Ein Beispiel-Notizbuch, das das vorherige Code-Beispiel enthält, finden Sie in derhier (literarisch)Finden.

Iterative Planung

Einige Aufgaben erfordern Iteration oder Neuplanung, wobei das Ergebnis einer Teilaufgabe die nächste beeinflusst. Stellt ein Agent beispielsweise bei der Buchung eines Fluges ein unerwartetes Datenformat fest, muss er möglicherweise seine Strategie anpassen, bevor er mit der Buchung eines Hotels fortfahren kann.

Außerdem kann das Feedback der Benutzer (z. B. wenn ein Benutzer einen früheren Flug bevorzugt) eine teilweise Neuplanung auslösen. Durch diesen dynamischen, iterativen Ansatz wird sichergestellt, dass die endgültige Lösung mit den realen Einschränkungen und den sich ändernden Nutzerpräferenzen in Einklang gebracht wird.

Zum Beispiel, der Beispielcode

```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。除了规划之外,编排器还采用跟踪机制来监控任务的进度并根据需要重新规划。
Darf nicht ohne Genehmigung vervielfältigt werden:Leiter des AI-Austauschkreises " Microsoft AI Agent Einführungskurs: Planung und Design
de_DEDeutsch