2026-03-14

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 对应的编号,如图所示:

Pasted image 20260314105328

图片所示的内容,windows的位置是0001,好记住这个位置,使用以下指令:

sudo efibootmgr -n 0001 # 替换为实际的 4 位编号 
sudo reboot
  1. 原理:这会告诉主板:“下次重启别跑 GRUB,直接跑 Windows 的 EFI”。
  2. 结果
    • 电脑重启 -> 主板直接加载 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 权限
    解决方案
  1. 点击链接开通权限:
    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
  2. 选择 “联系人”“开通”(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-flash404 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.jsonplugins.entries 中手动启用了 feishu 插件,而同时在 extensions/ 目录下又存放了该插件的源码/包,导致系统加载了两次。

解决方案

检查 ~/.openclaw/extensions/ 目录。如果是通过源码运行且 openclaw.json 已配置,可以尝试删掉多余的插件副本,保持目录整洁,避免逻辑冲突导致飞书重复回消息。

9. 花式报错纪念

Pasted image 20260315011934 Pasted image 20260315011949 Pasted image 20260315012002 Pasted image 20260315012015 Pasted image 20260315012028 Pasted image 20260315012038 Pasted image 20260315012045 ### 💡 进阶避坑 Tip
  • 关于“访问电脑”: 如果你在飞书里对机器人说“帮我查一下系统文件”,它报错权限不足,记得检查运行 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
Obsidian