Skip to content

Agents介绍

Agents 是你应用程序中的核心构建模块。简单来说,一个 agent 就是一个配置了特定指令和工具的大语言模型(LLM)。

基础配置

配置 agent 时,你最常用到的属性有:

  • instructions:也就是开发者消息或系统提示词
  • model:选择使用哪个 LLM,以及可选的 model_settings 来调整模型参数,比如 temperature、top_p 等
  • tools:赋予 agent 完成任务所需的工具
from agents import Agent, ModelSettings, function_tool

def get_weather(city: str) -> str:
    return f"{city}的天气是晴朗的"

agent = Agent(
    name="俳句助手",
    instructions="请用俳句形式回答",
    model="o3-mini",
    tools=[function_tool(get_weather)],
)

Context(上下文)

Agents 的 context 类型是通用的。Context 其实是一个依赖注入工具:你创建一个对象并传递给 Runner.run(),这个对象会被传递给每个 agent、tool 和 handoff 等。它就像一个百宝袋,存放着 agent 运行时需要的依赖和状态。你可以使用任何 Python 对象作为 context。

@dataclass
class UserContext:
  uid: str
  is_pro_user: bool

  async def fetch_purchases() -> list[Purchase]:
     return ...

agent = Agent[UserContext](
    ...,
)

输出类型

默认情况下,agents 输出纯文本(也就是 str 类型)。如果你想要 agent 输出特定类型的数据,可以使用 output_type 参数。最常见的做法是使用 Pydantic 对象,不过我们支持任何可以用 Pydantic TypeAdapter 包装的类型 - 比如 dataclasses、lists、TypedDict 等。

from pydantic import BaseModel
from agents import Agent


class CalendarEvent(BaseModel):
    name: str
    date: str
    participants: list[str]

agent = Agent(
    name="日历提取器",
    instructions="从文本中提取日历事件",
    output_type=CalendarEvent,
)

Note

当你设置 output_type 时,模型就会使用 structured outputs 而不是普通的文本响应。

Handoffs(任务转交)

Handoffs 是 agent 可以委派任务给的子 agent。你可以提供一个 handoffs 列表,agent 可以根据需要选择将任务委派给合适的子 agent。这是一个强大的模式,让你可以编排模块化的、专门的 agents,每个 agent 都专注于擅长的单一任务。想了解更多,可以查看 handoffs 文档。

from agents import Agent

booking_agent = Agent(...)
refund_agent = Agent(...)

triage_agent = Agent(
    name="分诊助手",
    instructions=(
        "帮助用户解答问题。"
        "如果他们询问预订相关问题,转交给预订助手。"
        "如果他们询问退款相关问题,转交给退款助手。"
    ),
    handoffs=[booking_agent, refund_agent],
)

动态指令

大多数情况下,你可以在创建 agent 时提供固定的指令。不过,你也可以通过函数提供动态指令。这个函数会接收 agent 和 context 作为参数,并返回提示词。普通函数和 async 函数都可以使用。

def dynamic_instructions(
    context: RunContextWrapper[UserContext], agent: Agent[UserContext]
) -> str:
    return f"用户名是 {context.context.name}。请帮助解答他们的问题。"


agent = Agent[UserContext](
    name="分诊助手",
    instructions=dynamic_instructions,
)

生命周期事件(Hooks)

有时候,你可能想要观察 agent 的生命周期。比如,你可能想要记录事件,或在某些事件发生时预先获取数据。你可以通过 hooks 属性来监听 agent 的生命周期。只需继承 AgentHooks 类,然后重写你感兴趣的方法即可。

Guardrails(防护栏)

Guardrails 允许你在 agent 运行的同时,对用户输入进行检查和验证。比如,你可以筛查用户输入是否相关。更多详情请查看 guardrails 文档。

克隆/复制 Agents

通过使用 agent 的 clone() 方法,你可以复制一个 Agent,还可以选择性地修改任何属性。

pirate_agent = Agent(
    name="海盗助手",
    instructions="用海盗的语气说话",
    model="o3-mini",
)

robot_agent = pirate_agent.clone(
    name="机器人助手",
    instructions="用机器人的语气说话",
)