This repository has been archived on 2026-08-12. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Cyrene/docs/dev-plan/15-june-july-2026-fixes.md
AskaEth 79b1b9a3fa docs: 更新项目文档反映6-7月功能升级
- 新增 dev-plan/15: 6-7月功能升级与修复汇总 (Platform Bridge/记忆/Thinker/群聊等)
- 更新 dev-plan README: 版本日期 + 新文档索引
- 更新架构分析文档: 日期、已知限制、服务端口加入Platform Bridge
- .gitignore: 开放 docs/dev-plan/ 和关键架构文档纳入版本管理

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-07 21:24:03 +08:00

127 lines
5.1 KiB
Markdown
Raw Permalink 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.
# 2026年6-7月功能升级与修复汇总
> **日期**2026-07-07
> **时期**2026年6月下旬 - 7月上旬
> **分支**`dev`
---
## 一、Platform Bridge — 多平台接入
### 多账号 QQ 适配器
- 平台桥接 (`platform-bridge`) 负责统一管理所有第三方平台适配器
- 支持同一平台类型多个实例(如 `obv11``obv11-main`),通过 config name 区分
- 110+ 条官方 QQ Bot API 表情映射,支持表情名称解析
- WebSocket 连接管理:client/server 双模式、自动重连、禁言检测
### 群聊行为控制
- **消息发送间隔**:群聊 ≥3 秒/条,最多 2 条/轮,单条 ≤500 字自动截断防封控
- **禁言检测**:通过 `group_ban` notice 实时跟踪禁言状态,发送循环内逐条重检
- **审查模式 (group_ambient)**:非 @ 消息由 LLM 自主判断是否插话
- **管理员审查模式**:管理员消息在 group_ambient 下仍保留工具使用权
- **消息日志**:每配置独立日志文件,按 `AdapterName` 命名
### 主动消息平台推送
- 后台思考生成的主动消息可通过 QQ 适配器推送到群聊/私聊
- 支持 `【QQ私聊:QQ号】``【QQ群聊:群号】` 目标格式
- `ProactiveGuard` 统一频控,跨 Web/QQ 双通道
---
## 二、记忆系统升级
### 嵌入模型两级降级
| 级别 | 方案 | 配置 |
|------|------|------|
| L1 | OpenAI 兼容 `/embeddings` API (如 Ollama bge-m3) | `EMBEDDING_API_URL` + `EMBEDDING_MODEL` |
| L2 | 本地 n-gram FNV 哈希向量 (0依赖) | 默认,L1 不可用时自动启用 |
- 启动时自动测试嵌入 API 可用性
- DeepSeek 等不提供 embedding 的 API 不会静默失败
- 保存记忆时同步生成向量嵌入
### 检索增强
- 向量检索 + n-gram 滑动窗口关键词匹配,按分数排序
- 2-4 字中文分词窗口匹配 content/summary/keywords
- pgvector `<=>` 余弦距离检索 8 条 + 关键词匹配 100 条去重合并
### 记忆归属
- persona 规则:记忆不全是开拓者的,需分辨发送者再归因
- 群聊规则:不要把群友的事说成开拓者做的
---
## 三、后台思考系统 (Thinker)
### 死锁修复 (11+ 轮)
- **根因**Go `sync.Mutex` 不可重入,`defer` 是函数作用域非块作用域
- `defer t.muUnlock()` 在 for 循环和跨 LLM 调用时导致 self-deadlock
- 修复函数:`performThink`, `lightThinkLoop`, `performLightThink`, `storeThought`, `UpdatePresence`, `TriggerReminderMessage`, `PushPlatformMessage`, `resetSilenceTimer`, `buildThinkingUserPrompt`
### 上下文隔离
- `thinkSessionID` 绑定思考周期触发时的会话,防止跨群串台
- 思考过程中其他群的消息不再覆盖 activeSessionID
- convHistory 和 thought push 均使用绑定的 session
### 轻量思考 + 平台观察
- `lightThinkLoop`:高频轻量轮询(~60s),简短状态确认/话题发起
- `platformThink`:定期(~600s)聚合各频道记忆生成平台观察摘要
---
## 四、对话引擎 (Orchestrator + Synthesizer)
### 群聊人格强化
- **#1 审查模式**:非 @ 消息由 LLM 判断是否回复,支持 `【不发送】` 自我审查
- **#2 回复长度**:最多 1-2 句,允许多段落但需双换行分隔
- **#3 闭嘴服从**:识别"别说话""闭嘴"等指令,持续遵守
- **#4 发送者识别**:根据消息前缀中的昵称称呼对方
- **#5 简体中文**:强制输出简体中文,防止群友繁体昵称传染
- **#6 拒绝长内容**:禁止生成代码/长文,告知等待本地工作助手插件
- **#7 记忆归因**:不同人的言行分清,不张冠李戴
- **#8 禁用数字 ID**:用昵称而非 QQ 号称呼人
### 管理员功能
- **多层防御**`AdminOnly` 字段 → plugin manager 自动拦截 → IoT provider 执行级检查
- **身份提示**:管理员以名字标注,数字 UID 从昵称中移除
- **权限区分**:设备控制/系统管理等 admin-only 工具对非管理员温柔拒绝
### 工具系统
- 后台工具结果自动推送(成功/失败),失败结果不再触发 LLM 跟进避免噪音
- 工具名称输出过滤(`vision_analyze`, `web_search` 等)
- 双换行消息拆分
---
## 五、搜索与其他
### web_search (SearXNG)
- 引擎精简为 `bing` + `sogou`(移除 baidu 安全验证拦截 + 360 不稳定)
- 超时 25sSearXNG 内部 timeout=20s
- 添加 User-Agent
### LLM API
- HTTP 连接池:`MaxIdleConns=100`, `MaxIdleConnsPerHost=20`, `IdleConnTimeout=90s`
- `TLSHandshakeTimeout=15s` 防止握手卡死
### 降级回复
- 仅在管理员私聊时发送降级消息,群聊静默避免怪话
---
## 六、新增环境变量
| 变量 | 默认值 | 说明 |
|------|--------|------|
| `EMBEDDING_API_URL` | `LLM_API_URL` | 嵌入 API 地址,可指向 Ollama 等独立服务 |
| `EMBEDDING_MODEL` | `text-embedding-3-small` | 嵌入模型名 |
| `PLATFORM_BRIDGE_URL` | `http://localhost:8095` | platform-bridge 地址 |
---
## 七、已知待办
- [ ] 嵌入 API 接入真实模型(Ollama bge-m3)后验证向量检索准确率
- [ ] 本地工作助手插件(承载长文本/代码生成等能力)
- [ ] 跨群聊记忆完全隔离(当前后台思考仍会将各频道记忆混合后统一生成摘要)