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)
顺着读一遍这个流程: 你说一句话 → 存进记忆 → 交给大脑想 → 大脑说「我要用计算器」 → 程序真的去算 → 把答案塞回记忆 → 再问大脑一次 → 它给你最终回答。 就这么一圈一圈转。
AgentExecutor,不过是把这个 while 循环、工具表、记忆打了个包。
OpenClaw,是把它变成一个能长期跑着的服务。
Hermes,就是把大脑换成一个更聪明的模型。
框架从此对你不再是黑箱。
三、映射到框架(读懂 OpenClaw / Hermes 源码的钥匙)
你写的每一行,在框架里都能找到对应的那一块。对着看,别硬啃。
- 你的
while True循环 → LangChain 的AgentExecutor,或者 OpenClaw 的 orchestrator。名字花哨,干的是同一件事。 tools这个字典 → 就是所谓的 skills 注册表。memory这个列表 → 就是你见过的三层记忆(短期缓冲 + 长期存储)。call_llm这个函数 → 背后就是 Hermes 这类模型服务。- RAG(说人话:答题前先去翻资料,把查到的内容抄进题干)= 在
call_llm之前先检索知识库,把找到的文档拼进 prompt。
四、读 OpenClaw / Hermes 源码的方法
别从第一行入口开始死磕,那样很容易看着看着就迷路。
你按上面那 6 个模块,一个一个去找。 先找「主循环在哪」,那就是你的 while; 再看工具是怎么注册进去的; 然后看记忆存在哪; 最后看 RAG 是从哪一步接进来的。 具体手法用方法论那一章讲的「名词优先 + 数据流追踪」。
五、🔧 Phase 4 验收
这三条你都能做到,才算真懂了 agent,而不是只会念名词。
- 裸写的最小 agent 能跑通,至少能调起一个工具(计算器或者查天气都行)。
- 你能指着 LangChain 的某个类说:这个就对应我骨架里的哪一段。
- 打开 OpenClaw 或 Hermes 的源码,你能把 6 个模块各自的位置指出来。
下一步:Phase 5 视觉 Agent 收口——两线合一。