智能AI morning

AI Agent 干中学,「造轮子」让我学会了什么?

2026-05-29 1 阅读 Mirtle
AI Agent 干中学,「造轮子」让我学会了什么? 主作者 关注 Mirtle 少数派作者 Mirtle 关注 Mirtle 少数派作者 联合作者 关注 Mirtle 少数派作者 Mirtle 关注 Mirtle 少数派作者 昨天 15:00 16:20更新:文章内容更新 作者注:故事有演绎成分。文章提到的 AI Agent 是 Raycast 插件的形式,以避免处理复杂的 UI/UX 工程。代码由 Codex 编写,作者测试、调研并推动产品迭代。 我要自己从头搞一个 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 这种规模,难道程序员要自己给市面上成千上万个服务都写一遍代码不成?