【教程】230 行代码实现一个极简的 OpenClaw

【教程】230 行代码实现一个极简的 OpenClaw前排提醒 为了尽可能简单 本文只实现基本功能 不使用 langchain 等框架 包含无数不规范的写法 代码仅供参考 参考实现 nanobot OpenClaw OpenClaw 对接飞书消息的途径是飞书机器人 所以我们要先创建一个机器人 按照飞书开放平台的指引创建应用和机器人并授权即可 关于机器人的创建和授权可参考这篇官方文档的飞书机器人创建 部分 这里只展示部分操作

大家好,我是讯享网,很高兴认识大家。这里提供最前沿的Ai技术和互联网信息。



⚠️ 前排提醒:为了尽可能简单,本文只实现基本功能,不使用 langchain 等框架,包含无数不规范的写法,代码仅供参考。

参考实现:nanobot、OpenClaw

OpenClaw 对接飞书消息的途径是飞书机器人,所以我们要先创建一个机器人,按照飞书开放平台的指引创建应用和机器人并授权即可。

关于机器人的创建和授权可参考这篇官方文档的飞书机器人创建部分,这里只展示部分操作。

创建应用后在侧边栏「机器人」中点击创建机器人,然后进入「权限管理」添加权限,JSON 可从上面的连接中复制

最后发布应用,确保修改均已发布,如下图所示

点击之后我们会发现没有聊天框,不用急,这是因为还没配置事件订阅,我们可以先写代码,运行起来才能配置。

现在我们正式进入开发,首先安装一个非常好用且高性能的 Python 包管理器 uv,安装完成后运行 可以看到当前的 uv 版本,没有的话可能是环境变量没有被正确配置,我们可以问 AI 解决。

那么怎么才能让飞书机器人和我们的本地服务之间建立连接呢?这里不用问 AI,因为飞书官方给我们提供了一个示例代码,直接复制到 中。

 

现在导入代码的地方肯定会飘红,因为我们还没有安装 这个包,所以在项目中运行 即可,为了调试可以额外安装一个 .

同时,注意力惊人的 我们很容易注意到示例代码中没有正确填写 和 ,我们可以进入飞书应用主页找到它们并复制下来。

千万不要把这两个值直接明文复制到代码中, 为了防止出现 github 一搜 就能搜出一大堆的情况😆,我们作为高级专业的开发者,当然应该使用环境变量。

首先在 文件里增加一行 以防 push 到远端仓库,然后让我们创建一个 文件,写上 和 :

那么我们应该把它加载到环境变量里呢?好在 Python 有一个库 ,顾名思义它和 紧密相关,所以我们来安装一下 ,然后在 中加上:

 

非常好,现在让我们来运行一下这段代码,,运行成功后回到飞书应用页面,在「事件与回调」页把「事件配置」和「回调配置」保存为 「长连接」 ,事件配置需要添加 「接收消息」

⚠️注意,如果没有启动代码,此处无法选中!

干得好,我们来发布一下:

回到飞书,发现机器人出现了输入框,说明一切正常。

如上文所示,我们只能让机器人回复固定的消息,LLM 诞生以前,Siri、小爱同学一类的语音助手通过文本分类+实体识别+规则判断来决定自己的回复:

提问"帮我关闭卧室灯" -> 解析到"关闭""卧室""灯" -> 执行操作

LLM 诞生以后,它通过 Next Token Prediction 来进行文本的预测,在 Scaling law 的魔力下诞生了"智能"。现在我们把 LLM 接入到机器人里。

本文选取的模型是 DeepSeek,由于国产模型都很便宜,所以充十块钱可以体验很久,用不完还可以退回,你可以自行选择。我们进入到 Kimi/DeepSeek 的后台把 API Key 复制下来,写入到 文件。

openai 库帮我们封装好了模型调用,所以安装它 , 代码中导入并创建一个 openai 实例

 

然后改造一下消息接收函数(为了简单把处理非 p2p 消息的代码移除了):

但是通过代码可以看出,每次发消息对于 LLM 来说都是新消息,也就是 中的 messages 参数都会重新创建,所以我们得把上下文保存一下,那就使用一个全局列表变量吧。

 

让我们重新运行测试一下:

非常成功!如果你想关闭程序后依然恢复记忆,可以把上下文添加到一个 文件中,并且使用 langchain 之类的框架。此处为了简单不再展开。

是2025年最火的 coding agent,没有之一。早些时候无论是 Copilot 还是 Cursor,都是在原有的 IDE GUI 的基础上做扩展,而 使用 TUI 作为开发者 Agent 之间的桥梁,重新定义了 AI 辅助软件开发。

如果你还不知道 Claude Code 的原理,可以参考这个仓库 learn-claude-code,它的核心就是工具调用+循环,这个过程通常被称作 agent loop,如下图所示。

伪代码便于理解,可以写成

 

而我们只需要提供一个命令行工具 就能让 LLM 完成非常多的任务,比如创建文件 、查看文件 、修改文件 、定时任务 等,所以现在也有基于 Claude Code 的 OpenClaw 类似物实现,如 nanoclaw.

恰好 openai 的 方法有一个参数叫 ,接收的是一个列表,里面可以放一些我们提供的工具名和对应的描述、参数等,如果你还不是很了解,可以先阅读这个文档,它的用法如下:

 

我们开始编写这个工具,创建一个 ,为了便于管理,将工具定义为一个类,需要有一个静态方法返回上面 openai 库需要的工具定义,还要有一个方法执行 LLM 需要执行的命令。

创建一个 文件,写上 agent loop 逻辑:

然后改造一下 中回复消息函数:

现在让我们来看看,问两个问题:






太好了,大功告成,但是有的时候我们会遇到飞书消息重复推送的情况

我们可以按照官方文档处理一下,设置一个集合

 
  
    
    

其实定时任务也是一个工具,可以参考 nanobot 的实现,加载 SKILLS 也不难,就是把它的说明文件加载到 system prompt 中,例如

 

这里就不过多赘述,现在我们就实现了一个能调用工具的 Agent,完结撒花 🎉

小讯
上一篇 2026-03-31 18:50
下一篇 2026-03-31 18:48

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/228502.html