Curso de introducción al agente de Microsoft AI: planificación y diseño

breve

En este artículo se tratará lo siguiente:

  • Defina objetivos generales claros y divida las tareas complejas en subtareas manejables.
  • Obtenga respuestas más fiables y legibles por máquina con resultados estructurados.
  • Aplique un enfoque basado en eventos a tareas dinámicas y entradas inesperadas.

 

objetivo de aprendizaje

Después de completar este artículo, usted tendrá una comprensión de lo siguiente:

  • Identifique y establezca objetivos generales para el Agente de IA para asegurarse de que tiene una idea clara de lo que debe conseguir.
  • Divida las tareas complejas en subtareas manejables y organícelas en una secuencia lógica.
  • Equipar al Agente con las herramientas adecuadas (por ejemplo, herramientas de búsqueda o de análisis de datos), decidir cuándo y cómo utilizarlas, y manejar las situaciones inesperadas a medida que surjan.
  • Evalúe los resultados de las subtareas, mida el rendimiento e itere las operaciones para mejorar el resultado final.

 

Definición de objetivos generales y desglose de tareas

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

La mayoría de las tareas del mundo real son demasiado complejas para realizarlas en un solo paso, por lo que el Agente de IA necesita un objetivo conciso que guíe su planificación y sus acciones. Por ejemplo, considere el siguiente objetivo:

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

Aunque el enunciado es sencillo, aún debe mejorarse. Cuanto más claro sea el objetivo, mejor podrá centrarse el Agente (y cualquier colaborador humano) en lograr el resultado adecuado, como crear un itinerario completo con opciones de vuelo, recomendaciones de hoteles y sugerencias de actividades.

Desglose de tareas

Las tareas grandes o complejas resultan más manejables cuando se dividen en subtareas más pequeñas y orientadas al objetivo. En el ejemplo del itinerario de viaje, el objetivo puede dividirse en:

  • Reserva de vuelos
  • Reserva de hotel
  • alquiler de coches
  • personalizado

Cada subtarea puede ser gestionada por un agente o proceso específico. Un agente puede estar especializado en la búsqueda de las mejores ofertas de vuelos, otro en las reservas de hotel, etc. El agente coordinador o "descendente" puede compilar estos resultados en un itinerario coherente que se presentará al usuario final. A continuación, el agente coordinador o "descendente" puede compilar estos resultados en un itinerario coherente que se presenta al usuario final.

Este enfoque modular también permite mejoras graduales. Por ejemplo, pueden añadirse agentes especializados que ofrezcan recomendaciones gastronómicas o sugerencias de actividades locales y perfeccionen el itinerario con el tiempo.

Salida estructurada

Los grandes modelos lingüísticos (LLM) pueden generar resultados estructurados (por ejemplo, JSON), lo que facilita su análisis y procesamiento por parte de los agentes o servicios posteriores. Esto es particularmente útil en entornos multiagente donde podemos realizar estas tareas después de recibir la salida de planificación. Véase aquíEntradas de blogpara una rápida visión general.

El siguiente fragmento de código Python muestra un sencillo Agente de Planificación que descompone los objetivos en subtareas y genera un plan estructurado:

Agente de planificación con orquestación multiagente

En este ejemplo, el agente de enrutamiento semántico recibe una solicitud de usuario (por ejemplo, "Necesito un plan de hotel para mi viaje".) .

Luego, el planificador:

  • Recibir plan de hotel: El planificador recibe mensajes del usuario y genera un plan de viaje estructurado basado en las indicaciones del sistema, incluyendo detalles de los Agentes disponibles.
  • Lista de Agentes y sus herramientas: el Registro de Agentes contiene una lista de Agentes (por ejemplo, de vuelos, hoteles, alquiler de coches y eventos) y las funciones o herramientas que ofrecen.
  • Enrutar el plan al Agente apropiado: Dependiendo del número de subtareas, el planificador envía el mensaje directamente al Agente dedicado (para escenarios de una sola tarea) o lo coordina a través del Gestor de Chat de Grupo para la colaboración multi-Agente.
  • Resumir los resultados: Por último, el planificador resume el plan generado para mayor claridad. El siguiente ejemplo de código Python ilustra estos pasos:
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))

A continuación se muestra la salida del código anterior, y esta salida estructurada se puede utilizar para dirigir a la assigned_agent y resumir los planes de viaje al usuario final.

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

Puede encontrar un cuaderno de muestra que contiene el ejemplo de código anterior en la secciónaquí (literario)Encuentra.

Planificación iterativa

Algunas tareas requieren iteración o replanificación, en las que el resultado de una subtarea afecta a la siguiente. Por ejemplo, si un Agente descubre un formato de datos inesperado al reservar un vuelo, puede que tenga que ajustar su estrategia antes de continuar con la reserva de un hotel.

Además, los comentarios de los usuarios (por ejemplo, un usuario decide que prefiere un vuelo más temprano) pueden desencadenar una replanificación parcial. Este enfoque dinámico e iterativo garantiza que la solución final se ajuste a las limitaciones del mundo real y a las preferencias cambiantes del usuario.

Por ejemplo, el código de ejemplo

```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。除了规划之外,编排器还采用跟踪机制来监控任务的进度并根据需要重新规划。
© declaración de copyright

Artículos relacionados

Sin comentarios

Debe iniciar sesión para participar en los comentarios.
Acceder ahora
ninguno
Sin comentarios...