
# QQ Agent Plus
面向 Linux 服务器的 QQ 群聊 Agent,支持分条发言、表情包收发、长期记忆与内置运维命令。
[](https://github.com/sakurawwwxh/qq-agent-plus/actions/workflows/ci.yml)
[](LICENSE)
[](https://github.com/sakurawwwxh/qq-agent-plus/stargazers)
[](https://github.com/sakurawwwxh/qq-agent-plus/commits/main)
[](package.json)
[](docs/LINUX.md)
[](https://github.com/botuniverse/onebot-11)
[](#特性)
**简体中文** | [English](README.en.md)
QQ Agent Plus 是面向 Linux 服务器的 QQ 群聊 Agent。它连接外部 OneBot v11 协议端,每次触发使用
独立的 OpenAI Chat Completions 会话,不依赖 DSH、MCP、Electron 或 Windows 运行环境。
## 特性
下列能力均来自实际群聊环境中的问题修复,每条对应的失败模式与处理方式记录在[改动清单](docs/CHANGES.md)。
- **对话行为**:单轮分条发言,先判断图片情绪再回应,表情包清单常驻系统提示(常用的 + 没用过的轮换,条数可调),结束前自检。
- **发送链路**:网络层发送重试,QQ 系统表情,消息 id 归一化,内联工具调用兜底解析。
- **网络抓取**:宿主侧抓取统一走 `safe-fetch`。HTTPS GET 与媒体下载优先 HTTP/2(ALPN),
服务端不支持或连接层失败时自动回落 HTTP/1.1;DNS 固定、内网拦截、逐跳重定向校验、
跨源凭据剥离、响应体/解压上限与超时都在。POST 仍走 HTTP/1.1,避免重复写入。
Cloudflare 按 HTTP 版本挑战的站点(e926/e621 等)因此可以直接访问。
- **贴纸系统**:自动收藏并优先使用 QQ 收藏表情,查找兜底,同步护栏。
- **玩法与提醒**:轻量小游戏直接玩(成语接龙 / 猜数字 / 20 个问题 / 真心话大冒险;掷骰子、抽签、随机点名用 `dice` 与群成员名单);**状态机主持的多人游戏**(数字炸弹、谁是卧底、狼人杀——轮次/计票/判定由系统负责,身份与夜间行动只走私聊,模型不会说漏嘴;实验特性、默认关,狼人杀还需在控制台白名单里勾选);「X 点提醒我 Y」会落成**持久化提醒**(重启不丢),支持每天/每周/5 字段 cron 与 IANA 时区,可设免打扰窗口和抖动,离线错过的多次触发只补最近一次,到点被唤醒后用它自己的口吻说出来。
- **MCP 只读资源**:`node src/mcp/resource-server.js` 向任意 MCP 客户端暴露全局人物记忆、群梗库、待触发提醒三类资源;出口统一脱敏,不含会话记录、配置与凭据,也没有写路径。
- **主动发言**:三条链路各自可关(会话安静时发起话题 / 无人回应时补一句 / 模型自安排唤醒),多活跃时段;
群聊与私聊各自独立计时、掷骰和记录判定,互不占用机会。间隔护栏、跳过原因日志,重启后补齐漏收消息。
- **生活层(见闻)**:可选从 B 站公开接口觅食,按人设兴趣与群聊话题筛选候选,由机器人主动挑内容分享;
默认关闭,复用现有主动发言的安静时段、预算与发送队列。见[生活层文档](docs/LIFE-FEED.md)。
- **模型接入**:思考档位按渠道翻译、按供应商/按任务分设(设置 → 模型 API → 「高级:思考模式」),服务商审核拦截重试,兜底模型切换。
- **语音**(转写与回复):语音/音频文件/视频音轨转成文字再交给聊天模型(与模型是否多模态无关)。
**默认走 API Key 的托管服务**(预置硅基流动的地址:粘一个 Key、从官网拉一次模型列表就能用;
也可一键换成 Groq / 火山 Seed-ASR / 阿里云百炼 / 讯飞 / 腾讯云 / 百度 / 自建,各家对新用户多有免费额度);
也支持**零 Key 的本机 whisper.cpp**(离线、免费,控制台里点一下就能装、也能完整卸载,或跑
`node scripts/install-asr-local.mjs`)。QQ 语音(SILK)与视频音轨都能吃(SILK 本地解码,不需要协议端转码);
视频还能"看画面":抽 4 帧拼成 2×2 帧条交给视觉模型(另有音轨转写),看到也能听到。
反过来也能"说":配好语音合成后它可以发语音回你(默认关,见配置示例)——支持 OpenAI 兼容(硅基流动/自建)、
火山豆包大模型语音合成 2.0(音色最自然,只需一把控制台密钥)、火山 v1 与 MiniMax,控制台里有服务预设、
模型与音色候选、可调语速与音量。语音的 Key 与搜索各自分开配。
转写带每小时次数闸门(全局 + 每会话双闸);群禁言时发送会直接报因、不再硬发。
- **图片生成**:群友说「画一张」时模型调 `generate_image` 出图,图**直接进表情库**再用现成的表情发送,
不用另起一条链路(默认关,见配置示例)。控制台在「语音」页下方有「图片生成」区块与「试画一张」当场验证;
预设里有一家**免 Key** 的(Pollinations)可直接试玩。按张计费,闸门是每小时张数上限。
换地址后旧的 Key **不会**跟过去(与转写同一套 Key 归属守卫)。
- **插件**:给机器人加第三方能力(给模型加工具 / 看群消息 / 定时跑任务)。每个插件跑在**独立子进程**里,
manifest 只能拿到声明过的能力,且每条能力都由宿主实现 —— 插件读不到你的配置文件,也绕不过发送队列的
禁言预检与限频。apiVersion 2 起,插件可以用 manifest 声明**设置面板**(文本/数字/开关/下拉/凭据,控制台
统一渲染,作者不写界面代码;凭据 AES-256-GCM 加密落盘、不回显);会改变外部账号数据的写操作走
**信任模型**:动作开关默认关、每次执行要管理员批准具体目标、当天有配额、同插件两次写至少隔 60 秒、
失败与幂等跳过自动退还,全部写操作留审计。升级前先对比 manifest,权限面变化必须确认;授权绑定
manifest 哈希,升级后按变化范围重置批准与开关。控制台「插件」页可一键安装(官方索引 13 个,全部零依赖,
含 B 站插件:搜索/看懂视频/下载合流发群/互动,写操作需逐次批准),也支持本地包与自己挂的索引;
**自己写一个**见[插件文档](docs/PLUGINS.md)(生成骨架 → 真机调试 → 打包自测,三条命令),
上架到官方索引走[索引仓库](https://github.com/sakurawwwxh/qq-agent-plugins)的 PR 流程 —— 控制台
「插件 → 发布插件」页把这两件事和命令都列在了一处。插件是第三方代码,装之前请在详情页看清它声明的权限。
- **技能包**:只读 Markdown 流程 + 工具白名单,不执行第三方代码。用户要求按流程总结/分析时,模型先
`skill_list` 再 `skill_use`;本轮只能调用技能允许的工具。默认关闭,可按群启用,内置群聊总结、视频读懂、
评论分析三个示例。
「技能市场」可按官方索引预览并安装额外技能(逐文件 sha256 校验、可卸载),见[技能文档](docs/SKILLS.md)。
- **长期记忆与检索**:人物印象和会话交接之外,`memory_query` 支持关键词/短句检索(FTS5 + 中文二元组);
默认每人最多 50 条、手写条目不删、默认不按时间过期(可配 0–3650 天)。见[记忆文档](docs/MEMORY.md)。
- **运维与可观测性**:备份默认 AES-256-GCM 加密,支持 `restore` 与演练;消息接口改为游标分页,
支持 JSONL/CSV 导出与 `ops prune`;`/api/metrics` 提供 JSON 与 Prometheus 文本,日志可切结构化 JSON。
配置项示例见[配置示例](docs/CONFIG-EXAMPLES.md)。运维命令统一收录在 [src/ops.js](src/ops.js),
用法见[运维工具](docs/OPS.md)。本地回归测试位于 [test/local/](test/local/README.md)。
衍生关系与第三方版权说明见 [NOTICE](NOTICE.md)。
## 界面
以下截图使用当前默认的 light + liquid glass 主题和匿名演示数据,展示总览、消息存档、语音回复与插件页: