Aprendizagem pessoal com IA
e orientação prática
讯飞绘镜

Curso introdutório de agente de IA da Microsoft: planejamento e design

breve

Este artigo abordará o seguinte:

  • Defina metas abrangentes claras e divida tarefas complexas em subtarefas gerenciáveis.
  • Obtenha respostas mais confiáveis e legíveis por máquina com saídas estruturadas.
  • Aplique uma abordagem orientada por eventos a tarefas dinâmicas e entradas inesperadas.

 

meta de aprendizado

Após concluir este artigo, você terá uma compreensão do seguinte:

  • Identifique e defina metas abrangentes para o agente de IA para garantir que ele tenha uma ideia clara do que precisa ser alcançado.
  • Dividir tarefas complexas em subtarefas gerenciáveis e organizá-las em uma sequência lógica.
  • Equipar o Agente com as ferramentas certas (por exemplo, ferramentas de pesquisa ou ferramentas de análise de dados), decidir quando e como usá-las e lidar com situações inesperadas à medida que elas surgirem.
  • Avaliar os resultados das subtarefas, medir o desempenho e iterar as operações para melhorar o resultado final.

 

Definição dos objetivos gerais e detalhamento das tarefas

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

A maioria das tarefas do mundo real é muito complexa para ser realizada em uma única etapa. O AI Agent precisa de uma meta concisa para orientar seu planejamento e suas ações. Por exemplo, considere o seguinte objetivo:

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

Embora a declaração seja simples, ela ainda precisa ser aprimorada. Quanto mais clara for a meta, melhor o agente (e qualquer colaborador humano) poderá se concentrar em alcançar o resultado certo, como criar um itinerário abrangente com opções de voos, recomendações de hotéis e sugestões de atividades.

Detalhamento das tarefas

Tarefas grandes ou complexas tornam-se mais gerenciáveis quando são divididas em subtarefas menores e orientadas por metas. No exemplo do itinerário de viagem, a meta pode ser dividida em:

  • Reserva de voos
  • Reserva de hotel
  • aluguel de carros
  • personalizado

Cada subtarefa pode então ser tratada por um agente ou processo dedicado. Um agente pode se especializar na busca das melhores ofertas de voos, outro pode se concentrar em reservas de hotéis e assim por diante. O agente coordenador ou agente "downstream" pode compilar esses resultados em um itinerário coeso que é apresentado ao usuário final.


Essa abordagem modular também permite aprimoramentos incrementais. Por exemplo, agentes especializados podem ser adicionados para fornecer recomendações de refeições ou sugestões de atividades locais e refinar o itinerário ao longo do tempo.

Saída estruturada

Os modelos de linguagem grande (LLMs) podem gerar saída estruturada (por exemplo, JSON), o que facilita a análise e o processamento por agentes ou serviços downstream. Isso é particularmente útil em ambientes com vários agentes, onde podemos executar essas tarefas depois de receber a saída do planejamento. Veja aquiPublicações do blogpara obter uma visão geral rápida.

O trecho de código Python a seguir demonstra um Planning Agent simples que divide as metas em subtarefas e gera um plano estruturado:

Agente de planejamento com orquestração multiagente

Neste exemplo, o Semantic Routing Agent recebe uma solicitação do usuário (por exemplo, "I need a hotel plan for my trip."). .

Depois, o planejador:

  • Receber plano de hotel: O planejador recebe mensagens do usuário e gera um plano de viagem estruturado com base em avisos do sistema, incluindo detalhes dos agentes disponíveis.
  • Listar Agentes e suas ferramentas: o Registro de Agentes contém uma lista de Agentes (por exemplo, para voos, hotéis, aluguel de carros e eventos) e os recursos ou ferramentas que eles fornecem.
  • Encaminhar o plano para o Agente apropriado: dependendo do número de subtarefas, o planejador envia a mensagem diretamente para o Agente dedicado (para cenários de tarefa única) ou a coordena por meio do Group Chat Manager para colaboração com vários Agentes.
  • Resumir os resultados: por fim, o planejador resume o plano gerado para maior clareza. O exemplo de código Python a seguir ilustra essas etapas:
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 seguir, a saída do código anterior, e essa saída estruturada pode ser usada para rotear para o assigned_agent e resumir os planos de viagem para o usuário 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."
}
]
}

Um notebook de amostra contendo o exemplo de código anterior pode ser encontrado na pastaaqui (literário)Encontre.

Planejamento iterativo

Algumas tarefas exigem iteração ou replanejamento, em que o resultado de uma subtarefa afeta a próxima. Por exemplo, se um agente descobrir um formato de dados inesperado ao reservar um voo, talvez seja necessário ajustar sua estratégia antes de continuar a reservar um hotel.

Além disso, o feedback do usuário (por exemplo, um usuário decide que prefere um voo mais cedo) pode acionar um replanejamento parcial. Essa abordagem dinâmica e iterativa garante que a solução final esteja alinhada com as restrições do mundo real e com as mudanças nas preferências do usuário.

Por exemplo, o código de amostra

```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。除了规划之外,编排器还采用跟踪机制来监控任务的进度并根据需要重新规划。
Não pode ser reproduzido sem permissão:Chefe do Círculo de Compartilhamento de IA " Curso introdutório de agente de IA da Microsoft: planejamento e design
pt_BRPortuguês do Brasil