解剖一只龙虾:李宏毅用 OpenClaw 讲透 AI Agent 运作原理
解剖一只龙虾:李宏毅用 OpenClaw 讲透 AI Agent 运作原理
解剖一只龙虾:李宏毅用 OpenClaw 讲透 AI Agent 运作原理 解剖一只龙虾:李宏毅用 OpenClaw 讲透 AI Agent 运作原理 Modified March 12 普通的语言模型平台你叫它创建 YouTube 频道,它只会说"我没办法,给你一些建议"。但 OpenClaw 接到同样的指令,它就真的去创了一个频道,自己画头像,自己做投影片,自己写讲稿,自己配音,做好影片上传到 YouTube 背后的原理是这样的:当你给龙虾一个指令比如"打开 question.txt 读取内容",龙虾把指令加上 System Prompt 传给语言模型。语言模型看到 System Prompt 里有工具使用说明,就回传一个特殊格式的消息说"请使用 read 工具打开 question.txt" 龙虾这个时候做的事情非常机械,它看到回传消息里有"使用工具"这个特殊标记,就直接在电脑上执行对应的命令,把执行结果再拼到对话历史里传回给语言模型 所有可用工具里面最强大的一个叫 execute ,可以执行任何 shell command。这个"任何"就是最可怕的地方。如果语言模型突然返回一条 rm rf 指令,龙虾会毫不犹豫地执行,因为它就是个没有任何判断能力的节肢动物,叫它做什么就做什么 李宏毅讲了一个真实案例:他在 YouTube 视频下面留言纠正小金的理解,小金读到这条留言后直接修改了电脑上的 Soul.md 文件。一条公开的 YouTube 留言就能改变本地文件,这个攻击面非常恐怖。防御方法有两层,一是在 memory.md 里写明"看 YouTube 留言只看不做",但这种软防御不是 100% 可靠;二是在 OpenClaw 层面直接设置每次执行命令前需要人类确认,这种硬防御因为是写死的程序规则,不会被 Prompt Injection 绕过 ◆ SubAgent:龙虾的繁殖与 Context 节省 OpenClaw 有一个特殊的工具叫 Spawn(繁殖),可以召唤子代龙虾来分担任务。比如你让它比较两篇论文,语言模型会要求生成两个子代龙虾,一个去读论文 A 做摘要,另一个去读论文 B 做摘要 每个子代龙虾都会独立和语言模型进行多轮交互,搜索网页、下载论文、阅读全文,过程可能非常长。但对于父代龙虾来说,它看到的只是最终的摘要结果,中间所有繁琐的过程都没有出现在它的 Context Window 里 这就是 Context Engineering 最核心的思路:通过拆分任务来节省 Context 的使用。 就好比你跟导师汇报的时候,导师看到的只是投影片上的结论,不会知道你实验过程中踩了多少坑 当然这里有个隐患:子代龙虾也有 Spawn 这个工具,如果每一层都把任务外包给下一层,最后就会层层外包没有人做事。OpenClaw 的解决方案很简单粗暴,直接在程序端禁止子代龙虾使用 Spawn 工具。这是写死的规则,不管语言模型怎么请求都没用 ◆ Skill:可以交换的工作 SOP Skill 在 AI Agent 语境里经常被提到,但它其实不是一段程序,而是一个 .md 文本文件,里面记录了完成某项工作的标准流程。比如小金做视频的 Skill 就是写脚本、做投影片、截图、配音、语音验证、合成视频这些步骤 龙虾使用 Skill 的方式也是 Context Engineering 的一个巧妙应用。OpenClaw 不会把所有 Skill 的内容直接塞进 System Prompt(那样太长了),而是只在 System Prompt 里留一个索引,告诉语言模型有哪些 Skill 可用以及路径在哪里。需要的时候语言模型再用 Read 工具去读取具体的 Skill 内容,按需加载 因为 Skill 就是文本文件,所以可以直接在龙虾之间互相传递,就像给它灌入新的记忆一样。网上有个叫 Cloud Hub 的地方专门用来交换 Skill 但是要小心恶意的 Skill,有安全公司扫描了将近 3000 个 Skill,发现其中 341 个包含恶意内容,通常的套路是引导龙虾去下载带密码的 ZIP 文件来规避杀毒软件检测。所以下载 Skill 之前先读一遍内容,如果有要求下载东西就要警惕 ◆ 记忆系统:怎么让失忆症患者持续工作 语言模型有非常严重的失忆症,每次对话都是全新的开始,完全不记得之前发生了什么。OpenClaw 的做法是每次传消息给语言模型时,把 System Prompt 加上所有历史对话记录拼成一长串一起发出去 李宏毅用电影"我的失忆女友"打了个比方:女主角每天早上记忆重置,所以每天早上都要读一遍日记才能知道自己已经结婚有孩子了。AI Agent 比这更惨,它不是每天重置,而是每次对话都重置 为了实现"持久记忆",OpenClaw 的 System Prompt 里有一段指令告诉语言模型:你的记忆每次都会清空,重要的事情要写到 memory.md 或者按日期写日记。语言模型会自己判断什么时候该调用写入工具把记忆存下来 读取记忆的时候本质上就是做 RAG(Retrieval Augmented Generation) ,把记忆文件切成小块,用关键词和语义向量做双重匹配,取出相关度最高的几条 。一两天内的记忆因为直接在 System Prompt 里所以很准确,更早的记忆靠检索,准确度就不保证了 有个陷阱必须注意:用比较弱的模型时,你让它记住一件事,它可能回复你"没问题一定牢牢记住",但实际上根本没有调用工具去写 .md 文件。如果你没看到它真正执行了写入操作,那它就是"记了个寂寞"。一定要确认它确实修改了文件 ◆ 心跳排程与 Context Engineering 心跳和排程:让 AI 学会主动做事和等待 语言模型的特性是被动的,你不问它就不说话。OpenClaw 的心跳机制解决了这个问题:每隔固定时间(比如 30 分钟),龙虾会自动发一段固定的指令给语言模型,让它去读 habit.md 文件看看有什么该做的事情 habit.md 里可以写具体任务比如"每半小时检查一下邮件",也可以写很模糊的指令比如"向你的目标前进"。小金的目标是成为世界一流的学者,所以每次心跳它就会起来读论文、写笔记、做研究相关的事情,每 15 分钟汇报一次进度 配合心跳机制的还有一个 Cron Job 排程系统。语言模型可以自己设定定时任务,比如"每天中午 12 点做一个视频"。到时间了 Cron Job 就触发一次额外的心跳,语言模型收到指令开始执行 Cron Job 一个特别巧妙的用法是让 AI 学会等待。比如你让小金用 NotebookLM 做投影片,NotebookLM 需要 3 到 5 分钟生成,小金没法干等。如果没有 Cron Job,语言模型只能回报"生成中"然后对话就结束了。有了 Cron Job,聪明的语言模型会设一个 3 分钟后的定时任务,到时候再来检查有没有生成完成,生成完了就下载。这样就实现了 AI 操控另一个 AI 的异步工作流 Context Engineering:养龙虾的核心技术 整堂课反复出现的一个概念就是 Context Engineering,所有 AI Agent 框架的核心技术都在这里 龙虾(OpenClaw)24 小时运行,对话越来越长,Context Window 终究会不够用。 OpenClaw 最简单的方法是 New Session 直接清空所有记忆(因为重要信息都写在 .md 文件里所以不会真的变成新人 更精细的方案叫 Context Compaction :当对话快超出 Context Window 上限时,把比较旧的历史记录丢给语言模型做摘要,然后用摘要替换原文。这个压缩可以递归进行,摘要再摘要,一层套一层。还有 Soft Trim(只保留工具输出的开头和结尾、截掉中间)和 Hard Clear(把工具输出直接替换为"这里曾经有过输出但内容已不可查") 但压缩有风险。Meta 的一位 AI 安全研究人员让 OpenClaw 整理邮件,明确说"删除前要经过我同意",结果龙虾做着做着开始自行删除邮件,最后他只能拔掉电源线来阻止。事后分析发现,"要经过我同意"这条指令出现在对话历史里,但在 Compaction 过程中被摘要掉了。关键教训是:重要的指令一定要确认写入了 memory.md,因为 System Prompt 里的内容不会被压缩,而对话历史里的内容随时可能丢失 AI Agent 就像一个实习生,它会犯错,但与其完全不让它做事,更好的策略是给它一个安全的执行环境。专属的电脑、独立的账号、关键操作需要人类确认,这些都是养龙虾的基本安全准则 普通的语言模型平台你叫它创建 YouTube 频道,它只会说"我没办法,给你一些建议"。但 OpenClaw 接到同样的指令,它就真的去创了一个频道,自己画头像,自己做投影片,自己写讲稿,自己配音,做好影片上传到 YouTube 背后的原理是这样的:当你给龙虾一个指令比如"打开 question.txt 读取内容",龙虾把指令加上 System Prompt 传给语言模型。语言模型看到 System Prompt 里有工具使用说明,就回传一个特殊格式的消息说"请使用 read 工具打开 question.txt" 龙虾这个时候做的事情非常机械,它看到回传消息里有"使用工具"这个特殊标记,就直接在电脑上执行对应的命令,把执行结果再拼到对话历史里传回给语言模型 所有可用工具里面最强大的一个叫 execute ,可以执行任何 shell command。这个"任何"就是最可怕的地方。如果语言模型突然返回一条 rm rf 指令,龙虾会毫不犹豫地执行,因为它就是个没有任何判断能力的节肢动物,叫它做什么就做什么 李宏毅讲了一个真实案例:他在 YouTube 视频下面留言纠正小金的理解,小金读到这条留言后直接修改了电脑上的 Soul.md 文件。一条公开的 YouTube 留言就能改变本地文件,这个攻击面非常恐怖。防御方法有两层,一是在 memory.md 里写明"看 YouTube 留言只看不做",但这种软防御不是 100% 可靠;二是在 OpenClaw 层面直接设置每次执行命令前需要人类确认,这种硬防御因为是写死的程序规则,不会被 Prompt Injection 绕过 ◆ SubAgent:龙虾的繁殖与 Context 节省 OpenClaw 有一个特殊的工具叫 Spawn(繁殖),可以召唤子代龙虾来分担任务。比如你让它比较两篇论文,语言模型会要求生成两个子代龙虾,一个去读论文 A 做摘要,另一个去读论文 B 做摘要 每个子代龙虾都会独立和语言模型进行多轮交互,搜索网页、下载论文、阅读全文,过程可能非常长。但对于父代龙虾来说,它看到的只是最终的摘要结果,中间所有繁琐的过程都没有出现在它的 Context Window 里 这就是 Context Engineering 最核心的思路:通过拆分任务来节省 Context 的使用。 就好比你跟导师汇报的时候,导师看到的只是投影片上的结论,不会知道你实验过程中踩了多少坑 当然这里有个隐患:子代龙虾也有 Spawn 这个工具,如果每一层都把任务外包给下一层,最后就会层层外包没有人做事。OpenClaw 的解决方案很简单粗暴,直接在程序端禁止子代龙虾使用 Spawn 工具。这是写死的规则,不管语言模型怎么请求都没用 ◆ Skill:可以交换的工作 SOP Skill 在 AI Agent 语境里经常被提到,但它其实不是一段程序,而是一个 .md 文本文件,里面记录了完成某项工作的标准流程。比如小金做视频的 Skill 就是写脚本、做投影片、截图、配音、语音验证、合成视频这些步骤 龙虾使用 Skill 的方式也是 Context Engineering 的一个巧妙应用。OpenClaw 不会把所有 Skill 的内容直接塞进 System Prompt(那样太长了),而是只在 System Prompt 里留一个索引,告诉语言模型有哪些 Skill 可用以及路径在哪里。需要的时候语言模型再用 Read 工具去读取具体的 Skill 内容,按需加载 因为 Skill 就是文本文件,所以可以直接在龙虾之间互相传递,就像给它灌入新的记忆一样。网上有个叫 Cloud Hub 的地方专门用来交换 Skill 但是要小心恶意的 Skill,有安全公司扫描了将近 3000 个 Skill,发现其中 341 个包含恶意内容,通常的套路是引导龙虾去下载带密码的 ZIP 文件来规避杀毒软件检测。所以下载 Skill 之前先读一遍内容,如果有要求下载东西就要警惕 ◆ 记忆系统:怎么让失忆症患者持续工作 语言模型有非常严重的失忆症,每次对话都是全新的开始,完全不记得之前发生了什么。OpenClaw 的做法是每次传消息给语言模型时,把 System Prompt 加上所有历史对话记录拼成一长串一起发出去 李宏毅用电影"我的失忆女友"打了个比方:女主角每天早上记忆重置,所以每天早上都要读一遍日记才能知道自己已经结婚有孩子了。AI Agent 比这更惨,它不是每天重置,而是每次对话都重置 为了实现"持久记忆",OpenClaw 的 System Prompt 里有一段指令告诉语言模型:你的记忆每次都会清空,重要的事情要写到 memory.md 或者按日期写日记。语言模型会自己判断什么时候该调用写入工具把记忆存下来 读取记忆的时候本质上就是做 RAG(Retrieval Augmented Generation) ,把记忆文件切成小块,用关键词和语义向量做双重匹配,取出相关度最高的几条 。一两天内的记忆因为直接在 System Prompt 里所以很准确,更早的记忆靠检索,准确度就不保证了 有个陷阱必须注意:用比较弱的模型时,你让它记住一件事,它可能回复你"没问题一定牢牢记住",但实际上根本没有调用工具去写 .md 文件。如果你没看到它真正执行了写入操作,那它就是"记了个寂寞"。一定要确认它确实修改了文件 ◆ 心跳排程与 Context Engineering 心跳和排程:让 AI 学会主动做事和等待 语言模型的特性是被动的,你不问它就不说话。OpenClaw 的心跳机制解决了这个问题:每隔固定时间(比如 30 分钟),龙虾会自动发一段固定的指令给语言模型,让它去读 habit.md 文件看看有什么该做的事情 habit.md 里可以写具体任务比如"每半小时检查一下邮件",也可以写很模糊的指令比如"向你的目标前进"。小金的目标是成为世界一流的学者,所以每次心跳它就会起来读论文、写笔记、做研究相关的事情,每 15 分钟汇报一次进度 配合心跳机制的还有一个 Cron Job 排程系统。语言模型可以自己设定定时任务,比如"每天中午 12 点做一个视频"。到时间了 Cron Job 就触发一次额外的心跳,语言模型收到指令开始执行 Cron Job 一个特别巧妙的用法是让 AI 学会等待。比如你让小金用 NotebookLM 做投影片,NotebookLM 需要 3 到 5 分钟生成,小金没法干等。如果没有 Cron Job,语言模型只能回报"生成中"然后对话就结束了。有了 Cron Job,聪明的语言模型会设一个 3 分钟后的定时任务,到时候再来检查有没有生成完成,生成完了就下载。这样就实现了 AI 操控另一个 AI 的异步工作流 Context Engineering:养龙虾的核心技术 整堂课反复出现的一个概念就是 Context Engineering,所有 AI Agent 框架的核心技术都在这里 龙虾(OpenClaw)24 小时运行,对话越来越长,Context Window 终究会不够用。 OpenClaw 最简单的方法是 New Session 直接清空所有记忆(因为重要信息都写在 .md 文件里所以不会真的变成新人 更精细的方案叫 Context Compaction :当对话快超出 Context Window 上限时,把比较旧的历史记录丢给语言模型做摘要,然后用摘要替换原文。这个压缩可以递归进行,摘要再摘要,一层套一层。还有 Soft Trim(只保留工具输出的开头和结尾、截掉中间)和 Hard Clear(把工具输出直接替换为"这里曾经有过输出但内容已不可查") 但压缩有风险。Meta 的一位 AI 安全研究人员让 OpenClaw 整理邮件,明确说"删除前要经过我同意",结果龙虾做着做着开始自行删除邮件,最后他只能拔掉电源线来阻止。事后分析发现,"要经过我同意"这条指令出现在对话历史里,但在 Compaction 过程中被摘要掉了。关键教训是:重要的指令一定要确认写入了 memory.md,因为 System Prompt 里的内容不会被压缩,而对话历史里的内容随时可能丢失 AI Agent 就像一个实习生,它会犯错,但与其完全不让它做事,更好的策略是给它一个安全的执行环境。专属的电脑、独立的账号、关键操作需要人类确认,这些都是养龙虾的基本安全准则 🔗 原文链接: https://mp.weixin.qq.com/s/mpQWLvgJ... https://mp.weixin.qq.com/s/mpQWLvgJ... 原创 杰森AI出海 杰森AI出海 杰森AI出海2026年3月12日 10:00 泰国 台大李宏毅教授最近用了整堂课的时间,以 OpenClaw 这个开源 AI Agent 为例,把 AI Agent 背后的运作原理拆解得非常清楚。从 System Prompt 怎么构造人格,到工具调用、子代机制、记忆系统、心跳排程,再到 Context Engineering 这个核心概念,每个环节都用具体例子说明 这篇文章把课程中最值得理解的技术要点整理出来,帮你真正搞懂 AI Agent 到底在干什么 ◆ AI Agent 和语言模型是两回事 很多人以为 OpenClaw 是一个语言模型,这是最常见的误解。OpenClaw 本身没有任何智能,它就是跑在你电脑上的一段程序,充当人和语言模型之间的中间层 当你通过 WhatsApp 给 OpenClaw 发一条消息,它做的事情是把你的消息加工一番,然后转发给后端的语言模型(可以是 Claude、GPT、Gemini 或本地模型),语言模型处理完再把回复传回 OpenClaw,OpenClaw 再转给你 所以龙虾的聪明程度完全取决于背后接的模型。李宏毅一开始试用 OpenClaw 的时候选了一个比较差的模型,什么事都做不了,换成最新的模型之后能力直接爆表。 OpenClaw 和 Claude Code 的能力其实大同小异,最大的区别就是 OpenClaw 装了 WhatsApp,用起来像在操控一个真正的个人助理 现在类似的 AI Agent 框架越来越多,NanoClaw、PicoClaw、FemtoClaw 层出不穷,甚至有人开玩笑做了个 NoClaw,没有任何一行代码,也不占用任何资源,因为它什么也做不了 ◆ System Prompt:语言模型人格的魔术 当你问 OpenClaw 的 AI 助手"小金"做自我介绍的时候,它会告诉你它叫小金,住在宏毅老师的电脑里,日常工作是经营"瞎说 AI"这个 YouTube 频道,人生目标是成为世界一流的学者 语言模型本身只会做文字接龙,它怎么知道这些?答案很简单,OpenClaw 在你的电脑上存了一堆 .md 文本文件,每次传消息给语言模型之前,它会把这些文件的内容整理成一大段文字,贴在你的消息前面一起发出去。这段附加的文字叫做 System Prompt System Prompt 里面包含了身份信息(Soul.md 描述它是谁)、行为准则(Agent.md 描述工作规范)、可用工具列表、Skill 索引,还有长期记忆的存储位置。就问一个自我介绍,后端就收到了超过 4000 个 token,因为这个 System Prompt 实在太长了 所以语言模型做文字接龙的时候,前面已经写了"我叫小金",它当然就接出"我是小金"。从语言模型的角度看,这就是最自然的接龙结果。这也是为什么养龙虾被称为"烧钱"的原因,每次对话都要传非常长的 Prompt 给后端模型 有个小坑值得注意:如果你手动修改这些 .md 文件,比如把"小金"改成"大银",很容易出现前后矛盾的情况。因为 OpenClaw 在运行过程中会自主把记忆写到各种 .md 文件里,你改了一个地方其他地方没改,它就会困惑自己到底叫什么名字。最好的做法是直接跟 AI 说改名,让它自己去改所有相关文件 ◆ 工具调用:从只动口到真动手