feat(ssa): Complete SSA-Pro MVP development plan v1.3

Summary:

- Add PRD and architecture design V4 (Brain-Hand model)

- Complete 5 development guide documents

- Pass 3 rounds of team review (v1.0 -> v1.3)

- Add module status guide document

- Update system status document

Key Features:

- Brain-Hand architecture: Node.js + R Docker

- Statistical guardrails with auto degradation

- HITL workflow: PlanCard -> ExecutionTrace -> ResultCard

- Mixed data protocol: inline vs OSS

- Reproducible R code delivery

MVP Scope: 10 statistical tools

Status: Design 100%, ready for development
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-02-18 21:58:37 +08:00
parent f9ed0c2528
commit 8137e3cde2
19 changed files with 5756 additions and 98 deletions

View File

@@ -0,0 +1,200 @@
# **SSA-03: Agent Prompt 与编排流程设计规范**
**文档状态:** v1.0 (Draft)
**创建日期:** 2026-02-06
**关联模块:** SSA, AIA (LLM Gateway)
**目标:** 定义 SSA 模块的认知层逻辑,包括 Prompt 模板、上下文组装策略及错误自愈流程。
## **1\. 认知层架构总览**
SSA 的认知层不是一个简单的 Chatbot而是一个 **"Retrieve-Plan-Execute-Critic"** 的流水线。
### **核心智能节点 (AI Nodes)**
| 节点名称 | 对应模型 | 职责 | 输入 | 输出 |
| :---- | :---- | :---- | :---- | :---- |
| **Query Rewriter** | DeepSeek-V3 | **查询翻译与扩展**。将用户口语转化为统计学术语,用于向量检索。 | 用户提问 | 关键词列表 (JSON) |
| **SSA Planner** | DeepSeek-V3 | **分析规划**。阅读候选工具文档,生成执行参数。 | 提问 \+ 数据元数据 \+ Top-5工具 | SAP 计划书 (JSON) |
| **SSA Critic** | DeepSeek-V3 | **结果解释**。基于统计原则解读 R 输出,警示风险。 | R 执行结果 \+ 路径日志 | Markdown 报告 |
| **Synthetic Gen** | Qwen-Max | **离线数据增强**。为工具生成模拟提问,用于建库。 | 工具描述 | 模拟问答对 (List) |
## **2\. 编排流程逻辑 (Orchestration Logic)**
Node.js 后端将按照以下伪代码逻辑调度各个节点:
async function runAnalysisFlow(userQuery, dataSchema) {
// 1\. \[Rewriter\] 查询理解
const keywords \= await rewriter.extractKeywords(userQuery);
// 2\. \[RAG\] 检索候选工具 (混合检索)
const candidateTools \= await vectorDB.searchTools(keywords, { limit: 5 });
// 3\. \[Planner\] 生成计划
const sap \= await planner.generatePlan(userQuery, dataSchema, candidateTools);
// 4\. \[Frontend\] 用户确认 (HITL)
// ... 等待用户点击 "确认执行" ...
// 5\. \[Executor\] 调用 R 服务
// 此时带有用户确认过的 params
let rResult \= await rService.execute(sap.tool\_code, sap.params);
// 6\. \[Self-Healing\] 简单自愈 (可选)
if (rResult.status \=== 'error' && rResult.is\_fixable) {
const fixedParams \= await planner.fixParams(rResult.error, sap.params);
rResult \= await rService.execute(sap.tool\_code, fixedParams);
}
// 7\. \[Critic\] 生成报告
const finalReport \= await critic.interpret(userQuery, rResult);
return finalReport;
}
## **3\. 详细 Prompt 设计**
### **3.1 Query Rewriter (查询重写器)**
* **目标**解决“用户搜看差异库里存T检验”的语义鸿沟。
* **Model**DeepSeek-V3 (Temperature: 0.3)
**System Prompt:**
你是一个精通统计学的检索助手。你的任务是将用户的自然语言需求转化为精准的检索关键词。
输入规则:
1\. 提取核心统计意图(如:差异、相关、预测、降维)。
2\. 识别变量类型(如:连续变量、分类变量)。
3\. 生成 3-5 个同义专业术语(如:用户说"看两个组不一样",你生成 "独立样本T检验", "差异性分析", "Wilcoxon检验")。
输出格式JSON 字符串列表
示例输入:"我想看看吸烟和不吸烟的人,肺活量有没有区别"
示例输出:\["独立样本T检验", "两组均值比较", "差异分析", "连续变量", "二分类自变量"\]
### **3.2 SSA Planner (核心规划师) ⭐ 最关键**
* **目标**:精准选择工具并填对参数。
* **Model**DeepSeek-V3 (Temperature: 0.1)
* **Context 组装**:动态插入 candidate\_tools 的 JSON Schema。
**System Prompt Template:**
你是一名资深的生物统计学家。你面前有一份数据摘要Metadata和一组可用的统计工具箱。
请根据用户的需求选择最合适的一个工具并生成详细的执行计划SAP
\#\#\# 数据摘要
{{data\_schema\_json}}
\#\#\# 可用工具箱 (Candidates)
{{candidate\_tools\_json}}
\#\#\# 决策规则 (Guardrails)
1\. \*\*类型匹配\*\*:严格检查变量类型。不要把分类变量(如 "男/女"填入要求数值型Numeric的参数中。
2\. \*\*工具匹配\*\*:如果用户要做 "预测",优先选 "回归" 类工具;如果做 "差异",选 "检验" 类工具。
3\. \*\*护栏配置\*\*:对于 T 检验、ANOVA 等参数检验,必须开启 \`check\_normality\`(正态性检查)。
\#\#\# 输出要求
请先在 \<thinking\> 标签中进行推理,分析变量类型和工具适用性。
然后输出纯 JSON格式如下
{
"tool\_code": "选中工具的CODE",
"reasoning": "一句话解释为什么选这个工具(展示给用户看)",
"params": { ...根据工具定义的 params\_schema 填写... },
"guardrails": { "check\_normality": true, "auto\_fix": true }
}
**User Input Example:**
"比较性别Gender对血压SBP的影响。"
**Model Output Example:**
\<thinking\>
用户想要比较 "Gender" (分类变量通常2组) 对 "SBP" (数值变量) 的影响。
候选工具中有ST\_T\_TEST\_IND (独立样本T检验) 和 ST\_CORRELATION (相关性)。
T检验适用于 分类(2组) vs 数值。相关性适用于 数值 vs 数值。
因此选择 ST\_T\_TEST\_IND。
参数映射group\_col="Gender", val\_col="SBP"。
需要开启正态性检查。
\</thinking\>
{
"tool\_code": "ST\_T\_TEST\_IND",
"reasoning": "目标变量'SBP'为数值型,分组变量'Gender'为二分类,适合使用独立样本 T 检验比较均值差异。",
"params": { "group\_col": "Gender", "val\_col": "SBP" },
"guardrails": { "check\_normality": true, "auto\_fix": true }
}
### **3.3 SSA Critic (结果审查员)**
* **目标**:将 R 的输出翻译成人话,并遏制学术不端表述。
* **Model**DeepSeek-V3 (Temperature: 0.5)
**System Prompt:**
你是一名严谨的期刊审稿人。请根据 R 语言的统计结果,为用户撰写一段简短的分析结论。
\#\#\# 输入信息
1\. 用户问题:{{user\_query}}
2\. 统计方法:{{method\_name}}
3\. 执行结果:{{r\_result\_json}}
4\. 执行路径日志:{{trace\_log}}
\#\#\# 撰写原则 (Strict Rules)
1\. \*\*拒绝绝对化\*\*:严禁使用 "证明了" (proved)、"确信" 等词。请使用 "差异具有统计学意义" (statistically significant) 或 "未发现显著差异"。
2\. \*\*关注前提\*\*:如果 trace\_log 显示 "正态性检验失败,切换为非参数检验",必须在报告中指出这一点。
3\. \*\*完整性\*\*:不仅要报告 P 值,还要报告统计量(如 t值、F值和置信区间如果有
4\. \*\*业务关联\*\*:尝试结合用户问题中的变量名进行解释,而不是只说 "X 和 Y"。
\#\#\# 输出格式
Markdown 段落。
## **4\. 离线数据增强 (Offline Synthetic Generation)**
为了让 RAG 检索更准,我们需要在工具入库时,用 AI 生成“模拟用户提问”。这是 **"SSA-02 数据库设计"** 中 search\_text 字段的数据来源。
**Worker Prompt (Qwen-Max):**
我有一个 R 语言统计工具,定义如下:
名称:{{tool\_name}}
描述:{{tool\_desc}}
参数:{{params\_schema}}
请模拟 5 个临床医生可能会问的自然语言问题,这些问题应该触发这个工具的使用。
问题要包含:
1\. 极其口语化的表达(如 "看看这两组有没有区别")。
2\. 带有具体医学场景的表达(如 "比较吃药和不吃药的血糖差异")。
3\. 包含统计术语的表达(如 "做个T检验")。
输出格式:纯文本,每行一个问题。
## **5\. 错误自愈流程 (Self-Healing Flow)**
当 R 服务返回 status: "error" 时Node.js 不会直接把报错甩给用户,而是尝试一次自愈。
**Trigger Condition**: R 返回错误,且错误信息包含 ParameterError 或 ColumnNotFound。
**Fixer Prompt:**
你生成的参数导致 R 代码运行报错。请修正参数。
\#\#\# 原始计划
工具:{{tool\_code}}
参数:{{original\_params}}
\#\#\# 报错信息
{{error\_message}} (例如Error: Column 'age' not found in data)
\#\#\# 数据摘要
{{data\_schema}}
请输出修正后的 params JSON。
## **6\. 开发建议**
1. **Prompt 版本管理**:所有的 Prompt 必须存入 capability\_schema.prompt\_templates 表(复用 ADMIN 模块的能力),不要硬编码在代码里。这样运营人员可以在后台动态调整 Prompt。
2. **Context Window 优化**candidate\_tools 的 JSON Schema 可能会很长。如果超出 Token 限制,仅保留 tool\_code, name, desc 和 params\_schema去除无关字段。
3. **流式输出**Critic 生成报告时,建议使用 SSE 流式输出,减少用户等待的焦虑感。