设置agent名称
python
agent = create_agent(
model=model,
name = "chat_assistant"
)
| 作用 | 说明 |
|---|---|
| 流式输出归因 | 流式输出时,可判断当前 token/事件来自哪个 Agent。 |
| 消息身份标记 | 生成的 AIMessage 会带上 name,便于会话记录、审计和回放。 |
| 调试与 trace 可读性 | 日志和链路追踪中能快速识别当前执行的是哪个 Agent。 |
| 组件化封装 | Agent 作为可复用模块时,name 能保持统一身份,方便注册、监控和迁移。 |
| 前端展示 | 可视化界面可直接用 name 展示"当前活跃 Agent""本轮输出来源"。 |
| 稳定运行时 ID | 相比临时展示名,name 更适合用于日志检索、监控统计和跨模块协作。 |
系统提示词
使用 create_agent 创建 Agent 时,需传入模型和工具、可选地传入系统提示词。提示词为Agent 提供了任务背景、行为准则和操作指南。
系统指令,即SystemMessage,通过 system_prompt 设置,定义 Agent 行为。这个参数可以是str或者SystemMessage类型。
使用建议:
-
明确说明 Agent 的角色
-
定义输出格式
-
说明何时使用工具
agent的结构化输出
python
# 2.Pydantic结构化方式定义
class ContactInfo(BaseModel):
"""用户的联系方式"""
name: str = Field(description="用户姓名")
email: str = Field(description="用户邮箱地址")
phone: str = Field(description="用户的手机号")
# 3.agent初始化
agent = create_agent(
model=model,
response_format=ProviderStrategy(ContactInfo)
)
agent的流式输出
invoke() 是"一次性等完整结果",用户要等很久才能看到输出。流式输出用 agent.stream() 替代 invoke(),让 Agent 在执行过程中渐进式地把中间结果吐出来,实现"打字机效果"或"步骤可视化",大幅降低等待焦虑。
python
# 非流式(一次性返回)
result = agent.invoke({"messages": [...]})
# 流式(逐步返回)
for chunk in agent.stream({"messages": [...]}, stream_mode="updates"):
print(chunk)
关键在于 stream_mode 参数,指定"流出来的是什么"。
7 种输出模式
| 模式 | 输出内容 | 适用场景 |
|---|---|---|
| updates(默认) | 每步增量变化的部分 | 观察 Agent 思考/调工具/拿结果的执行进度 |
| values | 每步执行后的完整状态 | 需要每步都拿到全量状态、做状态持久化 |
| messages | 流式返回的 token + 元数据 | 聊天机器人"打字机效果",最佳交互体验 |
| tasks | 任务开始/结束时间 + 结果/错误 | 监控任务生命周期 |
| debug | 比 tasks 更详细(含步骤、时间戳、类型) | 调试、链路追踪 |
| checkpoints | 每次检查点创建时输出状态 | 状态持久化、工作流恢复、分布式跟踪 |
| custom | 开发者用 get_stream_writer() 自定义输出 |
业务进度(如"已处理 10/100 条")、自定义日志 |
模式也可以组合
python
for stream_mode, chunk in agent.stream(
{"messages": [...]},
stream_mode=["tasks", "updates"] # 同时监听两种
):
print(f"模式: {stream_mode}, 数据: {chunk}")