装好 OpenClaw,接上模型和聊天软件
从一台什么都没装过的电脑开始,把 OpenClaw 跑起来, 配上 DeepSeek 模型,再接进飞书或微信,让它变成你手机里随时能找的助手。
装 Node.js(npm 会一起装好)
OpenClaw 是跑在 Node.js 上的程序,而 npm 是 Node.js 自带的, 装完 Node.js 就同时有了 npm。所以这一步做完,你的电脑就具备装任何 npm 包的能力了 —— 不需要 Homebrew,不需要 nvm,什么前置条件都不用。
这一个文件同时支持 Apple 芯片(M1/M2/M3/M4)和 Intel 芯片,不用区分。 下载完双击打开,一路点「继续」到底,中途会要你输入开机密码。
绝大多数 Windows 电脑用上面这个 64 位版本。如果你的电脑是骁龙/ARM 处理器(少数轻薄本), 改用 ARM64 版本(30.6 MB)。 下载完双击打开,一路点「Next」, 其中有一个 “Automatically install the necessary tools” 的勾选框,不要勾, 勾了会额外下载一大堆编译工具,很慢而且用不上。
不要用 apt install nodejs 或 dnf install nodejs 装。 主流发行版仓库里自带的 Node 普遍还停在 18 左右, 远低于 OpenClaw 要求的 22.22.3,装完也是白装。 官方的 NodeSource 源在国内又很慢。下面这套办法不依赖发行版、不需要 root, 任何 Linux 都通用。
先看清楚自己是什么架构,把这行粘进终端:
uname -m
输出 x86_64 就是常规服务器/电脑, 输出 aarch64 就是 ARM(树莓派、ARM 云主机)。 按结果选下面对应的一组命令,整段一起粘进去就行。
# 从国内镜像下载并解压到用户目录,全程不需要 root
curl -fsSL -o /tmp/node.tar.xz \
https://cdn.npmmirror.com/binaries/node/v26.7.0/node-v26.7.0-linux-x64.tar.xz
mkdir -p ~/.local/node
tar -xJf /tmp/node.tar.xz -C ~/.local/node --strip-components=1
# 加进 PATH,让终端能找到 node 命令
echo 'export PATH=$HOME/.local/node/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
curl -fsSL -o /tmp/node.tar.xz \
https://cdn.npmmirror.com/binaries/node/v26.7.0/node-v26.7.0-linux-arm64.tar.xz
mkdir -p ~/.local/node
tar -xJf /tmp/node.tar.xz -C ~/.local/node --strip-components=1
echo 'export PATH=$HOME/.local/node/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
装在自己的家目录下有个额外的好处:后面 npm install -g 装东西时 永远不会遇到权限报错,因为这个目录本来就是你的。 Mac 用户在第 04 步常踩的那个坑,Linux 这样装就直接绕过去了。
如果你用的是 zsh 而不是 bash,把上面两处 ~/.bashrc 改成 ~/.zshrc。不确定的话跑 echo $SHELL 看一眼。
这个下载链接指向 cdn.npmmirror.com, 是国内镜像自己的 CDN,不是 nodejs.org。所以下载速度是正常的国内速度, 不需要挂任何工具。
这个下载链接指向 cdn.npmmirror.com, 是国内镜像自己的 CDN,不是 nodejs.org。所以下载速度是正常的国内速度, 不需要挂任何工具。
打开终端,确认装好了
按 Command + 空格 打开搜索框,输入「终端」,回车。 会弹出一个黑色或白色的窗口,可以打字 —— 这就是终端。
按 Win 键,直接输入「PowerShell」, 在搜索结果里点「Windows PowerShell」打开。 会弹出一个蓝色或黑色的窗口 —— 这就是终端。
你在第 01 步就一直在终端里了,直接往下做。 (最后那句 source ~/.bashrc 已经让当前窗口生效了, 不用重开。)
如果你在装 Node.js 之前就开着终端窗口, 现在必须关掉重新开一个,否则终端不认识新装的命令。
如果你在装 Node.js 之前就开着终端窗口, 现在必须关掉重新开一个,否则终端不认识新装的命令。
把下面这两行原样粘进终端,按回车:
node -v
npm -v
v26.7.0
11.11.0
第一行是 Node.js 版本,第二行是 npm 版本(数字不一定和上面完全一样,正常)。 如果提示「找不到命令」或 command not found, 去报错排查看第一条。
Linux 上还有两个 Mac 和 Windows 完全不存在的前置条件, 建议现在就查一下,否则会在后面报出很难看懂的错。
# 1. 系统的 glibc 版本,必须 ≥ 2.28
ldd --version | head -1
# 2. libatomic 运行库,Node 25 以上必须有
ldconfig -p | grep libatomic
ldd (GNU libc) 2.35
libatomic.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libatomic.so.1
glibc 小于 2.28(常见于 CentOS 7)的话,官方 Node 二进制在这台机器上根本跑不起来, 只能换系统。Ubuntu 20.04 以上、Debian 10 以上、RHEL/CentOS 8 以上都没问题。
第二条没有任何输出说明缺 libatomic,装一下就行:
# Debian / Ubuntu
sudo apt update && sudo apt install -y libatomic1
# RHEL / CentOS / Fedora / openEuler
sudo dnf install -y libatomic
把 npm 换成国内源
这是整篇教程最关键的一行命令。不做这一步, 下一步装 OpenClaw 会卡在几百 MB 的下载上动不了。
npm config set registry https://registry.npmmirror.com
粘进终端回车,没有任何输出就是成功了。想确认的话再跑一句:
npm config get registry
https://registry.npmmirror.com/
很多教程还会让你设置 SHARP_IGNORE_GLOBAL_LIBVIPS、 配 binary 镜像、装编译工具链。对现在的 OpenClaw 这些全都不需要 —— 它的依赖树里没有任何一个包会去 GitHub 下二进制,也没有需要现场编译的。 多做那些步骤不会更快,只会引入新问题。
安装 OpenClaw
源换好了,现在真正装 OpenClaw。这一步要下载约 20 MB 的包并解压出 87 MB 的文件, 走国内源大概一两分钟。
npm install -g openclaw@latest
过程中会滚动一大堆文字,只要最后没有红色的 ERR! 就是成功。 装完验证一下:
openclaw --version
2026.7.1-2
如果这一步报 EACCES 或 permission denied,是权限问题, 排查区第二条有解法。 先别急着用 sudo,那会留下后患。
如果第 02 步里 npm -v 显示的是 12 或更高版本, 改用下面这条命令装。npm 12 默认会拦截安装脚本,不加这个参数会漏掉插件初始化。
npm install -g openclaw@latest --allow-scripts openclaw
启动配置向导
最后一步,运行配置向导。它会一步步问你要接哪个 AI 模型、绑哪个聊天渠道, 按方向键选、回车确认。
openclaw onboard --install-daemon
--install-daemon 的作用是让 OpenClaw 开机自启, 这样你不用每次手动开。不想要的话去掉这个参数就行。
Linux 上的自启是通过 systemd 用户服务实现的。 systemd 用户服务有个默认行为:你一断开 SSH,它就把服务停掉了。 如果这是台你要挂着长期跑的服务器,必须再执行一次下面这行, 否则退出登录 OpenClaw 就没了。
sudo loginctl enable-linger $USER
执行完可以用 systemctl --user status 看服务状态。桌面版 Linux 一直登录着的话,这一步可以不做。
配置完之后,常用的三条命令:
# 体检,配置有问题会告诉你哪里不对
openclaw doctor
# 看运行状态
openclaw status
# 打开网页版管理界面
openclaw dashboard
OpenClaw 本体到这里就装好了。但它现在还没有大脑,也还没接上聊天软件 —— 继续往下做第 06 步配 DeepSeek 模型, 然后按需接入飞书或微信。
配 DeepSeek —— 国内直连的模型
装好的 OpenClaw 还没有大脑,得先接一个 AI 模型。 DeepSeek 是国内环境下最省事的选择: 它的 API 服务器在国内,直连即可,不需要梯子,也不需要国外的信用卡。
插件安装会自动沿用你在第 03 步换好的国内源。 OpenClaw 装插件时读的就是你系统里的 npm 配置, 没有另外写死国外地址。所以这一节不用再做任何镜像设置。
第一步,装 DeepSeek 插件:
openclaw plugins install @openclaw/deepseek-provider
openclaw gateway restart
第二步,去 platform.deepseek.com 注册账号并创建一个 API Key。这个网站国内直接能打开。 创建后的 Key 长得像 sk- 开头的一长串, 只显示一次,务必当场复制保存。
第三步,把 Key 填进 OpenClaw:
openclaw onboard --auth-choice deepseek-api-key
它会提示你粘贴 Key,然后自动把默认模型设成 deepseek/deepseek-v4-flash。 粘贴时终端不会显示任何字符,这是正常的密码输入行为,粘完直接回车。
确认模型接上了:
openclaw models list --provider deepseek
deepseek/deepseek-v4-flash 上下文 1,000,000 默认
deepseek/deepseek-v4-pro 上下文 1,000,000
deepseek/deepseek-chat 上下文 131,072
deepseek/deepseek-reasoner 上下文 131,072
日常用 deepseek-v4-flash 就够了,快且便宜。
上面的 onboard 会自动把默认模型设成 DeepSeek。 但如果你之前已经配过别的模型(比如 Claude、GPT), 或者想在几个 DeepSeek 模型之间换,用这条命令单独改就行, 不用重跑整个配置流程。
openclaw models set deepseek/deepseek-v4-flash
换完确认一下当前生效的是哪个:
openclaw models status
四个 DeepSeek 模型都可以这样切,把命令末尾换成对应的名字即可:
# 日常首选:快、便宜、100万上下文
openclaw models set deepseek/deepseek-v4-flash
# 更强但更贵更慢
openclaw models set deepseek/deepseek-v4-pro
# V3.2 非思考版
openclaw models set deepseek/deepseek-chat
# V3.2 推理版
openclaw models set deepseek/deepseek-reasoner
如果你的 OpenClaw 早就配好了,只是想加上 DeepSeek, 不需要重跑 onboard,三条命令就够:
# 1. 装插件
openclaw plugins install @openclaw/deepseek-provider
# 2. 单独粘贴 API Key(不动其他配置)
openclaw models auth paste-api-key --provider deepseek
# 3. 设为默认
openclaw models set deepseek/deepseek-v4-flash
另外两个常用操作:在聊天里直接发 /model 可以临时换模型(不改默认值); 想配一个「DeepSeek 挂了就自动顶上」的备用模型用 openclaw models fallbacks add <模型名>。
如果改完没立即生效,重启一下网关: openclaw gateway restart。
如果你在第 05 步装了守护进程(加了 --install-daemon), 后台进程读不到你终端里的环境变量。 必须把 Key 写进配置文件,否则重启后模型就失效了:
# 把 sk-xxxxx 换成你自己的 Key
echo 'DEEPSEEK_API_KEY=sk-xxxxx' >> ~/.openclaw/.env
openclaw gateway restart
接入飞书
模型配好后,就可以把 OpenClaw 接到聊天软件里,用手机随时找它。 飞书是国内环境下体验最完整的渠道 —— 私聊、群聊、流式卡片回复都支持。
飞书渠道默认走 WebSocket 长连接, 这意味着不需要公网 IP、不需要域名、不需要备案, 家里的电脑或笔记本就能跑。 这是它在国内比大多数渠道好用的根本原因。
一条命令启动配置向导,插件会自动装上:
openclaw channels login --channel feishu
向导会让你二选一:
方式 A:扫码创建(更快,但只能自己用) +
用飞书 App 扫终端里的二维码,它会自动帮你建好机器人。 这个方式会把私聊锁定到你自己的账号,别人找不到这个机器人 —— 自己用的话这样最省事,也最安全。
国内版飞书 App 扫码没反应是已知情况。 遇到的话不用纠结,直接重跑一次命令改选方式 B。
方式 B:手动填 App ID / Secret(通用,推荐) +
去飞书开放平台 open.feishu.cn (国内直接能打开),登录后:
1. 创建一个「企业自建应用」,随便起个名字
2. 在「凭证与基础信息」页面复制 App ID 和 App Secret
3. 在「权限管理」里开通这四个权限:
im:message
im:chat
contact:user.base:readonly
contact:contact.base:readonly
4. 在「事件与回调」里,订阅方式选
「使用长连接接收事件」(千万别选 webhook,
那个要公网地址),然后添加事件
im.message.receive_v1
5. 在「版本管理与发布」里创建版本并发布,
等管理员审核通过(自己是管理员的话直接通过)
6. 回到终端,把 App ID 和 App Secret 粘进向导
配置完重启一下,然后就能在飞书里找到你的机器人了:
openclaw gateway restart
私聊默认是配对模式:陌生人发消息会收到一个配对码, 你得手动批准。群聊默认只响应白名单里的群,而且必须 @ 机器人。 这是有意为之的安全默认值。
openclaw pairing list feishu
openclaw pairing approve feishu <配对码>
在飞书里直接发 /status 看状态、 /reset 清空当前对话、 /model 换模型。 飞书没有原生斜杠菜单,当成普通文字发出去就行。
接入微信
微信渠道由腾讯微信团队官方维护, 走的是腾讯自己的 iLink 接口,不是那些容易封号的第三方逆向方案。
微信插件只支持私聊,不支持群聊 —— 这是插件自己声明的能力范围,不是配置问题。 需要群聊场景的话用飞书。
安装插件:
openclaw plugins install "@tencent-weixin/openclaw-weixin"
openclaw config set plugins.entries.openclaw-weixin.enabled true
openclaw gateway restart
然后扫码登录。这条命令必须在跑着 OpenClaw 的那台机器上执行:
openclaw channels login --channel openclaw-weixin
终端会打印一个二维码,用手机微信扫描并确认登录。 成功后凭证会保存在本地的 ~/.openclaw 目录里, 下次不用重复扫。
和飞书一样,陌生人发消息需要你批准:
openclaw pairing list openclaw-weixin
openclaw pairing approve openclaw-weixin <配对码>
微信插件 2.x 需要 OpenClaw 2026.5.12 或更新。 照本文装的是 2026.7.1-2,满足要求。 如果你的 OpenClaw 是更老的版本,插件启动时会自己报出来。
部署 DeepSeek Harness —— 从需求打造产品
第一章装的 OpenClaw 是个「会聊天、能办事」的助手。 这一章换一个工具:让 AI 直接把一个能跑的应用写出来 —— 你写一页需求,它规划、写代码、跑测试,最后交给你一个可以演示的成品。
DeepSeek Harness 是什么
DeepSeek Harness 是 DeepSeek 官方开源的 Agent 开发框架, 命令行工具叫 dsh。 它和第一章的 OpenClaw 不是一回事,也不是它的插件 —— 是两个独立的项目。
简单说:OpenClaw 负责「和你对话、帮你办事」, Harness 负责「把一个软件从需求写到能跑」。 你给它一段需求,它会自己拆任务、建文件、写代码、执行命令、跑测试、看报错再改, 循环直到做出来。
它默认给 Agent 配了这些能力(这决定了它能干什么):
| 工具 | 作用 |
|---|---|
| bash / pwsh | 执行终端命令(Windows 走 PowerShell),装依赖、跑测试靠它 |
| fs / fs-search | 读写文件、在项目里搜索 |
| str-replace-editor | 精确改代码,不是整文件重写 |
| todo / goal / workflow | 自己拆任务、记进度、按流程推进 |
| subagent | 派生子 Agent 并行处理独立的子任务 |
| web | 联网查资料 |
| jobs | 跑后台任务(比如开着开发服务器) |
这个项目非常新:当前版本是 0.1.0-rc.6, 2026 年 8 月 10 日才首次发布,还挂着 rc(候选版)标记。 适合尝鲜和做demo,暂时别拿它跑关键生产任务。
它内置了 bash、文件、PowerShell 三重沙箱和用户审批机制 —— Agent 要执行有风险的命令时会先问你。这点比裸跑脚本让人放心, 但也别完全依赖,重要目录记得先备份。
安装 DeepSeek Harness
好消息:第一章装的 Node.js 和国内源在这里可以直接复用, 不用重新配。如果你跳过了第一章,先回去做第 01 步和第 03 步。
我核对过:@deepseek-ai/dsh 在国内镜像上已同步,且包的内容指纹与官方源完全一致。 所以走国内源装是安全且够快的。
最省事的方式是不安装、直接运行(第一次会自动下载,之后有缓存):
npx -y @deepseek-ai/dsh --help
如果打算长期用,装成全局命令更方便,以后直接敲 dsh:
npm install -g @deepseek-ai/dsh
dsh --version
0.1.0-rc.6
Harness 默认开启使用数据上报,会把运行遥测发到 DeepSeek 的服务器。不想上报的话设一个环境变量关掉, 建议现在就加进去:
echo 'export DSH_TELEMETRY_DISABLED=1' >> ~/.zshrc
source ~/.zshrc
echo 'export DSH_TELEMETRY_DISABLED=1' >> ~/.bashrc
source ~/.bashrc
[Environment]::SetEnvironmentVariable("DSH_TELEMETRY_DISABLED","1","User")
配置 DeepSeek 模型
这一步几乎不用做什么 —— Harness 出厂默认用的就是 DeepSeek。 我把它的默认配置导出来看过,写死在里面的是:
provider: deepseek-official
model: deepseek-v4-flash
和第一章 OpenClaw 用的是同一个模型,所以你在第 06 步申请的那个 API Key 可以直接复用,不用再去申请一个。 如果还没有,去 platform.deepseek.com 创建一个。
Key 不是在命令行里填,而是在网页控制台的设置页里粘贴 —— 下一步启动之后就能看到入口。填进去后它会加密存在本机。
想确认配置树长什么样(排查问题时有用):
dsh --profile web --dump-default-config
会打印出几百行的插件配置树,不用细看, 但排查「模型没生效」这类问题时能一眼看到实际用的是什么。
打开一个产品工作区
你在哪个目录敲命令,哪个目录就是它的工作区。 Agent 之后建的所有文件都落在这里,也只在这个范围里活动。 所以务必先新建一个空目录再启动, 别在桌面或者家目录直接跑。
mkdir -p ~/ai-projects/knowledge-bot
cd ~/ai-projects/knowledge-bot
dsh web
mkdir -p ~/ai-projects/knowledge-bot
cd ~/ai-projects/knowledge-bot
dsh web
mkdir -Force "$HOME\ai-projects\knowledge-bot"
cd "$HOME\ai-projects\knowledge-bot"
dsh web
dsh web: http://127.0.0.1:3080
把这个地址复制到浏览器打开,就进到控制台了。 先去设置页把上一步的 API Key 填进去。
注意它绑的是 127.0.0.1, 只有你这台机器能访问,同一个局域网里的人也打不开。 这是刻意的安全设计,别随便改成 0.0.0.0。
如果启动时报 EADDRINUSE, 说明 3080 端口被别的程序占了,换一个即可:
dsh web --port 8080
写一页产品需求说明
这是整章唯一需要你动脑的一步,也是决定成品质量的一步。 需求写得含糊,它就给你一个含糊的东西;需求写得具体,它做出来的就能直接用。
一页需求说明应该包含四样东西: 要解决什么问题、给谁用、必须能做到什么、做到什么程度算完成。 最后一项最容易被忽略,但它是让 AI 能自己判断「做完没有」的关键。
下面是一份可以直接照抄的样例:做一个个人知识库问答机器人 —— 把自己的文档传进去,然后用自然语言提问,它基于你的文档回答并给出出处。
项目:个人知识库问答机器人
要解决的问题
我手里有一堆资料(课程讲义、产品文档、会议纪要、论文),
想问什么就得自己翻。希望能把它们传进一个工具里,
直接问问题,它从我的资料里找答案,并告诉我这答案是从哪一份文件的哪一段来的。
给谁用
我自己,在本机浏览器里用。不需要给别人访问。
必须能做到
- 上传文档建立知识库,至少支持 txt、markdown、pdf、docx 四种格式
- 可以传多份文档,可以查看已传列表,可以删除其中某一份
- 文档自动切成片段并建立索引,切片不能把句子从中间截断
- 提问后返回答案,并且每个答案必须附带引用: 来源文件名 + 命中的原文片段
- 资料里没有的问题,必须明确回答「资料中未找到」,不允许自己编
- 知识库要落盘保存,重启程序后还在
模型接入要求(重要)
- 大模型走 OpenAI 兼容接口,在配置文件或界面里填三样: 接口地址、API Key、模型名
- 换厂商只改这三项即可,不许把任何厂商写死在代码里。 要能接 DeepSeek、智谱、通义、月之暗面、硅基流动等
- Key 从配置文件或环境变量读取,绝对不能硬编码进源码
检索方式
- 默认用关键词检索,不依赖任何额外的付费接口 —— 只要有一个对话模型就能完整跑起来
- 把检索做成可替换的模块,之后能换成向量检索而不用改其他代码
- 中文要能正常检索,别只按空格分词
不做什么
不做用户登录、不做多人协同、不做云端部署、不做对话历史管理。
先把「传文档 → 提问 → 带出处回答」这条主线做通。
完成标准
- 有自动化测试,且全部通过
- 拒答测试:问一个知识库里完全没有的问题, 回答中必须出现「未找到」之类的说明,且不得给出具体事实
- 引用真实性测试:答案里给出的原文片段, 必须能在对应的源文件里逐字找到(这一条要能被程序自动校验)
- 召回测试:准备 5 组「问题 → 应该命中的文档」, 正确文档出现在前 3 条结果里的比例不低于 80%
- 切片测试:随机抽 10 个切片,不能有从句子中间断开的
- 用一条命令就能在本地启动
技术要求
用你认为最合适的轻量技术栈。优先选依赖少、装起来快的方案。
所有依赖必须能从国内网络正常安装。
「完成标准」里的四条测试,是这份需求真正的价值所在。 尤其是拒答测试和引用真实性测试 —— 这两条正好卡住知识库机器人最容易出的两个毛病: 资料里没有却硬编一个答案,以及给出的「原文引用」其实是模型自己造的。
关键在于这些都能被程序自动验证: 引用片段是否逐字存在于源文件,是可以写成断言的。 有了它们,Agent 才能自己写测试、自己判断做完没有。
需求里特意写了「默认用关键词检索」,这不是偷懒,是有原因的: 向量检索需要 embedding 接口,而 DeepSeek 官方只提供对话接口,没有 embedding。 如果不写这一条,它很可能默认给你上向量方案, 然后你拿着第一章那个 DeepSeek Key 会直接卡住。
所以要求「把检索做成可替换的模块」—— 先用零依赖的关键词跑通,想升级向量检索时再单独接一个 embedding 服务。 下一步会讲怎么接。
让它规划、编码、运行、测试
把上一步的需求整段粘进控制台的对话框,前面加一句话告诉它怎么干:
请按下面这份需求做一个能跑的应用。
先列出实现计划让我确认,再开始写代码。
写完后自己运行测试,把测试结果告诉我。
如果测试没过,自己修到过为止。
---
(在这里粘贴上一步的需求说明)
接下来你会看到它依次做这几件事,全程可以在界面上看到:
| 阶段 | 它在干什么 | 你要做什么 |
|---|---|---|
| 拆任务 | 把需求拆成一串待办事项,列出来 | 看一眼有没有理解错,有就直接打断纠正 |
| 建文件 | 在你的工作区里创建项目文件 | 不用管 |
| 写代码 | 逐个文件写,边写边标记待办完成 | 不用管 |
| 执行命令 | 装依赖、跑测试。这时可能弹出审批 | 看清楚命令再批准 |
| 看报错改 | 测试没过就读报错、改代码、重跑 | 不用管,让它自己循环 |
执行终端命令时会弹出确认。 别无脑一路点同意 —— 至少扫一眼命令内容。 正常应该是 npm install、 npm test 这类; 如果看到删除、移动系统目录之类的操作,直接拒绝并让它换个做法。
这一步大概要跑 5 到 15 分钟,取决于需求复杂度。 中途可以随时打断 —— 发现它跑偏了,直接发消息纠正就行, 不用等它做完。
把 MVP 跑起来看看
它说做完之后,别信它的话,自己跑一遍。 先看看工作区里到底生成了什么:
cd ~/ai-projects/knowledge-bot
ls -la
cd ~/ai-projects/knowledge-bot
ls -la
cd "$HOME\ai-projects\knowledge-bot"
dir
然后直接问它怎么运行,这比自己猜快得多:
用一条命令告诉我怎么在本地打开这个应用,
以及怎么运行测试。直接给命令,不要解释。
按它给的命令跑起来,然后拿真实场景试一遍。 照下面这七步走一遍,就知道它到底靠不靠谱:
验收测试用例(按顺序做)
- 1 · 传一份自己的文档
找一份你熟悉内容的文件(课程讲义、说明书都行),传进去。 确认列表里能看到它。 - 2 · 问一个文档里明确写了的问题
答案要对,而且要给出文件名和原文片段。 拿引用片段去原文里搜一下,必须能一字不差地找到。 - 3 · 问一个文档里完全没有的问题 ← 最关键
比如传的是课程讲义,你问「明天天气怎么样」。 它必须说「资料中未找到」,而不是自信地编一个答案出来。 - 4 · 传第二份内容不同的文档,再问第一份里的问题
看它会不会被新文档干扰、引用错文件。 - 5 · 传一份长文档(几十页的 PDF)
看能不能处理完,问一个在文档中后部的问题能不能命中。 - 6 · 关掉程序重新启动
已传的文档还在不在,能不能继续提问。 - 7 · 换一个厂商的 Key
把配置里的接口地址、Key、模型名换成另一家, 不改任何代码,应该照常能用。
拒答能力是知识库机器人的分水岭。 做得不好的实现,你问什么它都能答得头头是道 —— 因为它压根没在用你的文档,是模型自己在编。
第 2 条那个「拿引用片段回原文搜」的动作也别省。 很多实现会给出看起来很像的引用,但那段话在原文里根本不存在, 是模型顺着上下文改写出来的。逐字搜一下就露馅了。
关键词检索跑通之后,如果觉得「换个说法就搜不到」, 可以接一个 embedding 服务改成语义检索。 DeepSeek 没有 embedding 接口,需要单独找一家 —— 硅基流动的 BAAI/bge-m3 是个合适的选择:同样是 OpenAI 兼容接口 (https://api.siliconflow.cn/v1), 中文效果好,单条最长 8192 token。
把检索模块再实现一个向量检索的版本,用 OpenAI 兼容的
embedding 接口(地址、Key、模型名同样走配置,不要写死)。
保留原来的关键词检索,在配置里可以切换用哪一种。
两种方式都要能通过原有的全部测试。
根据测试结果继续迭代
第一版几乎不可能一次到位,这很正常。 迭代的质量取决于你反馈的质量。
| 这样说 | |
|---|---|
| 没用的反馈 | 「答得不准,优化一下」 「检索效果不好」 |
| 有用的反馈 |
「传了《传热学讲义.pdf》,问『导热微分方程的边界条件有几类』。 实际:答对了内容,但引用显示的是『第 2 章』, 我在原文里搜不到它给的那段话。 期望:引用片段必须是原文里逐字存在的。 请修复,并补一个自动校验引用片段确实存在于源文件的测试。」 |
差别在于:具体输入 → 实际输出 → 期望输出。 给全这三样,它基本一次就能修对; 只说「不对」,它就只能猜,很可能改坏别的地方。
再加一句「补一个覆盖这种情况的测试」,可以防止同一个问题反复出现:
发现一个问题。
输入:(把你操作的步骤和数据写清楚)
实际结果:(现在是什么)
期望结果:(应该是什么)
请修复,并补一个覆盖这种情况的测试,
改完把测试跑一遍告诉我结果。
功能都对了之后,可以再让它做几轮打磨:
# 边界情况
处理这几种异常:传空文件、传超过 50MB 的文件、
传加密的 PDF、传扫描版没有文字层的 PDF、知识库为空时提问。
每种都要给出清楚的提示,不能直接崩。
# 检索质量
现在问题里的说法和原文用词不一样时经常搜不到。
在关键词检索里加上同义扩展,并补一组这样的测试用例。
# 回答质量
让答案在引用原文的同时,标出这段话在文档中的大致位置
(第几页或第几节),方便我回去核对。
# 说明文档
写一个 README,说明怎么运行、怎么换模型厂商、
怎么运行测试、代码结构是什么样的。
走完这一章,你手上会有一个能跑、有测试、可以直接演示的小产品, 而你写的只是一页需求和几轮反馈。
更重要的是这套方法本身: 把需求写到可验证,让 AI 自己跑测试自己修 —— 换个题目照样能用。把第 13 步那份需求模板改成你自己的项目, 整个流程可以完全复用。
报错排查
换了镜像源还是装不上 OpenClaw +
已经 npm config set registry 了,安装依然卡住 / 超时 / 报错
先跑这段自检,它会一次性把所有可能出问题的地方打出来。 把输出对照下面几条看,基本能定位到具体原因。
echo "1. 当前源: $(npm config get registry)"
echo "2. 代理残留: $(npm config get proxy) / $(npm config get https-proxy)"
echo "3. URL改写: $(npm config get replace-registry-host)"
echo -n "4. 元数据域名: "; curl -s -o /dev/null -w "%{http_code}\n" -m 15 \
https://registry.npmmirror.com/openclaw/latest
echo -n "5. 包体CDN: "; curl -s -r 0-99 -o /dev/null -w "%{http_code}\n" -m 15 \
https://cdn.npmmirror.com/packages/openclaw/2026.7.1-2/openclaw-2026.7.1-2.tgz
echo "6. 剩余空间: $(df -h ~ | tail -1 | awk '{print $4}')"
echo "1. 当前源: $(npm config get registry)"
echo "2. 代理残留: $(npm config get proxy) / $(npm config get https-proxy)"
echo "3. URL改写: $(npm config get replace-registry-host)"
echo -n "4. 元数据域名: "; curl -s -o /dev/null -w "%{http_code}\n" -m 15 \
https://registry.npmmirror.com/openclaw/latest
echo -n "5. 包体CDN: "; curl -s -r 0-99 -o /dev/null -w "%{http_code}\n" -m 15 \
https://cdn.npmmirror.com/packages/openclaw/2026.7.1-2/openclaw-2026.7.1-2.tgz
echo "6. 剩余空间: $(df -h ~ | tail -1 | awk '{print $4}')"
"1. 当前源: " + (npm config get registry)
"2. 代理残留: " + (npm config get proxy) + " / " + (npm config get https-proxy)
"3. URL改写: " + (npm config get replace-registry-host)
try { "4. 元数据: " + (iwr https://registry.npmmirror.com/openclaw/latest `
-UseBasicParsing -TimeoutSec 15).StatusCode } catch { "4. 元数据: 失败" }
try { "5. 包体CDN: " + (iwr https://cdn.npmmirror.com/packages/openclaw/2026.7.1-2/openclaw-2026.7.1-2.tgz `
-Method Head -UseBasicParsing -TimeoutSec 15).StatusCode } catch { "5. 包体CDN: 失败" }
1. 当前源: https://registry.npmmirror.com/
2. 代理残留: null / null
3. URL改写: npmjs
4. 元数据域名: 200
5. 包体CDN: 206
6. 剩余空间: (至少 2G)
下面按出问题的概率从高到低排列:
① 第 1 行显示的还是 npmjs.org —— 源根本没生效
最隐蔽的一种情况是你用了 sudo:
sudo 会切换到 root 身份,读的是 root 的配置文件,
你给自己账号配的镜像源完全不起作用。
Mac 用户遇到权限报错后改用 sudo,就会莫名其妙掉进这个坑。
# 两条输出如果不一样,就是它了
npm config get registry
sudo npm config get registry
正确做法不是给 sudo 也配一遍源,而是回到 权限那一条,把 npm 装到用户目录, 从此不再需要 sudo。另外也检查一下当前目录有没有 .npmrc 文件在覆盖你的配置。
正确做法不是给 sudo 也配一遍源,而是按 第 01 步把 Node 装到 ~/.local/node,从此不需要 sudo。 另外检查当前目录有没有 .npmrc 在覆盖配置。
Windows 一般不涉及 sudo。检查一下当前目录有没有 .npmrc 文件在覆盖你的全局配置。
② 第 4 行是 200 但第 5 行失败 —— CDN 被单独拦了
这是很多人误判的地方:npm 取包信息走
registry.npmmirror.com,
但真正下载包体时会跳转到
cdn.npmmirror.com。
部分校园网、公司网只放行了前者。
症状就是「查得到版本、装不下来」。换腾讯云源可以绕开:
npm config set registry https://mirrors.cloud.tencent.com/npm/
npm install -g openclaw@latest
③ 第 2 行不是 null —— 有失效的代理配置残留
以前配过代理、后来代理没了,npm 还在往那个地址发请求。清掉即可:
npm config delete proxy
npm config delete https-proxy
npm cache clean --force
npm install -g openclaw@latest
④ 第 3 行不是 npmjs
OpenClaw 的包里带了一份 npm-shrinkwrap.json,
里面 308 个依赖的下载地址全部写死成 npmjs.org。
npm 默认会自动把它们改写成你配的镜像(这就是
replace-registry-host=npmjs 的作用)。
但如果这项被人改成了 never,
npm 就会老老实实去 npmjs.org 拉 308 个包,在国内必然失败。改回来:
npm config set replace-registry-host npmjs
⑤ 报证书错误 —— 校园网/公司网做了 TLS 中间人
典型报错是 SELF_SIGNED_CERT_IN_CHAIN 或
UNABLE_TO_VERIFY_LEAF_SIGNATURE。
正确做法是把单位的根证书加进来,而不是关掉校验。
实在要临时应急,装完记得马上改回来:
npm config set strict-ssl false
npm install -g openclaw@latest
npm config set strict-ssl true
⑥ 网络本身就抖 —— 加大重试
OpenClaw 的包压缩后 20 MB、解压出 87 MB 共 8550 个文件,
比一般的包大不少,弱网下容易中断。让 npm 更耐心一点:
npm config set fetch-retries 5
npm config set fetch-retry-maxtimeout 120000
npm config set maxsockets 3
npm install -g openclaw@latest
maxsockets 调小反而更容易成功 —— 并发少一点,弱网下每条连接更稳。
⑦ 以上都试过还是不行 —— 换台机器打包搬过去
找一台网络正常的机器(或者手机热点),把整棵依赖树打包带走:
npm install openclaw@latest --prefix /tmp/ocbundle \
--registry https://registry.npmmirror.com
tar -czf openclaw-bundle.tgz -C /tmp/ocbundle .
npm install openclaw@latest --prefix /tmp/ocbundle \
--registry https://registry.npmmirror.com
tar -czf openclaw-bundle.tgz -C /tmp/ocbundle .
npm install openclaw@latest --prefix C:\ocbundle `
--registry https://registry.npmmirror.com
Compress-Archive -Path C:\ocbundle\* -DestinationPath openclaw-bundle.zip
注意打包的机器要和目标机器同系统同架构 (Mac 打的包不能给 Windows 用,x86 打的不能给 ARM 用), 因为里面含有预编译的原生模块。
装完 Node.js,终端说找不到 node 命令 +
command not found: node / 'node' 不是内部或外部命令
九成是终端没重启。终端只在打开的那一刻读取一次系统路径, 你装 Node.js 之前开的窗口是不知道有新命令的。 完全关掉终端窗口,重新打开一个,再试一次。
Windows 上如果重开还是不行,注销一次账户再登录,或者直接重启电脑。
Mac 上如果重开还是不行,确认安装包真的装完了(有没有中途要密码没输)。
Linux 上原因通常不一样 —— 多半是 PATH 那行没写进去,或者写进了错的文件。 先确认文件本身在不在:ls ~/.local/node/bin/node。 文件在但命令找不到,就是 PATH 的问题。
# 先看自己用的是哪个 shell
echo $SHELL
# bash 用户写这个
echo 'export PATH=$HOME/.local/node/bin:$PATH' >> ~/.bashrc && source ~/.bashrc
# zsh 用户写这个
echo 'export PATH=$HOME/.local/node/bin:$PATH' >> ~/.zshrc && source ~/.zshrc
装 OpenClaw 时提示权限不足 +
EACCES: permission denied
Mac 上 Node.js 装在系统目录,普通用户没有写入权限。 推荐的做法不是加 sudo,而是把 npm 的安装位置改到你自己的目录下, 一次设置永久生效,以后装什么包都不会再有权限问题。依次执行这三行:
mkdir -p ~/.npm-global
npm config set prefix ~/.npm-global
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.zshrc
然后关掉终端重新打开,再跑一次第 04 步的安装命令。
Windows 上这个报错比较少见。如果遇到, 右键点 PowerShell 图标选「以管理员身份运行」,再执行安装命令。
按第 01 步那样装到 ~/.local/node 的话, 不应该遇到这个报错,因为那个目录本来就属于你。 如果还是报权限错,说明你的 node 其实是系统里另一个(比如 apt 装的)在起作用 —— 跑 which node 看一眼路径, 如果不是 ~/.local/node/bin/node, 回第 01 步重新把 PATH 配好。不要用 sudo npm 硬来。
Linux:报 GLIBC 版本找不到 +
version `GLIBC_2.28' not found (required by node)
你的系统太老了。官方 Node 二进制从 18 版起就要求 glibc 2.28 或更高,而 CentOS 7 只有 2.17, 差得比较远,没有办法通过装补丁解决。
跑 ldd --version | head -1 确认一下版本。 低于 2.28 的话,唯一的出路是换系统 —— Ubuntu 20.04 以上、 Debian 10 以上、RHEL/CentOS 8 以上、openEuler 都可以。
Linux:报 libatomic 找不到 +
error while loading shared libraries: libatomic.so.1
Node 25 以上的官方 Linux 二进制需要 libatomic 运行库, 而精简过的服务器镜像(各种 minimal、cloud image、Docker 基础镜像) 经常没有预装。装一个就好:
# Debian / Ubuntu
sudo apt update && sudo apt install -y libatomic1
# RHEL / CentOS / Fedora / openEuler
sudo dnf install -y libatomic
Linux:断开 SSH 后 OpenClaw 就停了 +
退出登录后 systemctl --user status 显示服务已停止
这是 systemd 用户服务的默认行为,不是 OpenClaw 的 bug —— 用户一登出,属于他的用户服务就会被一起收掉。 开启 linger 就能让它继续跑:
sudo loginctl enable-linger $USER
执行一次就永久生效。想确认有没有开: loginctl show-user $USER | grep Linger, 显示 Linger=yes 就对了。
提示 Node.js 版本不兼容 +
EBADENGINE / Unsupported engine
你的电脑上原本就有一个旧版 Node.js,而且它的版本落在了 OpenClaw 不支持的区间。 注意这个区间很反直觉 —— Node 23 整个大版本、24.0 到 24.14、25.0 到 25.8 都是不支持的, 不是「版本越新越好」那么简单。
解决办法:回到第 01 步重新下载安装包装一遍, 新版会直接覆盖旧版。装完关掉终端重开,用第 02 步的检查器确认一下。
解决办法:回到第 01 步重新下载安装包装一遍, 新版会直接覆盖旧版。装完关掉终端重开,用第 02 步的检查器确认一下。
解决办法:回到第 01 步把那组命令重新跑一遍。 因为装在 ~/.local/node 并且 PATH 里排在前面, 它会盖过系统里原有的旧版 Node,不用先卸载旧的。 跑完用第 02 步的检查器确认一下。
下载卡住不动 / 半天没反应 +
ETIMEDOUT / ECONNRESET / 进度条长时间静止
先确认第 03 步真的做了 —— 跑 npm config get registry, 必须输出 https://registry.npmmirror.com/。 如果输出的是 registry.npmjs.org,说明换源没生效,重做第 03 步。
源没问题还是慢,清一下缓存重试:
npm cache clean --force
npm install -g openclaw@latest
检查更新 / openclaw update 卡住不动 +
检查更新时长时间无响应或超时
这是国内环境下唯一一个换源解决不了的地方。 OpenClaw 的「检查新版本」功能把 registry.npmjs.org 写死在了代码里,不读你的镜像配置,所以在国内会卡住。
不影响使用 —— 装插件、装依赖都是走你配的国内源, 只有这个版本检查会卡。想升级 OpenClaw 的话别用它自带的更新命令, 直接用 npm 装一遍就行:
npm install -g openclaw@latest
openclaw gateway restart
DeepSeek 报没有 API Key / 重启后模型失效 +
DEEPSEEK_API_KEY is not set / 模型不可用
典型症状是刚配好能用,重启电脑或重启服务后就不行了。 原因是 Key 只存在于你当时那个终端窗口的环境变量里, 后台守护进程读不到。写进配置文件就永久生效:
echo 'DEEPSEEK_API_KEY=sk-你的key' >> ~/.openclaw/.env
openclaw gateway restart
飞书机器人收不到消息 +
在飞书里发消息,机器人毫无反应
按顺序排查这五条,绝大多数问题出在第 1、2 条:
1. 应用在飞书开放平台发布了吗、审核通过了吗?
只创建不发布是不会生效的
2. 事件订阅方式选的是「长连接」吗?
选成 webhook 的话需要公网地址,家用电脑收不到
3. 事件里加了 im.message.receive_v1 吗
4. 四个权限都开通了吗
5. 网关在跑吗:openclaw gateway status
openclaw logs --follow
群里不回复是另一回事:默认必须 @ 机器人, 而且群要在白名单里。先确认机器人已被拉进群,并且你 @ 了它。
微信插件装上了但连不上 +
plugins list 显示已安装,但 channels status 不通
先确认插件真的被启用了(安装和启用是两件事):
openclaw plugins list
openclaw channels status --probe
openclaw config set plugins.entries.openclaw-weixin.enabled true
openclaw gateway restart
如果启用微信后网关开始反复重启, 把 OpenClaw 和插件都更新到最新再试:
npm install -g openclaw@latest
openclaw plugins install "@tencent-weixin/openclaw-weixin" --force
openclaw gateway restart
镜像上还没有最新版本 +
No matching version found for openclaw@…
国内镜像是按需同步的,官方刚发布的版本可能要等一会儿才会出现。 你可以手动催它同步,把下面这行粘进终端:
curl -X PUT https://registry.npmmirror.com/-/package/openclaw/syncs
会返回一段 {"ok":true,...}, 等十几秒再重新执行安装命令即可。
为什么这样装 —— 给想弄明白的人
是。npm 每个包都带一个内容指纹,官方源和国内镜像上的这个指纹完全一致, 连 npm 官方的数字签名都是同一份,说明镜像只是原样搬运,没有改动包内容。
想自己验的话,跑这两行对比输出:
npm view openclaw@latest dist.integrity --registry https://registry.npmjs.org
npm view openclaw@latest dist.integrity --registry https://registry.npmmirror.com
它是官方仓库的第三方分支,内置了钉钉、企业微信、QQ 等国内渠道。 这些渠道是它的真实价值,但代价是版本严重滞后 —— 而且它的「最新版」标签因为版本号规则改过,永久卡在了 2026 年 2 月的构建上。
| 对比项 | 官方 openclaw | 第三方 openclaw-cn |
|---|---|---|
| 装到的版本 | 2026.7.1-2 | 2026.2.5 |
| 该版本发布于 | 2026-07-18 | 2026-02-03 |
| 包最后更新 | 2026-08-15 | 2026-05-19 |
| 命令名 | openclaw | openclaw-cn |
另外它的一键安装脚本默认用的其实是官方源而非国内源, 所谓「国内加速」加速的只是脚本本身的下载。真要用的话, 记得显式指定版本号而不是写 @latest。
官方确实提供 curl … | bash 这类一键脚本, 对已经有开发环境的人很方便。但它遇到没装 Node.js 的空白机器时, 在国内都会绕远路:
Mac 上它会调 Homebrew 去装 Node,而全新的 Mac 通常没有 Homebrew, 于是先卡在装 Homebrew 这一步,那个过程在国内更慢。
Linux 上它走的是 NodeSource 源 (deb.nodesource.com / rpm.nodesource.com), 那是国外服务器,国内拉取很慢甚至超时;而且它还要 sudo 往系统里加软件源。 本文改成直接解压官方二进制到家目录,既走国内 CDN,又完全不需要 root。
对空白机器来说,本文这条路才是最短的。
这三条不在正文里,因为它们不是「怎么装」,而是「装完之后怎么用才有价值」—— 尤其针对政务数据场景。
- 先划清数据边界,再谈接入。 本教程里所有模型调用都会把内容发到厂商服务器。 涉密、涉个人信息的数据不要直接喂给公有云模型。 真要处理这类数据,走本地部署的开源模型 (OpenClaw 和 Harness 都支持接 ollama 这类本地推理服务,配置方式和接 DeepSeek 完全一样, 只是把接口地址换成本机地址)。
- 第二章那套方法比第二章的成果更值钱。 「把验收标准写成程序能自动验证的条件,让 AI 自己跑测试自己判断做完没有」—— 这个思路换到任何业务场景都成立:数据校验规则、报表口径、 接口联调,都能用同一套方式让 AI 自己闭环。 做出来的那个知识库机器人只是个练手载体。
- 把「问不出来的问题」当成资产。 知识库机器人上线后,最有价值的不是它答对的那些, 而是它答不出来的那些——那正好标出了你们文档体系里缺失的部分。 建议把「资料中未找到」的问题单独记一份日志,定期回看。