拆解方法与五个对照维度
一句话:读 Agent 源码不要从 main() 开始读,从「谁在调 LLM」和「谁在 spawn 子 Agent」这两个点往外扩。
一、四个入口点定位法
一个通用 Agent 产品动辄五万行起步 (Kimi CLI 实测 src/ 下 52,049 行 Python)。顺着读一定读不完。真正决定架构的只有四个位置,全都能用 grep 直接定位。
入口 1 · 主循环在哪
找「把消息发给模型、拿回工具调用、执行、再发回去」这个 while。
grep -rn "while True" --include=*.py src/ | head
关键词:run_loop、step、turn、agent_loop、run_soul。
要读出来的东西:一轮里允许几个工具调用(一个还是多个并行)、最大步数在哪截断、截断之后怎么处理。
入口 2 · 工具是怎么注册的
grep -rn "tools:" --include=*.yaml --include=*.json . | head
grep -rn "register_tool\|add_tool\|toolset" --include=*.py src/ | head
要读出来的东西:工具列表是静态写死的还是运行时动态拼的。这一条直接决定了它能不能吃到 KV-cache——Manus 那篇 会讲为什么动态改工具列表是性能自杀。
入口 3 · 上下文存在哪
grep -rn "class Context\|history\|checkpoint\|store" --include=*.py src/ | head -20
要读出来的东西:历史是纯内存、落文件、还是进数据库。落盘的话,子 Agent 的历史和主 Agent 的历史是不是同一个文件——这一个问题就能定死它的隔离模型。