OpenClaw简洁教程:用Docker与pnpm把飞书机器人跑起来
1. 飞书机器人跑不起来先看清 OpenClaw 的部署链路OpenClaw 是一个开源的 AI 代理框架能接入飞书、Telegram 等聊天平台把大模型能力变成你团队里的一个机器人。它适合想在飞书里搭一个能对话、能执行任务的助手的开发者尤其是那些不想从零写消息回调、又希望本地或服务器上可控部署的人。我这次要做的是把 OpenClaw 用 Docker 和 pnpm 完整跑起来并让飞书机器人真正收到消息、返回回执。很多人卡住的地方不是代码而是环境。Node.js 版本不对、pnpm 没装、Docker 镜像拉不下来、飞书应用权限没开任何一个环节出问题机器人就是沉默的。所以这篇教程按“环境准备 → 依赖安装 → 容器化 → 飞书配置 → 启动验证 → 排错”的顺序走每一步都给可复制的命令和配置。你跟着做最后应该能在飞书里给机器人发一条消息然后看到它回复。先明确几个核心概念。OpenClaw 本身是一个 Node.js 项目所以需要 Node.js 运行时pnpm 是它的包管理器比 npm 快且省磁盘Docker 用来把整个运行环境打包避免“我本地能跑服务器上不行”的问题。飞书这边你需要创建一个企业自建应用拿到 App ID 和 App Secret并开启机器人能力。这三块拼起来才是一个完整的飞书机器人。我试过在 macOS 和 Ubuntu 上分别部署最大的感受是Node.js 版本一定要锁在 22.x LTS。低于 18 会直接报错20 虽然能跑但某些依赖会警告。pnpm 的版本倒不挑但建议用最新稳定版。Docker 部署时网络问题比配置问题更常见所以下面会给出国内镜像加速的写法。2. TaoToken 前置模型接入与 API Key 准备OpenClaw 自己不带模型它需要你提供一个兼容 OpenAI 接口的模型服务。你可以用本地 Ollama也可以用云端 API。如果你手头没有现成的模型 Key或者想统一管理多个模型的调用TaoToken 是一个可以用的入口。它提供兼容 OpenAI 格式的 API你拿到 Base URL 和 Key 之后填进 OpenClaw 的配置里就行。具体操作是这样的打开 TaoToken 的 API Keys 页面创建一个新的 Key复制下来。然后你会用到两个地址Base URL 是https://taotoken.net/api模型 ID 根据你选的模型填比如gpt-4o或者claude-3-5-sonnet。这三个东西——Base URL、Key、Model ID——在后面配置 OpenClaw 时会反复用到建议先记在一个文本文件里。如果你只是想先验证流程不想折腾模型也可以用 Ollama 本地跑一个。Ollama 的 Base URL 是http://localhost:11434/v1Key 随便填一个非空字符串就行模型 ID 写你ollama list里看到的名称。但要注意Ollama 在 Docker 容器里访问宿主机服务时地址不能写localhost得写host.docker.internalmacOS/Windows或者宿主机的局域网 IPLinux。TaoToken 的好处是它把模型调用统一成 OpenAI 格式OpenClaw 不需要为每个模型单独适配。你可以在配置里写多个 provider然后按需切换。比如白天用云端模型处理复杂任务晚上用本地 Ollama 跑简单对话。这种灵活性在团队场景里很实用。拿到 Key 之后不要直接硬编码在代码里。OpenClaw 支持.env文件你把OPENAI_API_KEY和OPENAI_BASE_URL写进去然后在配置文件里引用环境变量。这样既安全也方便在不同环境之间迁移。下面一节会给出具体的.env和docker-compose.yml写法。3. 可复制配置Dockerfile、pnpm 脚本与飞书应用参数这一节是核心所有配置都可以直接复制。先看项目结构。假设你已经把 OpenClaw 的代码克隆到本地git clone https://github.com/openclaw/openclaw.git cd openclaw然后创建.env文件cp .env.example .env编辑.env填入你的模型信息OPENAI_API_KEY你的TaoTokenKey OPENAI_BASE_URLhttps://taotoken.net/api OPENAI_MODELgpt-4o FEISHU_APP_IDcli_xxxxxxxx FEISHU_APP_SECRETxxxxxxxxxxxxxxxx FEISHU_VERIFICATION_TOKENxxxxxxxx FEISHU_ENCRYPT_KEYxxxxxxxx飞书的这四个参数需要你去飞书开放平台创建企业自建应用后获取。App ID 和 App Secret 在“凭证与基础信息”里Verification Token 和 Encrypt Key 在“事件订阅”里。注意事件订阅的请求地址先随便填一个等 Docker 跑起来后再改成你的公网地址或者内网穿透地址。接下来是Dockerfile。OpenClaw 官方可能已经提供了但为了确保 pnpm 和 Node.js 版本正确我建议用下面这个FROM node:22-alpine RUN corepack enable corepack prepare pnpmlatest --activate WORKDIR /app COPY package.json pnpm-lock.yaml ./ RUN pnpm install --frozen-lockfile COPY . . RUN pnpm build EXPOSE 3000 CMD [pnpm, start]这个 Dockerfile 做了几件事基于 Node.js 22 Alpine 镜像启用 corepack 来管理 pnpm先复制依赖文件安装依赖利用 Docker 缓存再复制源码构建最后暴露 3000 端口并启动。如果你不需要构建可以去掉pnpm build直接pnpm start。然后是docker-compose.ymlversion: 3.8 services: openclaw: build: . container_name: openclaw restart: unless-stopped ports: - 3000:3000 env_file: - .env volumes: - ./data:/app/data extra_hosts: - host.docker.internal:host-gatewayextra_hosts这一行是为了让容器内能访问宿主机的 Ollama。如果你只用云端模型可以删掉。volumes把数据目录挂载出来避免容器重启后会话丢失。飞书应用这边你需要在开放平台做几件事。第一开启机器人能力。第二在“权限管理”里添加im:message、im:message:send_as_bot、im:chat:readonly等权限。第三在“事件订阅”里添加im.message.receive_v1事件。第四把请求地址填成你的服务地址比如https://你的域名/webhook/feishu。如果你在本地跑可以用内网穿透工具生成一个临时地址但注意不要用任何违规的网络工具直接用云服务器或者公司内网映射就行。配置完成后启动容器docker-compose up -d查看日志docker-compose logs -f如果看到Server listening on port 3000和Feishu bot initialized说明启动成功。4. 验证请求启动日志检查与飞书消息回执容器跑起来后先别急着在飞书里发消息。第一步是检查日志里有没有报错。常见的成功日志长这样[INFO] Loading config from .env [INFO] Model provider: openai (https://taotoken.net/api) [INFO] Feishu app initialized: cli_xxxxxxxx [INFO] Webhook server listening on 0.0.0.0:3000 [INFO] OpenClaw ready如果看到Error: Cannot find module或者EACCES说明依赖没装好或者权限有问题。如果是401 Unauthorized检查你的 TaoToken Key 是否正确。如果是Feishu verification failed检查 Verification Token 和 Encrypt Key 是否和飞书后台一致。日志没问题后在飞书里找到你的机器人发一条“你好”。然后回到终端看日志[INFO] Received message from user: ou_xxxxxxxx [INFO] Sending to model: gpt-4o [INFO] Model response: 你好有什么可以帮你的 [INFO] Reply sent to Feishu如果看到这几行说明消息链路通了。飞书里应该也能收到机器人的回复。如果没有回复先检查飞书事件订阅的请求地址是否可达。你可以在服务器上curl一下自己的 webhook 地址curl -X POST https://你的域名/webhook/feishu -H Content-Type: application/json -d {type:url_verification,challenge:test}如果返回{challenge:test}说明 webhook 正常。如果超时检查防火墙和端口映射。还有一个验证点是模型调用。你可以直接在容器里执行一个测试脚本docker exec -it openclaw pnpm run test:model如果项目没有这个脚本可以手动发一个请求docker exec -it openclaw curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $OPENAI_API_KEY \ -H Content-Type: application/json \ -d {model:gpt-4o,messages:[{role:user,content:test}]}如果返回正常的 JSON说明模型侧没问题。5. 常见错排查401、local proxy failed 与 reading choices部署过程中最容易遇到的几个报错我一个个说。401 Unauthorized这个通常出现在模型调用环节。原因可能是 Key 过期、Base URL 写错、或者模型 ID 不存在。先检查.env里的OPENAI_API_KEY有没有多余空格再确认OPENAI_BASE_URL是https://taotoken.net/api而不是带/v1的地址有些框架会自动拼/v1。如果用的是 TaoToken去控制台确认 Key 的状态是“启用”。local proxy failed这个报错说明 OpenClaw 尝试通过本地代理访问外部服务但代理没起来或者配置不对。如果你没有用代理检查.env里有没有HTTP_PROXY或HTTPS_PROXY变量有就删掉。如果你确实需要代理确保代理地址是容器内可达的。但注意任何涉及违规网络工具的代理都不能用这里只讨论正常的网络配置。reading choices这个报错一般出现在模型返回格式不对的时候。OpenClaw 期望 OpenAI 格式的响应里面有一个choices数组。如果模型返回的是其他格式就会报Cannot read property choices of undefined。解决办法是确认你的模型服务兼容 OpenAI 接口。TaoToken 是兼容的Ollama 也是兼容的但有些自建服务可能需要加一个适配层。OAuth 相关报错如果你在飞书配置里用了 OAuth 授权可能会遇到invalid redirect_uri或者app ticket expired。检查飞书后台的“安全设置”里重定向 URL 是否和你的服务地址一致。另外App Ticket 需要定期刷新OpenClaw 一般会自动处理但如果日志里频繁出现可以重启容器。端口被占用Error: listen EADDRINUSE: address already in use :::3000。说明 3000 端口被其他程序占了。改docker-compose.yml里的端口映射比如3001:3000然后重启。pnpm install 失败如果卡在resolving packages可能是网络问题。在Dockerfile里加一行RUN pnpm config set registry https://registry.npmmirror.com/然后再pnpm install。飞书消息重复回复检查事件订阅里有没有重复添加im.message.receive_v1。另外OpenClaw 默认会处理消息去重但如果你的服务部署了多个实例需要加 Redis 做共享去重。6. 语义一致 CTA从跑通到长期编码机器人跑通之后你可能会想把它用在更复杂的场景里比如让它在飞书里执行代码任务、查询文档、或者做长期的项目助手。这时候模型的稳定性和调用成本就变得重要了。TaoToken 的 Coding Plan 适合这种长期编码场景它提供固定的模型调用额度你不用每次手动充 Key也不用担心突然限流。如果你只是想验证模型对话效果可以直接用 TaoToken 的模型对话页面快速测试不同模型的回复质量。如果你需要管理多个项目的 API Key控制台里的 API Keys 页面可以创建和吊销 Key方便团队协作。接入文档里有详细的接口说明和示例代码包括如何配置 Base URL、如何传参、如何处理流式响应。Claude Code 的 Anthropic 兼容接口也有专门说明如果你用 Claude 系列模型可以直接参考。最后说一个实用技巧把 OpenClaw 的日志输出到文件然后配一个简单的日志轮转。这样出问题的时候你可以回溯最近几天的消息记录快速定位是模型侧还是飞书侧的问题。具体做法是在docker-compose.yml里加一个 logging 配置logging: driver: json-file options: max-size: 10m max-file: 3这样日志不会无限增长也不会把磁盘写满。跑通之后你可以把整个docker-compose.yml和.env备份一份下次换服务器直接复制过去五分钟就能重新起来。

相关新闻

openJiuwen DeepSearch 溯源内容识别 Prompt 体系:从句子级候选提取到相似度校验的完整实现

openJiuwen DeepSearch 溯源内容识别 Prompt 体系:从句子级候选提取到相似度校验的完整实现

人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体 【免费下载链接】deepsearch openJiuwen DeepSearch是一款知识增强的深度搜索与研究框架,有业界领先的片段级引用和溯源推理能力,提供精准Agentic搜索与研究能力 项目地址: https:/…

2026/10/12 20:53:32 阅读更多 →
蓝桥杯Python模拟赛复盘:填空题与编程题解题技巧及避坑指南

蓝桥杯Python模拟赛复盘:填空题与编程题解题技巧及避坑指南

1. 这场模拟赛到底在考什么蓝桥杯的模拟赛,很多人把它当成“热身”或者“随便打打”,但真正刷过几套的人都知道,模拟赛的题目设计往往比正式省赛还要“刁钻”一点。原因很简单:模拟赛没有排名压力,出题人反而敢放一些思…

2026/10/12 20:53:32 阅读更多 →
无模型自适应预测控制与迭代学习控制仿真对比:从伪偏导估计到参数整定

无模型自适应预测控制与迭代学习控制仿真对比:从伪偏导估计到参数整定

有一类问题,在我做过的控制系统项目里反复出现:对象本身并不复杂,但模型就是写不准。机理模型建到一半,参数漂移一来,原本压得很稳的模型预测控制突然开始震荡。后来我转向无模型自适应预测控制(MFAPC&…

2026/10/12 20:53:32 阅读更多 →

最新新闻

虚拟内存深度解析:从地址翻译到性能调优的工程实践

虚拟内存深度解析:从地址翻译到性能调优的工程实践

1. 从一个“内存不够用”的深夜说起如果你写过稍微大一点的程序,或者同时开过十几个浏览器标签页、几个IDE、一个数据库再加一个本地服务,大概率见过系统弹出来的“内存不足”提示,或者眼睁睁看着某个进程被系统强制结束。这时候有人会告诉你…

2026/10/12 22:38:20 阅读更多 →
全球地区维表设计:国家省市三级建模与数据清洗导入避坑

全球地区维表设计:国家省市三级建模与数据清洗导入避坑

简介:一套包含全球主要国家、省/州及城市的地区数据库,以中英文双版本提供,适用于Web开发、数据分析、地图应用及行政区划映射场景。数据采用XML格式组织,结构清晰,便于直接解析和二次加工;中英文文件可独立…

2026/10/12 22:38:20 阅读更多 →
RAGFlow部署实战:Docker容器编排与systemd托管配置指南

RAGFlow部署实战:Docker容器编排与systemd托管配置指南

简介:面向具备Docker基础、希望快速部署或深入调优RAGFlow的技术人员,PDF文档系统讲解基于Docker部署RAGFlow时的关键配置:.env环境变量文件负责Elasticsearch、MySQL、MinIO、Redis等服务的端口与密码设置;service_conf.yaml.tem…

2026/10/12 22:38:19 阅读更多 →
2024全国职业院校技能大赛移动应用开发赛题拆解与Android实战指南

2024全国职业院校技能大赛移动应用开发赛题拆解与Android实战指南

简介:2024年全国职业院校技能大赛移动应用设计与开发赛项高职组赛题解析,以PDF文档形式呈现,共一个文件,大小约五百二十八KB,面向参赛选手、指导教师及移动应用开发学习者。文档完整收录竞赛试题零二卷,清晰…

2026/10/12 22:38:18 阅读更多 →
LL(1)语法分析器实现指南:从FIRST集与FOLLOW集到预测分析表

LL(1)语法分析器实现指南:从FIRST集与FOLLOW集到预测分析表

简介:编译原理课程中的LL(1)语法分析器实验,往往需要同时完成文法设计、预测分析表构造与输入串判别等多个环节。这套资源面向正在学习自顶向下语法分析的本科生,围绕实验二提供了一个完整方案,内含源代码、可执行程序、实验报告、…

2026/10/12 22:38:17 阅读更多 →
Python实现PL0编译器:从词法分析到P-code生成的完整课设指南

Python实现PL0编译器:从词法分析到P-code生成的完整课设指南

简介:面向南京航空航天大学计算机专业学生、也适合其他编译原理初学者的课程设计资源,以精简的PL0教学语言为载体,使用Python实现从词法分析、语法分析到语义分析与后端代码生成的完整编译器。压缩包共8个文件,主体是5个Python脚本…

2026/10/12 22:37:16 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →