# **产品需求文档 (PRD):ASL \- 智能文献检索 (Deep Research) V4.1**
## **📑 1\. 文档概述**
| 属性 | 说明 |
| :---- | :---- |
| **产品名称** | AI Clinical \- ASL 智能文献模块 |
| **功能模块** | Deep Research (智能文献检索) |
| **文档版本** | V4.1 (自然语言需求确认版) |
| **目标受众** | 研发团队、UI/UX 设计师、测试工程师 |
| **当前痛点** | 传统医学检索要求医生手动编写复杂的布尔逻辑(Boolean Query),学习成本极高;MVP版本直接盲搜容易偏离意图;强加聊天框(Chat UI)又会破坏工具的沉浸感。 |
| **核心目标** | 采用\*\*“单页瀑布流 \+ 自然语言需求扩写 (Requirement Expansion) \+ 人机协同编辑”\*\*的极简专业工作流,彻底消除布尔逻辑的门槛,充分发挥底层深搜大模型的能力。 |
## **🎯 2\. 用户故事与核心工作流 (User Workflow)**
**UX 核心理念:单页瀑布流 (Progressive Disclosure) \+ 大白话指令驱动**
本版本摒弃了传统数据库必须的“检索式”,改为生成一份\*\*“深度检索指令书”\*\*。
**标准工作流 (The Happy Path):**
1. **粗略输入 (Input):** 医生在顶部文本框中输入一个极其粗略的想法(如“他汀预防心血管疾病,要能下载PDF的”),并勾选数据库范围和年份。
2. **意图扩写 (Generate):** 点击“生成需求书”,系统内置的 LLM 将这句话扩写为一份结构严谨、逻辑清晰的\*\*《自然语言检索指令书》\*\*,并在下方展开【策略确认区】。
3. **人工核验与修改 (Edit \- HITL):** 医生在可编辑的文本区内审查这份指令书。如果发现 AI 遗漏了限定条件(如未限定 RCT),可以直接像写邮件一样用大白话打字补充进去。
4. **异步深搜 (Execute):** 确认无误后点击“执行”,系统展开【AI 执行终端】。该自然语言指令被直接发送给底层 Unifuncs 深搜引擎,任务进入后台队列。
5. **透明执行 (Monitor):** 终端实时打印深搜引擎跨库检索、阅读、抓取 PDF 的进度日志。
6. **成果交付 (Results):** 任务完成后,最下方展开包含图表、文献清单、综合报告的【结果看板】。
## **💻 3\. 详细功能需求说明 (Functional Requirements)**
### **模块 3.1:检索立项配置区 (Step 1: Setup)**
* **自然语言输入区 (Textarea):** 提供大号文本域,支持用户随意输入临床问题。
* **数据源与高级过滤 (Options):**
* 目标数据源 (Checkbox):PubMed/PMC, BMJ Open/Lancet(OA), Cochrane Library。
* 发表年份 (Dropdown):2010至今, 过去5年, 不限。
* 目标文献数 (Dropdown):\~100篇(测试集), 全面检索。
* 强制约束项 (Checkbox):高亮显示“强制要求:仅限可获取免费全文 (PDF Open Access)”。
* **触发动作:** 点击“解析并生成检索需求书”按钮。系统进行短暂 Loading 后,平滑向下滑出 Step 2。
### **模块 3.2:检索策略确认区 (Step 2: Strategy HITL)**
**设计意图:** 破除代码恐惧感,建立基于自然语言的专业信任。
* **左侧 \- 核心意图提炼 (Read-only 卡片):**
* 用精简的 UI 块展示 AI 提取出的结构化要素(例如🎯核心目标、💊干预/疾病、📚文献标准)。
* 包含一个“预估命中率”的视觉反馈标签。
* **右侧 \- 深度检索指令书编辑器 (Code Editor UI, but Plain Text):**
* **(核心交互)** 这是一个必须可编辑的宽大文本框 (Textarea)。
* 里面展示由 AI 生成的一篇结构化大白话要求(如:【核心主题】...【目标文献类型】...【强制数据要求】...)。
* 提示文案引导用户:“您可以像写邮件一样在这里补充任何大白话要求,底层的深搜大模型会完美理解。”
* **触发动作:** 点击“确认需求,启动 Deep Research”。向下滑出 Step 3。
### **模块 3.3:AI 执行终端区 (Step 3: Agent Terminal)**
* **极客暗黑终端 (Dark Mode Log View):** 固定高度(550px),内部滚动,顶部带脉冲闪烁的 Running 状态灯。
* **阶段化日志流 (Event Stream):** 实时打印后台 Worker 轮询获取到的状态,分为不同的视觉样式:
* \[Thinking\] 紫色:AI 分析问题、过滤非 RCT 文献的思考过程。
* \[Action\] 蓝色:执行具体站点的 Search 动作。
* \[Done\] 绿色:阶段性爬取成功。
* \[Summary\] 黄色:阶段性总结。
* *前端交互:日志增加时,容器需自动滚动到最底部。*
### **模块 3.4:最终交付结果大屏 (Step 4: Results Dashboard)**
* **统计看板 (Top Row):** \* 数量概览卡片(包含 OA 获取率、研究类型占比)。
* 动态图表(Chart.js):文献来源分布(饼图)、发表年份趋势(柱状图)。
* **详情双 Tab 视图:**
* **Tab A \- 核心文献清单:** 表格展示 Title, Authors, Journal, Year, Type, PDF状态。
* **Tab B \- 智能综合报告:** AI 基于摘要生成的 Markdown 深度报告(背景、共识、研究空白 Gap)。
* **科研资产流转 (Actions):**
* 推送至 ASL 初筛池(无缝流入下一阶段的筛选工作流)。
* 导出 Excel、Word 报告、RIS 引文。
## **⚙️ 4\. 技术架构与底层实现规约 (Architecture Specs)**
### **4.1 系统数据流向**
1. **指令扩写层 (本系统):** 前端提交 original\_query \-\> Node.js 调用内部 DeepSeek-V3 \-\> 返回一段 Markdown 格式的**自然语言检索需求书 (Requirement)**。
2. **异步执行层 (pg-boss \+ Unifuncs):** 用户确认后的 confirmed\_requirement \-\> 压入 pg-boss 队列 \-\> Worker 将该自然语言原封不动地发给 Unifuncs /v1/create\_task 接口。由 Unifuncs 内部去理解大白话并自主执行复杂爬虫。
3. **状态透传层:** Worker 轮询 Unifuncs 的 reasoning\_content,正则提取并写入 PostgreSQL 的 execution\_logs 数组。前端只负责拉取 DB 渲染,实现状态解耦。
### **4.2 数据库 Schema (Prisma)**
model AslResearchTask {
id String @id @default(uuid())
user\_id String
// Step 1: 原始输入配置
original\_query String @db.Text
target\_sources Json
filters Json
// Step 2: HITL 策略确认阶段
ai\_intent\_summary Json? // 左侧小卡片用的结构化摘要
confirmed\_requirement String? @db.Text // 核心:用户最终复核并修改后的自然语言指令书
// Step 3: 执行与状态
status String // 'draft', 'pending', 'running', 'completed', 'failed'
unifuncs\_task\_id String? // 绑定的深搜任务ID
execution\_logs Json? // 终端执行日志数组 (增量更新)
// Step 4: 交付资产
result\_list Json? // 抓取到的文献元数据列表
synthesis\_report String? @db.Text // Markdown 综合报告
created\_at DateTime @default(now())
updated\_at DateTime @updatedAt
}
### **4.3 Unifuncs 核心 Payload 规约**
在 Worker 请求 Unifuncs 时,利用其强大的指令遵循能力,强制分离报告与 JSON 列表:
const unifuncsPayload \= {
model: "s2",
messages: \[{
role: "user",
content: \`请严格根据以下检索需求执行深度研究:\\n${task.confirmed\_requirement}\`
}\],
// 核心约束:强制要求 XML tag 隔离输出,确保前端渲染不崩溃
output\_prompt: \`
请严格按照以下两部分输出结果,不要包含任何其他废话:
\
\[此处撰写深度综合报告,包括研究背景、核心共识、分歧点\]
\
\
\[此处输出文献元数据的严格 JSON 数组结构\]
\
\`
};
## **📅 5\. 敏捷迭代开发计划建议 (Sprint Plan)**
**周期:1.5 周 (约 8 个工作日)**
| 阶段 | 时间 | 前端任务 (Frontend) | 后端任务 (Backend/Python) |
| :---- | :---- | :---- | :---- |
| **Phase 1: 单页交互与需求扩写** | Day 1-3 | 搭建 V4.1 瀑布流单页布局;开发 Step 1 和 Step 2 的 UI 联动;支持 Textarea 编辑。 | 升级 Schema;编写“需求扩写 (Requirement Expansion)” 的 Prompt;提供生成草稿接口。 |
| **Phase 2: 异步队列与终端日志** | Day 4-6 | 开发暗黑 Terminal 组件;实现轮询接口对接与 auto-scroll 日志滚动逻辑。 | 对接 Unifuncs API;实现 pg-boss 长任务 Worker;解析 reasoning\_content 转为增量 JSON 存入 DB。 |
| **Phase 3: 结果解析与多维导出** | Day 7-8 | 集成 Chart.js 绘制双图表;完成 Tab 列表和 Markdown 报告渲染。 | 后端正则切割 \ 与 \;提供 Word (复用 Pandoc) 和 .ris 格式的导出接口联调。 |