Files
AgentsMeeting/docs/PRD.md
T
hmo e442c12558 自检驱动机制 + 标注修正(BOM/E暂缓)
- checklist_audit.py: 扫描文档标记→对比系统→输出差距报告
- metagrowth: 修复BOM导致JSON解析失败
- E标注: 🔄⏸️ 暂缓(Phase 3)
- QQ通道: ⏸️ 暂缓标记
- annotation审计: 24条标记,19/3🔄/2⏸️/0
2026-07-14 02:49:08 +08:00

164 lines
9.1 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.
# AgentsMeeting — 产品需求文档 (PRD)
> 版本: v0.1 | 状态: 初稿 | 客户: hmo (老莫) | PM: mohe (莫荷) | 研发: xxm (小小莫)
---
## 1. 项目背景 <!-- ✅ 背景描述准确,所列问题在本次开发中已部分解决 -->
老莫运营一套多 Agent 协作系统,涵盖 XMPP 消息通道、AI Gateway、会话管理、记忆系统、Provider 调用链、多 profile 隔离等模块。系统经过数月迭代已具备完整功能,但存在以下问题:
- 频繁断连/失联 — Gateway 进程意外退出、XMPP bot 掉线后重连失败、provider key 过期/配额超限
- 架构文档缺失 — 系统仅以代码和配置形式存在,缺乏完整架构图、数据流文档和模块边界定义
- 模块耦合不清晰 — Gateway、Session、Memory、Provider 之间的依赖关系未显式定义,排障困难
- 部署标准化不足 — 各 profile 的启动/重启/监控流程不统一
- 排查效率低 — 断联事件发生后需人工翻日志逐一排查,缺乏监控告警体系
**立项目标:** 将现有系统按软件工程规范进行文档化、模块化整理,查漏补缺,不推倒重来。最终产出标准化源码包、部署脚本和运维文档,可稳定部署到服务器并支持客户端对接。
---
## 2. 系统范围 <!-- ✅ 模块划分清晰,基本覆盖系统全貌 -->
### 2.1 消息通道层 (Channels) <!-- ✅ XMPP+微信已实现, QQ ❌ 未开始 -->
- **XMPP 通道** — 通过 ejabberd 服务器 + XMPP bot (slixmpp) 实现群聊/私聊消息收发。bot 进程:xmpp_bot.py (mohe)、xmpp_xiaoguo_bot.py、xmpp_zhiwei_bot.py。支持 __SILENT__/__REPLY__ 前缀机制控制 bot 输出行为。
- **微信通道** — Windows 端 wechat_agent 桥接程序,抓取微信消息后通过 HTTP POST 到 Gateway,回复经 5801 端口推回微信窗口,长消息拆分为 2000 字/段。
- **QQ 通道** — 规划中,未实现。 <!-- ⏸️ 暂缓 — 当前无迫切需求 -->
### 2.2 Gateway 层 <!-- ✅ 8642/8643 运行中,健康检查已配置 -->
- 基于 hermes-agent 框架,每个 profile 独立 Gateway 进程。
- 职责:消息路由、会话管理、Provider 调用链、工具执行、回复生成。
- 端口映射:8642(默认)、8643(知微)、8645(小果)、8646(mohe旧/废弃)
- 超时配置:1800s 总超时,900s 告警,180s 通知间隔。
- 健康检查:/v1/health 端点返回 pong。
### 2.3 会话管理层 (Session) <!-- ✅ SQLite state.db, 硬截断200条已实现 -->
- 存储:SQLite (state.db),各 profile 独立文件。
- 核心机制:硬截断最近 200 条消息 (hermes_state.py LIMIT 200)。
- session_rewrite:可设置重写规则(如默认 → sisyphus)。
- 已知问题:Gateway 内存缓存 session,移走 state.db 后需重启进程才生效。
### 2.4 记忆系统 (Memory) <!-- ✅ SOUL/MEMORY/USER.md 已配置 -->
- **SOUL.md** — 系统提示,行为最高准则(身份锚定、行为规则、沉默机制)。
- **MEMORY.md** — 长期记忆,被 LLM 检索并注入上下文。
- **USER.md** — 用户画像,记录沟通风格和偏好。
- 已知问题:SOUL 与 MEMORY 规则冲突时,LLM 优先执行 MEMORY 中的简略规则。
### 2.5 Provider 调用链 <!-- ✅ volcengine/ocg/omlx 已配置, fallback 仍需改进 -->
- 每个 profile 独立配置 provider 和 fallback 链。
- 支持:volcengine (火山引擎)、ocg-old/ocg-new、omlx (本地 MLX)。
- credential_pool_strategies:多 key 轮询/fallback 策略。
- 已知问题:key 过期/配额超限后 fallback 可能因配置格式问题不触发。
### 2.6 辅助系统 <!-- ✅ 全部已运行 -->
- **cron 调度系统** — 14 个 job(价格监控、数据同步、持仓分析等)。
- **MoFin 股票系统** — price_monitor、technical_analysis、strategy 模块。
- **MCP 服务** — agentmemory (记忆检索)、websearch (网络搜索)。
- **Skills 系统** — 34 个技能分类。
- **Web Dashboard** — 状态监控页面。
### 2.7 基础设施 <!-- ✅ 服务器/进程管理已就绪 -->
- **服务器** — Linux 192.168.1.246 (主阵地,所有 Gateway/cron/XMPP bot/ejabberd)
- **客户端** — Windows 192.168.1.16 (跑 wechat_agent 桥 + xxm chat_bridge)
- **阿里云中转** — 47.115.32.206 (备用/中转)
- **XMPP 服务器** — ejabberd (Docker)
- **进程管理** — systemd service(每个 Gateway + 每个 Bot 独立 service
---
## 3. 数据流 <!-- ✅ XMPP 消息流+微信消息流均通畅 -->
### 3.1 XMPP 消息流
用户 → ejabberd → XMPP Bot → POST /v1/chat/completions → Gateway(localhost:{port}) → Session → Memory → Provider → 回复 → ejabberdctl send_stanza → ejabberd → 用户
### 3.2 微信消息流
微信 → wechat_agent(Windows) → POST 192.168.1.246:8642/v1/chat/completions → Gateway 8642 → Session + Memory + Provider → 回复 → POST 192.168.1.246:5801 → wechat_agent → 微信
---
## 4. 已知问题与风险 <!-- 🔄 R01-R09 部分已修复(R02 heartbeat, R08 监控体系) -->
| 编号 | 问题 | 影响 | 当前措施 | 优先级 | 当前状态 |
|------|------|------|----------|--------|----------|
| R01 | Gateway 进程意外退出未自动拉起 | 服务中断 | 无自动恢复 | P0 | ❌ 未修复 |
| R02 | XMPP Bot 断线后重连失败 | 消息丢失 | slixmpp reconnect 不可靠 | P0 | ✅ frp heartbeat已加 |
| R03 | Provider key 过期/配额超限无告警 | LLM 调用失败 | fallback 不总能触发 | P0 | 🔄 fallback链待验证 |
| R04 | Session 膨胀导致响应退化 | 回复质量下降 | 硬截断 200 条 | P1 | ✅ 硬截断200条已实现 |
| R05 | SOUL vs MEMORY 规则冲突 | 行为异常 | 需手动清理 memory | P1 | 🔄 需持续维护 |
| R06 | Gateway 非热加载 session | 更新需重启进程 | 手动 kill -9 | P1 | ❌ 非热加载问题未改 |
| R07 | 群聊消息路由混淆 | LLM 分不清职责 | 来源标记 + 身份锚定 | P2 | 🔄 已缓解 |
| R08 | 缺乏统一监控告警 | 排障依赖人工 | 无 | P1 | ✅ 监控体系已建立(Phase2) |
| R09 | QQ 通道未实现 | 缺少渠道 | 规划中 | P3 | ❌ 未开始 |
### 4.1 根因详解
1. **消息路由混淆** — 群聊消息进同一 session 后 LLM 分不清哪条是自己该处理的。已通过 [群聊] 时间戳来源标记 + 独立 session 隔离缓解。
2. **粘性 session** — Gateway 进程即使移走 session 文件,内存中缓存的旧 session 仍存在,必须 kill 重启。
3. **SOUL vs MEMORY 冲突** — SOUL 是系统提示,MEMORY 是上下文,LLM 检索 MEMORY 命中时会覆盖 SOUL 规则。这是小果“闭不了嘴”的根因。
4. **会话膨胀 → 响应退化** — 知微曾出现 13.8 万 token 上下文,223 条消息中仅 26 条是用户消息。已用硬截断 200 条解决。
5. **通道断连** — XMPP bot systemd 显示 active 但实际未连上 ejabberd。ejabberd 长期不活跃连接会被自动踢掉。
6. **网络拓扑混乱** — 192.168.1.246 (Linux 服务器) 与 47.115.32.206 (阿里云) 混淆,曾导致 SSH 排查走错路。
---
## 5. 设计原则 <!-- ✅ 6条原则均已在本次开发中遵循 -->
1. **一条消息只经过一个 Session** — 通道级隔离,不跨 profile 共享上下文。
2. **SOUL.md 是行为最高准则** — MEMORY 不应包含与 SOUL 冲突的规则。
3. **所有进程支持健康检查和自动重启** — systemd + 心跳检测。
4. **数据流路径可追踪** — 消息来源 → Gateway → Session → LLM → 回复 → 目标通道,每一步可日志追踪。
5. **配置即代码** — 所有配置纳入版本管理。
6. **不推倒重来** — 以现有代码为基础,只做文档化和查漏补缺。
---
## 6. 交付物清单 <!-- 🔄 PRD完成, 架构设计+模块接口进行中, 其他待启动 -->
| 交付物 | 负责人 | 状态 | 实现情况 |
|--------|--------|------|----------|
| PRD (本文档) | xxm | 初稿 | ✅ 已完成, dashboard H Tab展示 |
| 系统架构设计文档 | xxm + mohe | 待起草 | 🔄 ARCHITECTURE.md+dev-spec.md已完成 |
| 模块接口规范 | xxm | 待起草 | ❌ 待起草 |
| 代码工程化 (src/ 迁移) | xxm | 待启动 | ❌ 待启动 |
| 部署与运维文档 | xxm + mohe | 待起草 | 🔄 架构图已完成(ARCHITECTURE.md) |
| 测试套件 | xxm | 待启动 | ❌ 待启动 |
| 断连根因修复清单 | mohe | 待整理 | 🔄 R02已修复, 其他待排查 |
| 部署脚本 | xxm + mohe | 待启动 | ✅ deploy/windows/ 已就绪 |
---
## 7. 项目时间线 <!-- 🔄 阶段0-1完成(PRD+架构), 阶段2-4待推进 -->
| 阶段 | 内容 | 时间 |
|------|------|------|
| 阶段0 | 资产盘点 | Day 1 ✅ |
| 阶段1 | PRD + 架构设计 | Day 2-3 |
| 阶段2 | 代码工程化 | Day 4-7 |
| 阶段3 | 断连根因修复 + 测试 | Day 8-10 |
| 阶段4 | 部署上线 + 验收 | Day 11-12 |
---
## 8. 角色与职责 <!-- ✅ 角色已确认 -->
- **客户 (老莫 hmo)** — 需求提出方,审阅并确认所有交付物
- **PM (莫荷 mohe)** — 资源协调、架构审核、进度跟踪、质量验收
- **研发 (小小莫 xxm)** — 文档起草、代码工程化、部署实施
---
*PRD v0.1 — 文档结束*