OpenClaw部署指南:从零搭建飞书AI助手,集成大模型与工具调用

📅 2026/8/7 1:34:06
OpenClaw部署指南:从零搭建飞书AI助手,集成大模型与工具调用
1. 从零到一为什么我们需要一个“聊天软件里的AI助手”最近几个月我身边不少朋友和同事都在讨论一个事儿怎么才能让AI更自然地融入日常工作流大家用ChatGPT、Claude或者国内的各类大模型基本还是“复制-粘贴-等待-复制”的循环效率有提升但总觉得差点意思。尤其是当你在飞书、钉钉或者微信群里讨论方案、整理会议纪要、查询数据时如果能让AI直接在这些聊天窗口里“待命”随叫随到那体验就完全不一样了。这就是我今天想跟你详细聊聊的OpenClaw。简单来说它是一个开源的AI Agent框架核心能力是让你能轻松地把大模型比如GPT-4、Claude、或者本地部署的Ollama模型接入到飞书、钉钉、微信等聊天软件里把它变成一个24小时在线的智能助手。你可以直接它提问让它帮你总结文档、写代码片段、查询知识库甚至基于你提供的工具比如调用API查询天气、操作数据库去完成更复杂的任务。听起来很酷对吧但我在第一次尝试部署OpenClaw时可没少踩坑。从Node.js环境报错、npm脚本权限问题到飞书机器人配置里各种“invalid redirect uri”、“app secret复制不上去”的诡异错误每一步都可能有“惊喜”。网上的教程要么过于简略要么版本过时照着做根本跑不通。所以我决定结合自己从零搭建、反复调试成功的经验写一份真正能“抄作业”的保姆级教程。无论你是前端、后端还是对运维了解不多的产品经理只要跟着步骤走都能在自己的飞书里拥有一个专属的AI伙伴。2. 部署前夜理解OpenClaw的架构与核心组件在动手安装之前我们得先搞清楚OpenClaw到底是个什么东西它由哪些部分组成这样后面遇到问题你才知道该从哪里入手排查。盲目跟着命令敲一旦报错就会完全懵掉。OpenClaw本质上是一个基于Node.js的后端服务。它的核心职责是作为一个“中间人”或“调度中心”负责三件事对接聊天平台通过各平台如飞书官方提供的机器人/开放平台API接收用户发送的消息。调度AI大脑将用户的消息结合上下文和历史对话发送给配置好的大语言模型LLM并获取模型的回复。扩展工具能力允许模型在思考后调用开发者预先定义好的“工具”Tools比如执行一段代码、查询数据库、调用外部API等然后用工具执行的结果继续生成最终回复。为了实现这些一个典型的OpenClaw部署包含以下核心组件OpenClaw主服务 (OpenClaw Server)这是核心的Node.js应用。它包含了处理消息流、管理对话状态、调用工具和模型的核心逻辑。我们通过Git克隆代码、安装依赖、运行的就是这个服务。大语言模型 (LLM) 后端OpenClaw本身不包含模型它需要连接一个模型服务。这可以是云服务API如OpenAI的GPT系列、Anthropic的Claude系列你需要提供相应的API Key。本地模型服务如通过Ollama在本地电脑或服务器上运行的Llama 3、Qwen等开源模型。这也是很多开发者为了数据隐私和免费使用而选择的方案。平台适配器 (Platform Adapter)为了让OpenClaw能理解飞书、钉钉等不同平台的消息格式需要对应的适配器。OpenClaw社区通常提供了这些适配器的插件或配置模块。对于飞书我们需要配置飞书机器人的凭证信息。工具定义 (Tools)这是让AI“干活”的关键。你可以用代码定义一些函数比如“获取当前时间”、“查询数据库用户列表”、“调用某内部系统API创建工单”。OpenClaw会将这些函数的描述“告诉”AI模型模型在认为需要时就会请求调用这个工具。它们之间的关系你可以想象成一个餐厅你用户在飞书点餐台下单发送消息。飞书机器人适配器服务员把订单传给OpenClaw主服务后厨调度。OpenClaw主服务厨师长看了看订单决定需要用到工具厨具和食材比如需要查一下库存调用查询工具然后开始用LLM后端主厨烹饪生成思考过程。主厨可能会让助手用特定的工具锅具处理食材执行工具函数最后将做好的菜回复通过服务员端给你。理解了这套流程后面配置config.json或环境变量时你就能明白每一行配置是管哪一部分的而不是机械地填空。3. 夯实地基Node.js环境与项目依赖的避坑指南几乎所有OpenClaw的部署教程第一步都是“安装Node.js”但恰恰是这一步让很多新手包括当初的我出师未捷。下面我以Windows系统为例macOS/Linux原理相通命令稍异带你绕开所有坑。3.1 Node.js安装与那个经典的“npm.ps1”错误首先去Node.js官网下载LTS长期支持版本比如20.x.x。这比追求最新版要稳定得多。安装过程无脑下一步即可但建议安装路径不要有中文和空格。安装完成后打开命令行CMD或PowerShell输入node -v和npm -v检查版本。如果看到版本号恭喜第一步成功了50%。为什么是50%因为紧接着你可能就会遇到这个高频错误npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1因为在此系统上禁止运行脚本。这个错误是因为PowerShell的执行策略Execution Policy默认禁止运行脚本包括npm脚本。解决方法不是去动那个npm.ps1文件而是以管理员身份打开PowerShell执行以下命令Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser执行后输入Y确认。这个命令将当前用户的执行策略设置为“RemoteSigned”允许运行本地创建的脚本和来自可信发布者的远程签名脚本。完成后再试npm -v应该就能正常显示了。注意有些教程会让人去修改系统环境变量或者用CMD而不用PowerShell这能临时绕过但治标不治本。修改执行策略是更规范的做法。如果你在公司电脑上操作且策略被组策略锁定可以尝试使用系统自带的“命令提示符CMD”来执行后续的npm命令因为CMD不受PowerShell执行策略影响。3.2 获取OpenClaw项目代码并安装依赖环境搞定后我们拉取代码。找一个你喜欢的目录在终端里执行# 克隆项目仓库使用 --depth 1 只克隆最新提交速度更快 git clone https://github.com/openclaw-ai/openclaw.git --depth 1 cd openclaw接下来是关键步骤安装依赖。在项目根目录下你会看到package.json文件。直接运行npm install这个过程可能会因为网络问题比较慢或者出现某些原生模块编译失败。这里有几个经验点网络问题如果npm install卡住或报错可以尝试切换npm源到国内镜像npm config set registry https://registry.npmmirror.com然后再执行npm install。Python与构建工具如果报错提示需要Python或node-gyp说明项目中有依赖需要编译。你需要确保系统已安装Python建议3.8并添加到系统PATH。Windows Build Tools针对Windows用户。可以运行npm install --global windows-build-tools或者更推荐的是安装Visual Studio Build Tools在安装时勾选“C桌面开发” workload。版本锁定如果依赖安装后项目运行仍有问题可以尝试删除node_modules文件夹和package-lock.json文件然后用npm ci命令代替npm install。npm ci会严格按照package-lock.json安装一致性更好但如果lock文件不存在或与package.json冲突它会报错。所以这通常是第二次尝试时的选择。依赖安装成功后你的“地基”就算打牢了。可以运行npm run start或查看package.json中的scripts字段看看默认的启动命令是什么不过先别急在启动之前我们必须先配置好飞书机器人。4. 关键一步在飞书开放平台创建与配置机器人这是连接OpenClaw和飞书的核心环节也是最容易出错的地方。请严格按照以下步骤操作并理解每一个参数的意义。4.1 创建企业自建应用访问 飞书开放平台 用你的飞书账号登录通常需要一个企业账号个人账号部分功能受限。点击顶部导航栏的“创建企业自建应用”。填写应用名称如“我的AI助手”、描述并选择应用图标。这些以后都可以改。创建成功后进入应用详情页。在这里你需要记录两个最重要的凭证App ID应用的唯一标识。App Secret相当于应用的密码。点击“重置”或“生成”来获取它并立即妥善保存比如保存在本地的加密笔记里。这个密钥只显示一次关闭页面后就看不到了丢失只能重置。4.2 配置权限与事件订阅光有凭证还不够我们需要告诉飞书这个应用具备哪些能力。添加权限在左侧菜单找到“权限管理”。你需要为机器人添加以下关键权限im:message获取用户发给机器人的单聊消息im:message.group_msg获取群聊中机器人的消息im:message.p2p_msg获取单聊消息根据你想让机器人做的事情可能还需要contact:user.id:readonly读取用户信息等。建议初期先按最小权限配置需要时再加。配置事件订阅这是最关键的步骤也是“invalid redirect uri”错误的根源。在左侧菜单找到“事件订阅”。请求地址 URL这里要填写你即将部署的OpenClaw服务的公网访问地址并加上飞书事件回调的路径。例如如果你打算在本地调试并使用内网穿透工具如ngrok、localtunnel将本地的3000端口暴露到一个公网地址那么你的地址可能是https://your-ngrok-subdomain.ngrok.io/feishu/event/callback注意OpenClaw的飞书适配器通常约定回调路径是/feishu/event/callback你需要在项目配置或代码中确认这一点。重点这个URL必须是公网可访问的HTTPS地址。飞书的服务器无法直接回调你的localhost:3000。这就是为什么本地开发必须使用内网穿透。验证请求填写URL后飞书会向该地址发送一个带challenge参数的GET请求。你的OpenClaw服务必须能正确接收并原样返回这个challenge值才能通过验证。通常OpenClaw的飞书适配器中间件已经处理了这部分逻辑只要你配置正确且服务在线点“保存”或“重试”即可通过。添加事件在事件订阅页面点击“添加事件”。你需要订阅接收消息 v2.0(im.message.receive_v1)这是机器人接收消息的核心事件。4.3 发布应用与获取访问凭证版本管理与发布在左侧菜单“应用发布”中创建一个版本并申请发布。通常需要企业管理员审核。对于测试你可以先将机器人添加为“可用人员”仅自己或小范围使用。启用机器人在应用详情的“功能”选项卡中确保“机器人”功能是开启状态。获取访问凭证Access TokenOpenClaw服务在运行时需要代表应用去调用飞书API比如发送消息。这需要动态的tenant_access_token。飞书开放平台提供了获取这个Token的API。不过OpenClaw服务通常会内置这个获取逻辑你只需要在配置文件中填入上一步拿到的App ID和App Secret它就会自动处理Token的获取与刷新。你不需要手动去调用API获取并填写Token。至此飞书侧的配置暂告一段落。请务必保存好App ID、App Secret和你配置的事件订阅请求地址。接下来我们要在OpenClaw中填入这些信息。5. 核心配置让OpenClaw连接飞书与AI大脑现在我们回到本地的OpenClaw项目。项目根目录下通常会有一个配置文件例如config.json,config.yaml, 或者.env文件。我们需要根据飞书和AI模型的配置来修改它。5.1 配置飞书适配器假设项目使用config.json我们需要找到或添加飞书配置部分。一个典型的配置结构如下{ port: 3000, logLevel: info, platforms: { feishu: { type: feishu, appId: 你的飞书App ID, appSecret: 你的飞书App Secret, encryptKey: , // 如果你在飞书后台配置了“Encrypt Key”则填写否则留空 verificationToken: , // 同上如果配置了则填写 eventEndpoint: /feishu/event/callback // 与飞书后台配置的事件订阅URL路径部分一致 } }, llm: { // AI模型配置见下一小节 } }关键点解析appIdappSecret就是你在飞书开放平台拿到的那两个字符串。直接复制粘贴进去。encryptKey和verificationToken在飞书后台“事件订阅”页面如果你开启了“Encrypt Key”和“Verification Token”以提高安全性就需要在这里填写。初期调试建议先关闭它们避免增加复杂度。eventEndpoint这个路径必须和你在飞书后台填写的“请求地址URL”中的路径部分完全一致。如果你填的URL是https://xxx.com/feishu/event/callback那么这里就是/feishu/event/callback。5.2 配置AI模型后端这是OpenClaw的“大脑”部分。这里我给出两种最常用方案的配置OpenAI API和本地Ollama。方案一使用OpenAI API如GPT-4llm: { type: openai, apiKey: 你的OpenAI API Key, model: gpt-4-turbo-preview, // 或 gpt-3.5-turbo baseURL: https://api.openai.com/v1 // 默认即可如果你用代理或反代可能需要改 }这种方式最简单网络通畅的话直接可用。方案二使用本地Ollama服务如Llama 3这是我更推荐的、免费且隐私安全的方式。首先安装并启动Ollama前往Ollama官网下载安装然后在命令行拉取并运行一个模型ollama pull llama3:8b # 拉取Llama 3 8B模型 ollama run llama3:8b # 运行模型会启动一个本地API服务默认端口11434然后在OpenClaw配置中指向它llm: { type: openai, // 注意很多框架兼容OpenAI API格式所以type可能还是openai apiKey: ollama, // 本地Ollama不需要真key但有些框架要求非空可填任意值如ollama model: llama3:8b, // 你拉取的模型名称 baseURL: http://localhost:11434/v1 // 指向本地Ollama服务的API地址 }这种配置利用了Ollama提供的OpenAI API兼容接口让OpenClaw以为自己在调用OpenAI实际上请求发到了本地的Ollama。5.3 处理“App Secret复制不上去”和“Invalid Redirect URI”问题这两个是高频错误根源在于细节。“App Secret复制不上去”这通常不是技术问题而是飞书开放平台UI的缓存或显示问题。尝试以下步骤彻底刷新浏览器页面CtrlF5。点击“重置App Secret”生成一个新的然后立即复制。如果是在某些密码管理器中填写尝试先复制到纯文本编辑器如记事本再从编辑器复制到配置文件中避免隐藏字符。“Invalid Redirect URI in H5 Case” / “请求不合法”这个错误几乎100%出现在事件订阅URL配置环节。确保是HTTPS飞书要求回调地址必须是https://开头。本地开发必须用ngrok等工具生成HTTPS地址。确保路径完全匹配检查飞书后台填写的URL和OpenClaw配置中的eventEndpoint路径是否严格一致。包括开头有无斜杠/。确保服务已启动且可达在保存配置前先用npm start启动你的OpenClaw服务并确保你的内网穿透工具如ngrok正在运行且生成的公网地址是有效的。你可以直接在浏览器访问https://你的ngrok地址/feishu/event/callback如果返回一些错误信息比如缺少参数至少证明网络是通的。如果连接超时说明服务没起来或穿透失败。检查端口和防火墙确保OpenClaw服务的端口如3000没有被其他程序占用并且防火墙允许该端口的入站连接。6. 启动、测试与调试验证你的AI助手配置完成后我们终于可以启动服务了。启动OpenClaw服务在项目根目录下运行启动命令。通常定义在package.json的scripts里可能是npm start # 或 node index.js # 或 npm run dev观察控制台输出应该能看到服务成功监听在某个端口如3000并且可能打印出“Feishu adapter initialized”之类的日志。启动内网穿透打开另一个终端窗口运行你的内网穿透工具。以ngrok为例需要先注册并获取authtokenngrok http 3000运行后ngrok会生成一个https://xxxx.ngrok.io的地址。复制这个地址。更新飞书事件订阅URL回到飞书开放平台将事件订阅的“请求地址”更新为https://xxxx.ngrok.io/feishu/event/callback记得加上你的特定路径。点击保存。如果配置正确飞书通常会显示“验证成功”或类似提示。添加机器人为好友在飞书开放平台应用详情的“权限管理”或“版本发布”区域将应用添加给测试企业或自己。然后在飞书客户端搜索你的应用名称将其添加为好友或拉入群聊。发送测试消息在飞书里给你的机器人发送一条消息比如“你好”。观察OpenClaw服务的控制台日志。你应该能看到类似这样的日志流[INFO] Received Feishu event: im.message.receive_v1 [INFO] Processing message from user: xxxxx [DEBUG] Calling LLM with prompt: ... [INFO] Sending reply to Feishu...如果一切顺利几秒后你就能在飞书里收到机器人的回复了常见启动问题排查端口占用如果启动失败提示端口被占用可以修改config.json里的port为其他值如3001同时记得更新内网穿透命令和飞书回调URL。依赖缺失如果启动时报错找不到模块可能是npm install不完整。尝试删除node_modules和package-lock.json重新npm install。配置错误仔细检查config.json的格式特别是JSON的逗号、引号确保没有拼写错误。飞书的App ID和App Secret是否填对。Ollama连接失败如果使用Ollama确保ollama run命令在运行并且baseURL中的端口默认11434正确。可以在浏览器访问http://localhost:11434/api/tags测试Ollama API是否正常。7. 进阶玩法为你的AI助手添加“工具”能力一个只会聊天的AI助手还不够强大。OpenClaw最精彩的部分在于“工具调用”Tool Calling这让AI可以真正操作外部系统。比如你可以让它“查一下今天北京的天气”或者“从数据库里找出上个月销售额最高的产品”。7.1 理解工具Tools的工作原理工具本质上是一个JavaScript/TypeScript函数附带一段给AI看的“描述”。当AI模型认为用户的问题需要调用某个工具时它会输出一个结构化的请求OpenClaw收到后执行对应的函数并将执行结果返回给AIAI再结合结果生成最终回复给用户。例如一个“获取天气”的工具描述可能是“这是一个获取指定城市当前天气的工具。输入参数city字符串城市名”。AI在理解用户问“北京天气怎么样”之后就会请求调用这个工具并传入city: “北京”。7.2 创建你的第一个工具获取当前时间我们在OpenClaw项目里创建一个简单的工具。通常工具文件放在src/tools/或tools/目录下。创建一个新文件currentTime.js// tools/currentTime.js export const currentTimeTool { // 给AI看的描述 definition: { name: get_current_time, description: 获取当前的日期和时间。, parameters: { type: object, properties: { // 这个工具不需要输入参数 }, required: [] } }, // 实际执行的函数 execute: async (args) { const now new Date(); // 返回一个格式化的时间字符串给AI return { success: true, output: 当前时间是${now.toLocaleString(zh-CN, { timeZone: Asia/Shanghai })} }; } };7.3 注册工具并测试接下来我们需要在OpenClaw的配置或主程序里注册这个工具这样服务启动时才能加载它。具体注册方式取决于OpenClaw项目的架构通常是在主入口文件如index.js或app.js中或者在一个专门的工具注册文件里。假设项目支持动态加载你可能需要修改配置// config.json { ... // 其他配置 tools: [./tools/currentTime.js] // 告诉框架去哪里加载工具 }或者在代码中显式注册// 在主服务启动文件中 import { currentTimeTool } from ./tools/currentTime.js; // ... 获取OpenClaw框架实例 ... claw.registerTool(currentTimeTool);重启OpenClaw服务。现在你可以在飞书里问你的机器人“现在几点了”。AI模型会分析你的问题识别出需要调用get_current_time工具然后工具函数被执行返回当前时间AI再组织语言回复你“当前时间是2024年5月15日 下午3:30:45”。7.4 开发更实用的工具连接外部API掌握了基础我们就可以开发更强大的工具。比如连接一个天气API。这里以和风天气为例需要注册获取API Key// tools/weather.js import axios from axios; // 需要先安装axios: npm install axios const HE_FENG_API_KEY 你的和风天气API Key; const HE_FENG_API_URL https://devapi.qweather.com/v7/weather/now; export const weatherTool { definition: { name: get_weather, description: 获取指定城市的实时天气情况。, parameters: { type: object, properties: { city: { type: string, description: 城市名称例如北京、上海 } }, required: [city] } }, execute: async ({ city }) { try { // 这里需要先将城市名转换为位置ID简化起见假设我们直接使用城市名查询 // 实际应调用和风天气的城市搜索API获取locationId const response await axios.get(HE_FENG_API_URL, { params: { location: city, key: HE_FENG_API_KEY } }); const data response.data; if (data.code 200) { const now data.now; return { success: true, output: ${city}的当前天气${now.text}温度${now.temp}摄氏度湿度${now.humidity}%风向${now.windDir}风力${now.windScale}级。 }; } else { return { success: false, output: 获取天气失败${data.message || 未知错误} }; } } catch (error) { console.error(Weather API error:, error); return { success: false, output: 调用天气服务时发生错误${error.message} }; } } };将这个工具也注册到系统中。现在你的AI助手就能回答“上海天气怎么样”这样的问题了。通过这种方式你可以无限扩展助手的能力查股票、订日历、发邮件、操作数据库等等。8. 生产环境部署从本地调试到稳定服务本地调试成功意味着核心流程已经跑通。但如果想让机器人7x24小时稳定服务你需要将其部署到服务器上。这里介绍两种主流且相对简单的方式PM2进程管理和Docker容器化。8.1 使用PM2进行进程管理推荐用于VPS如果你有一台云服务器如UbuntuPM2是一个非常好的Node.js应用进程管理工具能保证应用崩溃后自动重启并方便地查看日志。在服务器上安装Node.js、Git和PM2# Ubuntu/Debian 示例 sudo apt update sudo apt install -y nodejs npm git sudo npm install -g pm2克隆项目并安装依赖git clone https://github.com/openclaw-ai/openclaw.git cd openclaw npm install --production # 只安装生产依赖配置生产环境变量不要在代码中硬敏感信息。创建.env文件或在服务器环境变量中设置APP_ID、APP_SECRET、OPENAI_API_KEY等。使用PM2启动应用pm2 start npm --name openclaw-bot -- start # 或者如果入口文件是 index.js # pm2 start index.js --name openclaw-bot设置开机自启pm2 startup # 执行上面命令后会输出一条类似 sudo env PATH... 的命令复制并执行它 pm2 save配置Nginx反向代理与HTTPS为了让服务通过域名和HTTPS访问飞书事件回调必须HTTPS你需要配置Nginx。安装Nginx并配置一个server块将your-domain.com的请求代理到本地的http://localhost:3000。使用Certbot申请免费的Let‘s Encrypt SSL证书。将飞书后台的事件订阅URL更新为https://your-domain.com/feishu/event/callback。8.2 使用Docker容器化部署Docker能提供一致的环境更方便迁移和扩展。你需要编写一个Dockerfile和一个docker-compose.yml文件。Dockerfile:FROM node:20-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --onlyproduction COPY . . EXPOSE 3000 USER node CMD [node, index.js]docker-compose.yml:version: 3.8 services: openclaw: build: . container_name: openclaw-bot restart: unless-stopped ports: - 3000:3000 environment: - NODE_ENVproduction - APP_ID${APP_ID} - APP_SECRET${APP_SECRET} - OPENAI_API_KEY${OPENAI_API_KEY} # 其他环境变量... volumes: - ./logs:/app/logs # 可选挂载日志目录然后在服务器上安装Docker和Docker Compose将项目文件上传在同目录下创建.env文件填写敏感信息最后运行docker-compose up -d即可。8.3 监控与日志无论用哪种方式监控都必不可少。PM2pm2 logs openclaw-bot查看实时日志pm2 monit查看资源占用。Dockerdocker logs -f openclaw-bot查看容器日志。应用内日志确保OpenClaw配置了合理的logLevel如info并定期检查日志文件以便及时发现和排查错误例如飞书Token刷新失败、模型调用超时等。部署上线后你的飞书AI助手就正式成为一个随时待命的生产力工具了。你可以根据团队的需要不断为它添加新的工具让它成为处理日常琐事、快速查询信息、甚至触发自动化流程的智能中枢。这个从零搭建的过程虽然有些繁琐但一旦跑通你会发现它为工作和协作带来的效率提升是实实在在的。