agent-Specialization/scripts/qq_bot/README.md

250 lines
5.2 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.

# QQ Bot for Agents
通过 QQ 群调用 Agents 系统的桥接程序。
## 功能特性
- ✅ 支持通过 @ 机器人触发对话
- ✅ 支持创建/切换/查看对话
- ✅ 支持停止运行中的任务
- ✅ 实时推送工具调用信息和模型输出
- ✅ 支持发送工作区文件到 QQ 群(图片/普通文件)
## 系统要求
- Python 3.9+
- NapCat已配置 HTTP Server
- Agents 系统Web 模式运行)
- aiohttp 库
## 安装依赖
```bash
pip install aiohttp
```
## 配置
### 1. NapCat 配置
确保 NapCat 已启用 HTTP Server配置文件示例
```json
{
"network": {
"httpServers": [
{
"name": "HttpServer",
"enable": true,
"host": "0.0.0.0",
"port": 3000,
"token": "your-token-here",
"messagePostFormat": "array"
}
]
}
}
```
### 2. Agents 系统配置
确保 Agents Web 服务器正在运行:
```bash
cd /Users/jojo/Desktop/agents/正在修复中/agents
python web_server.py --port 8091
```
确保已创建 qqbot 用户:
- 用户名: qqbot
- 邮箱: qqbot@qq.com
- 密码: 12345678
### 3. 环境变量(可选)
可以通过环境变量覆盖默认配置:
```bash
export NAPCAT_HOST="http://localhost:3000"
export NAPCAT_TOKEN="your-token"
export AGENTS_HOST="http://localhost:8091"
export AGENTS_EMAIL="qqbot@qq.com"
export AGENTS_PASSWORD="12345678"
export TARGET_GROUP_ID="1092770403"
export LOG_LEVEL="INFO"
```
## 运行
```bash
cd /Users/jojo/Desktop/agents/正在修复中/agents
python -m scripts.qq_bot.main
```
或者:
```bash
cd /Users/jojo/Desktop/agents/正在修复中/agents/scripts/qq_bot
python main.py
```
## 使用方法
### 基本指令
在 QQ 群中 @ 机器人并发送以下指令:
#### 创建新对话
```
@机器人 /new
```
#### 查看最近对话
```
@机器人 /resume 10
```
获取最近 10 条对话的标题和 ID。
#### 切换对话
```
@机器人 /switch conv_20260315_162256_599
```
#### 停止当前任务
```
@机器人 /stop
```
只能在任务运行期间使用。
### 发送消息
直接 @ 机器人并发送消息:
```
@机器人 英伟达今天的股票价格是多少?
```
如果没有当前对话,会自动创建一个新对话。
### 发送文件
模型可以使用 `send_qq_file` 工具发送工作区内的文件:
```
@机器人 生成一张图表并发送给我
```
模型会调用工具生成图表,然后使用 `send_qq_file` 工具将图片发送到群里。
## 消息格式
### 工具调用
当模型调用工具时,会发送格式化的工具信息:
```
[工具] run_command
参数: ls -la
[工具] web_search
参数: 英伟达2026年3月15日股价
```
### 模型输出
模型的文本输出会直接发送到群里,不包含思考过程和工具结果。
## 架构说明
```
scripts/qq_bot/
├── __init__.py # 包初始化
├── main.py # 主程序入口
├── config.py # 配置管理
├── napcat_client.py # NapCat API 客户端
├── web_api_client.py # Agents Web API 客户端
├── message_handler.py # 消息处理器
├── state_manager.py # 状态管理
├── poller.py # HTTP 轮询器
└── README.md # 本文档
```
### 工作流程
1. **消息接收**: HTTP 轮询器定期获取群消息
2. **消息解析**: 检测 @ 机器人的消息,解析指令或普通消息
3. **任务创建**: 通过 Web API 发送消息到 Agents 系统
4. **事件轮询**: 轮询任务状态,获取工具调用和模型输出
5. **消息推送**: 将工具调用和模型输出发送到 QQ 群
## 自定义工具
### send_qq_file
位置:`data/custom_tools/send_qq_file/`
功能:发送工作区内的文件到 QQ 群
参数:
- `file_path`: 文件相对路径(必填)
- `description`: 文件描述(可选)
示例:
```python
# 模型会这样调用
send_qq_file(file_path="output/chart.png", description="这是生成的图表")
```
## 注意事项
1. **单群模式**: 当前只支持一个群TARGET_GROUP_ID
2. **任务互斥**: 同一时间只能运行一个任务
3. **Docker 隔离**: qqbot 用户必须使用 Docker 模式,不能使用 host 模式
4. **文件路径**: send_qq_file 工具只能访问工作区内的文件
5. **消息轮询**: 使用 HTTP 轮询方式获取消息,可能有 1-2 秒延迟
## 故障排查
### 机器人无响应
1. 检查 NapCat 是否正常运行
2. 检查 Agents Web 服务器是否运行
3. 检查日志文件 `qq_bot.log`
4. 确认机器人 QQ 号是否正确
### 登录失败
1. 确认 qqbot 用户已创建
2. 检查邮箱和密码是否正确
3. 查看 Agents 日志确认登录请求
### 文件发送失败
1. 确认文件路径正确(相对于工作区)
2. 检查文件是否存在
3. 确认 NapCat 支持该文件类型
4. 查看日志了解详细错误信息
## 开发
### 添加新指令
`message_handler.py``_handle_command` 方法中添加新的指令处理:
```python
elif cmd == "/your_command":
await self._cmd_your_command(args)
```
### 修改消息格式
`message_handler.py``_handle_tool_start``_handle_text_end` 方法中修改。
### 调整轮询间隔
修改 `config.py` 中的 `POLL_INTERVAL` 变量。
## 许可证
与 Agents 项目保持一致。