说实话,我第一次听说 OpenClaw 的时候,以为这是什么只有博士级工程师才能搞懂的黑科技。结果呢?一旦拆开来看,其实挺简单的。
整个东西本质上就是一个网关——把 AI 连接到你的消息应用,给它一些操作电脑的工具,然后让它记住你是谁。就这样。难的地方在于,当你同时跑多个渠道时,怎么让它稳定运行。
我的做法是:从零开始,自己重新实现了核心组件。没有花哨的框架,就是一个消息 API、一个大模型,加上一些耐心。说真的,你也完全可以做到。
浏览器里的 ChatGPT 和 Claude,说白了不太适合做真正的工作。别误会,它们确实很聪明。但是:
每次对话都从头开始。它不知道你叫什么、昨天做了什么,什么都不知道。你永远在重新介绍自己。
你得主动去找它。它不会主动来找你。想让它早上七点帮你检查日历?不行,它只在你坐在那儿打字的时候才工作。
它被困在一个文本框里。不能运行命令,不能帮你浏览网页,除了聊天什么实际的事都做不了。
它只活在一个标签页里。你的生活分散在 WhatsApp、Telegram、Discord、Slack 各处,但你的 AI?被困在自己的小窗口里。
如果有一个 AI 住在你真正在用的消息应用里,记得所有事情,能控制你的电脑,在你自己的硬件上 7×24 小时运行,那会怎样?
那就是 OpenClaw。我们来做一个。
首先,做一个能响应 Telegram 消息的 AI:
运行它,发一条消息,得到回复。挺酷的。但也完全没用,因为它没有任何记忆。问它”我刚才说了什么?”它完全不知道。
解决方法很简单——保存对话历史。我用的是 JSONL 文件,因为它崩溃安全。每行是一条消息,程序中途挂掉最多丢一行。
现在你可以真正进行对话了:
你: 我叫 Rolly 机器人: 很高兴认识你,Rolly!
(几小时后……)
你: 我叫什么名字? 机器人: 你叫 Rolly!
这正是 OpenClaw 存储对话的方式:。一个会话,一个文件。重启所有东西,数据还在。
现在我们的机器人太泛泛了,无聊。用一个 SOUL 文件给它一些性格(对,OpenClaw 真的就叫这个名字):
SOUL 在每次调用时作为系统提示注入。现在你不是在和”通用 AI 助手 #47”对话,而是在和 Jarvis 对话。
在 OpenClaw 中,这个文件放在 。想写什么都行,可以幽默,可以严肃,可以给它一个背景故事。越具体,它的行为就越一致。
一个只会聊天的机器人相当有限。如果它能运行命令、读取文件、搜索网页呢?
现在我们需要 Agent 循环。当 AI 想使用工具时,我们运行它并把结果返回:
更新消息处理器:
现在你可以发消息:
你: 创建一个叫 hello.py 的文件,打印 hello world,然后运行它
机器人: (使用 write_file 创建 hello.py) (使用 run_command 执行它) 完成!我创建了 hello.py 并运行了它。输出:”hello world”
AI 自己判断了用哪些工具、按什么顺序用。全程只靠一条文字消息。
我们在通过 Telegram 运行 shell 命令,这很吓人。如果有人黑了你的账号,让它执行 怎么办?
我们需要权限控制:
更新 的处理逻辑:
安全命令立即执行。可疑命令被拦截。授权记录保存到 ,同一条命令不会被问两次。
这里开始变得有意思了。现在我们有了一个 Telegram 机器人,但 Discord 呢?WhatsApp 呢?Slack 呢?
你可以写多个独立的机器人。但那样的话对话和记忆就是分开的——Telegram 上的 AI 不知道你在 Discord 上聊了什么。
解决方法:一个统一的中央网关,处理所有渠道。注意,我们的 函数对 Telegram 一无所知,它只接收消息、返回文本。所以我们可以随意添加任何界面。
来证明一下,在 Telegram 旁边加一个 HTTP API:
测试一下:
同一个 Agent,同一个会话,同一份记忆,两个界面。这就是网关。
OpenClaw 对 Telegram、Discord、WhatsApp、Slack、Signal、iMessage 等都是这样做的,全部通过一个配置文件搞定。
聊了几周之后,会话文件变得很大,最终会触碰模型的 token 上限。怎么办?
把旧消息压缩成摘要,保留最近的:
在处理器中加上这一行:
机器人仍然记得重要信息,会话文件也保持在可管理的大小。
会话给你对话记忆。但如果你重置会话或开启新会话呢?一切都消失了。
我们需要长期记忆——永久保存的文件。
添加这些工具:
实现它们:
更新你的 SOUL:
试一试:
你: 记住我最喜欢的餐厅是 Elvies,我喜欢在周末去。
机器人: (使用 save_memory 写入 Rolly-profile.md) 好的——已保存你的餐厅偏好。
(重置会话或重启机器人)
你: 今晚去哪里吃饭?
机器人: (使用 memory_search 搜索”餐厅 晚餐 最爱”) 去 Elvies 怎么样?我知道那是你最喜欢的。这个周末去吗?
记忆之所以持久,是因为它存在文件里,而不是会话里。重启所有东西——记忆还在。
这里有一个隐藏的 bug:如果两条消息同时到达怎么办?
你在 Telegram 发”查一下我的日历”,同时通过 HTTP 发”今天天气怎么样”。两个请求都试图加载同一个会话,都试图写入它,最终数据就损坏了。
解决方法:每个会话一把锁。
包装你的处理器:
HTTP 端点也一样:
完成。同一个用户的消息排队处理,不同用户并行运行,不再有数据损坏。
现在你的 AI 只在你跟它说话时才工作。但如果你想让它每天早上检查你的邮件呢?或者提醒你开会呢?
你需要定时任务——心跳机制。
关键点:每个心跳任务使用自己的会话 key(),让定时任务和你的主聊天历史保持分离。
测试时,改成每分钟运行一次:
你会在终端看到它触发。测完改回每天一次。
一个 Agent 很有用,但随着任务增多,一种个性无法胜任所有事情。研究助手需要不同的指令,和通用助手不一样。
解决方案:多个 Agent 配置加路由。
更新你的处理器:
试一试:
你: 今天天气怎么样? [Jarvis] 天气不错!具体数据可以查一下天气服务。
你: /research Python 异步编程的**实践是什么? [Scout] 这是我找到的内容…… (使用 web_search、save_memory 收集并存储发现) 核心实践包括:1)使用 asyncio.gather 处理并发任务……
你: Scout 发现了哪些关于 Python 异步的内容? [Jarvis] (使用 memory_search) Scout 的研究发现,核心异步**实践包括……
每个 Agent 有自己的对话历史,但共享记忆。Scout 保存研究成果,Jarvis 之后可以搜索到。它们通过共享文件协同工作。
好了,把所有东西拼在一起。这是一个包含所有功能的完整可运行脚本:
保存为 并运行:
运行效果如下:
从零开始,我们构建了:
- 持久会话 — 崩溃后仍能保留的对话记忆
- SOUL.md — 让 AI 行为保持一致的个性文件
- 工具 + Agent 循环 — 让 AI 真正能做事情
- 权限控制 — 防止它把你的电脑搞崩
- 网关模式 — 一个 Agent,多个界面
- 上下文压缩 — 处理长对话
- 长期记忆 — 重置后仍能保留的知识
- 命令队列 — 防止竞争条件
- 心跳机制 — 定时任务
- 多 Agent — 不同任务用不同的 Agent
每一个组件都解决了一个真实问题。没有魔法,只是实际可行的解决方案。
这个原型包含了核心架构。OpenClaw 在此基础上增加了生产级功能:
浏览器自动化 — 控制真实浏览器,使用语义快照(文本而非截图,token 消耗少得多)
会话作用域 — 配置会话是按用户、按频道还是共享
插件系统 — 添加新渠道而无需修改核心代码
向量搜索 — 基于 embedding 的语义记忆匹配
子 Agent — Agent 可以为特定任务生成子 Agent
但说真的,从简单开始。先让一个渠道跑起来,按需添加工具,会话不够用了再加记忆。复杂度来自你的需求,而不是照着某个蓝图硬套。
或者直接用 OpenClaw 也行,它是开源的,处理了很多边界情况。但现在你知道它的工作原理了。
(全文完)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/235124.html