Phase 4:Agent 机制(先裸写,再学框架)

用大白话说:这一页帮你搞懂「AI 助手(Agent)到底是怎么转起来的,它根本不神秘」。

Agent(说人话:一个会自己动手干活的 AI 助手,不光会聊天,还会去调工具)听着挺唬人。 其实剥开看,核心就是一个 while 循环:问一句、想一下、要用工具就去用、拿到结果再答。

你现在的情况是:skills、记忆、知识库、LangChain 这些名词你都听过,但没从头到尾自己写过一个。 所以我们反着来——先用 30 行代码裸写一个最小的 agent。 写完你再回头看 LangChain、OpenClaw、Hermes,感觉会变成「哦,原来这一层就是我那个 while 啊」。

一、先把任何 Agent 拆成 6 模块(读码对照表)

不管哪家的 agent,拆开都是这 6 块。你把这张表记住,以后看谁的源码都不慌。 可以拿一家公司来类比:老板(大脑)、员工手册(工具)、笔记本(记忆)、资料柜(知识库)、办公室(运行时),还有一个每天喊「下一步干嘛」的流程(循环)。

这一块叫什么大白话:它干嘛的你听过的对应名词
控制循环 / Orchestrator「思考→行动」while 循环agent loop
模型 / LLM大脑Hermes(模型侧)
工具 / Skills能调用外部能力skills
记忆 Memory短期对话 + 长期存储三层记忆
知识库 / RAG检索文档增强你了解的知识库
运行时 / 部署把 agent 跑起来的服务OpenClaw(运行时侧)

二、最小 agent 骨架(裸 Python,不依赖任何框架)

下面这段代码就是一个 agent 的全部家当,不装任何框架。 你先粗读一遍:一个工具表、一个记忆列表、一个死循环,就这三样东西。

# 最小 agent:LLM + 循环 + 工具 + 记忆
tools = {
  "calculator": lambda x: eval(x),        # 工具表
}
memory = []                                # 短期记忆(对话历史)

def call_llm(prompt):
    # 这里接真实 LLM API(如 OpenAI / Hermes)
    # 返回文本,或带 <tool>calculator</tool> 的调用指令
    ...

while True:
    user = input("你: ")
    memory.append({"role": "user", "content": user})
    reply = call_llm(str(memory))
    if "<tool>" in reply:                  # 模型要调工具
        name, arg = parse_tool(reply)
        result = tools[name](arg)          # 执行工具
        memory.append({"role": "tool", "content": str(result)})
        reply = call_llm(str(memory))      # 把结果喂回去再答
    memory.append({"role": "assistant", "content": reply})
    print("Agent:", reply)

顺着读一遍这个流程: 你说一句话 → 存进记忆 → 交给大脑想 → 大脑说「我要用计算器」 → 程序真的去算 → 把答案塞回记忆 → 再问大脑一次 → 它给你最终回答。 就这么一圈一圈转。

练完这段,你会想通几件事: LangChain 的 AgentExecutor,不过是把这个 while 循环、工具表、记忆打了个包。 OpenClaw,是把它变成一个能长期跑着的服务。 Hermes,就是把大脑换成一个更聪明的模型。 框架从此对你不再是黑箱。

三、映射到框架(读懂 OpenClaw / Hermes 源码的钥匙)

你写的每一行,在框架里都能找到对应的那一块。对着看,别硬啃。

四、读 OpenClaw / Hermes 源码的方法

别从第一行入口开始死磕,那样很容易看着看着就迷路。

你按上面那 6 个模块,一个一个去找。 先找「主循环在哪」,那就是你的 while; 再看工具是怎么注册进去的; 然后看记忆存在哪; 最后看 RAG 是从哪一步接进来的。 具体手法用方法论那一章讲的「名词优先 + 数据流追踪」。

五、🔧 Phase 4 验收

这三条你都能做到,才算真懂了 agent,而不是只会念名词。

下一步:Phase 5 视觉 Agent 收口——两线合一。