diff --git a/docs/03-业务模块/IIT Manager Agent/00-模块当前状态与开发指南.md b/docs/03-业务模块/IIT Manager Agent/00-模块当前状态与开发指南.md index 537e1b4d..60de4f00 100644 --- a/docs/03-业务模块/IIT Manager Agent/00-模块当前状态与开发指南.md +++ b/docs/03-业务模块/IIT Manager Agent/00-模块当前状态与开发指南.md @@ -1,18 +1,21 @@ # IIT Manager Agent模块 - 当前状态与开发指南 -> **文档版本:** v2.4 +> **文档版本:** v3.0 > **创建日期:** 2026-01-01 > **维护者:** IIT Manager开发团队 -> **最后更新:** 2026-02-08 🎉 **事件级质控架构 V3.1 开发完成!** +> **最后更新:** 2026-02-25 **CRA Agent V3.0 开发计划定稿** > **重大里程碑:** -> - ✅ 2026-02-08:**事件级质控架构 V3.1 完成**(record+event 独立质控 + 规则动态过滤 + 报告去重 + AI对话增强) -> - ✅ 2026-02-08:**质控驾驶舱 UI 开发完成**(PromptBuilder XML 格式 + 驾驶舱页面 + 热力图 + 详情抽屉) -> - ✅ 2026-02-08:**质控系统优化计划制定**(XML 临床切片格式 + 质控驾驶舱设计 + 方案 A 确认) -> - ✅ 2026-02-07:**实时质控系统开发完成**(pg-boss防抖 + 质控日志 + 录入汇总 + 管理端批量操作) -> - ✅ 2026-02-05:**V2.9.1 完整开发计划发布**(双脑架构 + 三层记忆 + 主动性增强 + 隐私合规) -> - ✅ 2026-02-02:**REDCap 生产环境部署完成**(ECS + RDS + HTTPS) +> - **2026-02-25:CRA Agent V3.0 开发计划定稿**(替代 CRA 定位 + 报告驱动架构 + 4 语义化工具 + 统一驾驶舱) +> - ✅ 2026-02-08:事件级质控架构 V3.1 完成(record+event 独立质控 + 规则动态过滤 + 报告去重) +> - ✅ 2026-02-08:质控驾驶舱 UI 开发完成(驾驶舱页面 + 热力图 + 详情抽屉) +> - ✅ 2026-02-07:实时质控系统开发完成(pg-boss防抖 + 质控日志 + 录入汇总 + 管理端批量操作) +> - ✅ 2026-02-02:REDCap 生产环境部署完成(ECS + RDS + HTTPS) > - ✅ 2026-01-04:混合检索架构实现(REDCap实时数据 + Dify文档知识库) -> **文档目的:** 反映模块真实状态,记录开发历程 +> **文档目的:** 反映模块真实状态,记录开发历程 +> **V3.0 核心文档:** +> - [CRA Agent V3.0 开发计划](./04-开发计划/V3.0全新开发计划/V3.0全新开发计划.md) +> - [统一数字 CRA 质控平台 PRD](./04-开发计划/V3.0全新开发计划/统一数字%20CRA%20质控平台产品需求文档(PRD).md) +> - [UI 原型](./04-开发计划/V3.0全新开发计划/Final%20CRA质控平台V3.html) --- @@ -30,27 +33,32 @@ ## 🎯 模块概述 -### 核心功能 -IIT Manager Agent(研究者发起试验管理助手)是一个基于企业微信的主动式AI Agent产品,为IIT(研究者发起试验)提供智能化管理能力。 +### 核心定位(V3.0 更新) +CRA Agent 是一个**替代 CRA 岗位的自主 AI Agent**,而非辅助 CRA 的工具。目标是用 AI 替代临床监查员 70-80% 的工作量,让 IIT 项目在无专职 CRA 的情况下也能达到合规的质控水平。主要用户为 PI(主要研究者)/ 研究团队。 -### 架构设计 -- **核心理念**:**双脑架构(V2.9.1)** - SOP 状态机 + ReAct 引擎 + 三层记忆 + 隐私合规 -- **双脑路由**: - - **左脑(SOP 引擎)**:结构化任务执行,写操作必经 - - **右脑(ReAct 引擎)**:模糊查询,只读不写 +### 架构设计(V3.0) +- **核心理念**:报告驱动 + LLM Tool Use + 统一驾驶舱 +- **两层架构**: + - **自驱动层**:定时质控 → 生成报告 → 派发 eQuery → 推送告警(Agent 自主"上班") + - **对话层**:ChatOrchestrator + LLM 原生 Function Calling + 4 个语义化工具 +- **4 语义化工具**:`look_up_data` / `check_quality` / `read_report` / `search_knowledge` +- **已废弃(V2.9.1)**:双脑架构、三层记忆系统、手写 ReAct 引擎、关键词意图路由 - **技术栈**: - 后端:Node.js (Fastify) + PostgreSQL (Prisma) + pg-boss - - 前端:企业微信 + 微信小程序 (Taro 4.x) + - 前端:管理端(React + Ant Design) + 企业微信推送 - 数据源:REDCap (EDC系统) - 通知:企业微信 - - AI能力:DeepSeek/Qwen + 自研 RAG + - AI能力:DeepSeek/Qwen + 自研 RAG(pgvector)+ LLM Tool Use ### 当前状态 -- **开发阶段**:🎉 **事件级质控架构 V3.1 开发完成!基本测试通过** -- **整体完成度**: - - **基础设施**:95%(REDCap + 企业微信 + AI 对话 + 实时质控 + 驾驶舱 UI + 事件级质控) - - **架构设计**:100%(V2.9.1 完整开发计划发布) - - **代码实现**:60%(实时质控系统 + 驾驶舱 UI + 事件级质控 V3.1 已实现) +- **开发阶段**:**V3.0 开发计划已定稿,准备进入 P0 开发** +- **已完成的基础设施**(可复用): + - HardRuleEngine (478行) + SoftRuleEngine (488行) + SkillRunner (756行) + - RedcapAdapter (1363行) + QcReportService (980行) + ToolsService (731行) + - 实时质控 Webhook + 质控驾驶舱 UI + 18 张数据库表 + - 企业微信推送 + REDCap 生产环境 +- **待重构**:ChatService (1442行,关键词路由) → ChatOrchestrator + 4 Tool Use +- **代码规模**:后端 ~15,000+ 行 / 61 个文件 / 18 张表(iit_schema) #### ✅ 已完成功能(基础设施) - ✅ 数据库Schema创建(iit_schema,9个表 = 原5个 + 新增4个质控表) @@ -99,27 +107,26 @@ IIT Manager Agent(研究者发起试验管理助手)是一个基于企业微 - ✅ **AI 意图识别增强**(支持"严重违规有几项"等自然语言查询) - ✅ **Bug 修复**(formatPatientData 500 错误 + 记录数统计 + 报告限制移除) -#### ⏳ 待实施功能(按 Phase 规划) -| Phase | 内容 | 优先级 | 状态 | -|-------|------|--------|------| -| **Phase 1** | 基础工具层(ToolsService + HardRuleEngine + AutoMapper) | P0 | ✅ 部分完成(HardRuleEngine 已实现) | -| **Phase 1.5** | 隐私安全(AnonymizerService + PII 脱敏) | **P0 合规必需** | 待开始 | -| **Phase 2** | 实时质控系统(QC Worker + QcService + 批量操作) | P0 | ✅ **已完成** | -| **Phase 2.5** | 质控 UI 与 LLM 格式优化(驾驶舱 + XML 临床切片) | P0 | 📋 **计划已制定** | -| **Phase 3** | ReAct 引擎 + 流水账(ReActEngine + 反馈循环) | P0 | 待开始 | -| **Phase 4** | 调度系统(SchedulerService + Cron Skill + ProfilerService) | P1 | 待开始 | -| **Phase 5** | 智能路由(IntentService + 多意图处理) | P1 | 待开始 | -| **Phase 6** | 视觉能力(VisionService) | 延后 | 待开始 | +#### ⏳ V3.0 开发计划(2026-02-25 定稿) -#### 📋 新增开发计划(2026-02-08) -- **[质控系统 UI 与 LLM 格式优化计划](./04-开发计划/07-质控系统UI与LLM格式优化计划.md)** - - 阶段 1:LLM 格式优化(PromptBuilder + XML 临床切片)~5.5h - - 阶段 2:管理端 UI 增强(质控驾驶舱 + 统计卡片 + 热力图)~9.5h - - 阶段 3:变量标签系统(按语义标签切片数据)~5h +> 详见:[CRA Agent V3.0 开发计划](./04-开发计划/V3.0全新开发计划/V3.0全新开发计划.md) + +| 阶段 | 内容 | 预估 | 状态 | +|------|------|------|------| +| **P0-1** | ChatOrchestrator + ToolsService 重构(4 语义化工具 + LLM Tool Use) | 2 天 | 待开始 | +| **P0-2** | report 工具补全(read_report + search_knowledge 实现) | 1.5 天 | 待开始 | +| **P0-3** | 定时质控 + 报告生成 + eQuery 闭环(pg-boss cron + 全量/增量报告 + eQuery 状态机) | 3.5 天 | 待开始 | +| **P0-4** | 统一质控驾驶舱(概览 + AI Stream + eQuery 管理 + 报告归档 + 重大事件库) | 2.5 天 | 待开始 | +| **P1-1** | 企业微信主动推送(日报/告警/eQuery 通知) | 2 天 | 待开始 | +| **P1-2** | 管理端配置增强(规则模板 + 多项目切换) | 2 天 | 待开始 | +| **P2** | 长期可选(PII 脱敏 / SDV 视觉核对 / AutoMapper / 数据响应质量评级) | - | 待开始 | + +**P0 合计:约 9.5 天 / P0+P1 合计:约 13.5 天(1 人)** - **部署状态**:✅ REDCap 生产环境运行中(https://redcap.xunzhengyixue.com/) -- **已知问题**:无 -- **开发计划文档**:[V2.9.1 综合开发计划](./04-开发计划/IIT%20Manager%20Agent%20V2.6%20综合开发计划.md) +- **已知问题**:ChatService (1442行) 为"上帝类",关键词路由需重构为 LLM Tool Use +- **开发计划文档**:[CRA Agent V3.0 开发计划](./04-开发计划/V3.0全新开发计划/V3.0全新开发计划.md) +- **历史计划文档**:[V2.9.1 综合开发计划](./04-开发计划/IIT%20Manager%20Agent%20V2.6%20综合开发计划.md)(已归档) --- @@ -176,17 +183,16 @@ IIT Manager Agent(研究者发起试验管理助手)是一个基于企业微 - ✅ 端到端测试通过(<2秒延迟,100%成功率) - ✅ **🎯 MVP闭环完全打通**(REDCap → Node.js → 企业微信) -**下一步任务**: -- ⏳ Phase 1.5:AI质控能力(Dify RAG + 规则引擎) -- ⏳ Phase 2:多项目支持(`notification_config` 字段) -- ⏳ Phase 2:定时轮询实现(兜底机制) +**下一步任务(V3.0)**: +- ⏳ P0-1:ChatOrchestrator + ToolsService 重构(LLM Tool Use + 4 语义化工具) +- ⏳ P0-2:read_report + search_knowledge 工具实现 +- ⏳ P0-3:定时质控 + 报告生成 + eQuery 闭环 +- ⏳ P0-4:统一质控驾驶舱(AI Stream + eQuery 管理) -**待完成任务**: -- ⏳ 数据质量Agent开发(AI质控) -- ⏳ 企业微信对话功能(用户消息处理) -- ⏳ 影子状态管理 -- ⏳ 微信小程序前端 -- ⏳ REDCap双向回写 +**已废弃的旧计划任务**: +- ~~Phase 3:ReAct 引擎~~ → 改用 LLM 原生 Tool Use +- ~~Phase 5:IntentService~~ → LLM 自行选择工具 +- ~~微信小程序前端~~ → 管理端 Web 前端 + 企微推送 --- @@ -197,18 +203,31 @@ IIT Manager Agent(研究者发起试验管理助手)是一个基于企业微 - **Schema名称**:`iit_schema` - **数据库**:`ai_clinical_research`(RDS PostgreSQL 15) - **创建时间**:2025-12-31 -- **表数量**:5个 +- **表数量**:18 个(原始 5 个 + 质控 4 个 + 规则/技能 4 个 + 知识库/会话/字段元数据 5 个) - **验证状态**:✅ 已创建并验证 -### 2.2 表结构 +### 2.2 核心表结构 -| 表名 | 用途 | 主要字段 | 索引 | -|------|------|---------|------| -| **IitProject** | 项目配置 | id, redcapApiUrl, redcapApiToken, difyAgentUrl | redcapProjectId | -| **IitPendingAction** | 影子状态(待审核动作) | id, projectId, actionType, status | projectId, status | -| **IitTaskRun** | 任务运行记录 | id, projectId, taskType, status | projectId, status | -| **IitUserMapping** | 跨系统用户映射 | id, projectId, redcapUsername, wechatUserId | redcapUsername, wechatUserId | -| **IitAuditLog** | 审计日志 | id, projectId, actionType, operator | projectId, createdAt | +| 表名 | 用途 | 类别 | +|------|------|------| +| **IitProject** | 项目配置(REDCap 连接 + 规则 + 知识库) | 基础 | +| **IitPendingAction** | 影子状态(待审核动作) | 基础 | +| **IitTaskRun** | 任务运行记录 | 基础 | +| **IitUserMapping** | 跨系统用户映射 | 基础 | +| **IitAuditLog** | 审计日志 | 基础 | +| **iit_qc_logs** | 质控日志(单条质控问题记录) | 质控 | +| **iit_record_summary** | 患者录入汇总 | 质控 | +| **iit_qc_project_stats** | 项目级质控统计 | 质控 | +| **iit_field_metadata** | REDCap 字段元数据缓存 | 质控 | +| **iit_qc_rules** | 质控规则定义 | 规则 | +| **iit_qc_skills** | 质控技能定义 | 规则 | +| **iit_qc_rule_skill** | 规则-技能关联 | 规则 | +| **iit_qc_skill_triggers** | 技能触发器 | 规则 | +| **iit_chat_sessions** | 对话会话 | 会话 | +| **iit_chat_messages** | 对话消息 | 会话 | +| **iit_knowledge_bases** | 知识库 | 知识 | +| **iit_knowledge_documents** | 知识库文档 | 知识 | +| **iit_qc_reports**(V3.0 新增) | 质控报告归档 | 报告 | ### 2.3 Prisma Schema位置 @@ -216,8 +235,8 @@ IIT Manager Agent(研究者发起试验管理助手)是一个基于企业微 AIclinicalresearch/backend/prisma/schema.prisma ``` -**IIT Manager Schema定义**(位于文件末尾): -- 完整的5个表模型定义 +**IIT Manager Schema定义**(~350 行类型定义): +- 18 个表模型定义 - 外键关系配置 - 索引优化 - JSON字段支持 @@ -233,20 +252,29 @@ AIclinicalresearch/backend/prisma/schema.prisma - **Web框架**:Fastify - **ORM**:Prisma 6.17.0(多Schema支持) - **任务队列**:pg-boss(Postgres-Only架构) -- **AI能力**:Dify RAG(RESTful API) +- **AI能力**:LLM Tool Use (DeepSeek/Qwen) + 自研 RAG (pgvector) -**模块结构**: +**模块结构**(61 个文件,~15,000+ 行): ``` backend/src/modules/iit-manager/ -├── index.ts ✅ 主入口(模块注册) -├── types/ -│ └── index.ts ✅ 类型定义(223行) -├── routes/ -│ └── index.ts ✅ 路由骨架 -├── controllers/ ⏳ 待开发 -├── services/ ⏳ 待开发 -├── agents/ ⏳ 待开发 -└── adapters/ ⏳ 待开发 +├── index.ts ✅ 主入口 +├── types/index.ts ✅ 类型定义 +├── routes/ ✅ 路由(5+ 个路由文件) +├── controllers/ ✅ 控制器(Webhook/QcCockpit/Admin) +├── services/ +│ ├── ChatService.ts ✅ 1442行(V3.0 将重构为 ChatOrchestrator) +│ ├── ToolsService.ts ✅ 731行(V3.0 重构为 4 语义化工具) +│ ├── HardRuleEngine.ts ✅ 478行(JSON-logic 硬规则) +│ ├── SoftRuleEngine.ts ✅ 488行(LLM 软规则) +│ ├── SkillRunner.ts ✅ 756行(质控技能编排) +│ ├── QcReportService.ts ✅ 980行(报告生成) +│ ├── QcService.ts ✅ 质控查询服务 +│ ├── RedcapCacheService.ts ✅ REDCap 缓存 +│ ├── KnowledgeBaseService.ts ✅ 知识库服务 +│ └── ... +├── adapters/ +│ └── RedcapAdapter.ts ✅ 1363行(REDCap API 适配器) +└── workers/ ✅ pg-boss Worker(质控/同步) ``` ### 3.2 前端技术栈 @@ -404,20 +432,24 @@ backend/prisma/schema.prisma - 包含外键关系和索引 ``` -**模块代码**: +**模块代码**(主要文件): ``` backend/src/modules/iit-manager/ -├── index.ts ✅ 82行(模块注册) -├── types/index.ts ✅ 223行(类型定义) -├── routes/index.ts ✅ 23行(路由骨架) -├── test-iit-database.ts ✅ 111行(数据库测试) -└── test-wechat-push.ts ✅ 138行(企微测试) +├── services/ChatService.ts 1442行(对话服务,V3.0 待重构) +├── adapters/RedcapAdapter.ts 1363行(REDCap API 适配器) +├── services/QcReportService.ts 980行(质控报告生成) +├── services/SkillRunner.ts 756行(技能编排器) +├── services/ToolsService.ts 731行(工具服务,V3.0 待重构) +├── services/SoftRuleEngine.ts 488行(LLM 软规则) +├── services/HardRuleEngine.ts 478行(JSON-logic 硬规则) +├── controllers/WebhookController.ts 500+行(REDCap/企微回调) +└── ... (61 files total) ``` **代码统计**: -- **已完成代码**:577行 -- **测试脚本**:249行 -- **总计**:826行 +- **后端代码**:~15,000+ 行 / 61 个文件 +- **数据库表**:18 张(iit_schema) +- **Prisma Schema**:~350 行类型定义 ### 5.2 前端代码 @@ -538,173 +570,41 @@ npx ts-node src/modules/iit-manager/test-wechat-push.ts --- -## 🎯 八、下一步工作(Day 2) +## 🎯 八、下一步工作(V3.0 开发) -### 8.1 Day 2总体目标 +### 8.1 V3.0 首要目标 -**核心目标**:实现REDCap数据的实时拉取能力 +**核心目标**:将 ChatService 关键词路由重构为 LLM 原生 Tool Use 架构 -**交付物**: -- ✅ REDCap API Adapter(`RedcapAdapter.ts`) -- ✅ Webhook接收器(`WebhookController.ts`) -- ✅ 数据同步管理(`SyncManager.ts`) -- ✅ 完整测试(单元测试 + 集成测试) +**即将开始**:P0-1 ChatOrchestrator + ToolsService 重构(2 天) -**预计工作量**:6-8小时(完整工作日) +**核心交付物**: +- ChatOrchestrator(替代 ChatService,~300 行,LLM Tool Use 循环) +- ToolsService 重构(6 个细粒度工具 → 4 个语义化工具) +- System Prompt(嵌入工具选择策略) +- 端到端测试(对话 → LLM 选工具 → 执行 → 返回结果) ---- +**详细计划**:[CRA Agent V3.0 开发计划](./04-开发计划/V3.0全新开发计划/V3.0全新开发计划.md) -### 8.2 阶段1:环境准备(30分钟) +### 8.2 V3.0 产品三原则 -**REDCap配置**: -- [ ] 在Control Center启用DET功能 -- [ ] 在test0102项目生成API Token -- [ ] 配置环境变量: - ```env - REDCAP_BASE_URL=http://localhost:8080 - REDCAP_API_TOKEN_TEST=YOUR_TOKEN_HERE - ``` -- [ ] 使用curl测试API是否可用 +1. **AI 替代**:Agent 自驱执行质控全流程,用户仅做确认 +2. **AI 白盒化**:AI Stream 时间线透明展示推理与操作过程 +3. **统一视角**:去角色化,单一平台所有用户可下钻查看 -**测试工具准备**: -- [ ] 安装ngrok(用于DET测试) -- [ ] 准备Postman Collection(API调试) -- [ ] 准备测试数据(在REDCap中录入几条记录) +### 8.3 关键注意事项 ---- - -### 8.3 阶段2:RedcapAdapter开发(1.5小时) - -**文件位置**:`backend/src/modules/iit-manager/adapters/RedcapAdapter.ts` - -**任务清单**: -- [ ] 创建RedcapAdapter类 -- [ ] 实现 `exportRecords()` 方法(支持增量同步) -- [ ] 实现 `exportMetadata()` 方法(获取字段定义) -- [ ] 实现 `importRecords()` 方法(Phase 2使用) -- [ ] 实现 `formatRedcapDate()` 工具方法 -- [ ] 配置axios超时和重试 -- [ ] 编写单元测试:`RedcapAdapter.test.ts` - -**验收标准**: -- ✅ 可以拉取test0102的所有记录 -- ✅ 可以拉取指定record_id的记录 -- ✅ 可以使用dateRangeBegin增量拉取 -- ✅ 可以获取元数据(字段定义) -- ✅ 单元测试全部通过 - ---- - -### 8.4 阶段3:WebhookController开发(2小时) - -**文件位置**:`backend/src/modules/iit-manager/controllers/webhookController.ts` - -**任务清单**: -- [ ] 创建WebhookController类 -- [ ] 实现 `handleRedcapWebhook()` 方法(响应时间<100ms) -- [ ] 实现 `processWebhook()` 异步处理方法 -- [ ] 实现 `checkDuplicate()` 幂等性检查 -- [ ] 配置路由:`POST /api/v1/iit/webhooks/redcap` -- [ ] 记录审计日志 -- [ ] 推送到质控队列(`iit:quality-check`) - -**验收标准**: -- ✅ Webhook可以接收POST请求 -- ✅ 立即返回200 OK(<100ms) -- ✅ 异步处理不阻塞响应 -- ✅ 5分钟内相同记录不重复处理 -- ✅ 成功调用RedcapAdapter拉取数据 -- ✅ 数据推送到pg-boss队列 - ---- - -### 8.5 阶段4:SyncManager开发(1.5小时) - -**文件位置**:`backend/src/modules/iit-manager/services/SyncManager.ts` - -**任务清单**: -- [ ] 创建SyncManager类 -- [ ] 实现 `initializeSync()` 方法(注册定时任务) -- [ ] 实现 `handlePoll()` 方法(轮询逻辑) -- [ ] 实现 `stopSync()` 方法(停止同步) -- [ ] 注册pg-boss Worker:`iit:redcap:poll` -- [ ] 增量拉取逻辑(使用lastSyncAt) -- [ ] 更新项目lastSyncAt字段 - -**验收标准**: -- ✅ 可以手动触发一次轮询 -- ✅ 定时任务可以自动执行(每30分钟) -- ✅ 增量拉取正确(只拉取新数据) -- ✅ lastSyncAt正确更新 -- ✅ 数据推送到质控队列 - ---- - -### 8.6 阶段5:集成测试(1小时) - -**测试内容**: -1. **DET配置验证**: - - [ ] 在REDCap中配置DET URL - - [ ] 使用ngrok测试Webhook - - [ ] 验证Payload格式 - -2. **API测试**: - - [ ] 运行 `test-redcap-api.ts` - - [ ] 验证exportRecords正常 - - [ ] 验证exportMetadata正常 - -3. **端到端测试**: - - [ ] 在REDCap保存一条记录 - - [ ] 验证Webhook被触发 - - [ ] 验证数据被拉取 - - [ ] 验证数据推送到队列 - - [ ] 验证审计日志记录 - -4. **轮询测试**: - - [ ] 手动触发轮询 - - [ ] 验证增量拉取 - - [ ] 验证lastSyncAt更新 - -**验收标准**: -- ✅ DET实时触发正常 -- ✅ API拉取数据正常 -- ✅ 轮询补充机制正常 -- ✅ 端到端流程畅通 -- ✅ 所有测试通过 - ---- - -### 8.7 阶段6:文档更新(30分钟) - -**更新内容**: -- [ ] 更新MVP开发任务清单(Day 2标记为完成) -- [ ] 记录API Token和配置信息 -- [ ] 更新模块当前状态文档 -- [ ] 更新架构图 -- [ ] 提交Git(遵循Git提交规范) - ---- - -### 8.8 关键注意事项 - -**性能要求**: -- ⚠️ Webhook响应时间必须<100ms -- ⚠️ 使用`setImmediate()`异步处理,不阻塞响应 - -**安全要求**: -- ⚠️ API Token存储在环境变量 -- ⚠️ 不要在日志中打印完整Token -- ⚠️ 不要提交Token到Git - -**可靠性要求**: -- ⚠️ 实现幂等性检查(防止重复处理) -- ⚠️ 实现轮询补充(防止DET遗漏) -- ⚠️ 记录详细日志(便于排查问题) +**架构决策**: +- ✅ 报告优先,工具兜底(read_report 为主入口,80% 问答通过报告回答) +- ✅ LLM 原生 Tool Use,不手写 ReAct 循环 +- ✅ 4 个粗粒度语义化工具(look_up_data / check_quality / read_report / search_knowledge) +- ✅ pg-boss cron 定时触发(替代自建 SchedulerService) **技术参考**: +- 📖 [CRA Agent V3.0 开发计划](./04-开发计划/V3.0全新开发计划/V3.0全新开发计划.md) +- 📖 [统一数字 CRA 质控平台 PRD](./04-开发计划/V3.0全新开发计划/统一数字%20CRA%20质控平台产品需求文档(PRD).md) +- 📖 [UI 原型](./04-开发计划/V3.0全新开发计划/Final%20CRA质控平台V3.html) - 📖 [REDCap对接技术方案与实施指南](./04-开发计划/REDCap对接技术方案与实施指南.md) -- 📖 [REDCap二次开发深度指南](../../Redcap/03-API对接与开发/33-REDCap二次开发深度指南.md) -- 📖 [REDCap Docker部署操作手册](../../Redcap/01-部署与配置/10-REDCap_Docker部署操作手册.md) --- @@ -719,9 +619,13 @@ npx ts-node src/modules/iit-manager/test-wechat-push.ts ### 9.2 开发计划文档 -- [MVP开发任务清单](./04-开发计划/MVP开发任务清单.md) - 详细任务清单 +- ⭐⭐⭐ [CRA Agent V3.0 开发计划](./04-开发计划/V3.0全新开发计划/V3.0全新开发计划.md) - **当前核心开发计划** +- ⭐⭐ [统一数字 CRA 质控平台 PRD](./04-开发计划/V3.0全新开发计划/统一数字%20CRA%20质控平台产品需求文档(PRD).md) - 产品需求文档 +- ⭐ [UI 原型](./04-开发计划/V3.0全新开发计划/Final%20CRA质控平台V3.html) - HTML 原型(浏览器打开预览) +- [MVP开发任务清单](./04-开发计划/MVP开发任务清单.md) - 初期任务清单(已归档) +- [V2.9.1 综合开发计划](./04-开发计划/IIT%20Manager%20Agent%20V2.6%20综合开发计划.md) - 旧版计划(已归档) - [企业微信注册指南](./04-开发计划/企业微信注册指南.md) - 企业微信配置 -- ⭐ [REDCap对接技术方案与实施指南](./04-开发计划/REDCap对接技术方案与实施指南.md) - REDCap集成完整方案(Day 2核心参考) +- [REDCap对接技术方案与实施指南](./04-开发计划/REDCap对接技术方案与实施指南.md) - REDCap集成完整方案 ### 9.3 REDCap相关文档 @@ -936,11 +840,13 @@ npx ts-node src/modules/iit-manager/test-wechat-push.ts --- > **提示**:本文档反映IIT Manager Agent模块的最新真实状态,每个里程碑完成后必须更新! -> **最后更新**:2026-02-08 22:00 -> **当前进度**:事件级质控 V3.1 完成(60%)| 下一步:Phase 3 ReAct 引擎 + 流水账 -> **重要文档**: -> - [事件级质控开发记录](./06-开发记录/2026-02-08-事件级质控与报告优化开发记录.md) ⭐⭐⭐⭐⭐ -> - [实时质控系统开发记录](./06-开发记录/2026-02-07-实时质控系统开发记录.md) ⭐⭐⭐⭐⭐ -> - [REDCap对接技术方案与实施指南](./04-开发计划/REDCap对接技术方案与实施指南.md) ⭐⭐⭐⭐⭐ +> **最后更新**:2026-02-25 +> **当前进度**:V3.0 开发计划已定稿 | 下一步:P0-1 ChatOrchestrator + ToolsService 重构 +> **核心文档**: +> - [CRA Agent V3.0 开发计划](./04-开发计划/V3.0全新开发计划/V3.0全新开发计划.md) ⭐⭐⭐⭐⭐ +> - [统一数字 CRA 质控平台 PRD](./04-开发计划/V3.0全新开发计划/统一数字%20CRA%20质控平台产品需求文档(PRD).md) ⭐⭐⭐⭐⭐ +> - [UI 原型](./04-开发计划/V3.0全新开发计划/Final%20CRA质控平台V3.html) ⭐⭐⭐⭐ +> - [事件级质控开发记录](./06-开发记录/2026-02-08-事件级质控与报告优化开发记录.md) +> - [实时质控系统开发记录](./06-开发记录/2026-02-07-实时质控系统开发记录.md) diff --git a/docs/03-业务模块/IIT Manager Agent/04-开发计划/V3.0全新开发计划/Final CRA质控平台V3.html b/docs/03-业务模块/IIT Manager Agent/04-开发计划/V3.0全新开发计划/Final CRA质控平台V3.html new file mode 100644 index 00000000..ef5642f1 --- /dev/null +++ b/docs/03-业务模块/IIT Manager Agent/04-开发计划/V3.0全新开发计划/Final CRA质控平台V3.html @@ -0,0 +1,743 @@ + + + + + + 统一数字 CRA 质控平台 - 终极版 + + + + + + + + + + +
+ +
+
+ +

项目健康度大盘

+
+ +
+
+ + EDC 实时直连中 +
+ +
+
+ + +
+
+
+

全局监查态势

+

从宏观趋势到底层患者明细,掌握项目全维度数据质量

+
+
+ + +
+
+
+
+ 整体数据合规率 +
+
96.8%
+
↑ 较上周提升 1.2%
+
+
+
+ 待处理违规 (eQuery) + +
+
3
+
包含 1 项重大时序冲突
+
+
+
+ AI 今日审查表单数 + +
+
142
+
100% 自动化,无需人工参与
+
+
+
+ 累计关键事件 (AE/PD) + +
+
12
+
已沉淀至定期质控报告
+
+
+ + +
+
+

+ + 当前入组患者最新质控状态 (受试者 × 表单矩阵) +

+
+
异常/质疑中
+
逻辑存疑
+
AI 质控通过
+
+
+
+ + + + + + + + + + + + + + +
受试者编号知情同意入选标准实验室检查不良事件 (AE)随访记录
+
+
+ * 矩阵实时反映 REDCap 最新录入与 AI 验证结果。点击红色高亮色块可直接进入 eQuery 处理中心。 + +
+
+ + +
+ +
+
+

+ + 近期关键事件预警 (AE/PD) +

+
+
+
+
+
+ 严重不良事件 (SAE) + 昨天 14:30 +
+

P005 - 谷丙转氨酶(ALT)达到 150U/L

+

由 AI 从实验室检查表抓取,已触发强制 SDV。

+
+
+
+ 方案偏离 (PD) + 3天前 +
+

P002 - 随访 2 严重超窗

+

实际随访日期偏离方案要求窗口期超过 7 天。

+
+
+
+
+ + +
+
+

+ + 数据响应质量一览 +

+
+
+

通过 AI 发起质疑的响应速度,评估各中心的数据录入质量与配合度。

+
+
+
+ 北京协和中心 (李明) + 平均响应 4.5h +
+
+
+
+
+
+
+ 上海中山中心 (赵小丽) + 平均响应 12.2h +
+
+
+
+
+
+
+ 广州南方中心 (王强) + 平均响应 48.2h +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + +
+ + + + + + + \ No newline at end of file diff --git a/docs/03-业务模块/IIT Manager Agent/04-开发计划/V3.0全新开发计划/V3.0全新开发计划.md b/docs/03-业务模块/IIT Manager Agent/04-开发计划/V3.0全新开发计划/V3.0全新开发计划.md new file mode 100644 index 00000000..e90f5483 --- /dev/null +++ b/docs/03-业务模块/IIT Manager Agent/04-开发计划/V3.0全新开发计划/V3.0全新开发计划.md @@ -0,0 +1,664 @@ +# IIT CRA Agent V3.0 — 最终开发计划 + +> **版本:** V3.0-Final +> **日期:** 2026-02-25 +> **核心定位:** 替代 CRA 岗位的自主 AI Agent,而非辅助 CRA 的工具 +> **主要用户:** PI(主要研究者)/ 研究团队 +> **预估周期:** P0 约 9.5 天,P0+P1 约 13.5 天(1 人) +> **关联文档:** +> - 产品需求文档:[统一数字 CRA 质控平台 PRD](./统一数字%20CRA%20质控平台产品需求文档(PRD).md) +> - UI 原型:[Final CRA 质控平台 V3 原型](./Final%20CRA质控平台V3.html)(HTML,浏览器打开即可预览) + +--- + +## 1. 产品定位 + +### 1.1 CRA Agent 不是给 CRA 用的——是来替代 CRA 的 + +传统 IIT 项目中,CRA(临床监查员)负责数据质控、方案偏离识别、AE 监测、Query 管理和监查报告撰写。CRA Agent 的目标是用 AI 替代这个岗位的 70-80% 工作量,让 IIT 项目在无专职 CRA 的情况下也能达到合规的质控水平。 + +| 维度 | 传统模式 | CRA Agent 模式 | +|------|---------|---------------| +| 谁干活 | 人类 CRA | AI Agent 自主执行 | +| 工作方式 | 周期性现场监查,抽查 20% | 7×24 全量自动质控 | +| 输出物 | 监查报告、Query 单 | 质控报告、Query 清单、风险预警 | +| 响应速度 | 下次访视时发现问题 | 数据录入后秒级发现 | +| 用户界面 | CRA 自己看 Excel | PI / 研究团队看驾驶舱 + 对话 | +| 成本 | 人力费用高,IIT 常省略 | 接近零边际成本 | + +### 1.2 能替代与不能替代 + +**可替代的工作(70-80%):** + +| CRA 工作 | 替代程度 | 实现方式 | +|----------|---------|---------| +| 数据质量监控(逐字段核查) | 100% | HardRuleEngine + SoftRuleEngine,全量检查 | +| 入排标准核查 | 95% | 规则编码,LLM 辅助生成 | +| 方案偏离识别 | 90% | 访视窗口、用药剂量等规则 | +| AE/SAE 监测 | 85% | 时限规则 + 因果关系初判 | +| Query 生成与跟踪 | 90% | AI 生成标准化 Query | +| 监查报告撰写 | 95% | QcReportService 自动生成 | +| 入组趋势分析 | 100% | 纯数据统计 | + +**暂不替代的工作(20-30%):** + +| CRA 工作 | 原因 | 未来可能 | +|----------|------|---------| +| 原始数据核查(SDV) | 需对比医院病历,无 EMR 接口 | 接入 EMR 后可部分替代 | +| 实地设施检查 | 需人到现场 | 不可替代 | +| 复杂医学判断 | 需临床经验 | LLM 辅助,PI 确认 | +| 人际沟通协调 | 催促中心、培训等 | 部分可用消息推送替代 | + +> **关键洞察**:大部分 IIT 项目因预算限制根本没有 CRA 在做监查。AI 做到 70% 是从 0 到 70%,而非从 100% 降到 70%。 + +### 1.3 产品三原则 + +1. **AI 替代,不是辅助**:Agent 自主巡查、出报告、发 Query,无需人驱动。 +2. **AI 白盒化(Trust Building)**:AI 的每一步推理和操作对全员透明——实时工作流水(AI Stream)让人看到 Agent 在做什么、为什么这么做,建立对 AI 的信任。 +3. **统一视角,去角色化**:废除传统的 PI 视角 / CRC 视角隔离。全员登录同一平台,按数据粒度(概览 → 过程 → 细节)自由穿透,实现"单一真相(Single Source of Truth)"。 + +### 1.4 两层架构 + +```mermaid +graph TB + subgraph autonomous [自驱动层: Agent 的日常工作] + Cron[定时调度 pg-boss cron] --> QC[全量质控 SkillRunner] + Webhook[REDCap DET 实时触发] --> QC + QC --> Report[生成质控报告 QcReportService] + QC --> Trace[写入 Agent Trace 日志] + Report --> Push[企微推送摘要 + Query 清单] + Report --> Dashboard[驾驶舱数据更新] + Report --> eQuery[eQuery 派发] + end + + subgraph dashboard [统一驾驶舱: 四级穿透] + L1["概览: 项目健康度大盘"] + L2["过程: AI 工作流水 Timeline"] + L3["细节: 问题列表 + Query 管理"] + L4["资产: 报告归档 + 重大事件库"] + L1 --> L2 --> L3 --> L4 + end + + subgraph dialogue [对话层: 全局 AI Copilot] + User[任意用户提问] --> Orchestrator[ChatOrchestrator] + Orchestrator --> LLM["LLM + 4 Tools"] + LLM --> Answer[结构化回答] + end + + Report -.->|read_report| LLM + Trace -.-> L2 + Dashboard -.-> L1 + eQuery -.-> L3 +``` + +**自驱动层是核心**——Agent 不等人问,它自己干活。统一驾驶舱是全员查看 Agent 工作成果的窗口。对话层(AI Copilot)悬浮于所有页面之上,任何人随时可问。 + +--- + +## 2. 现状盘点(代码实测) + +| 组件 | 状态 | 行数 | 说明 | +|------|------|------|------| +| 管理端项目配置页面 | 有 | - | 项目列表 + 详情 + REDCap 连接 + 知识库关联 | +| 质控规则管理 UI | 有 | - | CRUD 规则,在项目详情内 | +| HardRuleEngine | 有 | 478 | JSON 硬规则执行,成熟 | +| SoftRuleEngine | 有 | 488 | LLM 软规则质控,可用 | +| SkillRunner | 有 | 756 | 按 record+event 编排质控 | +| RedcapAdapter | 有 | 1363 | 数据拉取/元数据/事件,功能完整 | +| QcReportService | 有 | 980 | 报告生成基础,需增强定时触发和推送 | +| ToolsService | 有 | 731 | 6 个细粒度工具,**需重构为 4 个语义化工具** | +| 实时质控(Webhook) | 有 | - | REDCap DET → pg-boss → 质控 Worker | +| 质控驾驶舱 UI | 有 | - | 统计卡片 + 热力图 + 详情抽屉 | +| WechatService | 有 | - | 企微推送,运行正常 | +| 18 张数据库表 | 有 | - | iit_schema,结构合理 | +| **定时质控** | **缺** | - | 无 cron 调度,只有手动触发和实时 Webhook | +| **完整报告推送** | **缺** | - | QcReportService 有但无定时触发和企微推送 | +| **Query 清单生成** | **缺** | - | 无自动生成 Query 并推送的能力 | +| **REDCap 变量清单可视化** | **半成品** | - | RedcapAdapter.exportMetadata() 存在但未串通到 UI | +| **AI 辅助规则生成** | **缺** | - | 规则需手动配置,无 LLM 建议 | +| **eQuery 闭环** | **缺** | - | Query 清单已有雏形,但无状态机(派发→回复→复核→关闭) | +| **AI 工作流水(AI Stream)** | **半成品** | - | `iit_agent_trace` + `iit_qc_logs` 表已有,但无前端 Timeline 展示 | +| **重大事件归档** | **缺** | - | SAE/PD 无永久归档和审计轨迹 | +| **ChatService(对话)** | **需重构** | 1442 | 上帝类,关键词路由,需用 ChatOrchestrator 替代 | +| **对话历史持久化** | **缺** | - | 只有内存 SessionMemory | + +--- + +## 3. 工具语义化设计(4 工具方案) + +### 3.1 设计原则 + +- **LLM 做粗分类**(选工具),**代码做细路由**(执行逻辑) +- 工具数量控制在 4 个,语义正交,LLM 不会选错 +- 每个工具内部通过参数区分子场景,对 LLM 透明 + +### 3.2 工具定义 + +#### Tool 1: `look_up_data` + +```json +{ + "type": "function", + "function": { + "name": "look_up_data", + "description": "查询临床研究数据。可查单个患者详情、患者列表、入组统计、项目基本信息。所有关于'数据是什么'的问题用此工具。", + "parameters": { + "type": "object", + "properties": { + "query_type": { + "type": "string", + "enum": ["patient_detail", "patient_list", "enrollment_stats", "project_info"], + "description": "查询类型:patient_detail=单个患者详情, patient_list=患者列表, enrollment_stats=入组统计, project_info=项目信息" + }, + "record_id": { + "type": "string", + "description": "患者记录ID(仅 patient_detail 需要)" + }, + "fields": { + "type": "array", + "items": { "type": "string" }, + "description": "需要查询的字段列表(可选,不填返回全部)" + } + }, + "required": ["query_type"] + } + } +} +``` + +**内部路由**: +- `patient_detail` → `RedcapAdapter.exportRecords({ records: [record_id] })` +- `patient_list` → `RedcapAdapter.exportRecords()` + 格式化 +- `enrollment_stats` → 查 `iit_record_summary` 汇总表 +- `project_info` → 查 `iit_projects` 表 + +**合并原工具**:`read_clinical_data` + `count_records` + `get_project_info` + +--- + +#### Tool 2: `check_quality` + +```json +{ + "type": "function", + "function": { + "name": "check_quality", + "description": "对临床数据执行质控检查。可对单个患者、全部患者、或指定规则类型执行质控。所有关于'帮我检查/质控一下'的请求用此工具。", + "parameters": { + "type": "object", + "properties": { + "scope": { + "type": "string", + "enum": ["single", "all"], + "description": "质控范围:single=单个患者, all=全部患者" + }, + "record_id": { + "type": "string", + "description": "患者记录ID(仅 scope=single 时需要)" + }, + "rule_types": { + "type": "array", + "items": { "type": "string", "enum": ["variable", "inclusion_exclusion", "protocol_deviation", "adverse_event"] }, + "description": "限定规则类型(可选,不填执行全部规则)" + } + }, + "required": ["scope"] + } + } +} +``` + +**内部路由**: +- `scope=single` → `SkillRunner.runByTrigger('manual', { recordId })` +- `scope=all` → `SkillRunner.runByTrigger('manual')` 全量执行 +- `rule_types` 过滤 → 传给 `filterApplicableRules()` + +**合并原工具**:`run_quality_check` + `batch_quality_check` + +--- + +#### Tool 3: `read_report` + +```json +{ + "type": "function", + "function": { + "name": "read_report", + "description": "读取质控报告。可查看最新报告概览、问题列表、趋势对比、指定患者的问题详情。80%的质控相关问题都应该先用此工具。", + "parameters": { + "type": "object", + "properties": { + "view": { + "type": "string", + "enum": ["summary", "issues", "trend", "patient_issues"], + "description": "视图类型:summary=报告概览, issues=问题列表, trend=趋势对比, patient_issues=指定患者的问题" + }, + "severity": { + "type": "string", + "enum": ["critical", "warning", "all"], + "description": "按严重程度过滤(可选,默认 all)" + }, + "record_id": { + "type": "string", + "description": "患者记录ID(仅 patient_issues 时需要)" + }, + "limit": { + "type": "integer", + "description": "返回条数限制(可选,默认 10)" + } + }, + "required": ["view"] + } + } +} +``` + +**内部路由**: +- `summary` → `QcReportService.getLatestReport()` 返回概览 +- `issues` → `QcReportService.getIssueList({ severity, limit })` 按严重度排序 +- `trend` → `QcReportService.getTrendComparison()` 对比近两次报告 +- `patient_issues` → `QcReportService.getPatientIssues(record_id)` + +**新增工具**:基于已有的 `QcReportService`(980 行)封装 + +--- + +#### Tool 4: `search_knowledge` + +```json +{ + "type": "function", + "function": { + "name": "search_knowledge", + "description": "在项目知识库中搜索信息,包括研究方案、CRF表、知情同意书等文档。所有关于'方案怎么规定的/CRF里有什么'的问题用此工具。", + "parameters": { + "type": "object", + "properties": { + "question": { + "type": "string", + "description": "要搜索的问题,用自然语言描述" + }, + "doc_type": { + "type": "string", + "enum": ["protocol", "crf", "icf", "all"], + "description": "限定文档类型(可选,默认 all)" + } + }, + "required": ["question"] + } + } +} +``` + +**内部路由**: +- 调用平台 RAG 引擎(pgvector 语义检索) +- `doc_type` 过滤 → 在 RAG 查询时加 metadata filter + +**对应原工具**:`search_protocol`(扩展为覆盖全部知识库文档) + +### 3.3 对照映射表 + +| 新工具 | 对应现有工具 | 变化 | +|-------|------------|------| +| `look_up_data` | `read_clinical_data` + `count_records` + `get_project_info` | 3 合 1,query_type 参数内部路由 | +| `check_quality` | `run_quality_check` + `batch_quality_check` | 2 合 1,scope 参数内部路由 | +| `read_report` | 新增 | 基于 QcReportService 封装,核心工具 | +| `search_knowledge` | `search_protocol` | 扩展为全知识库 | + +--- + +## 4. P0:自驱动质控流水线(9.5 天) + +> P0 的目标:**让 Agent 能独立"上班"** ——定时巡查所有数据、发现问题、生成报告、派发 eQuery、推送告警,无需任何人操作。全员通过统一驾驶舱查看 Agent 的工作成果。 + +### P0-1:REDCap 变量清单导入 + 可视化(1.5 天) + +**目标**:管理端一键拉取 REDCap 的变量清单(Data Dictionary),展示变量名、类型、逻辑关系,作为规则配置的基础。 + +**后端**: +- 新增 API:`POST /api/v1/admin/iit-projects/:id/sync-metadata` +- 调用 `RedcapAdapter.exportMetadata()` 拉取 Data Dictionary +- 调用 `RedcapAdapter.getFormEventMapping()` 拉取表单-事件映射 +- 写入 `iit_field_metadata` 表(已存在) + +**前端**: +- 在项目详情页新增"变量清单"Tab +- 表格展示:变量名 | 标签 | 类型 | 所属表单 | 验证规则 | 分支逻辑 +- 支持搜索和按表单筛选 + +**验收**:点击"同步变量"按钮,表格展示全部 REDCap 变量及其逻辑关系。 + +--- + +### P0-2:规则配置增强(2 天) + +**目标**:基于变量清单,配置 4 类质控规则(变量级 / 入排标准 / 方案偏离 / AE 事件)。 + +#### P0-2a:规则配置 UI 改造(1 天) + +当前规则管理 UI 存在,需增强: + +- **变量级规则**:选择变量 → 配置范围/必填/格式(下拉选变量,自动带出类型) +- **入排标准**:标记为入排规则类型,选择关联变量 +- **方案偏离**:配置访视窗口、时间约束等规则 +- **AE 事件**:配置 AE 识别触发条件 + +每类规则的 JSON Schema 已被 HardRuleEngine 支持,重点是让 UI **对接变量清单**(从 `iit_field_metadata` 读取),而不是手敲变量名。 + +#### P0-2b:AI 辅助规则建议(1 天) + +上传研究方案 PDF → LLM 提取关键规则 → 生成规则 JSON 建议 → 人工确认后保存。 + +实现方式: +- 前端:规则配置页新增"AI 生成建议"按钮 +- 后端:读取项目知识库中的方案文档(RAG 引擎) + 读取变量清单 → 组合 Prompt → LLM → 返回结构化规则 JSON +- 前端:展示 LLM 建议的规则列表,用户逐条确认/编辑/删除后批量保存 +- **人在回路**:AI 建议,人来确认,确认后才写入 `iit_skills` 表 + +**验收**:点击"AI 生成建议",LLM 基于方案和变量清单生成 5-10 条规则建议,用户确认后保存。 + +--- + +### P0-3:定时质控 + 报告生成 + eQuery 闭环(3.5 天) + +**目标**:Agent 的核心"日常工作"——定时全量质控、生成完整报告、派发 eQuery、推送摘要。这是 Agent "替代 CRA"最关键的一步。 + +#### P0-3a:定时质控调度(0.5 天) + +- 使用 pg-boss cron 注册定时任务(如每天 8:00 执行全量质控) +- 在项目配置中新增"定时质控"开关 + cron 表达式 +- 复用已有的 `SkillRunner.runByTrigger('cron')` 执行 + +#### P0-3b:质控报告生成增强(1.5 天) + +当前 `QcReportService`(980 行)有基础,需增强为 Agent 的完整"监查报告": + +``` +SkillRunner 执行全量质控 + | + v +汇总结果写入 iit_qc_reports 表 + | + v +报告内容: + - 项目概览(入组数 / 完成率 / 质控通过率) + - 按受试者的问题分布 + - 按规则类型统计(入排 / 偏离 / AE / 变量) + - 严重问题列表(TOP 10) + - 与上次报告的对比(新增 / 已解决) + - eQuery 清单(需跟进的问题,含建议 Query 文本) + - 重大事件摘要(本期新增 SAE / PD 事件) + | + v +存储为结构化 JSON + 可读 Markdown 双格式 +``` + +eQuery 清单:对每个严重/警告级别的问题,LLM 生成一条标准化 Query 文本(字段 + 问题描述 + 期望操作),汇总为 eQuery 清单。 + +重大事件归档:被 AI 识别为 SAE 或重大方案偏离的事件,自动写入 `iit_critical_events` 归档表,记录发现时间、处理状态、上报轨迹,作为长期临床资产备查(审计追踪)。 + +#### P0-3c:eQuery 闭环状态机(1 天) + +eQuery 不是一次性的清单,而是有完整生命周期的闭环: + +``` +AI 发现问题 + | + v +自动派发 eQuery(状态: pending) + | + v +推送通知到 CRC 企微(含问题描述 + 期望操作) + | + v +CRC 通过驾驶舱链接回复(修正数据 / 上传说明) + | + v +AI 自动二次复核(状态: reviewing) + | + v +复核通过 → 自动关闭(status: closed) +复核不通过 → 重新打开(status: reopened) +``` + +**后端实现**: +- 新增 `iit_equery` 表(或扩展 `iit_qc_logs` 增加 eQuery 状态字段) +- eQuery 状态机:`pending` → `responded` → `reviewing` → `closed` / `reopened` +- CRC 回复后触发 AI 二次质控(复用 SkillRunner 单条质控) +- 自动关闭逻辑:二次质控通过则自动关闭 + +**前端实现**:在驾驶舱的 eQuery 管理面板中展示(见 P0-4)。 + +#### P0-3d:报告推送(0.5 天) + +- 定时质控完成后 → 自动推送摘要到企业微信 +- 推送格式:Markdown 卡片(严重问题数 + 通过率 + 待处理 eQuery 数 + "查看详情"链接) +- 如有严重问题或新增 SAE → 单独推送告警消息 +- 链接指向统一驾驶舱页面 + +**验收**:配置每天 8:00 定时质控,Agent 自动执行全量质控,生成含 eQuery 清单的报告,推送摘要到企微。CRC 收到 eQuery 通知后可回复,AI 自动复核并关闭。 + +--- + +### P0-4:统一质控驾驶舱(2.5 天) + +**目标**:驾驶舱是全员(PI / DM / CRC)查看 Agent 工作成果的统一平台。去角色化设计,按数据深度四级穿透。 + +当前驾驶舱已有统计卡片 + 热力图 + 详情抽屉,需重构为四级穿透架构: + +#### 第一级 — 概览:项目健康度大盘(已有基础,增强) + +- **健康度评分**:首屏一个综合分数(基于通过率 + 待处理 eQuery + 重大事件),一眼看出项目状况 +- **核心数据卡片**:整体合规率 | 待处理 eQuery 数 | AI 已审查表单数 | 累计重大事件数 +- **高亮事件预警**:近期 SAE / 重大方案偏离,支持直接下钻 +- **趋势图**:质控通过率随时间的变化折线图 + +#### 第二级 — 过程:AI 工作流水 Timeline(0.5 天,新增) + +这是 AI 白盒化的核心展示——让全员看到 Agent 在做什么。 + +- **实时 Timeline**:动态滚动的瀑布流,展示 Agent 每次质控的完整动作链 + - 示例:"10:24 监听 EDC 保存 → 扫描 P005 实验室表 → 执行 12 条硬规则 (0.2s) → 发现 ALT 异常 → 关联不良事件表 → 派发 eQuery-1029" +- **数据来源**:`iit_agent_trace` 表(已存在) + `iit_qc_logs` 表(已存在),前端渲染为 Timeline 组件 +- **自动闭环展示**:CRC 修正数据后 Agent 二次复核并自动关闭 eQuery 的全过程 + +#### 第三级 — 细节:问题列表 + eQuery 管理(已有基础,增强) + +- **问题跟踪**:问题状态(新发现 / 已确认 / 已解决),可标记 +- **eQuery 管理面板**: + - 展示全部 eQuery,按状态分组(pending / responded / closed) + - 每条 eQuery 含:问题描述、AI 监查意见、关联规则溯源、CRC 回复内容 + - PI 可确认/修改 eQuery 文本后发送 + - CRC 可在此回复 eQuery(修正数据 / 上传说明) +- **受试者级问题穿透**:点击任意受试者可查看其全部问题 + eQuery 历史 + +#### 第四级 — 资产:报告归档 + 重大事件库(0.5 天,新增) + +- **报告历史列表**:展示历次质控报告(日期 + 摘要),可点击查看详情 +- **重大事件归档库**:所有 SAE / 重大 PD 的永久归档,含处理和上报全生命周期轨迹 +- **报告导出**:一键导出 Word/PDF 质控报告(复用平台 Pandoc 能力) + +**统一视角设计要点**: +- 全员看同一个界面,不做角色隔离 +- 按数据粒度逐层穿透(概览 → 过程 → 细节 → 资产),而非按角色分页 +- 红色数字高亮严重问题 +- 简化专业 CRA 术语,用研究团队能理解的语言 + +**验收**:任意用户打开驾驶舱,一眼看到健康度评分;切到 AI Stream 看到 Agent 实时工作记录;切到问题列表管理 eQuery;切到资产库查看历史报告和重大事件归档。 + +--- + +## 5. P1:对话层 Tool Use 改造(4 天) + +> **前置条件**:P0 完成后再做。P0 产出的质控报告是对话层 `read_report` 工具的数据源。 + +### P1-1:ChatOrchestrator + 4 工具重构(2 天) + +**核心改造**:用 LLM 原生 Tool Use 替代 1442 行关键词路由。 + +**新建 `ChatOrchestrator`**(~250 行),职责: +1. 从 `ConversationStore` 加载对话历史(最近 N 轮) +2. 组装 System Prompt(角色设定 + 项目上下文 + 安全约束) +3. 组装 4 个工具定义(从重构后的 ToolsService 获取) +4. 调 LLM(带 Function Calling) +5. 如果 LLM 返回 tool_calls → 执行工具 → 结果喂回 LLM → 最终回答 +6. 保存对话历史到数据库 + +**重构 `ToolsService`**: +- 删除现有 6 个工具注册 +- 注册 4 个语义化工具(`look_up_data` / `check_quality` / `read_report` / `search_knowledge`) +- 每个工具的 `execute` 方法内部实现路由逻辑 + +**新建 `ConversationStore`**(~120 行): +- 对话历史持久化到 `iit_conversation_history` 表(已存在) +- 按 userId + projectId 隔离 +- 支持最近 N 轮裁剪 + +**废弃 `ChatService.ts`**:不再使用关键词路由。 + +**System Prompt 核心内容**: + +``` +你是一个 AI 临床研究监查员(CRA Agent),负责监控 IIT 研究项目的数据质量。 +你的用户是 PI(主要研究者)和研究团队。 + +你有 4 个工具可用: +1. read_report — 查看质控报告(优先使用,80% 的问题用这个工具回答) +2. look_up_data — 查询临床数据 +3. check_quality — 执行质控检查 +4. search_knowledge — 查询研究方案/CRF 等文档 + +回答规则: +- 所有数据必须来自工具返回,不要编造 +- 如果报告中已有答案,直接引用报告数据 +- 如果用户问的内容超出你的能力范围,诚实说明 +- 回答简洁,突出关键数字和结论 +``` + +**验收**:用户自然语言提问(如"003 有什么问题""严重违规有几项""入排标准是什么"),LLM 自动选择正确工具回答。 + +### P1-2:对话体验优化 + 测试(2 天) + +- System Prompt 精调(追问机制、长度控制、防幻觉指令) +- 企微消息格式优化(Markdown 卡片,含关键数字和快捷操作) +- 安全护栏(单次对话 5 轮上限、Token 预算、工具调用次数上限、异常兜底) +- 8 个场景端到端测试: + +| 场景 | 示例问题 | 预期工具 | 验收标准 | +|------|---------|---------|---------| +| 报告概览 | "最新质控报告怎么样" | read_report(summary) | 返回概览数据 | +| 问题查询 | "有几条严重违规" | read_report(issues, critical) | 返回精确数字 | +| 患者详情 | "003 的数据" | look_up_data(patient_detail) | 返回患者数据 | +| 趋势分析 | "通过率比上周好了吗" | read_report(trend) | 返回趋势对比 | +| 手动质控 | "帮我查一下 005 的质量" | check_quality(single) | 执行质控返回结果 | +| 方案查询 | "入排标准是什么" | search_knowledge | 返回方案内容 | +| 模糊查询 | "项目整体情况怎么样" | read_report(summary) | 返回综合信息 | +| 越界拒绝 | "帮我修改 003 的数据" | 无(拒绝) | 礼貌拒绝并说明 | + +--- + +## 6. P2:可选(不排期) + +| 功能 | 说明 | 何时做 | +|------|------|--------| +| SDV 凭证上传 + AI 视觉核对 | CRC 上传原始医疗凭证(化验单等),VisionService 多模态比对 EDC 数据,阅后即焚保隐私 | 待 VisionService 就绪 | +| 原始数据匹配(SDV via EMR) | AI 对比 EMR 病历 vs EDC 数据,需先定义数据源 | 待 EMR 接口 | +| 微信小程序前端 | PI 移动端操作界面 | 核心流程跑通后 | +| PII 隐私脱敏 | 调第三方 LLM 前脱敏患者信息 | 上线前必做 | +| 周报自动生成 | 每周一自动汇总推送 | 定时质控跑通后 | +| REDCap 回写 | 质控结果、eQuery 状态写回 REDCap | 根据需求决定 | +| REDCap 嵌入伴随端 | 浏览器插件在 REDCap 录入界面植入 AI Inline 报错气泡 | 核心流程跑通后 | +| AutoMapperService | REDCap 乱码变量自动映射为中文医学语义 | 锦上添花 | +| 数据响应质量评级 | 以"平均响应时长"衡量 CRC 配合质量 | eQuery 闭环跑通后 | +| eQuery 自动发送 | Agent 生成的 eQuery 自动发给 CRC(无需 PI 确认) | PI 确认流程跑通后 | + +--- + +## 7. 时间线 + +``` + P0:自驱动质控流水线(9.5 天) P1:对话层(4 天) +┌──────────┬──────────┬───────────────┬───────────┐ ┌──────────┬──────────┐ +│ P0-1 │ P0-2 │ P0-3 │ P0-4 │ │ P1-1 │ P1-2 │ +│ 变量导入 │ 规则配置 │ 定时质控+报告 │ 统一驾驶舱 │ │Orchestr- │ 体验优化 │ +│ │ │ +eQuery闭环 │ +AI Stream │ │ator 2天 │ 2天 │ +│ 1.5天 │ 2天 │ 3.5天 │ 2.5天 │ │ │ │ +└──────────┴──────────┴───────────────┴───────────┘ └──────────┴──────────┘ + Day 1-2 Day 3-4 Day 5-8 Day 9-11 Day 12-13 Day 14 +``` + +P0 完成后 Agent 已能独立运行(自动质控 + 报告 + eQuery 闭环 + 推送 + 透明驾驶舱),P1 补上对话交互能力。 + +--- + +## 8. 保留什么(不动的部分) + +| 组件 | 行数 | 理由 | +|------|------|------| +| HardRuleEngine | 478 | 核心质控引擎,成熟 | +| SoftRuleEngine | 488 | LLM 质控,有价值 | +| SkillRunner | 756 | 事件级质控编排,运行正常 | +| RedcapAdapter | 1363 | 数据源核心,功能完整 | +| QcReportService | 980 | 报告生成基础,P0 在此基础上增强 | +| WebhookController | - | 实时触发,运行正常 | +| WechatService | - | 企微推送,运行正常 | +| 管理端 3 页面 + 驾驶舱 | - | 在此基础上增强 | +| 18 张数据库表 | - | Schema 合理,按需新增字段 | + +--- + +## 9. 不做什么 + +| 砍掉 | 理由 | +|------|------| +| 双脑架构(SOP + ReAct 分离) | LLM Tool Use 已是更优方案 | +| 三层记忆系统(流水账/热记忆/历史书) | 简化为:对话历史 DB + 项目级报告 | +| 手写 ReAct 引擎 | LLM 原生 Function Calling 包含此能力 | +| IntentService 关键词意图路由 | LLM 自己就是最好的路由器 | +| 自建 SchedulerService 类 | pg-boss cron 直接实现 | +| 微信小程序 | P0/P1 之后考虑 | +| VisionService | 明确延后 | + +--- + +## 10. 关键决策记录 + +| 决策 | 选择 | 理由 | +|------|------|------| +| 产品定位 | 替代 CRA 岗位(非辅助工具) | IIT 场景 AI 可替代 70-80% CRA 工作 | +| 主要用户 | 全员(PI / DM / CRC),去角色化 | 统一视角比角色隔离更透明高效 | +| 驾驶舱设计 | 统一四级穿透(概览→过程→细节→资产) | 废除角色隔离,单一真相 | +| AI 白盒化 | AI Stream 实时工作流水 | 向全员展示 AI 工作过程,建立信任 | +| eQuery 模式 | 闭环状态机(派发→回复→复核→关闭) | 替代人工 CRA 的 Query 管理流程 | +| 对话层架构 | LLM Tool Use + 4 语义化工具 | 比关键词路由准确,比 10+ 细粒度工具好选 | +| 工具粒度 | 4 个粗粒度语义工具 | LLM 选择准确率高,上下文消耗低 | +| 核心工具 | `read_report` | 80% 的 Q&A 通过读报告回答 | +| 定时调度 | pg-boss cron | 复用平台能力,零额外代码 | +| 规则配置 | UI 对接变量清单 + AI 建议 + 人工确认 | 效率和安全的平衡 | +| 质控报告 | 结构化 JSON + Markdown 双格式 | JSON 供 LLM 读,Markdown 供人读 | +| 报告推送 | 企微 Markdown 卡片 | 当前最快的用户触达渠道 | +| 重大事件 | 永久归档 + 审计轨迹 | 合规刚需,临床长期数字资产 | + +--- + +## 11. 成功标准 + +| 指标 | P0 目标 | P1 目标 | +|------|---------|---------| +| Agent 自主运行 | 每天自动执行全量质控,无需人工触发 | - | +| 质控报告 | 包含概览/分布/TOP10/趋势/eQuery 清单/重大事件 | - | +| eQuery 闭环 | 自动派发 → CRC 回复 → AI 复核 → 自动关闭 | - | +| AI 白盒化 | AI Stream Timeline 展示 Agent 每次质控动作链 | - | +| 变量导入 | 一键同步 REDCap 变量清单 | - | +| 规则配置 | UI 可视化配置 4 类规则 | - | +| AI 建议 | LLM 生成 5-10 条规则建议,人确认后保存 | - | +| 报告推送 | 定时推送摘要到企微 + 严重问题告警 | - | +| 统一驾驶舱 | 四级穿透(概览→过程→细节→资产)全员可用 | - | +| 对话准确率 | - | 工具选择准确率 > 90% | +| 对话响应 | - | < 5 秒 | +| 幻觉率 | - | 趋近 0(数据来自工具) | +| 用户满意度 | 全员能看到项目质控全貌 + AI 工作透明 | 能自然语言问任何质控问题 | + +--- + +> **一句话总结**:CRA Agent 不是给 CRA 用的工具——它就是 CRA。P0 让它能自主"上班"(质控 + 报告 + eQuery 闭环 + 透明驾驶舱),P1 让全员能跟它"对话"(Tool Use + 4 语义化工具)。先让 Agent 干活,再让人能问它。 diff --git a/docs/03-业务模块/IIT Manager Agent/04-开发计划/V3.0全新开发计划/统一数字 CRA 质控平台产品需求文档(PRD).md b/docs/03-业务模块/IIT Manager Agent/04-开发计划/V3.0全新开发计划/统一数字 CRA 质控平台产品需求文档(PRD).md new file mode 100644 index 00000000..efcc9a75 --- /dev/null +++ b/docs/03-业务模块/IIT Manager Agent/04-开发计划/V3.0全新开发计划/统一数字 CRA 质控平台产品需求文档(PRD).md @@ -0,0 +1,129 @@ +# 统一数字 CRA 质控平台 产品需求文档 (PRD) + +**文档版本**:V3.0(统一视角与白盒化平台版) + +**关联开发计划**:[CRA Agent V3.0 最终开发计划](./V3.0全新开发计划.md) + +**目标受众**:研发团队、架构师、项目决策委员会 + +**核心系统角色**:AI 监查大脑(主导者)、全员协作方(PI、DM、CRC) + +--- + +## 一、产品哲学与核心定位 + +### 1.1 产品背景与痛点重构 + +传统临床研究不仅受困于 CRA 人力成本高昂,更受困于**"信息孤岛与黑盒效应"**——PI 看不到具体过程,CRC 被动防御质疑,CRA 疲于人工核查。本产品致力于彻底变革临床质控模式:不仅要**用 AI 替代传统 CRA 的重体力审核工作**,更要打破系统的角色壁垒,建立一个**"全员可见、完全透明、单一真相(Single Source of Truth)"**的统一数字平台。 + +> **关键定位**:CRA Agent 不是给 CRA 用的助手——它就是 CRA。目标是替代 70-80% 的 CRA 岗位工作(详见 [V3.0 开发计划 §1.2](./V3.0全新开发计划.md))。 + +### 1.2 核心产品目标 + +1. **去中心化的统一视角**:废除传统系统中森严的"PI 视角"与"CRC 视角"。全员登录同一平台,按数据粒度(概览 → 过程 → 细节 → 资产)自由穿透。 +2. **AI 白盒化(Trust Building)**:将 AI 的工作从"黑盒后台"移至前台。通过"实时工作流水(AI Stream)"展示 AI 的每一次推理和调用,建立人类对 AI 的绝对信任。 +3. **长期临床资产沉淀**:不只做实时纠错,更要对整个临床试验的生命周期负责。自动生成阶段性质控报告,建立重大事件(SAE/PD)的永久档案库。 +4. **全自动 eQuery 闭环**:AI 独立发现异常、派发质疑、接收 CRC 修正信号、执行二次复核并自动关闭,实现"无人化"质控闭环。 +5. **AI 视觉 SDV(远期)**:AI 审核 CRC 上传的原始凭证(多模态视觉核对)并自动闭环。 + +--- + +## 二、统一平台架构与入口定义(核心功能层) + +系统取消角色隔离,采用**"逻辑深度递进"**的统一四级架构。 + +### 2.1 第一级 — 全局概览(项目健康度大盘 Dashboard) + +- **定位**:团队宏观把控的首选视图。 +- **功能模块**: + - **健康度评分**:基于通过率、待处理 eQuery、重大事件的综合评分 + - **全局核心数据卡片**:整体数据合规率、待处理 eQuery 数、AI 已自动审查表单数、累计重大事件数 + - **高亮事件预警**:瀑布流展示近期 SAE 与重大 PD,支持直接下钻 + - **趋势图**:质控通过率随时间的变化折线图 + +### 2.2 第二级 — AI 监查过程(工作流水 AI Stream) + +- **定位**:向全员展示的"AI 劳动透明账本",白盒化的核心实现。 +- **功能模块**: + - **实时 Timeline**:动态滚动的瀑布流,精确记录 Agent 的完整动作链。示例:"*10:24 监听 EDC 保存事件 → 扫描 P005 实验室表 → 调用 12 条硬逻辑耗时 0.2 秒 → 提取 ALT 异常并关联不良事件表 → 发现记录缺失 → 派发 eQuery-1029*" + - **自动闭环展示**:清晰记录 AI 接收到 CRC 修正信号后,执行二次复核并自动关闭质疑的动作 +- **数据来源**:`iit_agent_trace` 表 + `iit_qc_logs` 表 + +### 2.3 第三级 — 细节与协作(eQuery 管理 + 问题列表) + +- **定位**:唯一需要人类(主要为 CRC)介入协作的工作台。 +- **功能模块**: + - **eQuery 任务列表**:AI 派发的质疑,含优先级、AI 监查意见、关联规则溯源 + - **eQuery 闭环状态机**:`pending` → `responded` → `reviewing` → `closed` / `reopened` + - **CRC 响应区**:CRC 点击响应后可修正数据或上传说明,触发 AI 二次复核 + - **SDV 凭证验证(远期)**:CRC 上传原始医疗凭证(化验单、出院小结),VisionService 进行自动比对核销,"阅后即焚"确保隐私合规 + - **受试者级穿透**:点击任意受试者查看其全部问题 + eQuery 历史 + +### 2.4 第四级 — 长期资产(定期报告与归档库 Reports & Archives) + +- **定位**:临床研究的长期数字资产中心。 +- **功能模块**: + - **AI 定期质控报告**:pg-boss cron 自动跑批,按日/周/月生成含图表分析和趋势总结的报告,存储为结构化 JSON + Markdown 双格式 + - **重大事件归档库**:所有被 AI 确认为 SAE、PD 的事件永久锁定存档,记录处理和上报的全生命周期轨迹,备查(审计追踪) + - **报告导出**:一键导出 Word/PDF 质控报告 + +### 2.5 全局基础设施:统一 AI Copilot + +- **定位**:悬浮于所有页面之上的超级大脑助理。 +- **技术实现**:`ChatOrchestrator` + LLM Tool Use + 4 个语义化工具(`read_report` / `look_up_data` / `check_quality` / `search_knowledge`) +- **功能模块**:支持自然语言多轮对话。任何人均可随时询问:"总结本周最容易犯的错误趋势"、"解释为什么要求 P005 进行强制 SDV",AI 基于项目全局上下文实时解答。 +- **工具设计原则**:4 个粗粒度语义工具,LLM 做粗分类选工具,代码做细路由执行(详见 [V3.0 开发计划 §3](./V3.0全新开发计划.md))。 + +--- + +## 三、智能引擎底座与规则工程(The Brains) + +统一平台的底层由以下核心引擎驱动: + +| 引擎模块 | 职责与能力 | 技术实现组件 | +| :---- | :---- | :---- | +| **方案与 EDC 认知基座** | 向量化临床方案;一键同步 REDCap 字典;语义检索项目知识库 | RAG 引擎(pgvector)/ RedcapAdapter | +| **规则硬逻辑执行器** | 毫秒级绝对逻辑校验(年龄计算、时间窗、必填联动),零幻觉 | HardRuleEngine(JSON Logic) | +| **推理软逻辑研判器** | 结合 RAG 知识库,对文本主诉进行模糊推理(AE 研判等) | SoftRuleEngine(LLM) | +| **事件级质控编排** | 按 record+event 编排质控,规则动态过滤,报告去重 | SkillRunner | +| **异步任务调度** | 防抖处理 REDCap 密集推送;定时全量质控;eQuery 状态流转 | WebhookController / pg-boss cron | +| **LLM 对话编排** | 4 语义工具 Tool Use,替代关键词路由 | ChatOrchestrator / ToolsService | +| **报告生成引擎** | 结构化 JSON + Markdown 双格式,含 eQuery 清单和重大事件 | QcReportService | + +--- + +## 四、延伸终端定义:全时态触达 + +除 PC 主工作台外,保留对外部生态的延伸能力: + +1. **企业微信移动端**: + - **通知中枢**:重大事件(SAE / 高风险 eQuery)实时推送到相关人员企微 + - **早报订阅**:定时自动将质控报告摘要以 Markdown 卡片形式推送 + - **eQuery 通知**:CRC 收到 eQuery 派发通知,含问题描述和快捷操作链接 +2. **REDCap 嵌入伴随端(远期可选)**: + - 通过浏览器插件,在 REDCap 录入界面直接植入"AI Inline 气泡报错",在最源头拦截低级错误 + +--- + +## 五、开发实施优先级与里程碑(Milestones) + +> 详细任务拆解和工作量估算见 [V3.0 开发计划](./V3.0全新开发计划.md)。 + +- **P0 — 自驱动质控流水线(约 9.5 天)**: + - P0-1:REDCap 变量清单导入 + 可视化 + - P0-2:规则配置增强 + AI 辅助建议 + - P0-3:定时质控 + 报告生成 + eQuery 闭环 + - P0-4:统一驾驶舱(四级穿透 + AI Stream) +- **P1 — 对话层 Tool Use 改造(约 4 天)**: + - P1-1:ChatOrchestrator + 4 语义化工具重构 + - P1-2:对话体验优化 + 端到端测试 +- **P2 — 远期扩展(不排期)**: + - SDV 凭证上传 + AI 视觉核对(VisionService) + - AutoMapperService(REDCap 变量中文映射) + - 数据响应质量评级 + - REDCap 嵌入伴随端 + - 全局 AI Copilot 侧边栏助手 + +--- + +> **一句话总结**:一个用 AI 替代 CRA 的统一数字平台——Agent 自主巡查、全员透明可见、eQuery 自动闭环、知识永久沉淀。 diff --git a/frontend-v2/src/modules/aia/styles/chat-workspace.css b/frontend-v2/src/modules/aia/styles/chat-workspace.css index d3d18600..dab08fd5 100644 --- a/frontend-v2/src/modules/aia/styles/chat-workspace.css +++ b/frontend-v2/src/modules/aia/styles/chat-workspace.css @@ -951,9 +951,7 @@ /* ============================================ */ .message-bubble .markdown-content { white-space: normal; -} - -.message-bubble .markdown-content p { +}.message-bubble .markdown-content p { margin: 0 0 8px 0; } @@ -1001,9 +999,7 @@ display: list-item; }.message-bubble .markdown-content li::marker { color: #4F6EF2; -} - -.message-bubble .markdown-content strong { +}.message-bubble .markdown-content strong { font-weight: 700; color: #1F2937; }.message-bubble .markdown-content em {