Files
chatrebot_aireply_plug/README.md
root 48e836e697 docs: 重写为AI agent可执行的完整部署指南
- 架构拓扑 + 前提条件清单(NapCat假设已运行)
- 7步部署流程:询问用户信息 → qqrebot → 插件 → 创建agent → 脚本/skills → 重启 → 验证
- 安全模块详细说明(高危词/白名单/消息过滤/上报/脱敏)
- 所有配置用占位符,无任何个人信息
- 明确指示部署agent向用户询问必填参数
2026-05-04 18:56:40 +08:00

374 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# OpenClaw Bridge — QQ AI Reply Plugin
> 将 QQ 消息转发到 OpenClaw Gateway由 AI agent 自动处理并回复。
> 本 README 面向 AI agentOpenClaw 基础智能体),引导其完成除 NapCat 外的全部后端部署。
## 架构
```
QQ 客户端 服务器
│ │
│ QQ 协议 │
▼ │
NapCat / go-cqhttp │ ← 假设已运行
│ OneBot HTTP │
├── POST 消息 → qqrebot (:25580)
│ ├── openclaw_bridge 插件
│ │ │
│ │ ▼
│ │ OpenClaw Gateway (:18789)
│ │ │
│ │ ▼
│ │ 新建的 qq-agent
│ │ │
◄── 回复/操作 ←─── qqrebot ◄─────┘
```
## 前提条件
| 组件 | 状态 | 由本仓库部署 |
|---|---|---|
| NapCat / go-cqhttp | 假设已运行 | ❌(由用户自行部署) |
| OpenClaw Gateway | 假设已运行 | ❌(由用户自行部署) |
| qqrebot消息接收器 | 需部署 | ✅ |
| openclaw_bridge 插件 | 需部署 | ✅ |
| qq-agentAI agent | 需创建 | ✅ |
| QQ 技能/脚本 | 需部署 | ✅ |
## 部署步骤(阅读此文档的 AI agent 请按以下顺序执行)
---
### 第1步询问用户信息
在执行任何操作前,请 **向用户询问以下信息**,不要使用仓库中的占位符:
| 信息 | 说明 | 示例 |
|---|---|---|
| `ADMIN_QQ` | 管理员的 QQ 号(用于白名单) | `123456789` |
| `GATEWAY_TOKEN` | OpenClaw Gateway 的认证 Token | 从 `~/.openclaw/openclaw.json` 中读取 |
| `NAPCAT_HOST` | NapCat 的 HTTP API 地址 | `127.0.0.1:25570` |
| `NEW_AGENT_ID` | 新 agent 的唯一 ID | `qq-agent` |
---
### 第2步部署 qqrebot消息接收器
从 [chatrebot1.0 release](https://jianfgit.xyz/jianf/chat_rebot-connect-with-onebot-standard-/src/tag/chatrebot1.0/) 下载 qqrebot 框架:
```bash
# 下载并解压
wget https://jianfgit.xyz/jianf/chat_rebot-connect-with-onebot-standard-/archive/chatrebot1.0.tar.gz
tar xzf chatrebot1.0.tar.gz
mv chat_rebot-connect-with-onebot-standard- /opt/qqrebot
cd /opt/qqrebot
```
**编辑 `config/config.toml`,填入 NapCat 地址:**
```toml
[app]
list_port = 25580
send_url = "http://${NAPCAT_HOST}"
[rebot]
id = ""
[plugins]
dir = ["plugins"]
```
**创建 systemd 服务:**
```ini
# /etc/systemd/system/qqrebot.service
[Unit]
Description=QQ Robot
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/qqrebot
ExecStart=/opt/qqrebot/run.sh
Restart=always
RestartSec=3
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
```
```bash
systemctl daemon-reload
systemctl enable --now qqrebot
```
---
### 第3步安装 openclaw_bridge 插件
本仓库即 openclaw_bridge 插件的源码,需打包后部署到 qqrebot。
**在目标机器上执行打包(因含 C 扩展,必须在此机器上执行):**
```bash
cd /path/to/chatrebot_aireply_plug
# 安装依赖
pip install -r requirements.txt
# 打包
python3 package.py
```
**将生成的 ZIP 复制到 qqrebot 插件目录:**
```bash
cp dist/openclaw_bridge.zip /opt/qqrebot/plugins/
```
**创建插件配置文件 `/opt/qqrebot/config/openclawbridge/config.toml`**
```toml
[openclaw]
gateway_url = "http://127.0.0.1:18789"
gateway_token = "${GATEWAY_TOKEN}"
allowed_sender = "${ADMIN_QQ}"
model = "openclaw/${NEW_AGENT_ID}"
agent_id = "${NEW_AGENT_ID}"
```
**重启 qqrebot 加载插件:**
```bash
systemctl restart qqrebot
```
**验证插件已加载:**
```bash
journalctl -u qqrebot -f | grep OpenClawBridge
```
预期输出:
```
Config loaded: url=http://127.0.0.1:18789, allowed=123456789
```
---
### 第4步创建新的 OpenClaw agent
使用 Gateway API 在 `~/.openclaw/openclaw.json``agents.list` 中添加新 agent
```bash
AGENT_ID="${NEW_AGENT_ID}"
AGENT_WORKSPACE="/home/program/${AGENT_ID}-workspace"
# 创建 workspace 目录
mkdir -p "${AGENT_WORKSPACE}/scripts"
mkdir -p "${AGENT_WORKSPACE}/skills"
mkdir -p "${AGENT_WORKSPACE}/self-workplace"
mkdir -p "${AGENT_WORKSPACE}/memory"
mkdir -p "${AGENT_WORKSPACE}/files"
```
添加 agent 配置项到 OpenClaw 的 `agents.list`
```json
{
"id": "${NEW_AGENT_ID}",
"name": "${NEW_AGENT_ID}",
"model": "kimi/kimi-for-coding",
"workspace": "/home/program/${NEW_AGENT_ID}-workspace"
}
```
> **注意**:通过 `GET /api/config/all` 获取当前配置,找到 `agents.list` 数组push 上述对象,然后通过 `POST /api/config/set` 写入。或者直接编辑 `~/.openclaw/openclaw.json` 文件后重启 Gateway。
设置该 agent 的安全相关配置:
```json
{
"agents.defaults.compaction.mode": "safeguard",
"agents.list[${index}].model": "kimi/kimi-for-coding"
}
```
---
### 第5步部署脚本和 Skills 到新 agent 的 workspace
**复制脚本:**
```bash
cp -r /path/to/chatrebot_aireply_plug/scripts/* "${AGENT_WORKSPACE}/scripts/"
```
**复制 Skills**
```bash
for SKILL in qq-messenger qq-management qq-resolver qq-napcat-extras mc-query nix-helper browser file-process; do
cp -r "/path/to/chatrebot_aireply_plug/skills/${SKILL}" "${AGENT_WORKSPACE}/skills/"
done
```
**替换脚本中的占位符:**
所有脚本中 `YOUR_ADMIN_QQ``YOUR_NAP CAT_HOST``YOUR_GATEWAY_TOKEN``YOUR_GROUP_ID``YOUR_BOT_QQ``YOUR_WORKSPACE_PATH``YOUR_SHARED_DIR` 等需要替换为用户的实际值。
可以用 sed 批量替换占位符(以 `${AGENT_WORKSPACE}/scripts/` 为例):
```bash
cd "${AGENT_WORKSPACE}/scripts"
# 替换 NapCat 地址
sed -i "s|YOUR_NAP CAT_HOST|${NAPCAT_HOST}|g" *.py
sed -i "s|YOUR_NAPCAT_HOST|${NAPCAT_HOST}|g" *.py
# 替换管理员 QQ
sed -i "s|YOUR_ADMIN_QQ|${ADMIN_QQ}|g" *.py
# 替换 Gateway Token
sed -i "s|YOUR_GATEWAY_TOKEN|${GATEWAY_TOKEN}|g" *.py
# 替换工作区路径
sed -i "s|YOUR_WORKSPACE_PATH|${AGENT_WORKSPACE}|g" *.py
```
同样处理 `skills/` 目录下的 SKILL.md 文件中的 `YOUR_WORKSPACE_PATH``YOUR_ADMIN_QQ`
---
### 第6步重启 OpenClaw Gateway
```bash
openclaw gateway restart
```
确认新 agent 已加载:
```bash
# 查看代理列表
openclaw config get agents.list
# 或在日志中确认
journalctl -u openclaw -f | grep "agent.${NEW_AGENT_ID}"
```
---
### 第7步端到端验证
1. 在 QQ 上给机器人发消息
2. 检查 qqrebot 日志:`journalctl -u qqrebot -f | grep OpenClawBridge`
3. 检查 OpenClaw 日志:`journalctl -u openclaw -f`
4. 验证 agent 已回复
## 安全模块说明
部署完成后,新 agent 将具备以下安全能力(全部在 `src/process.py` 中实现):
### 高危词检测
内置 `HIGH_RISK_WORDS` 词库,覆盖以下类别:
| 类别 | 示例关键词 |
|---|---|
| 越狱/提示词攻击 | `ignore all instructions``forget previous` |
| 记忆操控 | `delete memory``forget everything` |
| 敏感信息泄漏 | `sudo password``api key` |
| 系统命令 | `cat /etc/passwd``rm -rf` |
**触发时行为:**
- 非管理员 → 自动拦截 + 上报管理员 + 该用户加入黑名单
- 管理员 → 记录日志 + 发送告警到 admin 私聊
### 管理员白名单
| 配置项 | 说明 |
|---|---|
| `allowed_sender` | 唯一的管理员 QQ 号 |
| 非管理员操作 | MC 指令过滤(`/` 开头消息跳过 AI 处理) |
### 消息过滤
- 纯媒体消息(无文字:纯图片/文件/视频)自动跳过
- 系统通知(`[系统通知]``[文件回执]`)自动跳过
- 非管理员发送的操作指令(`/` 开头)跳过 AI 处理
### 安全上报
当非管理员触发高危词时,插件自动:
1. 通过 OneBot API 给 `allowed_sender` 发送告警消息
2. 告警内容:用户 QQ、所在群、触发的原文摘要
### 错误脱敏
所有 HTTP 响应体、异常详情不暴露给 QQ 用户,仅记录日志。
## 配置文件参考
| 配置项 | 必填 | 说明 |
|---|---|---|
| `gateway_url` | ✅ | OpenClaw Gateway 地址 |
| `gateway_token` | ✅ | Gateway 认证 Token从用户处获取 |
| `allowed_sender` | ✅ | 管理员 QQ 号(从用户处获取) |
| `model` | ✅ | Agent 模型 ID格式`openclaw/${AGENT_ID}` |
| `agent_id` | ✅ | Agent ID`agents.list` 中一致) |
## 目录结构
```
chatrebot_aireply_plug/
├── config/
│ └── openclawbridge/
│ └── config.toml # 插件配置模板
├── src/
│ ├── process.py # 插件核心逻辑(含全部安全模块)
│ ├── config.toml # 本地测试配置
│ └── modules/
│ ├── plugin_modules.py # BasePlugin + MessageContext
│ └── user_module.py # User/Group 封装
├── scripts/ # ✅ 部署时复制到 agent workspace
│ ├── qq_send_msg.py # 发送消息
│ ├── qq_send_file.py # 发送文件/图片
│ ├── qq_get_groups.py # 获取群列表
│ ├── qq_get_friends.py # 获取好友列表
│ ├── qq_group_manage.py # 群管理(踢/禁言/设管理)
│ ├── ... # 详见技能文档
├── skills/ # ✅ 部署时复制到 agent skills/
│ ├── qq-messenger/SKILL.md
│ ├── qq-management/SKILL.md
│ ├── qq-resolver/SKILL.md
│ ├── qq-napcat-extras/SKILL.md
│ ├── mc-query/SKILL.md
│ └── ...
├── dependence.py # 依赖安装工具
├── package.py # ZIP 打包器
├── packup.sh / packup.bat # 一键打包脚本
├── test.py # 本地测试
├── requirements.txt # Python 依赖
└── README.md # 本文件
```
## 自定义安全词库
编辑 `src/process.py` 中的 `HIGH_RISK_WORDS` 列表:
```python
HIGH_RISK_WORDS = {
"prompt_injection": ["ignore all instructions", ...],
"memory_manipulation": ["delete memory", ...],
"info_leak": ["sudo password", ...],
"system_commands": ["cat /etc/passwd", ...],
}
```
添加后重新打包、部署、重启 qqrebot。
## 许可证
MIT