🎯 课程主题
通过 name 和 system_prompt 两个参数配置 Agent 的身份标识与行为约束,为多智能体协作场景奠定基础。
📝 核心知识点
1. 设置 Agent 名称(name 参数)
- 概念说明:在
create_agent()函数中通过name参数(字符串类型)为 Agent 设置名称,该名称会出现在响应消息的 AIMessage 内部字段中。 - 关键细节:
- 主要应用于多智能体场景,用于区分不同 Agent 的身份。
- 在流式输出时,
name可标识输出来源于哪个 Agent。 - 有助于保存会话记录、构建审计日志、前端展示消息角色。
- 在 LangSmith Trace 中,
name有助于定位链路上信息的来源 Agent。 - 即使单 Agent 场景,也可以为组件化封装(检索助手、SQL助手等)提供稳定的运行时标识。
2. 设置系统提示词(system_prompt 参数)
- 概念说明:通过
system_prompt参数为 Agent 提供系统级指令,约束其角色、行为规范和输出格式。 - 关键细节:
- 支持两种形式:直接传入字符串,或传入
SystemMessage对象。 - 系统提示词不会出现在最终的
response.messages中(不论字符串还是 SystemMessage 形式)。 response.messages的起始消息通常是 HumanMessage,不包含 SystemMessage。- 建议内容:明确 Agent 角色(如"你是天气助手")、定义输出格式、说明何时使用工具等。
- 静态设置:直接在
create_agent()中写死;动态设置:通过中间件实现(后续课程讲解)。
- 支持两种形式:直接传入字符串,或传入
🏗️ 架构与工作流
create_agent(model, tools, name="agent01", system_prompt="你是天气助手...")
│
▼
Agent.invoke({"messages": [HumanMessage(...)]})
│
▼
response.messages = [HumanMessage, AIMessage(name="agent01"), ToolMessage, AIMessage]
system_prompt在调用过程中发挥约束作用,但不作为消息出现在返回结果中。name出现在每个 AIMessage 的内部字段中,用于标识消息来源。
💻 代码实战
# ========== 示例1:设置 name ==========
from langchain.agents import create_agent
agent = create_agent(
model=model,
tools=tools,
name="agent01" # 设置Agent名称
)
response = agent.invoke({
"messages": [{"role": "user", "content": "今天北京天气怎么样?"}]
})
# 遍历消息查看name字段
for msg in response["messages"]:
msg.pretty_print()
# AIMessage中会携带 name="agent01"
# ========== 示例2:字符串形式设置 system_prompt ==========
agent = create_agent(
model=model,
tools=[get_weather], # 内置天气查询工具
system_prompt="你是一个天气助手,能够帮助用户查询全球各地的天气情况。"
)
response = agent.invoke({
"messages": [{"role": "user", "content": "北京今天天气如何?"}]
})
print(response)
# system_prompt 不会出现在 response.messages 中
# ========== 示例3:SystemMessage 形式设置 system_prompt ==========
from langchain_core.messages import SystemMessage
agent = create_agent(
model=model,
tools=[add, multiply], # 数学计算工具
system_prompt=SystemMessage(content="你是一个数学助手,解决日常的算术问题。")
)
response = agent.invoke({
"messages": [HumanMessage(content="请计算 10 + 20 + 30 的结果")]
})
# 响应消息从 HumanMessage 开始,不含 SystemMessage
# 会依次调用工具:先算 10+20=30,再算 30+30=60
⚠️ 常见问题与避坑指南
- system_prompt 在
response.messages中不可见:不要期望在响应消息列表中找到系统提示词,它仅在内部生效。 - name 仅在 AIMessage 中出现:HumanMessage 和 ToolMessage 不携带
name字段。 - 多智能体场景务必设置 name:否则难以追踪每条消息的来源 Agent。
- system_prompt 内容要简洁明确:避免过于冗长导致 token 浪费或模型理解偏差。
💡 个人总结与延伸
name和system_prompt虽简单,但在多智能体协作、审计追踪、前端展示等场景中至关重要。- 实际开发中建议为每个 Agent 设置描述性的
name和角色明确的system_prompt,即使当前只有单个 Agent,便于后续扩展。 - LangChain v1.2 中这两个参数均为
create_agent()的直接参数,非嵌套配置。