从 0 开发一个 agent(1)

agent 发展到现在,已经有很多成熟的方案了,但是为了更高的设计一致性和项目掌握度,需要从 0-1 设计一套。期间会借鉴参考很多开源项目。项目全程遵循 KISS 原则。 概念和技术栈选择 查了一下 agent 的概念其实比较久远,很早以前的经典理论我们不提,本文只针对目前的 生成式 AI 所代表的 agent。 对于 agent 的执行机制,你可能听说过 ReAct (reasoning and acting)ReAct 来自 2022 年论文《ReAct: Synergizing Reasoning and Acting in Language Models》1,概念如下 可以说这是 agent 最基本和常见的执行框架,属于评估优化式的架构,也就是通过迭代反馈不断改进输出来逼近目标。 而在两年前还有一些 workflow 产品比如扣子、dify 等,也常被误称为 agent/智能体。但其实他们还是链式处理任务的工作流为主。 我定义智能体的一个核心边界就是他能自己决定使用什么工具以及怎么使用。 截止到开始本项目之前,市面上已经有了很多类似产品,各有特色,但是最底层的原理还是一样的。现在需要在一些业务场景用到或者开发一个平台来提供 agent 服务,所以需要从自构建开始保证设计的一致性和对系统的了解性。 在技术栈的选择上,选择全力投入 python,如果熟悉 python 语法,借助 python 的生态。开发agent 的 MVP 将降低很多心智负担,但是显而易见的缺点是对底层控制降低(比如一些隐形的 runtime error 和性能消耗),但是个人判断,结合我的技术栈掌握和现处公司项目的情况,我决定第一个发行版本将全量使用 python 构建,后续选择使用 Rust 语言作为 热点模块 的替换直至开发团队掌握 rust 技术栈后进行全量重构。(如果这个项目胎死腹中也无需谈什么未来。) 架构设计 基于 ReAct 架构设计的基础思路 还是比较容易的,这里参考王二老师的文章,列一些功能和设计思路。2 ...

May 28, 2026 · 3 min · 524 words · Ray

让AI一直干活别停

原文来自 Datawhale 的 Easy-Vibe 教程:如何让 Claude Code 长长时间工作 之前一直在用 Claude Code 写代码,但有一个很烦的问题——它干着干着就停了。你让它重构一个模块,它改了两个文件就跟你说"搞定了",其实还有一堆没改。或者你让它跑测试,跑到一半报错了,它就卡在那里不动了,也不说重试一下。 总之,最近看到了 Datawhale 的 vibe coding 教程里有一节专门讲这个,讲得挺系统的,我这里也记录一下大概,顺便加点自己的理解。 核心问题:AI 不知道自己没干完 这个其实是所有 AI 编程工具的通病。人判断"干完了没"靠的是客观标准——测试跑通了没、功能能用不、代码质量行不行。但 AI 靠的是"感觉"——它觉得自己输出的差不多了,就停下来了。 所以解决方案的核心思路就是:别让 AI 自己判断什么时候停,让外部系统来检查。 具体来说就是三个问题: 真的完成了吗? 满足客观验收标准吗? 有没有漏掉什么? 如果答案都是"没有",就把任务重新丢给它,继续干。 方法一:While True 循环(最朴素) 五行代码搞定: 1 2 3 4 #!/bin/bash while true; do cat PROMPT.md | claude done 逻辑很简单——从 PROMPT.md 读任务,丢给 Claude,Claude 干完了退出,循环又把它拉起来继续干。Ctrl+C 手动停。 可以,简单粗暴。但问题也很明显——它不知道啥时候该停,你忘了关它就一直循环,API 账单蹭蹭涨。 加个安全版本的话,限制最大迭代次数就行: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!/bin/bash MAX_ITERATIONS=50 iteration=0 while true; do iteration=$((iteration + 1)) echo "=== 迭代 $iteration/$MAX_ITERATIONS ===" cat PROMPT.md | claude if [ $iteration -ge $MAX_ITERATIONS ]; then echo "达到最大迭代次数,停止" break fi sleep 5 done 方法二:Ralph Wiggum 插件(推荐) 这个是正经方案。Ralph Wiggum 是 Anthropic 官方的插件,核心机制叫 Stop Hook——Claude 想退出的时候,Hook 会拦截,检查输出里有没有你设定的完成标记。没有就重新注入任务让它继续干,有了才放它走。 ...

May 11, 2026 · 3 min · 445 words · Ray

一分钟解决怎么在没有互联网的主机上运行 codex

TL;DR 本地网络一切正常,能够正常访问外网/使用 Codex 没有问题 远程主机:只能通过 SSH 连接,无法联网(主要是翻墙不可用,无网的情况比较少) 之前使用 Cursor 时,网络请求走本地,context 在远端,所以迁移到 Codex 和 Claude Code 会有些许不便,今天才有空处理一下 简单来说,直接设置代理即可 本文以 VS Code 为例,因为 VS Code + Remote SSH + Codex 插件组合使用比较方便 最近 GPT-5.4 的好用程度加上 Claude 的获取太难。以半价怒冲了 200 美元的 GPT Pro,确实非常爽。 第一步:在 VS Code 中配置 SSH 反向转发 在本机的 VS Code 上打开命令面板( Ctrl+Shift+P (Mac 上是 Cmd+Shift+P)) 输入 SSH: Open SSH Configuration File 找到你的配置文件(通常是 ~/.ssh/config 或 C:\Users\你的用户名\.ssh\config) 在你需要配置的服务器上添加如下操作: Clash 默认是 7890,如果使用的是 Clash Verge 默认的是 7897 ...

April 20, 2026 · 1 min · 125 words · Ray

openclaw食用小结

openclaw是什么 OpenClaw是一个AI Agent框架,和我们常使用的 Claude code、codex类似,只不过后者专注于编码领域,但是关注相关应用的应该了解有不少程序员 魔改这类cli-agent 让他们进行通用任务(背后的模型足够强大) Openclaw 爆火的原因主要在于做足了周边适配,一个agent配置了基座模型后能够轻易的接入WhatsApp、telegram。让他像真-助理一样存在于你的日常对话APP中。 同时早期的许多案例、给足了openclaw足够的权限、模型能基于shell环境基本控制整个Linux系统,基于强大的模型,做到了很多让普通人眼前一亮的事情、比如帮忙炒股、帮忙购买物品、帮忙制作视频并且上传。 **AI Agent从来不是一个全新的概念。**但OpenClaw本身并不是人工智能——它只是一个“翻译官”和“执行官”。真正聪明的,是它背后接入的语言模型(比如GPT、Claude、Gemini等)。 由于context window 的存在,所以LLM的输入、输出长度是有限的,每个模型的上限不同、现在比较好的模型基本上是 1M上下文 也就是说,模型有严重的失忆症 这就像电影《我的失忆女友》里的女主角,每天早上醒来都会忘记前一天发生的一切。她的男友只能把重要的事情写下来,让她每天早上读一遍。 每次你和它聊天时,它都会把以下内容打包成一段超长的文字,再传给语言模型: 你是谁(主人信息)它自己是谁(身份设定)过去所有的对话记录今天要执行的任务 语言模型看完这一大段“剧本”后,才开始做文字接龙——于是它就接出“我是XX(身份认定),很高兴为您服务”这样的回答。 下面是一些介绍、关于ai agent如何工作,怎么规避LLM的弊端,大部分由 openclaw 为例。 龙虾怎么干活 Function call (最早openai的概念、翻译就是工具调用、另外几家有叫 tool use、或者tool什么的。本质上就是工具调用) 假设你让它“打开question.txt文件,读里面的问题,把答案写到answer.txt里”。流程是这样的: 1、你的指令传到OpenClaw,加上系统提示后发给语言模型 2、语言模型看完指令,发现需要读文件,于是返回一条特殊指令:“请使用read工具,读取question.txt” 3、OpenClaw看到这条指令,直接执行read工具,读取文件内容 4、读到的内容(比如“李宏毅几班”)又被送回语言模型 5、语言模型发现需要写答案,再返回:“请使用write工具,把‘大金’写到answer.txt” 6、OpenClaw执行write工具,完成任务 7、最后语言模型接出“主人,任务完成”,OpenClaw把这句话发回给你 整个过程就像语言模型在手把手地指挥OpenClaw,而OpenClaw就像一个听话的机器人,让做什么就做什么。 工具调用潜在的风险点:exec 接触shell环境将可以执行任何命令,如 rm -rf 当然、这种危险指令可以黑名单、也可以让他的shell进入sandbox执行 自建工具 Function call 由于各家的标准不同、后来出现了统一的mcp范式 而如果一个agent在每次使用时 全量加载它的 二十个mcp,关于各个mcp的描述可能来到了十万上下文 后面就出现了 skills 规范,可以理解为 渐进式加载提示词 ,或者说工作的标准流程 比如 只描述,操作Excel 时需要用到 excel tool 这个skill,这个skill 存放在某某目录 只有当模型判断当前任务需要使用excel时他才会读取该目录下 各个工具的具体用法,避免每次无关的任务也处理这些工具信息从而污染上下文 skills可以通过指定的 skill create 遵循规范来创造。模型本身也会进行一些简单的脚本创建。 ...

March 16, 2026 · 1 min · 138 words · Ray

ClawdBot 在 树莓派上

截止到写这篇文章,ClawdBot 已经火出圈了,被 Anthropic 告了一手后现在已经改名 Moltbot,🦞龙虾 bot。 之前在我自己的服务器上安装过,但是看到很多 skills 的配置比较繁琐(我连敲代码都很少配置外部能力。)实在是没有精力搞,所以也没觉得很牛。但是最近翻出公司的老树莓派就不一样了。废物必须利用,折腾永垂不朽。 安装 🦞bot 的作者是推崇 一键安装的,所以他们为这个努力了不少,那么理论上我应该也可以诶 curl -fsSL https://clawd.bot/install.sh | bash,果然一路畅通无阻 这其中唯一的坑就是 minimax 的官方配置是 海外的站、而我使用的账号是国内版、所以需要修改一下 baseurl、这里当时忘记截图了,总之根据官方文档改一下 json 就行 使用 写文时想到使用飞书、此时尚未有人做适配,我也为了浅尝就不折腾太多了,配置 tg bot 试试, 效果图: 叫上同事进来试了一下,没想到还真的能用。功能一切正常,简单试了一下,模型能力挺重要的,如果没有定时提醒之类的能力,agent 还是比较鸡肋,但是如果未来接入飞书、配合适当的 skills、做好持久 memory,那么个人秘书就在眼前了。 唯一的缺点是每次运行都在持续消耗 money。

January 28, 2026 · 1 min · 37 words · Updated: February 25, 2026 · Ray