我用 ClaudeCode 花 2 小时没写一行代码做了一个翻译智能体,并且开源了整个过程 这周没怎么更新内容,主要是忙于研究 AI Agent,深度体验了 Claude Code,并且模仿着它的原理实现了一个简单的翻译智能体,最终成品效果不错,只要你输入一段要翻译的文字、或者网址、或者本地文件路径,它就能帮你提取要翻译的内容并翻译。 (参考图1) 可能你会觉得这似乎没什么了不起的,跟传统的聊天应用也没什么区别,但麻雀虽小五脏俱全,它却是一个真正的 AI Agent。 那么 AI Agent 和普通 AI 聊天工具有什么区别呢? 关于 AI Agent,我觉得写的最好的文章是 Anthropic 的《构建高效 Agent》,它把 Agent 定义的很清楚: > 智能体(Agent)这个词可以有几种不同的定义。部分用户认为智能体是完全自主的系统,能够在长时间内独立运作,通过使用各种工具来完成复杂任务。另一部分用户则将智能体定义为更具指令性的实现方式,即严格按照预先设计的工作流程运行的系统。在Anthropic,我们将这些不同的系统统称为具备智能体特征的系统(agentic systems),但在架构上,我们明确区分两类系统: > - 工作流(Workflows) > 这种系统的特点是:大语言模型(LLM)与各种工具的调用顺序,由事先定义好的代码逻辑所控制。 > - 智能体(Agents) > 与工作流不同的是,在智能体系统中,大语言模型能够自主决定如何运用工具、动态地引导整个任务的执行过程,从而具备更强的自主性。 归纳下来主要就是这几点区别: 1. AI Agent 能和外部环境交互 比如它能使用工具读取本地文件;能读取远程网页 2. AI Agent 能动态的使用工具 比如我如果只是输入要翻译的文本,它就不会调用任何工具,如果我在一段文本中包含一个要翻译的网址,它就会从中提取要翻译的网址,并抓取内容再翻译 3. AI Agent 能决定任务是否完成 举例来说,如果我的指令不是简单的翻译某一个网址,而是比较复杂的指令,像下面这样的: > 请访问这个博客https[:]//ingrids[.]space/ 并将前两篇文章的内容翻译为中文 那么它就会先抓取首页,然后分析首页的内容,找到前两篇文章的链接,再去分别抓取前两篇文章,最后再一起翻译,在这个过程中它使用了三次网页抓取工具,直到它认为已经完成任务了才会停止工具的调用。(这个使用案例的截图见图3,有兴趣的也可以自己下载代码运行试试看) Agent 能处理高度复杂的任务,但它们的实现通常很简单:本质上就是 LLM 利用环境反馈在循环中调用工具。连 Claude Code 这样复杂的 AI Agent,底层原理都是这样的,也是不停的调用工具,直到完成任务为止,就像图4 这样。 Claude Code 和普通 Agent 主要的不同在于 Claude Code 能启动子 Agent,也就是它能开分身,把分身当作自己的一个工具来用。就好比一个 AI 程序员,要去实现一个相对复杂一点的功能模块,它会先调用 TODO 工具,把任务分解,然后每个子任务让自己的分身去实现模块,分身只需要专注的完成子任务,这个分身有 AI 程序员本体一样的能力,也能调用所有的工具,等它完成子任务了,AI 程序员再让新的分身去继续下一个任务,直到所有任务完成为止。 为什么我在这里选用的是豆包 1.6 模型呢? 在实现这个智能体的过程中,我使用的是豆包 1.6 的模型。主要是因为像 AI Agent 这样的任务,普通的大语言模型并不擅长调用工具,即使是普通推理模型都不行,必须要经过专门针对工具调用强化学习(RL)过的模型。简单理解就好比一个大学生,每天要反复练习怎么使用各种工具,用对了工具就有奖励,没用对就没有奖励,这样经过一段时间的学习后,就会特别擅长使用各种工具。只有这样经过强化训练的模型才能胜任好 AI Agent 的任务。目前主流的模型除了豆包 1.6,还有 o3、Claude 4、Gemini 2.5 Pro 来开发 Agent 都很好,豆包 1.6 相对性价比是很高的,国内使用也没有封号的风险。 另外火山引擎提供了 MCP Servers,像一些第三方工具可以方便的集成,比如我现在自己实现的网页抓取就很简陋,大部分网页其实都抓不了,如果要让它兼容更多网页,最简单的选择就是去选一个成熟的网页抓取的 MCP 服务,或者后面要支持 PDF 的翻译,这些都能在火山引擎上找到对应的可用 MCP 服务。