第21回 智能体初探——LLM 作为大脑的架构

灯下案头摊卷宗,纸上江湖起万重。
若教书生能办案,须有耳目与脚程。

上回说“搜索式解码”:推理不再是一条路走到黑,而是能回头、能试探。
可看官转念一想:
要是题目不是数学题,而是“给我把这份合同查一查风险”“把十个 PDF 汇总成要点并给引用”“帮我预约并写邮件确认”——
单靠脑子里转,没手没脚,如何办成?

于是第三篇登场:记忆增强
它的核心不是“把模型训练得更会背”,而是给它加上三样器官:

  • 耳目:能检索、能查证、能看外部资料
  • 手脚:能调用工具、能执行、能回传错误
  • 账本:能把过程与证据记下来,下一次接着办

江湖里把这一套叫:LLM Agent(大模型智能体)


一、什么叫“智能体”:一句话,能把话变成事

若只会聊天,叫“会说话”。
若能把一句话分解、查证、执行、回报,叫“会办事”。

把“会办事”拆开看,其实还是第11回那套三件套,只是换了装:

  • 环境:浏览器、检索库、文件系统、数据库、API
  • 动作:查询、读取、写入、调用函数、跑脚本
  • 奖励:任务是否完成、是否符合约束、是否可核查

这便是把强化学习的“动作空间”从游戏按键,换成了“工具箱”。
因此近两年(2024–2026)各种 Agent 系统越来越像“工作流”,而不是一段长 Prompt。


二、智能体的最小骨架:感知、记忆、规划、行动

你若要画一张“智能体解剖图”,通常四块就够:

  1. 感知(Perception):读用户输入、读检索结果、读工具返回
  2. 记忆(Memory):把关键事实与中间结论存起来,必要时召回
  3. 规划(Planning):把大事拆成小步,决定先做什么
  4. 行动(Action):挑工具、填参数、执行、处理错误

这四块听起来抽象,但你很熟:
就是你做作业的流程——读题、翻资料、列步骤、动笔算。

导读里说 RAG 会从“查资料”升级成“办案式工作流”,其本质就是把检索嵌入这四块里循环起来。1


三、两种常见架构:一人独办与分工协作

1)单智能体:一个脑袋,配一堆工具

像你一个人做研究报告:

  • 你自己决定查什么
  • 查到了自己判断对不对
  • 写到一半发现不对,自己改

优点:结构简单,成本低。
缺点:容易“自说自话”,尤其当任务很长、证据很多时。

2)多智能体:分工,辩论,协调

像一个小组:

  • 有人负责检索
  • 有人负责写作
  • 有人负责质检与找茬

优点:容易覆盖盲点,过程更像“互相校验”。
缺点:沟通与协调成本会涨,容易陷入“大家都在说但没人动手”。

第三篇先从单智能体讲起:
因为你只要把单智能体的骨架搭稳,多智能体只是“多请几位角色上台”,核心问题还是:如何让过程可核查


四、智能体最怕三种病:幻觉、漂移、失忆

听书听到这里,看官大概已经见过三种翻车:

  1. 幻觉:没查证就编,或把检索结果理解错
  2. 漂移:走着走着忘了目标,开始写别的
  3. 失忆:刚查到的关键证据没记住,下一步又去重复查

第三篇的十回要解决的就是这三种病:

  • 第23–27回:如何检索、如何重排、如何压缩与模块化
  • 第24回:如何评估“找得对不对、说得实不实”
  • 第28回:如何让系统能跑在真实世界:并行、缓存、隐私
  • 第29回:当上下文变长,RAG 与长上下文如何取舍
  • 第30回:引入“图”这种更适合多跳推理的记忆形式

五、极简可跑代码:一个“能办事”的最小循环

下面这段代码不接任何大模型,只做一件事:
把“智能体循环”写成能跑的程序骨架。

我们给它两个工具:

  • search:在一个小文档库里按关键词找句子
  • calc:做简单算术

再给它一个“规划器”(其实就是非常朴素的规则):
如果用户句子里出现 就去检索;出现 就去计算。

import re


DOCS = [
    "RAG 的关键是:检索到的证据要能引用,回答要能对得上证据。",
    "智能体把任务拆成小步:感知、记忆、规划、行动,然后循环。",
    "工具调用需要约束参数格式,否则一旦乱填就会失败或造成风险。",
]


def tool_search(query):
    hits = []
    q = query.strip()
    for i, d in enumerate(DOCS):
        if q and q in d:
            hits.append((i, d))
    return hits


def tool_calc(expr):
    if not re.fullmatch(r"[0-9+\-*/ ().]+", expr.strip()):
        raise ValueError("bad expr")
    return eval(expr, {"__builtins__": {}}, {})


def plan(user_text):
    m = re.search(r"(.*?)$", user_text)
    if m:
        q = m.group(1).strip()
        return ("search", {"query": q})
    m = re.search(r"(.*?)$", user_text)
    if m:
        expr = m.group(1).strip()
        return ("calc", {"expr": expr})
    return ("final", {"text": "我先需要你告诉我:要查什么,或要算什么。"})


def act(action, args):
    if action == "search":
        return tool_search(args["query"])
    if action == "calc":
        return tool_calc(args["expr"])
    return args["text"]


def agent_loop(user_text, max_steps=3):
    memory = []
    for _ in range(max_steps):
        action, args = plan(user_text)
        out = act(action, args)
        memory.append((action, args, out))
        if action == "final":
            break
        user_text = "下一步"
    return memory


if __name__ == "__main__":
    for action, args, out in agent_loop("帮我查RAG"):
        print(action, args, "->", out)
    for action, args, out in agent_loop("帮我算 (3+5)*2"):
        print(action, args, "->", out)

你看,这就已经具备“能办事”的雏形了:

  • 有工具(search/calc)
  • 有计划(plan)
  • 有行动(act)
  • 有过程记账(memory)

真正的大模型智能体,只是把 plan 从规则换成 LLM,
DOCS 从三句话换成一座资料库,
memory 从列表换成可检索的长期记忆。


六、小结:第三篇要把“慢思考”变成“可核查的办案”

从第二篇到第三篇,是一次“从心法到器械”的升级:

  • 第二篇:让它推理更稳(奖励、搜索、慢思考)
  • 第三篇:让它办事更稳(检索、工具、记忆、评估)

下一回(第22回)我们就先拿“工具调用”开刀:
为什么同样是调用 API,有人能稳,有人一半时间在报错?
关键在“约束”二字:约束格式、约束参数、约束错误回传。

欲知后事如何,且听下回分解。


幻觉核查

  • “Agentic RAG”趋势与定义:导读引用的综述可核验其对“把规划、反思、工具使用嵌入检索流程”的归纳。1
  • 本回给出的四块解剖(感知/记忆/规划/行动)为工程界通行抽象,具体系统实现差异很大;本回不宣称某一固定标准。

逻辑审计

  • 与第20回衔接:第20回把推理视作搜索,本回把“搜索”扩展到工具与外部世界。
  • 与导读一致:导读强调“办案式工作流”,本回给出四块解剖与最小循环作为落地框架。
  • 为后续铺路:第23–29回逐步解决“耳目(检索)+账本(评估/缓存)+边界(隐私/可靠性)”;第30回引入图结构,为多跳推理做准备。

引用与溯源

Footnotes

  1. Agentic Retrieval-Augmented Generation: A Survey on Agentic RAG arXiv:2501.09136 (2025-01) https://arxiv.org/abs/2501.09136 2