用户反馈:不是所有对话都走生信编排,只有「用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>
12 KiB
生信意图分流词典与用例表(唯一事实源)
冻结版本 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. 实现注意(前后端一致)
- 判定全部为纯文本子串匹配(小写化后),不依赖 LLM;命中即返回,顺序不可调换。
- 复用方法名提取:REUSE_PHRASE 命中时,取 REUSE_PHRASE 之前最近的连续 3-20 字符(去空白与书名号)为方法名,随路由结果一并返回。
- bioflow_qa 仅在 has_bioflow_context=true 时生效;无上下文时同类句子一律 qa(漏判安全)。
- 边界约定:文本长度 ≤1 或纯空白 → qa;文本 >2000 字符 → 按截断后前 2000 字符判定。
- 本词典为唯一事实源:前端 utils/intent.js 与后端分流实现必须与本表逐条双跑一致(同表双跑由 L3/L2 用例 TC-BIO-INTENT-001~047 执行;v1.1 新增 #41-#55 覆盖问答句收窄与补语边界)。
- v1.1 收窄原则:漏判安全优先——拿不准的句子一律 qa;三条命中通道(任务动词+对象 / 前缀分析句式 / 分析链句式)必须能明确读出「用户要求执行分析」;问答主题词(研究进展/综述等)与疑问引导词(什么/怎么/如何等)拦截一切生信通道。