和AI一起搞事情#2:边剥龙虾&边做个中医技能来起号

0 阅读11分钟

春节前,科技圈被一只“龙虾(OpenClaw)”突袭了。

朋友圈里的各类标题党简直不忍直视:“AGI降临!”“最强记忆管理!”“打工人的终结者!”

看了看底层代码,第一感受是:“确实是一次很棒的产品级创新,但要说技术上的颠覆?uh#&en!%#^感觉好像也没有

但是!只有用了才有发言权。所以这篇文章分两部分:

  • 实战环节:用OpenClaw创建一个新技能——"中医方剂卡片生成"
  • 原理拆解:分析OpenClaw到底戳中了用户的哪些爽点

image.png

先看看最终效果,这是我和龙虾折腾大半天的最终成果,完整技能详见ark_of_mind

图片

动手篇:用龙虾捏一个“老中医”智能体

在动手之前,先聊聊"技能"到底是什么。大致上可以分两类:

类型举例本质
操作手册类如何写入PPTX工具的使用说明书
任务完成类个股财报分析端到端的工作流SOP

我们普通开发者要干的,就是把业务里那些恶心、重复、不想再干第二次的SOP,沉淀成后者的“技能(Skill)”。而龙虾的特点就是把“Skill”做到了极致,万物皆Skill。

但如果说skill一定是Agent的未来么?对这一点我个人并不完全看好。Skill的优点很明显,上手成本低,并且可以随模型对话进行持续改进优化,似乎有了进化的潜力。但本身它不具备任何约束效力,每一步指令都是软约束。这在高精密场景又似乎是个bug。所以要拥抱,但同时也对新的形态保持open mind吧。

下面我们进入“中医方剂卡片”技能的正式制作过程

第一步:该独立时要独立(创建独立智能体)

让我们先创建一个独立智能体,一个独立的智能体拥有独立的

  • workspace:存储后面会提到的所有记忆文件
  • agentDir:模型配置,鉴权信息等等
openclaw agents add card-maker

图片

为什么要单开一个Agent? 如果在代码编辑器里,一个项目一个Agent很正常(需要独立环境和Git仓)。但在龙虾里,问题有点模糊,因为龙虾有“全局记忆”。

如果只是临时的系统或任务,用主Agent(主进程)就行。但如果你要做一个长期迭代的复杂项目,强烈建议单开一个独立的Agent。这就好比你不会让你的“私人生活助理”和“无情的写Bug机器”共用一个大脑一样。独立的Agent拥有干净的上下文,不会因为你昨晚让它查了菜谱,今天就在代码里给你加两勺盐。

第二步:用魔法创建魔法(善用skill-creator)

身边朋友问:"做个啥技能呀?"一拍脑门啥也想不出来。

这里给两个思路:

  • Demo反推:把你原来干的活(未来再不想干的)拿来,逆向工程
  • Histroy压缩:把过往你和模型对话中重复过很多次的对话拿来,压缩抽象

至于怎么写这个Skill的代码?千万别自己手搓!如果你足够了解它,你就不想手搓了。直接召唤 Claude 官方的skill-creator技能:

截图_选择区域_20260313075854

skill-creator会引导模型一步步获取创建技能所需的信息。

第三步:反复拉扯=进化?(技能持续优化)

技能搭好后,就是反反复复的测试。这里你能明显感受到国内外模型的“脑回路差异”。国内有些模型因为缺乏AI相关的训练数据,一上来就喜欢用传统后端开发的思维去搭框架,动不动就给你搞个复杂的类、加一堆后处理,完全偏离了 Skill 轻量化的设计初衷。

分享2个开发tips:

  • 系统级施压:在 Agent.md 里把最核心的SKILL设计原理写进去,别让它放飞自我。
  • 重要的事情说三遍:每一次大的优化和调整指令后,都反复强调要followskill-creator的说明

最重要的一点,在和Agent合作的过程中积累的经验一定要记下来

🗣️ “Note it Down(记在你的小本本上)!”

这句指令是当前 Agent 框架下让 AI 进化的核心。我让这个做卡片的 Agent 把踩过的坑全写进了它的长期记忆里(后面会细讲这个机制)。

截图_选择区域_20260313191446

技能搭建虽然充满艺术性和想象力,但最终是要变成生产力的。所以验证和量化评估非常重要。

这一章我只尝试了“AI测试->我来反馈->AI修改->记笔记”的循环,量化评估等我试了Claude新版skill-creator后再来补充。 我的做法是:

  • 清空上下文(注意这一点很重要)
  • 让模型基于技能进行批量测试
  • 每个卡片给出反馈
  • 让模型基于反馈优化,再更新到Skill中

3个版本迭代后,我就拥有了基本符合我审美的技能效果(哈哈前几个版本不要太浮夸)

小青龙汤

桂枝汤

图片

架构拆解篇:龙虾到底凭什么火?

玩完了Demo,我们来扒一扒龙虾的底层逻辑。它为什么能给用户带来所谓的“AGI体感”?

🌍 【环境变了】从云端“仙女”变成了本地“牛马”

Agent部署环境的变化其实才是我认为最核心的变化。

以前的Agent基本都是云端部署——Agent住在一个空空如也的Docker里,对用户、对用户环境一无所知。所以以前的Agent都是"任务型"的:写文档、做PPT、生成网页。

而OpenClaw能干什么?

  • 帮你自动分类邮箱
  • 帮你回复钉钉消息
  • 帮你整理桌面文件夹
  • 帮你在日历上订阅日程并提醒

核心不是能力变了,而是这只龙虾从云端落了地。飞在空中的龙虾,怎么能碰到地面上形形色色的人呢?

但代价是什么?极度危险。 它有了你的操作权限,这意味着它能帮你回消息,也能一键删掉你的毕业论文。现在网上甚至有个openclaw.allegro.earth的网站,展示了20多万个在公网未加防护的 OpenClaw 示例。

所以说这在安全和企业使用上还有一段路要走。

✅ 【CORE】交互体感变了:Task Oriented -> User Oriented

环境变化带来的是工作内核的变化。因为拥有了更多"人"的信息维度,交互体验上的"AGI"味道更浓了。

而真正赋予OpenClaw用户维度理解能力的,是它的记忆机制。

🧠 【Memory】养龙虾的核心:什么信息随使用变化?

养龙虾的核心在两点:记忆和技能。

技能偏项目化,而记忆系统更有AGI色彩。来看看它的设计原理:

  • 所有记忆都存储在Markdown中,文件是唯一形式
  • 模型不记忆对话Session之外的任何信息,只读写文件
  • 采用最简单的文本格式,方便人类阅读和编辑

身份记忆

Openclaw提供了以下几种身份记忆信息,默认保存在每个agent的工作目录下,包括

  • USER.md:你是谁(我不说,你懂的,各种你的喜好和八卦)。
  • IDENTITY.md:它是谁。
  • SOUL.md:这个最有趣,它是AI的“灵魂和底线”。

更新方式有两种:

  1. 初始化更新:首次通过openclaw onboard进入时,会根据BOOTSTRAP.md的指令引导用户更新。我的“一卦”长这样(USER.md就不给你们看了哈哈):

截图_选择区域_20260309141426

  1. 手动更新:所有.MD文件可以手工编辑,所以不用工具、不用模型,你自己可以编辑所有以上的记忆文件。

三个文件的定位:

  • USER + IDENTITY:让Agent更懂你,也让Agent更像人
  • SOUL:需要长期打磨,把你的人生哲学和处事原则灌输给它

💡 有趣的灵魂万中无一,所以SOUL是龙虾行为模式的核心。

官方自带的SOUL文件其实非常有趣,白话翻译几条核心原则:

别说废话:少给我来“好问题!”、“我很乐意帮忙!”这套虚的,直接干活。
允许有脾气:你可以觉得这事很无聊。一个没个性的助手就是个搜索引擎。
别做伸手党:自己先看文档、搜上下文。实在搞不定再问我。带答案来,别带问题来。
懂点规矩:你主人的家底都给你看了,处理对外事务(发推、发邮件)长点心。

行为记忆

如果说身份记忆是人格化的核心,那行为记忆是让龙虾成为你助手的核心。 龙虾设计了一长,一短两种行为记忆

类型文件作用加载时机
短期/日常记忆memory/YYYY-MM-DD.md按天组织的日志,知道你每天干什么只加载最近两天,剩余按需加载
长期/核心记忆MEMORY.md决策和持久化事实,Agent进化的核心每次主对话都加载

短期记忆的更新机制: 只提供append模式,自动触发条件:

  • 当前对话上下文长度超过阈值
  • 用户输入/new开启新对话

触发后,OpenClaw会启动独立Agent,对最近15条对话进行摘要总结。下面是我配置龙虾第一天、接入钉钉插件后,在重启对话时模型保存的当日memory:

截图_选择区域_20260313161353

而短期记忆的摘要指令非常简单,并没有之前我们看过的很多记忆项目中反复的分类,但效果现在确实缺少有效的评估机制,比较见仁见智。 “” 长期记忆的更新:

老实说,当前版本的OpenClaw对长期记忆的管理有些混乱——记什么、什么时候触发,完全靠Agent自主控制。

感兴趣的朋友可以看看这个Git Issue,大佬们在讨论如何在文档中明确Memory机制对长期记忆的定位。

但好消息是:所有文件都可以通过指令更新。你可以说:

  • "请把这些记下来"
  • "请更新到你的长期记忆中"

就像前面我在SKILL制作过程中把多轮调优积累的经验都放到了MEMORY里面。但当前龙虾的长期记忆确实比较粗浅。何时更新、何时失效、究竟压缩什么经验,并说不清除。

再有就是记忆搜索功能,需要你接入OpenAI的向量模型才能使用,方案也比较常规就是BM25(0.3)+向量(0.7),也都支持用户自行配置,这里就不多展开了。

【GateWay】交互形式简化:从对话中来回到对话中去

这块技术细节暂时不展开,后面会有一章借着多智能体群聊,细说Gateway和钉钉、飞书、Slack这些聊天软件的接入。

但我个人认为Gateway层的加入有点返璞归真的感觉:

从ChatGPT最初爆火就是简单的对话框,但这两年随着任务复杂化,大家把功能做得越来越复杂——Workflow、Canvas、CLI……

可是最初想象中的Jarvis,其实就是简单的对话啊。

当然不同场景,最趁手的工具可能有不同形态。但最能击中大众的,可能还是对话。

💓 【HearBeat】简单却有趣的新技能:心跳&定时任务

最后再说下龙虾的心跳机制,很有趣的实现思路。不大的功能,造就了无数博主博人眼球的标题,AI帮我盯盘!AI帮我自动下单!每周AI自动写周报!

毕竟原来AI都是被动响应人类的提问,而有了心跳机制,AI可以主动向人类发问

这背后其实是两个机制,OpenClaw巧妙地将两种调度模式结合:

特性心跳Cron
定时精度近似(可漂移)精确
会话上下文主会话主会话或隔离会话
批处理能力强(可批量检查多项)弱(独立任务)
成本效率高(批量检查)低(独立调用)
智能决策强(基于上下文)弱(预设逻辑)

Cron很好理解是精准的后端定时,在几点几点,触发一个独立的定时任务。而心跳的设计很巧妙,为了和当前用户的状态无缝衔接,心跳的触发是放在当前主对话中的,可以直接关联前后对话的上下文,整个触发机制如下

系统定时器触发(every 30 min可配置)
    ↓
后端发送用户消息: "Read HEARTBEAT.md if it exists..."
    ↓
模型看到:常规系统提示词 + 这条特殊用户消息
    ↓
模型执行:读取HEARTBEAT.md文件(使用`read`工具)
    ↓
模型根据HEARTBEAT.md内容决定回复:
    - 有需要关注的事项 → 回复具体内容
    - 无事项 → 回复"HEARTBEAT_OK"