From 79ea8175c470baf74e7543132de4a25ff3e97fd5 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 4 May 2026 19:25:00 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=8F=91=E9=80=81=E5=AE=B9=E5=99=A8=E8=B7=AF=E5=BE=84=20/app/f?= =?UTF-8?q?iles=E2=86=92/app/napcat/share=20+=20Skills=E8=A1=A5=E5=85=85?= =?UTF-8?q?=E5=85=B1=E4=BA=AB=E7=9B=AE=E5=BD=95=E6=9B=BF=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 源码修正: - qq_send_file.py#101: file_uri 路径 /app/files → /app/napcat/share (Docker volume真实挂载点) - qq_ocr_image.py#10,47: 注释+CONTAINER_FILES常量同步修正 - qq-napcat-extras/SKILL.md#12: 跨主机传递图同步修正 - qq-messenger/SKILL.md#102: 注意事项容器路径同步修正 README 更新: - 6.4 Skills替换新增 sed -i YOUR_SHARED_DIR(之前漏了) - 新增全链路路径转换示意图(agent工作区→共享目录→容器内→NapCat API→QQ) - 新增手动测试命令:复制文件→qq_send_file.py→确认管理员收到 - 变量速查表 YOUR_SHARED_DIR 添加 SKILL.md 出现位置 --- README.md | 34 ++++++++++++++++++++++++++++++-- scripts/qq_ocr_image.py | 4 ++-- scripts/qq_send_file.py | 2 +- skills/qq-messenger/SKILL.md | 2 +- skills/qq-napcat-extras/SKILL.md | 2 +- 5 files changed, 37 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index afca486..0d79b5b 100644 --- a/README.md +++ b/README.md @@ -475,10 +475,40 @@ cd "${AGENT_WORKSPACE}/skills" for f in */SKILL.md; do sed -i "s|YOUR_WORKSPACE_PATH|${AGENT_WORKSPACE}|g" "$f" sed -i "s|YOUR_ADMIN_QQ|${ADMIN_QQ}|g" "$f" + sed -i "s|YOUR_SHARED_DIR|${SHARED_DIR}|g" "$f" done ``` -> ⚠️ Skills 的替换很关键:如果漏掉,agent 调脚本时会指向不存在的旧路径。 +> ⚠️ Skills 的替换很关键: +> - `YOUR_WORKSPACE_PATH` → agent 的 subprocess.run 能找到脚本 +> - `YOUR_SHARED_DIR` → 涉及文件发送的 Skill(qq-messenger、qq-napcat-extras)理解的宿主机共享路径 +> - 两个 Skill(qq-messenger、qq-napcat-extras)还记录了容器路径 `/app/napcat/share/`,这是一个固定常量,对应 Step 2.2 的 Docker volume `-v SHARED_DIR:/app/napcat/share`。如果修改了 volume 挂载点,需同步修改这些 SKILL.md 和 `qq_send_file.py`、`qq_ocr_image.py` 中的容器路径。 + +**文件发送全链路路径转换示意:** + +``` +agent 工作区 宿主机共享目录 NapCat 容器内 +/script/file.txt →cp→ /opt/napcat_shared/ ←volume→ /app/napcat/share/ + ↓ + qq_send_file.py 构造 + file:///app/napcat/share/file.txt + ↓ + NapCat HTTP API → QQ 用户 +``` + +> 代理的思维模型:"我要发文件 → 把文件放到共享目录 → 脚本从共享目录发"。Skill 中提到的"发送文件/图片"都隐含了这一步文件复制。 + +**验证文件路径转换:** + +```bash +# 确认共享目录存在 +ls -la "${SHARED_DIR}/" + +# 手动测试:复制一个文件过去,走 qq_send_file.py +echo hello > /tmp/test.txt +python3 "${AGENT_WORKSPACE}/scripts/qq_send_file.py" "/tmp/test.txt" --target "${ADMIN_QQ}" --private +# 如果 ADMIN_QQ 收到了"hello"文件,路径映射一切正常 +``` #### 6.5 验证完整性 @@ -554,7 +584,7 @@ NapCat 运行在 Docker 内部,宿主机文件路径不能直接访问。解 | `YOUR_NAPCAT_HOST` | `${NAP CAT_HOST}:6099` | 部分脚本 | | `YOUR_ADMIN_QQ` | `${ADMIN_QQ}` | 脚本 + SKILL.md | | `YOUR_GATEWAY_TOKEN` | `${GATEWAY_TOKEN}` | 脚本 | -| `YOUR_SHARED_DIR` | `${SHARED_DIR}` | `qq_send_file.py`、`qq_ocr_image.py` | +| `YOUR_SHARED_DIR` | `${SHARED_DIR}` | `qq_send_file.py`、`qq_ocr_image.py`、`qq-messenger/SKILL.md`、`qq-napcat-extras/SKILL.md` | | `YOUR_WORKSPACE_PATH` | `${AGENT_WORKSPACE}` | SKILL.md + 脚本 | --- diff --git a/scripts/qq_ocr_image.py b/scripts/qq_ocr_image.py index 85b2fa0..d5394f5 100644 --- a/scripts/qq_ocr_image.py +++ b/scripts/qq_ocr_image.py @@ -7,7 +7,7 @@ QQ 图片文字识别 (OCR) — 本地 Tesseract + NapCat 回退 2. 如果 Tesseract 不可用,回退到 NapCat 的 /ocr_image 端点 跨主机文件传递(NapCat 回退路径): - 宿主机 YOUR_SHARED_DIR/ → NapCat 容器内 /app/files/ + 宿主机 YOUR_SHARED_DIR/ → NapCat 容器内 /app/napcat/share/ 用法: python3 qq_ocr_image.py /tmp/screenshot.png # 本地图片 @@ -44,7 +44,7 @@ import requests CQHTTP_URL = "http://YOUR_NAP CAT_HOST:25570" SHARED_DIR = "YOUR_SHARED_DIR" -CONTAINER_FILES = "/app/files" +CONTAINER_FILES = "/app/napcat/share" OCR_TIMEOUT = 60 diff --git a/scripts/qq_send_file.py b/scripts/qq_send_file.py index 9b5e07f..2a0941d 100644 --- a/scripts/qq_send_file.py +++ b/scripts/qq_send_file.py @@ -98,7 +98,7 @@ def background_work(api, target_id, src_path, display_name, is_image): log(f"已复制: {target_path} ({src_size} bytes)") # 3. 发送文件 - file_uri = f"file:///app/files/{target_filename}" + file_uri = f"file:///app/napcat/share/{target_filename}" if is_image: msg = f"[CQ:image,file={file_uri}]" diff --git a/skills/qq-messenger/SKILL.md b/skills/qq-messenger/SKILL.md index 4f8a63a..46bec30 100644 --- a/skills/qq-messenger/SKILL.md +++ b/skills/qq-messenger/SKILL.md @@ -99,5 +99,5 @@ subprocess.run(["python3", "YOUR_WORKSPACE_PATH/scripts/qq_send_file.py", 2. 不要滥用主动推送,避免打扰管理员 3. 正常回复由系统自动转发,**无需调用本脚本** 4. 连接失败时检查 go-cqhttp 是否在运行(`http://YOUR_NAP CAT_HOST:25570`) -5. 文件发送依赖 `YOUR_SHARED_DIR` 目录(映射到 NapCat 容器内 `/app/files`) +5. 文件发送依赖 `YOUR_SHARED_DIR` 目录(映射到 NapCat 容器内 `/app/napcat/share/`) 6. 通知走 OpenClaw Gateway API,不走 QQ 本身 diff --git a/skills/qq-napcat-extras/SKILL.md b/skills/qq-napcat-extras/SKILL.md index e19fce8..6be7b99 100644 --- a/skills/qq-napcat-extras/SKILL.md +++ b/skills/qq-napcat-extras/SKILL.md @@ -9,7 +9,7 @@ NapCat 扩展能力:**好友点赞** + **图片文字识别(OCR)**。 NapCat 运行在 Docker 容器中,宿主目录与容器目录通过 volume 映射: ``` -宿主机 YOUR_SHARED_DIR/* ⇔ 容器内 /app/files/* +宿主机 YOUR_SHARED_DIR/* ⇔ 容器内 /app/napcat/share/* ``` ---