Files
PlantAI-rag-new/docs/team/cases_bioflow_intent.md
adminandClaude Fable 5 bd011650f6 fix(bioflow): 意图分流收窄 v1.1——仅明确分析指令进生信流,问答句一律 qa
用户反馈:不是所有对话都走生信编排,只有「用xxx进行分析」「帮我分析xxx」
类明确指令才是生信流程;「水稻SPL基因家族的最新研究进展有哪些?」
等问答句必须走原正常问答流程。

- intent.py/intent.js 同表双跑:任务动词+对象 / 前缀分析句式 / 分析链句式
  三通道;新增疑问引导词+问答主题词两道拦截;「研究」移出任务动词
  (「帮我研究一下水稻SPL家族」经前缀通道仍保 bioflow)
- cases_bioflow_intent.md 升 v1.1:40+15 用例,新增 #41-#55 问答句收窄
- test_intent.py 补 v1.1 用例,50 条全绿;PRD FR-BIO-001 同步收窄
- 部署:8098 已重启,ui/dist 重建同步 deploy-unified,浏览器端到端验证 PASS
  (问答句走 /api/qa/chat/stream,分析指令走 /api/bioflow/chat/stream 出路径卡)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-07 18:13:52 +08:00

128 lines
12 KiB
Markdown
Raw Permalink 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.
# 生信意图分流词典与用例表(唯一事实源)
> 冻结版本 1.1(2026-09-07 收窄)| 作者 T1 初版 1.0,TL 于 2026-09-07 按用户反馈收窄更新| 前后端同表双跑:A3 ui/src/utils/intent.js 与 A2 后端 chat 分流共用本表;任何改动需更新本文件并经 TL 确认。需求来源:PRD.md FR-BIO-001/FR-BIO-023/FR-BIO-026。
>
> **v1.1 变更动机(用户 2026-09-07 反馈)**:不是所有对话都走生信流程编排,只有用户明确说了「用 xxx 进行分析」或「帮我分析 xxxxx」才是生信流程;其余问答类(如「水稻 SPL 基因家族的最新研究进展有哪些?」)必须走原正常问答流程。v1.0 规则 6「分析动词+家族/对象」过宽(「研究」+「SPL 家族」命中问答句),v1.1 将命中通道收窄为三条:任务动词+对象、前缀分析句式、分析链句式;并新增疑问引导词与问答主题词两道拦截。
## 1. 路由签名
route(text, has_attachments, has_active_artifact, has_bioflow_context) -> "qa" | "docgen" | "edit" | "export" | "bioflow" | "bioflow_qa"
## 2. 判定顺序(按优先级从上到下,命中即返回)
### 1. export(需 has_active_artifact == True)
text 含任一 EXPORT_WORD 且含任一 FORMAT_WORD(沿用 docgen 词典:EXPORT_WORD=[导出,转成,转为,转换成,下载成,输出为,存为,转pdf,转word];FORMAT_WORD=[pdf,docx,doc,word] 小写不敏感)。不满足则继续向下。
### 2. edit(需 has_active_artifact == True)
text 含任一 EDIT_WORD=[改,修改,调整,删,删除,加一段,补充,润色,缩写,扩写,重写,改写,优化,加个,增加一段],且不含任一 CHART_WORD(见下)。含 CHART_WORD 时跳过本规则(图表调整走生信 FR-BIO-019)。不满足则继续向下。
### 3. docgen(写文档意图)
text 含任一 WRITE_VERB 且含任一 DOC_TYPE(沿用 docgen 词典全表)。命中→docgen。
### 4. docgen(附件信号)
has_attachments == True 且 text 含任一 WRITE_VERB。命中→docgen。
### 5. bioflow_qa(流程咨询,需 has_bioflow_context == True,即当前会话已有生信任务/生信对话上下文)
text 含任一 FLOW_QA_WORD:
- FLOW_QA_WORD = [需要什么输入, 有什么输入, 输入是什么, 需要什么参数, 参数是什么, 什么参数, 怎么设置, 如何设置, 什么软件, 用什么软件, 前置条件, 介绍, 是什么, 怎么跑, 怎么做]
命中→bioflow_qa(生信流内流程咨询,走 vstore flow_docs 检索+引用,不新建任务)。
### 5b. 流程咨询句式(无上下文)→ qa(漏判安全,用例表 #18)
### 5c. 疑问引导词拦截(v1.1)
text 含任一 QUESTION_WORD = [什么, 怎么, 如何, 哪些, 哪个, 什么软件] 且不含 REUSE_PHRASE → qa。
「水稻 SPL 家族怎么跑分析」类问句一律 qa;复用句式豁免(复用判定优先)。
### 5d. 问答主题词拦截(v1.1)
text 含任一 QA_TOPIC = [研究进展, 研究现状, 研究热点, 最新研究, 最新进展, 最新成果, 研究成果, 研究趋势, 综述, 进展] → qa。
「帮我分析水稻 SPL 家族的最新研究进展」也 qa(主题句优先于分析指令)。不含「研究」单字——「帮我研究一下水稻 SPL 家族」是分析指令(用例表 #5 保持 bioflow)。
### 6. bioflow(生信分析意图,v1.1 三通道,任一命中即 bioflow)
- **A. 任务动词 + 对象**:text 含任一 TASK_VERB = [跑, 跑一下, 分析, 鉴定, 识别, 做个, 做一个, 做一下, 研究一下, 执行, 运行, run, identify] 且含任一 FAMILY_NAME 或 ANALYSIS_OBJECT。注意:裸「做」「研究」不在 TASK_VERB(v1.0 曾含),已移入 CHAIN_VERB——「研究」+ 家族名不再直接命中(「SPL 家族最新研究进展」走 qa)。
- **B. 前缀分析句式(v1.1)**:text 含前缀 [帮我, 请帮我, 请你, 帮我分析, 请帮我分析] + 链动词 + 宾语对象(家族名 或 分析对象)。「帮我分析水稻 SPL 家族」→ bioflow;「帮我研究一下水稻 SPL 基因家族」→ bioflow(补语「一下」容许);「帮我做水稻全基因组变异检测」→ bioflow(用例表 #12);「帮我看看水稻 SPL 家族」→ qa(「看」非链动词,漏判安全)。
- **C. 存档复用句式**:text 含任一 REUSE_PHRASE = [存档任务的方法, 存档的方法] 且含任一 TASK_VERB 且含任一 FAMILY_NAME 或 ANALYSIS_OBJECT(如「用 XXX 存档任务的方法帮我跑水稻 SPL 家族鉴定」;复用的方法名 = REUSE_PHRASE 之前最近的 3-20 字符片段,如 XXX)。
- **D. 分析链句式(v1.1 附加通道)**:text 含链动词 CHAIN_VERB = [分析, 研究, 做, 跑](全词边界匹配,「关联分析」不被「分析」误拆)且其后含 ANALYSIS_OBJECT(如「什么软件做全基因组注释」已被 5c 拦截;「帮我分析水稻叶片 RNA-seq」命中)。
命中→bioflow;否则继续向下。
### 7. 其余一律 "qa"(漏判安全:不命中绝不进生信流)
## 3. 生信词典(两表共用,v1.1)
- FAMILY_NAME(基因家族名,小写比较)= [spl, sbp, mads, mads-box, madsbox, wrky, nac, myb, bzip, bhlh, ap2, erf, gras, tcp, hd-zip, hdzip, arf, aux, iaa, dof, gata, hsf, lbd, lob, trihelix, e2f, cpp, nf-y, nfy, c2h2, zf-hd, zfhd, far1, frs, hb, wox, pin, mate, abc, pp2c, snrk, cdpk, mapk, rlck, nbs, lrr, nlr, tps, cyp, gst, ugt, 转录因子家族, 基因家族]
- ANALYSIS_OBJECT(分析对象,小写比较)= [rna-seq, rnaseq, rna-seq, 转录组, 差异表达, wgs, 全基因组, 变异检测, 全基因组测序, gwas, 关联分析, 全基因组关联, 群体, 群体遗传, 遗传多样性, 进化, 系统发育, 选择性清除, 群体结构, 拷贝数变异, 基因预测, 基因注释, 结构注释, 功能注释, 宏基因组]
- CHART_WORD(图表调整词,供 edit 规则排除)= [图表, 图颜色, 颜色换成, 图改成, 柱状图, 热图, 火山图, 曼哈顿图, 韦恩图, 气泡图, 散点图, 折线图, 改成红色, 换成蓝色, 颜色]
- **TASK_VERB(v1.1 任务动词)** = [跑, 跑一下, 分析, 鉴定, 识别, 做个, 做一个, 做一下, 研究一下, 执行, 运行, run, identify]
- **CHAIN_VERB(v1.1 链动词)** = [分析, 研究, 做, 跑](全词边界匹配)
- **VERB_PREFIX(v1.1 前缀)** = [帮我, 请帮我, 请你, 帮我分析, 请帮我分析]
- **QUESTION_WORD(v1.1 疑问拦截)** = [什么, 怎么, 如何, 哪些, 哪个, 什么软件]
- **QA_TOPIC(v1.1 主题拦截)** = [研究进展, 研究现状, 研究热点, 最新研究, 最新进展, 最新成果, 研究成果, 研究趋势, 综述, 进展]
## 4. 用例表(40 条 v1.0 + 15 条 v1.1 新增,前端 intent.js 与后端分流同表双跑)
| # | 输入 text | 附件 | 活动文档 | 生信上下文 | 期望 |
|---|---|---|---|---|---|
| 1 | 帮我跑水稻 SPL 家族鉴定 | 否 | 否 | 否 | bioflow |
| 2 | 跑一下拟南芥 MADS-box 家族分析 | 否 | 否 | 否 | bioflow |
| 3 | 请帮我鉴定水稻 SPL 家族 | 否 | 否 | 否 | bioflow |
| 4 | 识别玉米 bZIP 家族成员 | 否 | 否 | 否 | bioflow |
| 5 | 帮我研究一下水稻 SPL 基因家族 | 否 | 否 | 否 | bioflow |
| 6 | 分析小麦 WRKY 转录因子家族 | 否 | 否 | 否 | bioflow |
| 7 | 做个大豆 NAC 家族分析 | 否 | 否 | 否 | bioflow |
| 8 | 跑 SPL 家族 | 否 | 否 | 否 | bioflow |
| 9 | 水稻 SPL 家族,帮我跑 | 否 | 否 | 否 | bioflow |
| 10 | 基因家族鉴定:水稻 SPL | 否 | 否 | 否 | bioflow |
| 11 | 帮我跑水稻叶片 RNA-seq 差异表达分析 | 否 | 否 | 否 | bioflow |
| 12 | 帮我做水稻全基因组变异检测 | 否 | 否 | 否 | bioflow |
| 13 | 帮我跑水稻产量性状 GWAS 关联分析 | 否 | 否 | 否 | bioflow |
| 14 | 什么是基因家族? | 否 | 否 | 否 | qa |
| 15 | 帮我跑一下 | 否 | 否 | 否 | qa |
| 16 | SPL 家族 | 否 | 否 | 否 | qa |
| 17 | 今天天气不错 | 否 | 否 | 否 | qa |
| 18 | 跑 SPL 家族鉴定需要准备什么输入? | 否 | 否 | 否 | qa(无生信上下文漏判安全) |
| 19 | 帮我跑一个数据分析 | 否 | 否 | 否 | qa |
| 20 | 你好呀 | 否 | 否 | 否 | qa |
| 21 | (空字符串) | 否 | 否 | 否 | qa |
| 22 | 帮我跑香蕉 XYK 家族鉴定 | 否 | 否 | 否 | qa(XYK 不在家族词典) |
| 23 | 跑水稻 spl 家族鉴定 | 否 | 否 | 否 | bioflow(家族名大小写不敏感) |
| 24 | Please run rice SPL family identification | 否 | 否 | 否 | bioflow |
| 25 | 帮我跑(水稻 SPL 家族)鉴定! | 否 | 否 | 否 | bioflow |
| 26 | 用 XXX 存档任务的方法帮我跑水稻 SPL 家族鉴定 | 否 | 否 | 否 | bioflow(复用意图,方法名=XXX) |
| 27 | 根据 XXX 存档任务的方法帮我跑一下玉米 bZIP | 否 | 否 | 否 | bioflow(复用) |
| 28 | 参考 XXX 存档的方法再跑一个水稻 SPL | 否 | 否 | 否 | bioflow(复用) |
| 29 | 用《XXX》存档任务的方法帮我跑小麦 WRKY 家族 | 否 | 否 | 否 | bioflow(复用,方法名=XXX) |
| 30 | 用 XXX 存档任务的方法 | 否 | 否 | 否 | qa(无目标任务词) |
| 31 | 用 XXX 存档任务的方法帮我跑 yyy | 否 | 否 | 否 | qa(yyy 无家族/对象匹配,漏判安全) |
| 32 | 帮我生成一份水稻 SPL 家族分析报告 | 否 | 否 | 否 | docgen(docgen 优先于 bioflow) |
| 33 | 帮我写一篇水稻基因家族研究论文 | 否 | 否 | 否 | docgen |
| 34 | 导出成 PDF | 否 | 是 | 否 | export |
| 35 | 把这句话改成红色 | 否 | 是 | 否 | edit(无图表词) |
| 36 | xxx 图表颜色换成红色 | 否 | 是 | 否 | bioflow(图表词,走 FR-BIO-019) |
| 37 | identify 需要什么输入 | 否 | 否 | 是 | bioflow_qa(不新建任务) |
| 38 | 帮我总结一下这个问题的要点 | 否 | 否 | 否 | qa |
| 39 | 写一段水稻基因的介绍 | 否 | 否 | 否 | qa(介绍在 docgen 排除表) |
| 40 | 跑水稻 SPL 家族鉴定 | 否 | 是 | 否 | bioflow(活动文档不改判定) |
| 41 | 水稻SPL基因家族的最新研究进展有哪些? | 否 | 否 | 否 | **qa(v1.1:问答句不进生信流)** |
| 42 | 水稻 SPL 基因家族最新研究进展 | 否 | 否 | 否 | **qa(v1.1:主题词拦截)** |
| 43 | 水稻SPL基因家族研究进展如何? | 否 | 否 | 否 | **qa(v1.1)** |
| 44 | 水稻SPL基因家族有哪些最新的研究成果? | 否 | 否 | 否 | **qa(v1.1)** |
| 45 | SPL 基因家族有什么新的发现吗? | 否 | 否 | 否 | **qa(v1.1)** |
| 46 | 怎么用 PlantAI 分析水稻 SPL 家族 | 否 | 否 | 否 | **qa(v1.1:疑问引导词拦截)** |
| 47 | 如何跑水稻 SPL 家族鉴定 | 否 | 否 | 否 | **qa(v1.1:疑问引导词拦截)** |
| 48 | 什么软件做全基因组注释 | 否 | 否 | 否 | **qa(v1.1:疑问引导词拦截)** |
| 49 | 帮我分析水稻SPL基因家族 | 否 | 否 | 否 | **bioflow(v1.1:前缀分析句式)** |
| 50 | 帮我做水稻全基因组变异检测 | 否 | 否 | 否 | **bioflow(v1.1:链动词直接邻接宾语,金标 #12 保持)** |
| 51 | 帮我做一下水稻全基因组变异检测 | 否 | 否 | 否 | **bioflow(v1.1)** |
| 52 | 帮我分析鉴定水稻 SPL 家族 | 否 | 否 | 否 | **bioflow(v1.1)** |
| 53 | 帮我分析水稻 SPL 家族的最新研究进展 | 否 | 否 | 否 | **qa(v1.1:主题词优先于分析指令)** |
| 54 | 水稻 SPL 家族研究综述 | 否 | 否 | 否 | **qa(v1.1)** |
| 55 | 帮我看看水稻 SPL 家族 | 否 | 否 | 否 | **qa(v1.1:「看」非链动词,漏判安全)** |
## 5. 实现注意(前后端一致)
1. 判定全部为纯文本子串匹配(小写化后),不依赖 LLM;命中即返回,顺序不可调换。
2. 复用方法名提取:REUSE_PHRASE 命中时,取 REUSE_PHRASE 之前最近的连续 3-20 字符(去空白与书名号)为方法名,随路由结果一并返回。
3. bioflow_qa 仅在 has_bioflow_context=true 时生效;无上下文时同类句子一律 qa(漏判安全)。
4. 边界约定:文本长度 ≤1 或纯空白 → qa;文本 >2000 字符 → 按截断后前 2000 字符判定。
5. 本词典为唯一事实源:前端 utils/intent.js 与后端分流实现必须与本表逐条双跑一致(同表双跑由 L3/L2 用例 TC-BIO-INTENT-001~047 执行;v1.1 新增 #41-#55 覆盖问答句收窄与补语边界)。
6. **v1.1 收窄原则**:漏判安全优先——拿不准的句子一律 qa;三条命中通道(任务动词+对象 / 前缀分析句式 / 分析链句式)必须能明确读出「用户要求执行分析」;问答主题词(研究进展/综述等)与疑问引导词(什么/怎么/如何等)拦截一切生信通道。