03月14日
一、今日完成情况
- 彻底完成两个系统的远程自由切换,实验室完成系统盘的重置(花了我今天2.5h至少)
- 打通飞书机器人和openclaw之间的通讯联系。
二、今日感悟
- 核心业务数据:
- 飞书机器人的创建遇到了问题,可是这提高了我英语文档阅读和配置的能力,提高了我测试项目的耐心。
- 双系统远程切换我配置了很久,重启了很多次,每次重启都是需要时间成本的,进一步打磨了我的耐心。
- 今日工作总结:
- 项目为主,反正就是测试的活,只不过测试的话不单一,不枯燥,容易破防
- 明日工作计划:
- 完成未完成当中任务的1-2个事情,明天还是没得休息的。
- 今日学习成长:
- 还是提高不少的,至少飞书的通信打通了,那一刻的开心和考试出成绩一样。
三、备注
- 预定–完成openclaw的QQ接口部署,因为我早就想要系统性的了解QQ群聊的消息了
- 预定–华尔街AI发展推演没有系统化了解,导出为图谱的形式
- 预定–老大的论文阅读还是没有完成,这里需要花点时间梳理其算法逻辑。
- 预定–服务器上面部署AI的接口,然后就是大语言模型的部署,这个可以了解一下,查看是否麻烦。
- 预定–tmux完成基本操作,vi查看基本操作。
- 预定–完成网络技术前沿的作业,当然可以使用Claude code完成
- 预定–完成网络过技术前沿的课程报告,主要是关于论文的撰写,需要按照学术期刊模板撰写报告。
- 预定–实验室开会,费老师要求 廖师兄那边对接新项目,并且跑通基本代码。
- 预定–实验室服务器,部署阿里大模型,打通大语言模型的配置流程,未来使用的时候可以熟悉一点。今天开会,感觉费老师对于我的定位,是廖紫江的继任,生态位的意思吧。
- 预定–完成系统的备份,系统盘制作保存ISO文件
- 已完成–完成双系统的远程丝滑切换,这个事情今日完成了。
四、完成远程系统自定义跳转
1、背景
我现在使用nomachine可以分别访问两个系统,可是我无法实现自定义重启之后,去到哪一个系统。原因是,我ubuntu重启,默认的开机引导向是ubuntu,所以我无法跳转到windows。
我的window重启的时候,跳转项Windows,也就是我的EFI选项当中,光标是自动停留在我上一个系统状态,也就是Windows,这就导致我远程控制的情况下无法切换系统了。
因此,我的任务的打通两个系统之间的切换,方法如下。
2、解决
Ubuntu->Windows
这个只需要实现自定义EFI,怎么自定义呢,因为linux使用指令可以修改系统,我下面探索到了,指定下面系统的方法了:
我之前使用了这个方法,grub-reboot , 可是我使用这个方法指定下面的切换系统的问题就显现出来来,就是黑屏。 grub-reboot 必黑屏,说明直接链式启动失败。
你可以尝试在 Ubuntu 里安装 efibootmgr,直接修改 UEFI 的下一次启动变量,绕过 GRUB 的 chainload 机制。
操作步骤:
sudo efibootmgr -v
找到 Windows Boot Manager 对应的编号,如图所示:
图片所示的内容,windows的位置是0001,好记住这个位置,使用以下指令:
sudo efibootmgr -n 0001 # 替换为实际的 4 位编号
sudo reboot
- 原理:这会告诉主板:“下次重启别跑 GRUB,直接跑 Windows 的 EFI”。
- 结果:
- 电脑重启 -> 主板直接加载 Windows -> 应该能避免 GRUB 切换导致的黑屏。
- 注意:再下一次重启,主板通常会恢复默认的 GRUB 顺序(除非你在 BIOS 里改了永久顺序)。
Windows->Ubuntu
这个就比较简单了,因为windows重启的问题在于,光标默认保持在windows的位置,而不是第一个的ubuntu位置,因此只需要修改重启引导的文件:
逻辑:
- 设置
GRUB_DEFAULT=0(Ubuntu)。 - 设置
GRUB_SAVEDEFAULT=false(禁止记忆上次选择)。 - 效果:无论上次用的是 Windows 还是 Ubuntu,只要重启,永远默认进 Ubuntu。
sudo vi /etc/default/grub
确认一下配置:
GRUB_DEFAULT=0
GRUB_SAVEDEFAULT=false
GRUB_TIMEOUT=5
3、 测试
就使用nomachine在电脑面前连接,然后使用指令重启即可,我可以把刚才的指令配置为.sh脚本简化操作。
#!/bin/bash
echo "🔍 正在扫描 UEFI 启动项以寻找 Windows..."
# 自动查找包含 "Windows" 字样的启动项 ID
WIN_ID=$(sudo efibootmgr -v | grep -i "Windows Boot Manager" | head -n 1 | awk '{print $1}' | tr -d '*')
if [ -z "$WIN_ID" ]; then
echo "❌ 错误:未找到 Windows Boot Manager。请检查 efibootmgr 输出。"
exit 1
fi
# 去掉可能的 "Boot" 前缀,只保留数字 (例如 Boot0001* -> 0001)
WIN_ID=${WIN_ID#Boot}
echo "✅ 找到 Windows 启动项 ID: $WIN_ID"
echo "⚡ 设置下一次启动为 Windows..."
# 设置下一次启动项
sudo efibootmgr -n "$WIN_ID"
if [ $? -eq 0 ]; then
echo "🚀 设置成功!系统将在 3 秒后重启并直接进入 Windows。"
echo "💡 提示:进入 Windows 后,请务必关闭【快速启动】以防下次黑屏。"
sleep 3
sudo reboot
else
echo "❌ 设置失败,请检查权限或命令。"
exit 1
fi
chmod +x ~/switch_to_win.sh
这个脚本通过测试不太行,重启的时候直接报error日志了,我现在严格的按照刚才的两条指令封装脚本
然后再Windows这边的锁屏界面,我发现无法连接,经过查找,应该是在进入桌面之前,我的nomachine或者Tailscale是没有启动的。
因此我在进入桌面之后,对两个软件的配置进行修改,Tailscale是超过系统层级的,不需要再次配置了,我发现,然后nomachine我在security配置了一下,现在再重启是一点问题都没有了。
五、openclaw踩坑记录
1. 模型配置错误:qwen-portal/qwen-max 顽固问题
现象
日志始终显示 Unknown model: qwen-portal/qwen-max,即使配置了 qwen/qwen-max
原因
openclaw.json中存在干扰配置:"models": { "qwen-portal/qwen-max": {} }误启
qwen-portal-auth插件(强制使用门户模型)
解决方案
# 1. 删除干扰配置
npm run openclaw -- config unset agents.defaults.model.models
# 2. 禁用干扰插件
npm run openclaw -- config unset plugins.entries.qwen-portal-auth
# 3. 设置正确模型
npm run openclaw -- config set agents.defaults.model.primary "qwen/qwen-max"
2. .env 文件语法错误
现象DASHSCOPE_API_KEY = sk-... 无效(等号带空格)
原因
- dotenv 严格要求
KEY=value无空格
解决方案
# 修正空格(关键!)
sed -i '' 's/DASHSCOPE_API_KEY= /DASHSCOPE_API_KEY=/g' ~/.openclaw/.env
3. 模型名称不匹配(Gemini 2.5 问题)
现象gemini/gemini-2.5-flash 报错 Unknown model
原因
- Gemini 2.5 是新模型,但 OpenClaw 未支持(仅支持
gemini-1.5-flash)
解决方案
# 使用已支持的模型
npm run openclaw -- config set agents.defaults.model.primary "gemini/gemini-1.5-flash"
4. 飞书权限错误(核心障碍)
现象
日志持续报错:Access denied. One of the following scopes is required: [contact:contact.base:readonly, ...]
原因
- 飞书机器人未开通
contact:contact.base:readonly权限
解决方案
- 点击链接开通权限:
https://open.feishu.cn/app/cli_a93fd2b43438dcc8/auth?q=contact:contact.base:readonly,contact:contact:access_as_app,contact:contact:readonly,contact:contact:readonly_as_app&op_from=openapi&token_type=tenant - 选择 “联系人” → “开通”(30秒完成)
5. 模型提供商注册问题(DeepSeek 尝试)
现象deepseek/deepseek-chat 报错 Unknown model
原因
- OpenClaw 未内置 DeepSeek 提供商
解决方案
✅ 放弃 DeepSeek,直接用 Gemini(内置支持,无需额外配置)
npm run openclaw -- config set agents.defaults.model.primary "gemini/gemini-1.5-flash"
6. 网络代理:终端开启不等于程序开启
现象
终端执行了 proxy_on(显示 Connection established),且 curl google.com 成功,但 OpenClaw 日志依然疯狂报错:
[agent/embedded] ... error=LLM request timed out.
原因
proxy_on 通常只是一个 Shell Alias(别名),它设置的 http_proxy 环境变量有时无法自动透传给正在运行的 Node.js 守护进程,或者代理只对当前终端会话有效,而 OpenClaw 插件内部可能需要显式的 HTTPS_PROXY 指向。
7. 模型标识符(Provider Prefix)混淆
现象
日志报错:FailoverError: Unknown model: gemini/gemini-1.5-flash 或 404 Not Found for API version v1beta。
原因
OpenClaw 对模型提供商的前缀有严格限制。虽然模型叫 Gemini,但 OpenClaw 内置的提供商标识符通常是 google。
- 错误写法:
gemini/gemini-1.5-flash(会被识别为未知提供商) - 错误写法:
google/gemini-1.5-flash(有时因 API 版本变动导致 404)
解决方案
修正提供商前缀: 统一使用
google/作为前缀。追加后缀: 如果 404,尝试加上
-latest后缀以适配 Google API 的最新路由。
# 最终验证通过的配置命令
npm run openclaw -- config set agents.defaults.model.primary "google/gemini-1.5-flash-latest"
8. 重复插件冲突(Extensions Warning)
现象
启动日志显示:duplicate plugin id detected; later plugin may be overridden。
原因
在 openclaw.json 的 plugins.entries 中手动启用了 feishu 插件,而同时在 extensions/ 目录下又存放了该插件的源码/包,导致系统加载了两次。
解决方案
检查 ~/.openclaw/extensions/ 目录。如果是通过源码运行且 openclaw.json 已配置,可以尝试删掉多余的插件副本,保持目录整洁,避免逻辑冲突导致飞书重复回消息。
9. 花式报错纪念
关于“访问电脑”: 如果你在飞书里对机器人说“帮我查一下系统文件”,它报错权限不足,记得检查运行 OpenClaw 的终端是否有“完全磁盘访问权限”(Mac 系统设置 -> 隐私与安全性)。
关于代理切换: Gemini 对地区非常敏感(如香港节点可能无法直连),建议在 Clash Verge 中将
generativelanguage.googleapis.com域名强制分流到美国或新加坡节点。
✅ 今日最终成功配置(可直接复制)
# 1. 修正飞书权限(点链接开通)
# 2. 删除干扰配置
npm run openclaw -- config unset agents.defaults.model.models
npm run openclaw -- config unset plugins.entries.qwen-portal-auth
# 3. 修正 .env 空格
sed -i '' 's/DASHSCOPE_API_KEY= /DASHSCOPE_API_KEY=/g' ~/.openclaw/.env
# 4. 设置正确模型
npm run openclaw -- config set agents.defaults.model.primary "gemini/gemini-2.5-flash"
# 5. 重启服务
npm run openclaw -- gateway
💡 关键教训总结
| 问题 | 错误操作 | 正确做法 |
|---|---|---|
| 模型名称 | qwen-portal/qwen-max |
qwen/qwen-max |
| API Key | KEY = value |
KEY=value(无空格) |
| Gemini 版本 | gemini-2.5-flash |
gemini-1.5-flash |
| 飞书权限 | 未开通联系人权限 | 点链接开通 contact:contact.base:readonly |
| 提供商 | 用 DeepSeek | 用内置的 gemini |
🌟 最终验证:发送
/code print("hello")→ 成功输出hello!
✨ 核心原则:OpenClaw 依赖 内置提供商(gemini/qwen/openai),不支持自定义提供商(除非修改源码)
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 kipleyarch@gmail.com