上一篇链接 https://articles.zsxq.com/id_gfrf35we94gw.html
编译与运行
代码写完了,现在让小龙虾跑起来!这是最激动人心的时刻。
1安装依赖
cd E:\Source\openclaw\openclaw-clone # 进入项目目录 pnpm install # 安装所有依赖预期输出:Packages: +954 Progress: resolved 954, reused 139, downloaded 814, added 954, done常见问题:
- 如果下载很慢,尝试使用国内镜像:pnpm config set registry https://registry.npmmirror.com
- 如果报 sharp 安装失败,运行:pnpm install --ignore-scripts && pnpm rebuild sharp
2编译 TypeScript
pnpm build成功标志:
- 没有错误输出
- 生成了 dist/ 目录
- dist/index.js 文件存在
如果报错:
- 查看错误信息,通常是类型错误或导入路径错误
- 检查 tsconfig.json 配置是否正确
- 确保所有文件都已正确创建
3配置环境变量
# 复制环境变量模板 cp .env.example .env # Windows 用户使用: copy .env.example .env编辑 .env 文件,至少配置一个 AI 模型:# 推荐使用智谱清言(有免费额度) GLM_API_KEY=你的API密钥 GLM_MODEL=glm-4-flash
4启动网关
node openclaw.mjs gateway start成功启动输出:✓ Found GLM_API_KEY in environment Starting OpenClaw Gateway... ✓ GLM/智谱清言 AI Provider initialized (智谱AI) ✓ Gateway started successfully Gateway is running: WebSocket: ws://0.0.0.0:3100 HTTP API: http://0.0.0.0:3101 Press Ctrl+C to stop
5验证运行状态
打开浏览器访问以下地址:
http://localhost:3101/API 文档首页http://localhost:3101/health健康检查http://localhost:3101/status网关状态http://localhost:3101/chat聊天界面(与小龙虾对话!)
🎉 小龙虾已经跑起来了!
访问 http://localhost:3101/chat 开始和小龙虾聊天吧!
配置 AI 模型
小龙虾支持多种 AI 模型,推荐使用中国的 AI 模型(注册简单、有免费额度)。
1
支持的 AI 模型
模型 环境变量 价格 推荐
智谱清言 GLM GLM_API_KEY 免费500万token/月 ⭐ 首推
DeepSeek 深度求索 DEEPSEEK_API_KEY ¥1/百万token 最便宜
通义千问 Qwen QWEN_API_KEY ¥2/百万token 阿里云
Moonshot/Kimi MOONSHOT_API_KEY ¥12/百万token 长上下文
Anthropic Claude ANTHROPIC_API_KEY $3/百万token 国际
2
获取智谱清言 API Key(推荐)
步骤:
访问 https://open.bigmodel.cn/
点击右上角「登录」,使用手机号或微信注册
登录后,点击右上角头像 → 「API密钥」
或直接访问 https://open.bigmodel.cn/usercenter/apikeys
点击「创建API密钥」,输入名称,点击「创建」
立即复制保存密钥!(只显示一次)
免费额度:
glm-4-flash: 500万 tokens/月
glm-4: 100万 tokens/月
glm-4v: 50万 tokens/月
3
配置 .env 文件
编辑项目根目录的 .env 文件:
# ===== AI 模型配置(选择一个即可)=====
# 方案1:智谱清言 GLM(推荐 - 有免费额度)
GLM_API_KEY=你的API密钥粘贴在这里
GLM_MODEL=glm-4-flash
# 方案2:DeepSeek(最便宜)
# DEEPSEEK_API_KEY=sk-your-key-here
# DEEPSEEK_MODEL=deepseek-chat
# 方案3:通义千问
# QWEN_API_KEY=sk-your-key-here
# QWEN_MODEL=qwen-turbo
# 方案4:Moonshot/Kimi
# MOONSHOT_API_KEY=sk-your-key-here
# MOONSHOT_MODEL=moonshot-v1-8k
注意:
只需要配置一个 AI 模型即可
配置后需要重新编译并重启网关
系统会按优先级自动选择:GLM → DeepSeek → Qwen → Moonshot → Anthropic
4
重启验证
# 1. 停止当前网关(Ctrl+C) # 2. 重新编译(因为修改了代码才需要) pnpm build # 3. 重新启动 node openclaw.mjs gateway start
验证成功标志:
✓ Found GLM_API_KEY in environment ✓ GLM/智谱清言 AI Provider initialized (智谱AI)
🎉 AI 配置完成!
现在小龙虾已经接入了智能大脑,可以进行智能对话了!
聊天界面
小龙虾内置了一个漂亮的网页聊天界面,让你可以直接在浏览器中与它对话。
1访问聊天界面
确保网关已启动,然后访问:
2界面功能
- 实时连接状态 - 显示 WebSocket 连接状态和运行时间
- 消息输入框 - 输入消息按回车或点击发送按钮
- 快捷按钮 - Ping、状态、帮助、打招呼、清空聊天
- 消息气泡 - 区分用户消息和小龙虾回复
- 深色主题 - 舒适的暗色界面
3public/index.html 聊天页面代码
如果聊天页面不存在,需要创建 public/index.html 文件
📄 查看完整代码(较长,点击展开)
🎉 聊天界面完成!
现在你可以通过浏览器和小龙虾愉快地聊天了!
?
常见问题排查
遇到问题不要慌!这里列出了常见问题和解决方案。
1pnpm install 失败
症状:下载超时、网络错误、sharp 安装失败解决方案:# 1. 使用国内镜像 pnpm config set registry https://registry.npmmirror.com # 2. 清理缓存重试 pnpm store prune pnpm install # 3. 如果 sharp 失败 pnpm install --ignore-scripts pnpm rebuild sharp
2pnpm build 编译错误
症状:TypeScript 类型错误、找不到模块解决方案:
- 检查错误信息中的文件名和行号
- 确保所有 import 路径以 .js 结尾(ESM 要求)
- 检查 tsconfig.json 是否正确
- 运行 pnpm typecheck 单独检查类型
3网关启动失败
症状:端口被占用、模块找不到解决方案:# 检查端口是否被占用 netstat -ano | findstr :3100 netstat -ano | findstr :3101 # 使用其他端口启动 node openclaw.mjs gateway start --port 3200 --http-port 3201 # 确保已编译 pnpm build
4AI 不回复 / 使用简单响应
症状:小龙虾只会简单回复,不使用 AI 模型检查清单:
- 确认 .env 文件中配置了 API Key
- 确认 API Key 正确(没有多余空格)
- 确认运行了 pnpm build 重新编译
- 确认重启了网关
- 查看启动日志是否显示 "✓ GLM/智谱清言 AI Provider initialized"
5聊天页面无法连接
症状:页面显示"连接中..."或"已断开"解决方案:
- 确认网关正在运行
- 确认 WebSocket 端口 3100 没有被防火墙阻止
- 尝试用 ws://127.0.0.1:3100 代替 localhost
- 打开浏览器控制台(F12)查看错误信息
6API 返回错误
常见 API 错误:
401 UnauthorizedAPI Key 无效或过期403 Forbidden余额不足或权限不够429 Too Many Requests请求太频繁,稍后重试500 Internal Error服务端错误,稍后重试
还有问题?
查看项目 GitHub Issues 或加入社区讨论:https://github.com/openclaw/openclaw
⚙
运行机制详解(带工具调用)
通过一个实际案例,详细了解小龙虾内部是如何工作的。这是一个带有工具调用能力的智能助手!
0案例场景
用户在浏览器打开聊天页面,输入:"今天天气怎么样?"
小龙虾调用天气API,返回深圳市宝安区的实时天气。
1完整流程图
┌─────────────────────────────────────────────────────────────────┐
│ 用户浏览器 (聊天页面) │
│ [输入框] 今天天气怎么样? [发送] │
└─────────────────────────────┬───────────────────────────────────┘
│ ① WebSocket 发送
▼
┌─────────────────────────────────────────────────────────────────┐
│ Gateway WebSocket Server │
│ ② handleChatMessage() 接收消息 │
│ ③ detectIntent() 意图识别 → 检测到"天气"关键词 │
│ ④ 调用 getWeather() 工具函数 │
└─────────────────────────────┬───────────────────────────────────┘
│ ⑤ HTTP 请求
▼
┌─────────────────────────────────────────────────────────────────┐
│ 和风天气 API (qweather.com) │
│ GET /v7/weather/now?location=101280604 │
│ 返回: { temp:"26", text:"多云", humidity:"75", windDir:"东南风" }│
└─────────────────────────────┬───────────────────────────────────┘
│ ⑥ 返回天气数据
▼
┌─────────────────────────────────────────────────────────────────┐
│ Gateway WebSocket Server │
│ ⑦ 将天气数据注入 AI 上下文 │
│ ⑧ 调用智谱清言 API,让 AI 组织自然语言回复 │
└─────────────────────────────┬───────────────────────────────────┘
│ ⑨ AI 生成回复
▼
┌─────────────────────────────────────────────────────────────────┐
│ 智谱清言 AI 服务器 │
│ 收到上下文: 用户问天气 + 实时天气数据 │
│ 生成: "🌤️ 深圳宝安区现在26°C,多云,适合外出哦!" │
└─────────────────────────────┬───────────────────────────────────┘
│ ⑩ WebSocket 推送
▼
┌─────────────────────────────────────────────────────────────────┐
│ 用户浏览器 │
│ [小龙虾] 🌤️ 深圳宝安区现在的天气: │
│ • 天气:多云 │
│ • 温度:26°C(体感 28°C) │
│ • 湿度:75% │
│ • 风况:东南风 3级 │
│ 今天比较舒适,适合外出哦! │
└─────────────────────────────────────────────────────────────────┘
2核心步骤解析
步骤说明代码位置① 发送用户点击发送,WebSocket 将消息传到服务器public/index.html② 接收服务器解析 JSON,提取消息内容ws-server.ts③ 意图识别检测关键词"天气",决定调用天气工具detectIntent()④ 工具调用调用 getWeather() 获取实时天气tools/weather.ts⑤⑥ API请求和风天气API,获取深圳宝安区天气qweather.com⑦⑧ AI将天气数据+用户问题发给AI,生成自然回复callGLM()⑨⑩ 返回AI 回复通过 WebSocket 推送给用户sendMessage()
意图识别代码
根据关键词判断用户意图,决定是否调用工具
📄 查看代码
4天气工具代码
调用和风天气API获取实时天气数据
📄 查看代码
5有工具 vs 无工具 对比
场景无工具调用有工具调用问"天气""抱歉,我无法获取实时天气...""🌤️ 深圳宝安区26°C,多云..."问"几点了""请查看您的设备时间""现在是 10:30:46"数据来源AI训练数据(可能过时)实时API调用用户体验❌ 不实用✅ 真正的助手
6工具系统架构
┌─────────────────────────────────────────────────────────────┐
│ 小龙虾工具系统 │
│ │
│ 用户消息 ──► 意图识别 ──► 工具调度 ──► AI润色 ──► 回复 │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 工具注册中心 │ │
│ │ │ │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │ │
│ │ │ 天气 │ │ 时间 │ │ 新闻 │ │ 翻译 │ │ │
│ │ │weather │ │ time │ │ news │ │translate│ │ │
│ │ └───┬────┘ └───┬────┘ └───┬────┘ └───┬────┘ │ │
│ │ │ │ │ │ │ │
│ │ ▼ ▼ ▼ ▼ │ │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │ │
│ │ │和风天气│ │系统时间│ │ 新闻 │ │ 翻译 │ │ │
│ │ │ API │ │ │ │ API │ │ API │ │ │
│ │ └────────┘ └────────┘ └────────┘ └────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 特点: 按需调用 | 可扩展 | 结果注入AI | AI润色输出 │
└─────────────────────────────────────────────────────────────┘
7环境变量配置 (.env)
🎉 理解了运行机制!
现在你知道小龙虾是如何工作的了:意图识别 → 工具调用 → AI润色 → 返回用户
这就是一个真正实用的AI助手的工作方式!