共计 2481 个字符,预计需要花费 7 分钟才能阅读完成。
背景痛点:纯 Prompt 的局限性
刚开始接触 AI 开发时,很多同学和我一样,以为只要写好提示词(Prompt)就能让模型乖乖干活。但实际用起来才发现,纯 Prompt 方案至少有三个致命伤:

- 输出不稳定 :同样的 Prompt,不同时间调用可能得到完全不同的结果,就像抽盲盒
- 缺乏上下文记忆 :模型每次回复都像第一次聊天,完全不记得之前的对话
- 功能单一 :无法整合外部工具(比如查数据库、调 API),只能做文本生成
记得我第一次尝试用 GPT 写周报时,明明给了固定模板,但生成的内容忽长忽短,有时还会漏掉关键事项。这就是典型的 Prompt 工程局限性——缺乏确定性和扩展性。
技术演进四大阶段
1. 基础 Prompt 工程
最早的解决方案是优化 Prompt 设计,典型技巧包括:
- Few-shot Learning:在 Prompt 中提供输入输出示例
- Chain-of-Thought:要求模型展示推理过程
比如想让 AI 解数学题时,可以这样写 Prompt:
请逐步解答以下问题:Q: 小明有 5 个苹果,吃掉 2 个后妈妈又买了 4 个,现在有多少苹果?A: 首先计算吃掉后的数量:5 - 2 = 3
然后加上新买的:3 + 4 = 7
最终答案是 7
现在请解答:Q: 书包里有 12 本书...
但这种方案仍依赖模型的理解能力,复杂任务时容易出错。
2. 工具增强型(Function Calling)
当 OpenAI 推出 Function Calling 功能后,游戏规则彻底改变。现在我们可以:
- 定义外部工具(如查询天气、计算器)
- 让模型自主决定何时调用工具
示例代码(Python):
from openai import OpenAI
client = OpenAI()
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取指定城市的天气",
"parameters": {"city": {"type": "string"}
}
}
}]
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "上海今天天气怎么样?"}],
tools=tools
)
# 模型会返回工具调用请求
print(response.choices[0].message.tool_calls)
3. 记忆与状态管理
通过 Conversation Memory 技术,AI 终于能记住聊天历史了。常用方案:
- 短期记忆 :保存最近 N 轮对话
- 长期记忆 :用向量数据库存储关键信息
LangChain 的 ConversationBufferWindowMemory 示例:
from langchain.memory import ConversationBufferWindowMemory
memory = ConversationBufferWindowMemory(k=3) # 记住最近 3 轮
memory.save_context({"input": "我叫张三"},
{"output": "你好张三!"}
)
print(memory.load_memory_variables({}))
# 输出: {'history': 'Human: 我叫张三 \nAI: 你好张三!'}
4. 多 Agent 协作架构
当单个 Agent 搞不定时,可以组建 Agent 团队(Swarms)。比如:
- 分析师 Agent:负责数据查询
- 撰稿人 Agent:负责内容生成
- 审核 Agent:负责质量检查
实战:多步骤 Agent 案例
用 LangChain 实现一个能查天气、做行程建议的 Agent:
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
# 定义工具(模拟天气查询)def get_weather(city: str):
return f"{city} 天气:25℃,晴天"
tools = [{
"name": "get_weather",
"description": "查询城市天气",
"parameters": {"city": {"type": "string"}
}
}]
# 构建 Agent
prompt = ChatPromptTemplate.from_template("你是一个旅行助手,根据天气为用户建议行程。用户输入:{input}"
)
llm = ChatOpenAI(model="gpt-3.5-turbo")
agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 执行
result = agent_executor.invoke({"input": "我明天要去北京,应该怎么安排?"})
print(result["output"])
运行后你会看到 Agent 自动执行了这些步骤:
1. 调用 get_weather 查询北京天气
2. 根据天气生成行程建议
生产环境建议
可复用 Skill 设计
- 模块化 :每个 Skill 应该像乐高积木一样独立(如天气查询、日程生成)
- 标准化接口 :统一输入输出格式,方便组合
- 版本控制 :给 Skill 打上语义化版本号
监控决策链
- 记录 Agent 的完整思考过程(可以用 LangSmith)
- 关键指标:工具调用准确率、响应延迟、用户满意度
性能考量
不同架构的权衡对比:
| 方案 | 延迟 | 成本 | 适用场景 |
|---|---|---|---|
| 纯 Prompt | 低 | 低 | 简单问答 |
| 单 Agent+ 工具调用 | 中 | 中 | 中等复杂任务 |
| 多 Agent 协作 | 高 | 高 | 企业级复杂系统 |
结语
从写 Prompt 到构建智能 Agent,就像从骑自行车到开飞机。虽然复杂度增加,但能解决的问题也呈指数级增长。最后留个思考题:
你认为一个合格的 AI Agent 最应该具备哪三项核心能力? 欢迎在评论区分享你的见解~
正文完
