【AI前沿】从零手搓 AI Agent,我学到了什么?
从零手搓 AI Agent,我学到了什么?主作者关注Mirtle少数派作者Mirtle关注Mirtle少数派作者联合作者关注Mirtle少数派作者Mirtle关注Mirtle少数派作者15:00我要自己从头搞一个 AI Agent。周五下班路上,这个信念充斥着一个文科生的心。当天下午小组周会,研发人员对我脱口而出「你懂个屁的 AI」,紧接着就是上下文、MCP、Skills 这类于我而言「可远观不可亵玩」的词汇。我沉默不言,无法反驳,因为我对 AI 的全部理解确实只停留在每月的 meme 梗图、流行词,以及 OpenAI、Anthropic 的花边野史。任何追问都会让我哑口无言。但事情将迎来转机,我感受到不同于下月减肥、少吃油盐和戒掉抖音的强大信念:我要用两天时间梳理完 AI 发展脉络,理解 Agent 能力边界。我也知道软件工程更多是门实践学科,要学习 AI,没有什么比自己「重造一个轮子」带来的理解更加深刻。所以我也拟定了清晰的目标,我的 AI Agent 至少需要做三件事:能正常聊天;能帮我创建、整理待办和笔记;能帮我拿到最新的少数派的派早报、本周看什么等栏目摘要。此外,它也不能直接使用任何 AI 框架,代码从零开始;核心脉络、迭代则由我自己定,不能偷懒给 Codex 一句「我要 AI Agent」。让 AI 开口说话,并治好它的「失忆症」周六一早,我尝试迈出第一步:搞定聊天。为此我得看一大堆比《三星 OneUI 使用说明书》还复杂的接入文档,对于非程序员群体——例如我——大概和看天书差不多。出人意料的是,所有 AI 厂商的文档的第一页都只有一行加粗的十个字:先指定模型,再写上问题:DeepSeek-v4-flash: 你好DeepSeek 不一会儿就会发来贺电。大概半小时,我用一个既有的软件做界面框架,做好了雏形:一句简单咒语,就能驱动一个海量数据训练出来的黑盒。美好的开局让我信心爆棚。我紧接着打算和 AI 联络感情:「从现在开始,你叫我阿乐,我叫你大 D」。我想试试这个好搭档的默契,它却掉链子了:没错,就像得了失忆症,似乎每一轮对话对于 AI 来讲都是全新的开始。这可不行,而且,ChatGPT 们可不是这样。以「多轮对话」为关键词搜索后,我了解到原来在模型层面上,AI 没有「记忆」一说1:模型只处理本轮对话中,你的输入和它的输出。这也就是模型的 Context(上下文窗口)。解决办法很原始:每一次新的对话,都把上几轮对话的内容复述一遍:DeepSeek-v4-flash: 上一轮的问题;上一轮的回答 当前轮的问题假如有 AI 实体,每一次对话我都要花上几分钟把前一轮对话的内容跟它重新讲一遍;想到这有些好笑的情境,AI 的「活人感」就少了很多。但带上了复读机 AI 的「失忆症」果然好了,我暂时只叠加了五轮前文,再之前的怎么处理我现在并没有好的办法。先以能跑为目标:此时周六上午才过去了两个多小时,我的计划已迈出坚实的第一步。我还惊喜地发现,市面上的 AI 那么多,但都能用 OpenAI 和 Anthropic 定下的两、三种方式用起来,多轮对话的处理方式基本一致:OpenAI Chat Completions API:最常见的格式,一般说「OpenAI compatible」就是说能用它;OpenAI Responses API:OpenAI 的新标准,xAI、火山(豆包)都主推这个;Anthropic Messages API:Claude 自成一套,想要接入 Claude Code 的厂商(如 DeepSeek)往往支持。这不过是「茴字的几种写法」。我一口气把手边的几个 AI 都接了进来,OpenAI、Gemini 都有现成的日志功能,后续要做核对审查估计会方便一些。有了基础的聊天能力,如果想定制一个自己的 AI,或者让 AI 完成指定任务,就像在 2022 年 ChatGPT 一鸣惊人后那样,我唯一能依靠的就是提示词了。这里人们还发明了一个词:提示词工程(prompt engineering)。想当初科学、玄学难辨的各类提示词火遍朋友圈和社区,出现了大量搜集提示词的门户站点,皆因提示词是和 AI 交互的唯一途径。彼时通过提示词来做角色扮演为卖点的 Character.ai,也在短时间内声名鹊起。但 AI 似乎停留在 Chat 领域。让 AI「使用」工具周六下午开工前,我打算先和我的造物打个招呼,和它还不熟的我选了个不会出错的话题,「今天几号了」:回答让我大跌眼镜:2025 年 7 月!你怎么还活在去年?AI 能做的是思考,它了解其训练材料截止的世界,但这个「缸中之脑」怎么才能和当下的世界交互?这也关系到让 AI Agent 帮我创建笔记待办的可能性。我再次翻开厂商们的文档,工具调用(tool use)概念映入眼帘。有趣的是,OpenAI 把一部分工具称为函数(function)。函数这个概念,在几乎所有类型的编程语言里面都有,它被设计在当前环境中完成特定的任务,例如存取数据,获取信息,譬如人的五官手足。但 AI 模型能跑编程意义上的函数,听起来就像「缸中之脑」长出眼耳四肢一样匪夷所思。现实自然并非如此,工具调用稍微有一些复杂:DeepSeek-v4-flash: 上一轮的问题;上一轮的回答 当前轮的问题 工具:要知道时间请回复「获取时间」 代码: 如果 AI 返回是「获取时间」,就发送给 AI 时间AI 模型决定获取时间时,它会直接按特定的格式,回复给我们一段话,我们的代码收到这段话后自己获取时间,然后告诉 AI,它才知道时间。换句话说,AI 模型负责调兵遣将,不上阵杀敌。它决定需要谁做事情,然后再拿对方的结果报告给用户。这意味着我需要自己写一个执行方和它配合。虽然原理上名不副实,但工具给模型能力带来了无限可能。我只需要将我需要的能力包装成一个个工具,AI 就能适时使用它们。这也同时意味着传统编程能做的一切事情,当前所有的信息、服务,AI 模型就能读取、取用。外在世界的现实任务 <–解决– 程序 <–通信– 接口 <–tool– AI 模型我一口气给 AI 添加了十几个工具:我的 AI 现在可以访问网络、执行命令、操作我的系统:而我的目标之一——创建笔记待办,此刻也被轻松实现:我很快注意到了副作用:这么多的工具,我一股脑放进对话,简单的「Hello,你好」就要消耗 3 到 4 千的 token,一分钟如果有多次工具调用,6 到 8 万的 token 就没了。但我暂不考虑优化,因为周六的夜色已至。我停下手上的活开始反思另一个问题:我在自己搞 AI Agent,十几个工具就是十几套不同的代码逻辑,写了一下午。那 Cursor、Codex、Claude Code 这种规模,难道程序员要自己给市面上成千上万个服务都写一遍代码不成?显然不是,「工具」并不是普通用户在 AI 领域中常听到的概念,MCP(模型上下文协议)才是。MCP 由 Anthropic 在 2024 年底提出,它尝试定义一套 AI 应用和工具服务方都遵守的规范,大家都「红灯停、绿灯行」,开车上路也就不需要那么多交流了。千万个服务商,也能无痛入驻各大 AI 应用。外在世界的现实任务 <–解决– 程序 <–标准化– MCP –tool–> AI 模型MCP 之后被另一大巨头 OpenAI 支持。MCP 门户站点、平台工具也就从 2025 年初涌现。工具、MCP 能力的流行,推动了 AI 从聊天场景进一步拓展到了调研分析、报告撰写、绘制图表等实践场景,大家熟知的黑马 Manus.im 也算红极一时。编程之外,AI 在大众视野上也逐渐脱离了聊天机器人的桎梏。给 AI 一本菜谱大全昨天的爆肝让目标近在咫尺,所以周日上午的我懈怠了不少。我的 AI Agent 能聊天能用工具,完成复杂的任务又有多难呢?我想当然认为以当代 AI 模型的威力,现在只要一句简单的提示词,它就已经能拿到最新一篇少数派文章的摘要了:DeepSeek 和 GPT 5.5 都给出了错误的答案,而 GPT 5.5 Pro 最终以 2 美元扣费,3 分钟耗时为代价成功了。但繁琐的思考、一遍一遍的工具调用,不仅也让我怀疑这真的是顶级模型的能力吗?我最多花 10 秒完成的事情,强大的 AI 竟然要考虑这么久。即便我可以添加一个「本次思考快于 98% 的用户」来聊作安慰,钱包也受不了。另外 Codex 们写项目的时候可没这么磨叽。我尝试回顾 AI 的处理过程:以「少数派」、「最新」为关键词搜索:失败,结果全部为旧内容获取当前日期,搜索「少数派」、「2026-05-17」:失败,无有效内容,原因是新文章刚刚发布,未被抓取搜索少数派社媒平台,尝试拿到最新文章链接:失败,社媒平台禁止抓取第一次直接抓取少数派首页,抓取第一个链接:失败,首页结构复杂,第一个链接并非文章分析后,第二次抓取首页,并尝试解析文章:失败,被排序误导,文章内容并非最新从网页端发现了 RSS 链接,并尝试解析:成功输出结果。AI 既聪明、又能干,但缺乏经验。看起来前 5 次不仅花去了大量时间,还并没有产出,而第六次终于探索出了完成这个任务的最佳「菜谱」。因此我要做的是直接告诉 AI,下次这个任务,你直接这么三步走:用 shell 工具读取 RSS 地址,解析拿到第一个链接;用 web 工具读取这个链接;将内容总结为 200 字概要,附带原始链接,除此以外,什么都不要返回。不过这段特殊的提示词放哪里?如果是前几年,AI 平台和教程都提倡每一个话题,新建一个对话,这个对话就只处理这一个事情,我们称之为专用的智能体、助手之类。一段时间后,在编程 AI 领域,大家开始渐渐习惯于将固定的习惯、流程写到一个个纯文本文件里面。比方说CLAUDE.md、AGENTS.md。这种习惯到了 2025 年底由 Anthropic 主张拓展用途,Skills开放标准被提出,中文圈基本叫它技能。扒开 Skills 的糖衣,它们最核心的部分还是精心设计的提示词,一般以本地文件的形式记录着一套一套的固定流程、外部资料。复杂一些的还附带了脚本或其他外部资源。我按照自己理解也实现了一套 Skills 体系,下面是效果,执行速度已经来到 10 秒以内:我把本地的技能放到一个固定的目录,在全局的提示词内,插入这些技能的名字和大致功能。AI 决定使用时,就用我开发的read_skill工具读取技能描述,最后跟着技能描述完成任务。我花了最多的时间去写一套 AI 都能遵循的 Skills 提示词和流程:由于 Skills 会被动态载入 AI 模型的上下文,而不同的 AI 对提示词的遵守程度是不一样的,我最后想到的办法是固定流程、尽量用脚本,以减少 AI 的自由发挥,效果显著。这个办法也是 Claude 等平台的推荐办法。DeepSeek-v4-flash: 上一轮的问题;上一轮的回答 当前轮的问题 工具:要知道时间请回复「获取时间」 Skills:要处理少数派最新文章,请读 fetch-sspai fetch-sspai 按下面的步骤获取少数派的文章:1 2 3如今的通用型 AI 平台也大多支持这一特性。从个人观察看,OpenClaw 年初的火爆原因之一是作者预置的一大堆方便好用的 macOS Skills。AI Agent 的用户不再需要关心怎么最优完成任务、怎么写提示词、什么时候该用工具,这些事情交给 Skills 编写者解决就行。工作量超出想象,一直到周日下午两三点,我才算满意。其实截止目前,我把当前的成果展示给任何人,对方都不会否认这就是一个 AI Agent。从能跑到好用,AI Agent 平台还要做什么周末的时间所剩不多,我做出来了一个能跑的 Agent,但离成熟产品还差不少。同样是调度模型、上下文、工具和 MCP 以及 Skills,市面主流的 Agent 平台还做了什么?这是我剩下时间的探索主题。为了让调查有的放矢,我选择了 Codex CLI 这个开源项目作为研究对象,然后从以下我遇到的真