
## 省钱原则（已废弃⚠️）

> ⚠️ 2026-05-03 更新：当前使用包月制 MiniMax M2.7，不再需要省 token！

- ~~**能省则省**：少废话、少跑不必要的工具、少绕圈子~~
- ~~**难任务先停**：预计要烧大量 token 的任务，先汇报再决定是否继续~~
- ~~**除非你明确说"必须做"**：否则烧 token 大的操作我会先问你~~
- ~~**模型禁令**：不准自己换模型，小旺说换才能换。保持默认 MiniMax-M2.7~~

## 模型与Token规则

- **当前模型**：MiniMax M2.7（包月制，**本月内**随便用）
- **换模型**：只需换当前会话的默认模型，不需要动全局默认
- **Token**：小旺说本月内随便用，不需要省

## GLM视觉模型
- glm-4v-flash: 免费额度有限，配额用完会报错
- glm-4v: 主力看图模型（直接调 zai 模块）
- **glm-4.6v**: OpenClaw聊天会循环bug，但看图能力正常（可推理），直接curl调用API没问题

## 文件交付

- 给用户传文件一律放 `//storage/emulated/0/Download/`（手机 Download 目录）
- 不要放 workspace/downloads/，用户那边看不到

## 文件交付规则

- 给用户传文件时，放到手机的 Downloads 目录：`/storage/emulated/0/Download/`
- 不是 Termux 的 `~/workspace/downloads/`，是 Android 全局 Download 文件夹
- 用户从手机文件管理器 → Download 直接能看到

## 手机配置文件管理
- 手机的 openclaw.json 由小旺手动复制（Download → Termux 私有目录）
- AI 不通过 SSH 改写 Termux 内部 JSON，小旺自己处理复制
- Download 目录的 openclaw.json 由小旺维护，复制到 `~/.openclaw/openclaw.json` 后生效
- 常见问题：appId 必须为 string（不能是 integer），clientSecret 必须为 string

## 服务器定时任务框架
- **路径**: `/home/user-lbhzj/tasks/server_cron.py`
- **cron**: 每5分钟检查一次 `~/tasks/phone/` 目录
- **目录结构**: `phone/`(任务) / `results/`(结果) / `pc_done/`(完成标记)
- **添加新任务**: 在 TASKS 字典注册新函数即可，支持命令行和文件两种触发模式
- **通知机制**: 任务完成后通过 OpenClaw gateway API (公网 152.136.58.12:39582) 调 API 通知小虾
- **注意**: 服务器无法直接连手机 Tailscale IP（手机在移动网络），要用公网 IP + gateway 走 API 通知

## 服务器训练管理

- **服务器**: 172.29.1.103 (user-lbhzj / lbhzj)
- **进程名**: `pw`（通过 `exec -a pw` 设置）
- **查看进程**: `ps aux | grep "pw " | grep -v grep`（不要查 main_v2，可能查到子进程）
- **确认显存**: `nvidia-smi` 看显存占用，pw 进程对应的 GPU 才是训练在跑的
- **工作目录**: `~/pw/PFLlib-master/system`
- **conda环境**: `pw`
- **GPU**: 8× GPU (0-7)
- **查看GPU**: `nvidia-smi`

**训练命令模板：**
```bash
cd /home/user-lbhzj/pw/PFLlib-master/system && \
source /home/user-lbhzj/anaconda3/etc/profile.d/conda.sh && conda activate pw && \
CUDA_VISIBLE_DEVICES={空闲GPU} nohup bash -c 'exec -a pw python main_v2.py \
  -algo {FedProxV2 | FedAvg} \
  -m {ResNet18 | MobileNet} \
  -data {数据集} \
  -ncl {类别数} \
  -nc 10 \
  -gr {轮次数} \
  -lbs 64 \
  -lr 0.05 \
  -ldg 0.5 \
  -ldm 40 60 \
  -ls 3 \
  -mu 0.1 \
  -did {空闲GPU} \
  -nm bn \
  -dmu {true(动态μ) | false(固定μ)} \
  -ma {0.2(有Mixup) | 0(无Mixup)} \
  -at none \
  -pp {预训练权重路径 | ''(不预训练)}' \
  > /home/user-lbhzj/pw/PFLlib-master/system/final/{数据集}_{算法}_{预训练与否}_{mixup与否}.log 2>&1 &
```

**参数说明：**
- 算法只有 `FedProxV2` 和 `FedAvg` 两种
- 模型只有 `ResNet18` 和 `MobileNet`（大小写敏感）
- 预训练(pp)：ResNet18对应 `resnet18_imagenet.pth`，MobileNet对应相应的
- Mixup(ma)：`0.2` 开启，`0` 关闭
- dmu：`true` 衰减μ，`false` 固定μ
- GPU：`nvidia-smi` 查空闲，`CUDA_VISIBLE_DEVICES` 和 `-did` 保持一致
- Log名清晰，不包含设备名

**完整版三组件：** 预训练 + Mixup + 动态μ（dmu=true）。说"完整版"就是三样全要，"少Mixup"就是去掉ma，依此类推。

**常用覆写：** `-lr 0.01`（如crop用0.01更快收敛），其他参数不变。

- **服务器**: 172.29.1.103 (user-lbhzj / lbhzj)
- **进程名**: `pw`（通过 `exec -a pw` 设置）
- **查看进程**: `ps aux | grep "pw " | grep -v grep`（不要查 main_v2，可能查到子进程）
- **确认显存**: `nvidia-smi` 看显存占用，pw 进程对应的 GPU 才是训练在跑的
- **工作目录**: `~/pw/PFLlib-master/system`
- **conda环境**: `pw`
- **GPU**: 8× GPU (0-7)
- **查看GPU**: `nvidia-smi`
- **训练命令模板**:
```
cd ~/pw/PFLlib-master/system && source ~/anaconda3/etc/profile.d/conda.sh && conda activate pw && CUDA_VISIBLE_DEVICES=X nohup bash -c 'exec -a pw python main_v2.py ...' > ~/pw/PFLlib-master/system/final/XX.log 2>&1 &
```
- **论文实验**: ResNet18 + crop数据集(2245/755, 3类, 224×224) + BN + 预训练
- **核心创新**: FedProxV2 动态mu余弦衰减

## 论文 PDF 转换（已解决）
- **手机论文 docx**: `/storage/emulated/0/Download/西北农林科技大学本科毕业论文_完整版.docx`
- **正确方法**: 服务器 LibreOffice 转换（633KB，字体完整）
  1. docx 上传到服务器 `/tmp/`
  2. `HOME=/tmp libreoffice --headless --convert-to pdf xxx.docx --outdir /tmp/`
  3. PDF 传回手机 Download
- PC Word COM 自动化失败（Session 0 权限问题），HTML 中转方案丢格式

## Tailscale 网络

- **服务器** (ubuntu-NF5468M5): 100.120.115.30 (Tailscale), SSH 用 sshpass 密码 lbhzj
- **手机** GT7: 100.114.227.26
- **PC** LAPTOP-14AJG74M: 100.105.23.114
- 服务器 tailscale binary: `~/pw/PFLlib-master/tailscale_1.96.4_amd64/tailscale`
- 服务器 tailscale socket: `~/pw/PFLlib-master/tailscale.sock`

## 三张消融表（论文数据）

### 表1: Crop - AVG消融（ResNet18, lr=0.05→0.01, mu=0.1, gr=100）

| 组别 | 预训练 | Mixup | Best Acc |
|:---:|:---:|:---:|:---:|
| AVG | ✗ | ✗ | 69.67% |
| AVG | ✓ | ✗ | 83.15% |
| AVG | ✓ | ✓ | 84.77% |

### 表2: Crop - PROX消融（ResNet18, lr=0.005, mu=0.01, gr=70, ldm=20 40 60 80）

| 组别 | 预训练 | 动态μ | Mixup | Best Acc |
|:---:|:---:|:---:|:---:|:---:|
| prox | ✗ | ✗ | ✗ | 65.70% |
| prox | ✓ | ✗ | ✗ | 82.78% |
| prox | ✓ | ✓ | ✗ | 82.91% |
| prox | ✓ | ✓ | ✓ | 83.97% |

曲线图：`/storage/emulated/0/Download/lr005_ablation_curve.png`
个体图：`/storage/emulated/0/Download/lr005_ablation_individual.png`

### 表3: CIFAR10 算法验证（ResNet18, 无预训练, 无Mixup）

| 算法类型 | 准确率 |
|---------|:---:|
| Avg | 69.84% |
| ProX（固定μ=0.1） | 71.74% |
| prox（动态μ） | 74.59% |
| prox（动态μ+预训练+Mixup，峰值） | 86.53% |

## 分身（子代理）规则

- 凡是要用工具（搜索、查文件、执行命令等，非单纯对话）时，一律开分身（sessions_spawn）后台跑
  - 查配置、查状态、修改配置等任何需要调用工具的事，也开分身
  - 我前台**永远只负责和小旺聊天**，不管什么情况都不阻塞
  - 小旺发消息时，顺带检查分身结果（subagents list / sessions_history）
- 前台保持对话畅通，不让小旺等着
- 不用等小旺提醒，主动就开

## 记忆规则

- 小旺交代的事情、做的决定，实时写入 MEMORY.md，防止下次对话忘记
- 不要"记在脑子里"，一定要写进文件

## 已配置好的状态

- tesseract 中文语言包（chi_sim）已安装，OCR 用 `tesseract <path> stdout -l chi_sim`

## 搜索功能配置（2026-05-04）

- **web_search 工具**: Tavily（provider: tavily），openclaw.json 中已配置
- **Tavily Key**: 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
- **代理**: 服务器访问外网走 PC 代理（100.105.23.114:7890），因为腾讯云无法直连外网
- **配置路径**: `~/.openclaw/.env` 写入 TAVILY_API_KEY，`openclaw.json` 写入 tools.web.search.provider=tavily
- **Kimi** (sk-格式): 待配置，中文搜索备选
- **Gemini** (AIzaSy...): 额度已耗尽，暂不可用（不是模型key，是Google Search API key）

## 服务器信息（2026-05-04 更新）

| 服务器 | IP | 用户名 | 密码 | 主机名 | 说明 |
|--------|-----|--------|------|--------|------|
| 腾讯云（我在这台） | 152.136.58.12 | ubuntu | MYNmyn888 | VM-0-6-ubuntu | **主服务器**，OpenClaw 运行中 |
| 腾讯云 | 119.29.241.85 | ubuntu | MYNmyn888 | **pw** | 训练服务器 |

## 聊天记录自动追加规则

- 每次回复用户前，确认上一轮对话已追加到`聊天记录.md`
- 格式：时间戳 + 小旺原话 + TS回应/操作
- 聊天记录在workspace，Syncthing同步到PC
- 兜底：Termux crontab每小时自动打时间戳

## 服务器绘图注意

- **服务器 Ubuntu 缺中文字体**，matplotlib 绘图一律用英文标签（label/标题），不要写中文
- 画图脚本必须指定 `matplotlib.use("Agg")`
- 生成的图片 cp 到 `~/pw/PFLlib-master/system/final/` 存档
- 给用户传文件时 scp 到 `/storage/emulated/0/Download/`

## 考研学习支持
- 考研数学：自动出题/答疑
- 考研408（重点！）：数据结构、操作系统、计算机网络、计算机组成原理
- 参考书：王道、图灵、竞成辅导书
- 需求：贴合考研知识点，多练题，多看细节内容

## ⚠️ 2026-05-04 重大更新：服务器状态纠正

### 当前实际服务器（唯一）
- **腾讯云 152.136.58.12**（2核2GB），OpenClaw 运行中，QQ bot 正常
- 用户：ubuntu，密码：MYNmyn888
- Tailscale IP：100.108.100.58 ✅ 已登录

### 已废弃的服务器（不要混淆）
- **炎火云** 103.236.97.252 ❌ 限制太多，已废弃
- **旧训练服务器** ubuntu-NF5468M5 (172.29.1.103 / 100.120.115.30) ❌ SSH不通，已关闭
  - 训练进程 `pw` 已全部停止
  - FedProxV2 训练命令模板已失效

### 手机 SSH 信息（已修复）
- 手机 Tailscale IP：100.114.227.26
- SSH 端口：2222（不是22！）
- 密码：my888
- 连接命令：`ssh -p 2222 root@100.114.227.26`

### 两小虾书信对话（正常运行）
- 手机文件：`/storage/emulated/0/Download/虾虾对话.txt`
- Python 脚本：`/home/ubuntu/phone_chat_check.py`
- Cron：每5分钟自动检查并回复（关键词模式）

### 记忆混乱原因
- 之前记忆里把 172.29.1.103 当主服务器，但实际我在 152.136.58.12
- 旧服务器的 Tailscale 和训练记忆全部是旧的，已失效
- 当前唯一服务器 = 腾讯云 152.136.58.12

## 语音偏好（2026-05-04）
- 小旺喜欢听语音！说"聊天的时候可以时不时带个语音"
- 发语音方法：TTS生成音频 → cp到 /root/.openclaw/media/qqbot/downloads/ → message(path=...) 发送
- 发QQ语音：<qqmedia>标签配合path参数，文件放 qqbot/downloads/ 目录
- 常用TTS文本格式：简短、自然、带小虾风格

## 语音操作规范（2026-05-04）
- 用 edge-tts 生成小艺音色音频：`edge-tts -t "文本" -v zh-CN-XiaoyiNeural --write-media /tmp/voice.mp3`
- 发QQ语音：先 cp 到 `/root/.openclaw/media/qqbot/downloads/`，再用 `message(path=...)` 发送
- **QQ发完语音后马上删除PC和Termux的残留文件**（/tmp/ 和 media/downloads/ 里的 mp3）

## 视觉模型使用规范（2026-05-04）
- 看图/OCR/分析图片：**必须用 glm-v-model 技能**
- API Key：`b2633e487f954d249e5fa629e00c9156.j5X0sg2NmfTUgL7Z`（写在技能config.json里）
- **直接用curl调用智谱API**，不走 zai SDK（SDK有bug）
- curl调用方式：
  ```bash
  curl -X POST https://open.bigmodel.cn/api/paas/v4/chat/completions \
    -H "Authorization: Bearer <key>" \
    -H "Content-Type: application/json" \
    -d '{"model":"glm-4v-flash","messages":[{"role":"user","content":[{"type":"image_url","image_url":{"url":"data:image/jpeg;base64,<base64>"}},{"type":"text","text":"问题"}]}]}'
  ```
- minimax M2.7 是纯文字模型，**不支持图片**
- 不要把 minimax 用于视觉任务

## 腾讯频道 Skill（2026-05-04）
- Skill 已安装：~/.openclaw/workspace/skills/tencent-channel-community/
- CLI：tencent-channel-cli（已安装）
- Token：bot:v1_BWlfXChE5jhoyodDU3H-4h9_uML7nqkG032fZH4pKaHwWUH_NV9aKK0DVaqqAbbHHx2Ha0c0LTSl7zTY_DN7O0ms74MrF6-Xu170WMXL19G4cg（已登录）
- Skill 能力：频道管理、成员管理、帖子发布/评论/回复/点赞、消息通知（push到session）、搜索等
