目录

AI Agent

Agent 基础

学会 Agent(学习需约 1天 * 9小时)

  1. 拥有你自己的 llm api-key(阅读需约 15 分钟)

    • 你可能需要学会使用 python 和 uv 用 rust 编写,类似于 rust 里面的 cargo,非常非常快
    • 为什么不用 conda 而是 uv?因为 uv 开源无商用风险,Conda 在超过 200 人的组织有潜在商用授权问题
    • uv 可以像 pip 一样编辑镜像源,mac 和 linux 系统修改 ~/.config/uv/uv.toml 并写入想要切换的镜像源。项目初始化需要 uv sync
    • 你可能需要 llm api-key,推荐 DeepSeek 或者 硅基流动
    • 配置环境变量 OPENAI_API_KEYOPENAI_BASE_URL,并且尝试运行 core/llm.py
  2. 实现 Node / Workflow / Agent(阅读需约 1 小时)

    • 我们最终的目标是造一个 Agent,能够联网搜索、运行命令行、文件编辑。
    • Agent 底层可以使用 Node 来抽象,我已经准备好了一个极简的实现,可以看 core/node.py,不到 60 行就实现了一个 Agent 的轻框架,实在是太容易理解了!如果没有 python 基础看不懂,可以把代码复制给 ai 让它来解释。
    • 但我们应该怎么去用 Node 呢,我们可以新建 3 个 Node 并把它们串起来实现功能接收输入->上网搜索->大模型生成总结,恭喜你已经实现了 workflow,相关实现已经在 examples/workflow
    • 现在新建个 workflow,实现功能接收用户输入->大模型回复,并且 loop 反复调用这个 workflow,恭喜你已经实现了 chatbot,相关实现已经在 examples/chatbot
    • 现在尝试给 chatbot 加上一些 tools(下文会详细讲 tool),让它能够上网搜索东西、编辑文件、运行命令行,恭喜你已经实现了 agent,相关实现已经在 examples/chatbot_with_tools
    • 总结:workflow = node + nodechatbot = workflow + loopagent = chatbot + tools = workflow + loop + tools
    • 恭喜你已经懂 Agent 了!可能你现在会有疑惑“这么简单的一个轻框架能有用吗,为什么选择自己造轻框架而不是选择市面上成熟的 LangChain / Dify / Coze / Google ADK / Spring AI?”, 并且我并没有看到过有人用 langchain 开发出来好产品,以及 langchain 还出过非常严重安全漏洞 CVE-2025-68664,以及存在过度抽象、依赖地狱、bug 多、不灵活难以定制等问题。事实上优秀的 agent 都是采用自己搭建轻框架来开发的,例如 claude-codecursorkimi-clipi-monoPocketflow-examples 等等,所以非常推荐自己搭建轻框架或者直接调用 llm api 来开发。
  3. 实现 RAG(阅读需约 1 小时)

    • 选择 Chroma 而不是 Milvus、LanceDB、pgvector 等等,因为 Chroma 部署简单、api 简洁使用成本低
    • 注意,你可能需要一个 embedding model api 而不是 llm api,你可以在 Kimi、智谱等官网找到对应的 embedding 模型
    • 恭喜你已经学会了 RAG!!!
    • 为什么这就是全部了,真有这么简单?是的这就是全部,当初提出 RAG(Retrieval-Augmented Generation) 概念时,可能觉得得有检索-增强-生成这三个功能。
    • 但实际上大伙最终只用到了检索,VectorDB 就能很完美执行这个任务
    • 所以 RAG 是个很过时的概念,大伙只想要一个 VectorDB 而已,或者说 RAG=VectorDB
  4. 实现 Tool、MCP、Skill(阅读需约 1 小时)

    • Tool: process call (function call),也就是调用了一个函数
    • MCP: remote process call 也就是后端里面的 RPC 概念,调用了服务器上的一个函数
    • Skill: local process call 也就是调用了本地的一个函数
    • 它们其实本质上都是 Tool
    • 为什么 Tool 会有这么多形式?这就不得不说 Tool 的发展历程。
    • Tool 来源:在早期大伙为了 chatbot 不只是 chat,而是实际做些事所以出现了 Tool,实现 Tool 的形式各不一样,最常见的就是输入 llm 的 prompt 中里面加入 function(等同于 tool)的 name、parameters、description 并且要求 llm 输出 json 格式,最后再调用对应的 function。
    • MCP 来源:为了解决 Tool 实现参差不齐的现象,anthropic 定了一个 Tool 的标准,也就是 MCP(Model Context Protocol)(感觉不如叫Remote Tool Protocol更易读),让各个Tool能够远程“即插即用”,看起来非常棒只要提供了 MCP 服务就能实现 ai 从 just chat 到 do something 的转变,于是 2025 年各个公司疯狂都在推行自己的 MCP 服务
    • Skill 来源:但人们渐渐发现了 MCP 的弊端:每次调用 llm 时候,都会把在 prompt 额外加上 MCP 的所有 Tool 的信息(包括 name、parameters、description 等等),发现大部分 MCP 服务并没有想象的那么有用,以及导致性能变差以及 token 浪费,anthropic 在 blog 描述了这件事 Code execution with MCP: Building more efficient agents,并分享了它们的解决方案,就是渐进式加载多用代码执行,后来 anthropic 发布了 skill 就和这个差不多,重点就是渐进式加载多用代码执行
    • 设计 Tool:实际 Agent 并不需要那么多五花八门的 Tool,最重要的是 linux 中的 bash、edit、find、grep、ls、read、write 命令,这些就已经能做很多事且做得非常好,Vercel 通过移除大部分的Tool反而提高了text-to-sql从80%到100%,以及 pi-mono 极简 coding-agent 作者提到这四个工具就是构建有效 Coding Agent 所需的全部:read、write、edit、bash
    • 实践:可以阅读 toolsexamples/chatbot_with_tools 文件夹里的实现
    • 总结: MCP 是 Remote Tool,Skill 是 Local Tool,尽量不要设计 Tool 并且优先用 linux 的 bash 来解决问题
  5. 实现 Context / Memory 管理(阅读需约 25 分钟)

    • 对话 Memory:把用户和助手的每条消息追加写入 chat_memory/session.jsonl,下次启动时可以继续接上之前的对话。
    • 长期 Memory:把用户偏好、重要事实、运行环境等值得长期记住的信息写入 chat_memory/MEMORY.md
    • Memory = 对话 Memory + 长期 Memory。对话 Memory 负责“记住刚才聊了什么”,长期 Memory 负责“记住以后也可能有用的信息”。
    • 为什么需要管理 Memory:大模型的上下文窗口有限,消息越聊越多,迟早会超过模型能接收的长度。所以在接近上下文上限前,需要把较早的对话压缩成摘要。
    • 摘要压缩会丢失细节,所以不要太早压缩。当前实现会读取大模型 API 返回的 usage.total_tokens,当 token 数超过最大上下文长度的 90% 时触发压缩。
    • 压缩时,较早的消息会变成一条“对话历史摘要”,最近几条消息会原样保留。因为工具调用消息必须成组出现,所以代码会避免把 assistanttool_calls 和后续 tool 结果拆开。
    • 我们尽量让已有对话内容保持不变,新消息追加写入 session.jsonl。这样更容易命中大模型服务商的 prefix KV Cache,让相同前缀的上下文复用缓存,生成速度可能更快。
    • 实践:可以阅读 /core/memory.py/examples/chatbot_with_memory 文件夹里的实现。运行示例后,可以在默认记忆目录 chat_memory/ 下看到 session.jsonlMEMORY.md
    • 总结:Memory 管理主要是为了防止上下文超长;摘要让模型还能知道之前发生过什么;长期记忆把重要信息从普通聊天记录里单独保存下来。
  6. 实现 Multi-Agent / Subagent / Agent Teams(阅读需约 1 小时)

    • multi-agent 最初设想用 Google 制定的 A2A(agent to agent) 协议,让不同地方的 Agent 进行交互,但这个设想失败了,multi-agent 效果复杂且大部分性能还不如简单的 single agent,且现实中没看到过 agent 用 A2A 协议进行交互。
    • 但大伙发现有些场景可以用 multi-agent 来实现上下文隔离、只回传压缩结果、避免主上下文被工具细节污染,这样能提高 agent 的效果,可以看这个 blog 了解 multi-agent 到底是什么 How we built our multi-agent research system
    • subagent 概念由此发展出来,甚至推出了自定义subagent。但我并不推荐自定义subagent,毕竟由 master agent 来自动生成 subagent 总是个简单高效的选择
    • Agent Teams 则是目前最前沿的发展方向,摒弃了主从的 agent 结构,而采用并行的方式,能够成倍效率且 agent 间不冲突地开发项目,这是十分有价值的,大伙都在研究,可以参考 claude 的 agent-teams 以及 blog Building a C compiler with a team of parallel Claudes 还有 cursor 的 blog 扩展长时间运行的自主编码能力迈向自动驾驶代码库
    • 顺便一提 Agent Teams 可以通过 Tmux 来实现简单且效果非常好!可以看这个文章 What I learned building an opinionated and minimal coding agent 里面的 tmux 部分
  7. 阅读和理解 pi-mono(阅读需约 4 小时)

    • Openclaw 项目的底层就是 pi-mono,pi-mono 就是世界上开源里最好的 coding-agent。
    • 你为什么应该学习这个 coding-agent 项目?因为 coding-agent 经过时代的发展已经成为了通用 agent,它可以几乎做任何事情且效果很好
    • 一定要看 blog What I learned building an opinionated and minimal coding agent
    • clone pi-mono,然后使用你的 claude、cursor 等等 ai 来分析整个项目的结构并且要求有 mermaid 图写到 md 里,你就能理解 pi-mono 它内部是怎样的,因为代码都是 ai 写的,而且用的 TypeScript 作为编程语言,所以不推荐肉眼看源码,你应该让 ai 分析项目,然后你去读 ai 的报告
    • 也可以看看这个 Pi Agent 笔记
    • 顺便一提,pi-mono 有 7 个 package,分别为 pi-ai、pi-agent-core、pi-coding-agent、pi-mom、pi-tui、pi-web-ui、pi-pods,其中只需要看 pi-ai、pi-agent-core、pi-coding-agent,其他的不需要看
  8. 把 pi-mono 改造成你的 OpenClaw(阅读约 1 小时)

    • git clone https://github.com/badlogic/pi-mono.git
    • cd pi-mono && git checkout 3ffc2b43
    • 注意:pi-mono 在 2026-04-30 的 0ed0d434 提交移除了 packages/mom,下面的 mom 改造和 Slack 接入方式都依赖旧版 mom,所以需要 checkout 到移除前的提交
    • 安装 pm2: 后台长期运行且崩溃后自动重启 npm install -g pm2
    • 因为pi-mono写了hardcode强制用sonnet-4.5,我们要自定义模型的BASE_URL和模型id,所以修改./pi-mono/packages/mom/src/agent.ts,const model = getModel("anthropic", "claude-sonnet-4-5");在这行下面写
1
2
model.id = process.env.ANTHROPIC_MODEL_ID || "claude-sonnet-4-5";
if (process.env.ANTHROPIC_BASE_URL) model.baseUrl = process.env.ANTHROPIC_BASE_URL;
  • 准备好你的llm api,你需要添加下面环境变量,下面是以kimi举例,
1
2
3
export ANTHROPIC_MODEL_ID=kimi-k2.5
export ANTHROPIC_BASE_URL=https://api.moonshot.cn/anthropic
export ANTHROPIC_API_KEY=sk-m7q...
  • 参考 im 接入方式slack-bot-minimal-guide,后面会更新飞书接入方式
  • 运行npm install,然后启动pm2 start packages/mom/dist/main.js --name mom --interpreter node -- --sandbox=host ./packages/mom/data
  • 恭喜你!你已经打造了属于你自己的OpenClaw,你可以去到Slack上与你的OpenClaw聊
  1. /goal 解锁长时间运行的agent
    • 前面我们已经实现了chatbot_with_tools:用户输入一句话,agent 搜索、读文件、运行命令,最后回复用户。
    • 但它还是“一句话,跑一轮”。回复完,这一轮就结束了。
    • 长任务不能这样。比如目标是“测试覆盖率达到 90%”,agent 跑了几分钟,做到 80% 就停下来等你催,这是不对的。
    • 所以我们参考 Codex 的 /goal,给 agent 加一个长时间目标。设置了 goal 后,agent 就围绕这个 goal 一直跑,直到真的完成。
    • 例如用户输入:/goal 测试代码覆盖率达到90%
    • 程序会设置:
      1. goal = "测试代码覆盖率达到90%"
      2. goal_active = True
    • 后面每次 agent 自己停下来,只要 goal_active 还是 True,程序就自动提醒它继续完成这个 goal。
    • 如果目标完成了,agent 必须调用 goal_complete。这个 tool 会把 goal_active 改成 False,goal loop 才会结束。
    • 最小实现可以看examples/agent_with_goal。这个例子只是在原来的工具 agent 外面包了一层 run_goal()

进阶

额外内容:达到面试/实习要求 (学习需约 2天 * 8小时)

如果你需要找Agent相关工作或者实习,又或者为了更深刻理解Agent,一定要看这一部分。

  1. 了解面试都会问什么,以及项目推荐(阅读需约1小时)

    • agent 面试只问项目,没有八股
    • 问你的项目,推荐实现你的 Openclaw,项目名字就写XXXClaw,例如我就写PoiClaw。具体为实现 pi-mono 和调用 pm2 以及 im 接口,clone pimono然后使用你的cursor、claude或其他ai工具,让它分析pi-mono整体架构流程看看分为哪些模块,其中只需要看pi-ai、pi-agent-core、pi-coding-agent、pi-mom这些模块,vide coding出来,最终你能实现一个属于你自己的coding-agent,然后使用pm2让它长期跑以及接入im(可能需要2天 * 8小时来完成)
    • 可能会问以下内容,所以你需要知道整个流程运转(但不一定要实践出来):Agent 效果可评估、提示词自动优化、Agentic Sandbox、Agent Teams
    • 推荐编写简历的开源免费网站rxresu.me
    • 注意不要写智能客服项目(langchain/dify + rag),这真的很过时了
    • 已经足够去实习面试了
  2. 关注 Agent 效果可评估 与 提示词自动优化(阅读需约15分钟)

  3. 关注 Agent Teams(阅读需约15分钟)

  4. 了解 Sandbox(阅读需约15分钟)

    • 用过 docker 就行了,使用docker作为sandbox可以应对绝大多数场景
    • 部分对延时要求非常高的场景,需要做专门的agentic infra来优化延时(太复杂了了解下就好)
    • 推荐阅读 为本地代理实现安全沙箱
  5. 了解 Harness(阅读需约15分钟)

    • Harness 来源于 OpenAI 2026 年 2 月 11 日的文章 工程技术:在智能体优先的世界中利用 Codex。虽然这篇文章介绍了 Harness,但它仍然是一个很模糊的概念,我看完也不能理解 Harness 具体是指哪一项东西哈哈🤣。
    • 可以先把 Harness 理解成:给 AI 一个更好的运行环境,让 AI 跑起来更流畅,更好地去使用 Agent。
    • 我现在理解的 Harness 里,其中一种就是 PRD2PR,也就是从产品需求文档自动推进到代码变更和 Pull Request,这类实践已经有很多企业在做了。
    • 看这个文章:Why Your “AI-First” Strategy Is Probably Wrong