1. Agent认知架构基础
各位同学好,我是这门课的主讲。今天咱们聊聊Agent的认知架构,这是整个课程的地基。我做了这么多年AI系统,发现很多人一上来就调模型、写Prompt,结果效果总是不稳定。为什么?说白了,就是没搞懂Agent到底是怎么「思考」的。
核心观点:Agent的智能,不是模型有多强,而是认知架构有多合理。
1.1 什么是Agent规划能力
规划能力,就是Agent把一个大目标拆成小步骤的能力。你想想看,如果让你「去北京出差」,你不会直接瞬移过去对吧?你会先订票、再收拾行李、然后去机场...Agent也是一样的道理。
我遇到过不少团队,他们让Agent直接回答复杂问题,结果答得乱七八糟。后来加了规划模块,效果立竿见影。规划能力本质上包含三个层次:
- 目标分解:把「写一份市场分析报告」拆成「收集数据→分析趋势→撰写结论」
- 步骤排序:哪些先做,哪些后做,有没有依赖关系
- 资源分配:每个步骤需要调用什么工具、多少算力
举个例子,我去年帮一个电商团队做客服Agent。用户问「我上周买的手机还没到怎么办?」。没有规划的Agent会直接回复「请耐心等待」。但有了规划能力的Agent会这样思考:
步骤1: 查询订单状态(调用订单API)
步骤2: 如果已发货,查询物流信息
步骤3: 如果物流异常,生成工单转人工
步骤4: 如果正常,告知预计到达时间
你看,这就是规划。每一步都清晰,不会乱来。
1.2 推理能力与认知架构的关系
推理能力,我习惯把它理解为「在信息不全的情况下做判断」。Agent的推理不是靠蒙,而是靠认知架构里预设的推理规则。
认知架构是什么?你可以把它想象成Agent的「大脑结构」。它决定了:
- 信息怎么进来(感知层)
- 信息怎么处理(推理层)
- 行动怎么输出(执行层)
推理能力和认知架构的关系,就像软件和硬件。好的认知架构能让推理更高效。我曾经踩过一个坑:给Agent设计了一个很复杂的推理链,结果每次推理都要调用5次大模型,响应时间直接飙到30秒。后来简化了架构,把一些固定推理规则写死,速度提升了4倍。
我的经验:推理能力不是越强越好,而是越「合适」越好。要根据场景选择推理深度。
1.3 ReAct范式详解
ReAct,全称是Reasoning + Acting。这个范式很有意思,它让Agent边思考边行动,而不是想完了再做。
传统的做法是:先想好所有步骤,然后一步步执行。但现实世界哪有那么完美?你计划好了,结果中间出个意外怎么办?ReAct的思路是:想一步,做一步,观察结果,再想下一步。
我给大家画个流程图,这样更直观:
ReAct的核心代码其实不复杂,我给大家看个简化版:
def react_agent(question):
context = []
max_steps = 5
for step in range(max_steps):
# 1. 观察当前状态
observation = observe(question, context)
# 2. 思考下一步
thought = think(observation)
# 3. 执行行动
action = act(thought)
# 4. 记录结果
context.append(action)
# 5. 判断是否完成
if is_finished(action):
return action
return "任务超时,请重试"
注意:ReAct虽然灵活,但容易陷入死循环。我建议设置最大步数限制,比如5步或10步,防止Agent无限思考下去。
1.4 Plan-and-Execute模式介绍
Plan-and-Execute和ReAct正好相反。它是先制定完整计划,再按计划执行。这种模式适合那些「一步错步步错」的场景,比如金融交易、医疗诊断。
我去年帮一家银行做风控Agent,用的就是Plan-and-Execute。因为风控流程非常固定:先查征信、再算负债率、然后评估还款能力...每一步都不能乱。如果用ReAct,Agent可能中间突然去查天气,那就出大事了。
两种模式对比一下:
| 特性 | ReAct | Plan-and-Execute |
|---|---|---|
| 计划时机 | 边做边计划 | 先计划后执行 |
| 灵活性 | 高,能应对突发情况 | 低,按部就班 |
| 稳定性 | 低,容易跑偏 | 高,结果可预期 |
| 适用场景 | 开放域对话、探索性任务 | 固定流程、高精度任务 |
| 响应速度 | 较慢,需要反复思考 | 较快,计划一次执行多次 |
Plan-and-Execute的实现也很直观:
def plan_and_execute(question):
# 第一步:制定完整计划
plan = planner(question)
# 返回类似:["查征信", "算负债率", "评估还款能力"]
# 第二步:按计划执行
for step in plan:
result = execute(step)
if result.get("error"):
# 计划执行出错,可能需要重新规划
plan = replan(plan, result)
continue
save_result(result)
return final_answer()
我的建议:实际项目中,我经常把两种模式混着用。核心流程用Plan-and-Execute保证稳定,遇到异常情况切到ReAct灵活处理。这叫「混合架构」,后面章节会详细讲。
小结
这一章我们聊了三个核心概念:规划能力是拆解目标,推理能力是信息不全时做判断,认知架构是支撑这一切的骨架。ReAct和Plan-and-Execute是两种主流范式,各有优劣。
嗯,这里要注意:不要纠结于「哪个更好」,而要思考「哪个更适合你的场景」。我见过太多人把ReAct吹上天,结果用在固定流程上反而搞砸了。选对范式,比调好模型更重要。