Files
AIclinicalresearch/docs/03-业务模块/AIA-AI智能问答/04-开发计划/05-一键生成研究方案开发计划.md
HaHafeng 4d7d97ca19 feat(aia): Protocol Agent streaming + editable state panel + protocol generation plan
Day 2 Development (2026-01-24):

Backend Enhancements:
- Implement SSE streaming in ProtocolAgentController using createStreamingService
- Add data condensation via LLM in ProtocolOrchestrator.handleProtocolSync
- Support stage editing without resetting progress
- Add explicit JSON output format for each stage in system prompt
- Create independent seed script for Protocol Agent (seed-protocol-agent.ts)

Frontend Improvements:
- Integrate useAIStream hook for typewriter effect in ChatArea
- Add MarkdownContent component for basic Markdown rendering
- Implement StageEditModal for editing stage data (scientific question, PICO, etc.)
- Add edit button to StageCard (visible on hover)
- Fix routing paths from /aia to /ai-qa
- Enhance CSS with full-screen layout and Markdown styles

New Documentation:
- One-click protocol generation development plan (v1.1)
- Editor selection evaluation (Novel vs BlockNote vs Tiptap)
- Novel fork strategy for AI-native editing

Technical Decisions:
- Choose Novel (Fork) as protocol editor for AI-first design
- Two-stage progressive generation: summary in chat, full protocol in editor
- 10-day development plan for protocol generation feature

Code Stats:
- Backend: 3 files modified, 1 new file
- Frontend: 9 files modified, 2 new files
- Docs: 3 new files

Status: Streaming and editable features working, protocol generation pending
2026-01-24 23:06:33 +08:00

352 lines
10 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.
# 一键生成研究方案 - 开发计划
> **版本**: v1.1
> **创建日期**: 2026-01-24
> **最后更新**: 2026-01-24
> **负责人**: AI Assistant
> **状态**: 待开发
---
## 一、功能概述
### 目标
基于 Protocol Agent 收集的 5 个核心要素,一键生成完整的临床研究方案文档,支持在线编辑和 Word 导出。
### 核心价值
- 将 5-10 小时的方案撰写工作缩短至 30 分钟
- AI 生成 + 人工编辑,保证专业性和个性化
- 输出符合伦理委员会审查要求的标准文档
---
## 二、交互设计:两阶段渐进式生成
### 第一阶段:对话框生成摘要
```
用户点击"一键生成研究方案"
AI 在对话框中流式输出研究方案摘要约500字
用户确认摘要 → 进入第二阶段
用户不满意 → 在对话中继续调整要素
```
**摘要内容**
- 研究题目
- 研究目的(主要/次要)
- 研究设计概述
- 样本量结论
- 主要结局指标
### 第二阶段:方案编辑器生成完整方案
```
用户点击"生成完整方案"
跳转到方案编辑器页面
流式生成完整研究方案5000-8000字
用户在线编辑 / AI协作润色
导出 Word 文档
```
---
## 三、研究方案结构
```markdown
# 临床研究方案
## 1. 研究题目
## 2. 研究背景与立题依据
## 3. 研究目的
## 4. 研究设计
## 5. 研究对象(纳入/排除标准)
## 6. 样本量估算
## 7. 研究实施步骤与技术路线
## 8. 观察指标
## 9. 数据管理与质量控制
## 10. 安全性评价
## 11. 统计分析计划
## 12. 伦理与知情同意
## 13. 研究时间表
## 14. 参考文献
```
---
## 四、方案编辑器设计
### 布局结构
```
┌────────────────────────────────────────────────────────────────┐
│ ← 返回 📄 研究方案编辑器 [自动保存✓] [导出Word] [发布] │
├──────────┬─────────────────────────────────────┬───────────────┤
│ 📑 大纲 │ 📝 编辑区 │ 🤖 AI助手 │
│ │ │ │
│ 可点击 │ Notion 风格分块编辑 │ 选中文本后: │
│ 快速跳转 │ 支持 Markdown + 富文本 │ - /ai 润色 │
│ │ Slash 命令 (/) │ - /ai 扩写 │
│ │ 拖拽排序章节 │ - /ai 精简 │
└──────────┴─────────────────────────────────────┴───────────────┘
```
### 核心功能
| 功能 | 说明 | 优先级 |
|------|------|--------|
| **Slash 命令** | 输入 / 唤起菜单,支持 /ai 调用生成 | P0 |
| **分块编辑** | 每个章节独立编辑,支持拖拽排序 | P0 |
| **大纲导航** | 左侧目录,点击跳转 | P0 |
| **自动保存** | 每30秒 + 失焦时保存 | P0 |
| **导出Word** | Tiptap JSON → docx | P0 |
| **AI润色** | 选中文本,/ai polish 优化 | P1 |
| **AI扩写** | 选中章节,/ai expand 补充 | P1 |
| **Ghost Text** | AI 生成时显示幽灵文字预览 | P1 |
| **版本历史** | 查看修改记录,回滚 | P2 |
---
## 五、技术方案
### 技术选型Novel (Fork)
**选型结论**Fork [Novel](https://github.com/steven-tey/novel) 源码,而非 npm 包引入。
**选择 Novel 的理由**
| 因素 | Novel 优势 |
|------|-----------|
| **AI 原生** | 专为 AI 写作设计,已处理流式生成的 UX 细节Ghost Text、光标锁定 |
| **标准 Tiptap** | 直接暴露 Tiptap 配置,可插入交互组件(样本量计算器、引用卡片) |
| **可控性** | 源码在手100% 可定制 UI 和逻辑 |
| **对接成本** | 替换 useCompletion → useAIStream 即可对接现有后端 |
**Fork 策略**
```
不要 npm install novel
将 novel/packages/core/src 复制到:
frontend-v2/src/shared/components/ProtocolEditor/
目录结构:
├── index.tsx # 主组件
├── extensions/ # Tiptap 扩展
│ ├── ai-autocomplete.ts # 替换为 useAIStream
│ ├── slash-command.tsx # 保留 Slash 菜单
│ ├── citation.ts # Phase 2: 文献引用
│ └── medical-table.ts # Phase 2: 复杂表格
├── components/ # UI 组件
│ ├── EditorContent.tsx
│ ├── SlashMenu.tsx
│ └── BubbleMenu.tsx
└── styles/ # 样式(处理 Tailwind 冲突)
└── editor.css
```
**Tailwind CSS 冲突处理**
```css
/* 方案CSS 命名空间隔离 */
.novel-editor-scope {
/* Novel 的 Tailwind 样式限制在此作用域 */
}
```
### 技术栈总览
```
前端编辑器Novel (Fork) - 基于 Tiptap/ProseMirror
├── 优点AI 原生、Notion 风格、源码可控
├── 核心Slash 命令、Ghost Text、拖拽排序
AI 调用:复用现有 useAIStream Hook
├── 替换 Novel 的 useCompletion (Vercel AI SDK)
├── 对接 /api/v1/aia/protocol-agent/generate
文档导出docx.js 或 @tiptap-pro/extension-export-docx
数据存储PostgreSQL (protocol_generations 表)
```
### 数据模型
```sql
-- 方案生成记录表
CREATE TABLE protocol_generations (
id UUID PRIMARY KEY,
conversation_id UUID REFERENCES conversations(id),
user_id UUID REFERENCES users(id),
-- 内容
summary TEXT, -- 摘要(第一阶段)
full_content JSONB, -- 完整方案Tiptap JSON标准格式
-- 状态
status VARCHAR(20), -- draft | generating | completed
version INT DEFAULT 1,
-- 元数据
word_file_url TEXT, -- 导出的Word文件URL
created_at TIMESTAMP,
updated_at TIMESTAMP
);
```
### API 设计
```typescript
// 第一阶段:生成摘要(流式)
POST /api/v1/aia/protocol-agent/generate/summary
Request: { conversationId: string }
Response: SSE
// 第二阶段:生成完整方案(流式)
POST /api/v1/aia/protocol-agent/generate/full
Request: { conversationId: string }
Response: SSE
// 保存编辑
PUT /api/v1/aia/protocol-agent/generation/:id
Request: { content: TiptapJSON }
// 导出Word
POST /api/v1/aia/protocol-agent/generation/:id/export
Response: { downloadUrl: string }
// AI编辑润色/扩写)
POST /api/v1/aia/protocol-agent/generation/:id/ai-edit
Request: {
action: 'polish' | 'expand' | 'simplify',
selectedText: string,
context: string
}
Response: SSE
```
---
## 六、开发计划
### Phase 1Fork Novel + 对接后端3天
**目标**3天内跑通"编辑器 + AI 流式生成"
| 天数 | 任务 | 交付物 |
|------|------|--------|
| Day 1 | Fork Novel 源码 + 项目集成 | 编辑器基础渲染、Slash 菜单可用 |
| Day 2 | 替换 AI 调用 → useAIStream | /ai 命令可调用后端生成 |
| Day 3 | 摘要生成 API + 编辑器页面路由 | 完整的"对话→摘要→编辑器"流程 |
**Phase 1 交付**
- ✅ Notion 风格编辑器可用
- ✅ /ai 命令可调用 Protocol Agent
- ✅ 支持 Markdown 导出
### Phase 2完整方案生成 + Word 导出3天
| 天数 | 任务 | 交付物 |
|------|------|--------|
| Day 4 | 完整方案生成 API流式 | 编辑器中流式显示完整方案 |
| Day 5 | 自动保存 + 版本管理 | 数据库存储、草稿恢复 |
| Day 6 | Word 导出功能 | docx 文件下载 |
**Phase 2 交付**
- ✅ 完整方案流式生成
- ✅ 自动保存
- ✅ Word 导出
### Phase 3医疗特性增强4天
| 天数 | 任务 | 交付物 |
|------|------|--------|
| Day 7 | 集成 Tiptap Table 扩展 | 复杂表格支持(访视排期表) |
| Day 8 | 开发 CitationBlock | 文献引用组件(对接 PKB |
| Day 9 | AI 润色/扩写优化 | 选中文本 AI 编辑体验 |
| Day 10 | 测试 + UI 美化 | 完整功能测试 |
**Phase 3 交付**
- ✅ 复杂表格支持
- ✅ 文献引用功能
- ✅ AI 协作编辑完善
---
## 七、风险与依赖
| 风险 | 影响 | 缓解措施 |
|------|------|----------|
| Tailwind CSS 冲突 | 样式混乱 | CSS 命名空间隔离 |
| Novel 源码维护成本 | 后续升级困难 | 代码量小(~2000行),可独立维护 |
| LLM 生成质量不稳定 | 方案内容不专业 | 优化 Prompt + 人工模板 |
| 长文本生成超时 | 用户等待过久 | 分章节流式生成 |
| Word 导出格式问题 | 格式错乱 | 预设 Word 模板 |
### 依赖项
- [x] Protocol Agent 5阶段数据收集已完成
- [x] StreamingService 流式输出(已完成)
- [x] useAIStream Hook已完成
- [ ] Novel 源码 Fork待执行
- [ ] docx.js 导出功能(待开发)
### 兜底方案
如果 Fork 的 Novel 代码难以维护:
- 可回退到 **Tiptap Headless**
- 用 Ant Design 重写 UI
- **数据模型 (Tiptap JSON) 完全兼容**,用户数据不丢失
---
## 八、验收标准
### 功能验收
- [ ] 点击"一键生成",对话框流式输出摘要
- [ ] 点击"生成完整方案",跳转编辑器并流式生成
- [ ] 编辑器支持 Slash 命令 (/)
- [ ] 编辑器支持章节拖拽排序
- [ ] 选中文本可调用 AI 润色/扩写
- [ ] 可导出标准格式的 Word 文档
- [ ] 支持复杂表格编辑
### 性能指标
| 指标 | 目标 |
|------|------|
| 摘要生成时间 | < 30秒 |
| 完整方案生成时间 | < 3分钟 |
| 自动保存延迟 | < 1秒 |
| Word导出时间 | < 5秒 |
---
## 九、后续迭代
- **v1.1**: 方案模板库(不同研究类型)
- **v1.2**: 多人协作编辑
- **v1.3**: 方案审核流程
- **v1.4**: 与伦理系统对接
---
## 十、参考文档
- [Novel GitHub](https://github.com/steven-tey/novel)
- [Tiptap 官方文档](https://tiptap.dev/)
- [编辑器选型深度评估](./编辑器选型深度评估与落地建议.md)
- [Novel vs BlockNote 对比分析](./Novel_vs_BlockNote_深度对比分析.md)
---
**文档更新记录**
- 2026-01-24 v1.0: 初始版本技术选型Tiptap/BlockNote
- 2026-01-24 v1.1: 技术选型改为 **Novel (Fork)**,更新开发计划