乐于分享
好东西不私藏

效能平台之AI知识库问答

效能平台之AI知识库问答
  让需求文档真正“可问”:效能平台需求问答功能详解
很多测试团队都会遇到一个很现实的问题:需求资料越来越多,但真正要用的时候,却越来越难找。
一个项目从立项到上线,可能会沉淀 PRD、接口说明、流程图、评审纪要、补充说明、变更文档、版本差异记录。资料本身都在,但测试人员真正提问时,经常会遇到几个典型场景:
  • 想确认一个业务概念,却不知道它在哪份文档里;
  • 想梳理某个流程,却要在多个文件之间来回翻;
  • 想快速找测试关注点,但文档信息分散、表达不统一;
  • 明明资料里有答案,大模型却回答“没有找到依据”;
  • 问答结果缺少引用,团队无法判断答案来自哪里。
所以,需求问答不是简单接一个大模型聊天框,而是要解决一个更关键的问题:
> 如何让大模型在当前产品、当前项目、已解析资料范围内,先检索到可信内容,再基于证据回答?
效能平台的“需求问答”功能,就是围绕这个目标设计的。

> 场景感受:用户不需要先判断答案在哪份文档里,只要在当前项目范围内提出问题,系统负责去知识库里找依据。

> 一句话看懂:先把资料变成知识分片,再用混合检索命中证据,最后让大模型基于证据回答。

---

一、需求问答解决的不是“聊天”,而是“项目知识可用性”

传统需求资料管理通常停留在“上传文件”和“人工查阅”阶段。
但测试团队真正需要的是:
  1. 能把项目资料统一放到一个知识范围里;
  2. 能对资料进行解析、分片、入库;
  3. 能在提问时自动命中相关片段;
  4. 能让大模型只围绕命中的资料回答;
  5. 能看见依据,方便复核;
  6. 能把复杂回答进一步结构化,比如生成脑图。
因此,当前需求问答模块的定位可以概括为一句话:
> 它是一个面向测试与产品协作场景的项目知识问答入口,让需求资料从“静态文件”变成“可检索、可追问、可引用、可结构化表达”的知识资产。
---

二、按产品和项目组织知识库,避免问答串库

需求问答页面的第一层设计是“知识库范围”。
用户需要先选择:
  • 产品;
  • 项目。
选择项目后,平台会展示当前项目下的全部资料,并且在问答时严格限定检索范围:
```text
当前 productId + 当前 projectId(展示产品名称和项目名称)
```
这点很重要。
如果一个平台同时维护多个产品、多个项目,大模型问答最怕的不是“答不出来”,而是“拿错项目的资料来回答”。
所以当前实现不是全局混搜,而是明确按当前产品、当前项目过滤知识分片。这样可以保证:
  • A 项目的问题不会误用 B 项目的资料;
  • 老版本项目不会污染新版本项目;
  • 团队可以按项目沉淀独立知识库;
  • 后续测试用例生成、需求评审、风险分析都可以围绕同一套项目资料展开。
---

三、资料上传与解析:从文件到知识分片

> 提示:可以把这一步理解成:把“文档”拆成大模型能检索、能引用、能追溯的“知识卡片”。

在项目资料面板中,用户可以上传需求相关资料。目前页面支持的文件类型包括:
  • PDF;
  • TXT;
  • Markdown;
  • DOCX。
上传时可以选择“自动解析”。
如果开启自动解析,文件上传后会直接进入当前项目知识库;如果没有自动解析,也可以在资料列表中手动点击“解析入库”。
解析入库后,系统会把文档拆分成多个知识分片。每个分片会保存:
  • 文档 ID;
  • 产品 ID;
  • 项目 ID;
  • 分片序号;
  • 分片标题;
  • 分片正文;
  • 关键词;
  • 文本向量;
  • 向量模型名称;
  • Token 估算;
  • 分片状态。
这一步的意义是:大模型并不会直接读取整份文档,而是先通过检索找到最相关的分片,再把这些分片作为证据交给模型。
也就是说,解析入库是整个需求问答的基础。
只有资料被解析成知识分片,后续的关键词检索、向量检索、证据引用、大模型回答才有可靠的数据来源。
---

四、为什么只做关键词检索不够?

最开始很多知识库问答都会从关键词检索开始。
比如用户问:
```text
什么是待办任务?
```
如果资料里刚好也出现“待办任务”,关键词检索可能命中。但真实场景里,问题和文档表达经常并不完全一致:
  • 用户问“待办任务”,文档写“待办卡片”;
  • 用户问“货件状态”,文档写“运输中、已取件、已到达”;
  • 用户问“发布后会发生什么”,文档写“生成待办、发送通知、状态流转”;
  • 用户问的是一句自然语言,而文档里是表格或流程描述。
只靠关键词,会有两个问题:
  1. 词没有完全对上时,容易漏召回;
  2. 命中的内容不一定语义最相关。
这也是为什么当前需求问答已经升级为:
```text
关键词检索 + 向量检索
```
也就是混合检索。
---

五、混合检索:先命中资料,再让大模型回答

当前需求问答的检索流程可以理解为四步。

第一步:中文问题增强切词

用户输入自然语言问题后,系统会先做查询词处理。
除了常规按空格、标点拆分外,还会对中文连续文本做 2-4 字滑窗切分。
比如:
```text
什么是待办任务
```
除了保留原句,也会拆出类似:
```text
待办
办任
任务
待办任
办任务
待办任务
```
这样可以提高中文业务词的命中率,避免因为整句匹配失败导致漏检。

第二步:关键词召回

系统会在当前产品、当前项目范围内,对知识分片的标题和正文做模糊匹配。
关键词召回的优势是精准、可解释。
如果文档里明确出现某个业务词,比如“待办任务”“发布”“货件计划”,关键词检索可以快速把相关片段拉出来。

第三步:向量召回

除了关键词,系统还会为问题生成查询向量,并与项目下已入库分片的向量做余弦相似度计算。
向量召回的优势是语义相关。
即使用户问题和文档原文不是完全同一套词,只要语义接近,也有机会被召回。
当前实现中,向量生成优先使用配置的 Embedding 模型。如果模型服务暂时不可用,或不支持 embedding 接口,系统会自动使用本地 hash embedding 兜底,保证检索链路不断。
需要说明的是:当前数据库环境未启用 pgvector 扩展,因此现阶段采用的是 JSONB 存储向量 + Python 内余弦相似度计算。后续如果部署环境支持 pgvector 或专用向量数据库,可以进一步升级检索性能和索引能力。

第四步:融合排序

关键词召回和向量召回会产生不同的分数。
系统会将关键词分和向量分归一化后进行融合排序,最终选出 TopK 条证据片段。
这样做的好处是:
  • 关键词命中的内容不会被忽略;
  • 语义相关的内容也能参与排序;
  • 回答不再只依赖大模型“猜”;
  • 模型回答前已经有了项目资料依据。
---

 六、大模型问答:不是自由发挥,而是基于证据归纳

需求问答支持两种模式:
  1. 本地检索;
  2. 大模型问答。
本地检索模式会直接返回命中的知识库依据,适合快速验证资料是否能搜到。
大模型问答模式则会把检索到的证据片段交给模型,由模型进行归纳、解释和结构化输出。
当前回答被约束为四个部分:
```md

直接答案

业务名称:对应业务/模块/功能名称
  • 一级要点:说明
  • 二级要点:说明

依据引用

- 按 [1]/[2] 标注依据

测试关注点/风险点

- 列出测试需要关注的点

信息不足项

- 列出仍需补充的信息;没有则写“无”
```
这种结构有三个价值。
第一,直接答案更清晰。
用户不用在一大段文字里找结论,开头就能看到业务定义、关键规则或流程说明。
第二,引用依据更可追溯。
回答会结合证据编号,团队可以展开“知识库依据”,查看具体来自哪份文档、哪个分片。
第三,测试视角更明确。
系统不只是回答“是什么”,还会尝试整理测试关注点和风险点,比如状态流转、通知触发、权限边界、异常路径、信息缺口等。
---

七、证据引用:让回答可复核

在对话区域,每次大模型回答都会保留 evidence 信息。
用户可以展开“知识库依据”,看到:
  • 命中的分片标题;
  • 文档 ID;
  • 分片序号;
  • 匹配分;
  • 相关内容摘要。
这对于测试团队非常关键。
因为需求问答不是聊天娱乐,而是会影响测试分析、用例设计、需求澄清甚至上线判断。
如果回答没有依据,团队就很难判断它到底是来自文档,还是模型自己的推测。
有了证据引用后,使用方式会更稳:
  • 产品经理可以确认回答是否符合原始需求;
  • 测试人员可以根据证据补充用例;
  • 研发可以查看状态流转、字段规则是否被正确理解;
  • 如果证据不足,也能反向推动补充需求文档。
---

八、回答脑图:把复杂答案变成结构化视图

需求问答还支持“生成脑图”。
这不是简单把整段回答塞进图里,而是只截取“直接答案”部分生成。
同时,中心节点不再固定为“直接答案”,而是使用大模型输出的:
```text
业务名称
```
作为脑图中心。
比如回答的是“货件待签收”,脑图中心就应该是“货件待签收”;回答的是“黑名单管理”,中心就应该是“黑名单管理”。
脑图当前采用:
  • 白色点阵背景;
  • 左侧中心卡片;
  • 绿色、蓝色、粉色、青色多色分支;
  • 曲线连接;
  • 横向滚动画布;
  • 节点文字自动换行。
它适合用来表达:
  • 一个业务模块的核心职责;
  • 一个流程的关键环节;
  • 一个实体的数据字段;
  • 一个规则的状态变化;
  • 一个功能的测试关注点。
对测试场景来说,脑图最大的价值是帮助团队快速形成共同理解。
复杂需求往往不是一句话能讲清楚的。通过脑图,可以把“业务名称 - 一级要点 - 二级规则”展示出来,便于评审、讨论和后续用例设计。
---

九、模型设置:问答模型和向量模型分开配置

需求问答支持项目级模型设置。
当前可配置项包括:
  • Provider;
  • API Base;
  • 问答模型;
  • 向量模型;
  • Temperature;
  • Max Tokens;
  • TopK;
  • Score 阈值;
  • 服务端 Key。
这里有两个模型概念需要区分。

问答模型

问答模型负责最终回答。
它会读取检索证据,生成直接答案、依据引用、测试关注点和信息不足项。

向量模型

向量模型负责把文档分片和用户问题转成向量,用于语义检索。
如果向量模型可用,系统会优先使用它;如果不可用,系统会自动回退到本地 hash embedding,保证资料仍然可以被检索。
另外,API Key 不在前端展示或保存,默认使用服务端环境变量。这种方式更安全,也更符合企业内部系统的管理方式。
---

十、历史会话:让需求分析可以持续追问

需求问答不是一次性搜索框,而是支持会话的。
当用户在某个项目下提问后,系统会记录:
  • 会话;
  • 用户问题;
  • AI 回答;
  • 引用证据;
  • 模型配置快照。
用户可以在右上角进入历史会话,也可以新建会话。
这对实际工作很有帮助。
比如一次需求评审后,测试人员可能会连续追问:
  • 这个功能的核心流程是什么?
  • 有哪些状态?
  • 哪些状态会触发通知?
  • 哪些场景需要生成待办?
  • 哪些异常路径要补充测试?
如果每次都从零开始,会很割裂。通过历史会话,项目内的需求分析过程可以沉淀下来。
---

 十一、从使用流程看完整闭环

一个典型的使用流程是这样的。

1. 选择产品和项目

进入需求问答页面后,先选择当前产品,再选择具体项目。
系统会把后续资料管理和问答检索都限定在这个项目范围内。
这里选择产品和项目后展示的文档与用例管理中AI生成用例的文档来源一致,两边都可以同时进行管理

2. 上传项目资料

点击“上传资料”,选择需求文档。
如果希望立即可问,可以开启“自动解析”。
开启自动解析后,会自动解析入库

3. 解析入库

系统会把文档解析成知识分片,并写入当前项目知识库。
资料列表会显示:
  • 当前项目有多少份资料;
  • 有多少份已解析;
  • 每份资料有多少个分片;
  • 当前状态是“待解析”还是“已入库”。

4. 配置模型

在“模型设置”里配置问答模型、向量模型、TopK、Max Tokens 等参数。
如果不配置,也会使用服务端默认配置。
这里配置模型是会让大模型回答的话,根据配置模型来进行回答,如果不配置,就默认后端使用的模型配置文件,自己使用的话,需要改成自己的api-key和对应模型id

5. 发起提问

在对话框中输入问题,例如:
```text
货件计划的状态流转处理是怎样的
```
系统会先在当前项目知识库中做混合检索,再把命中的证据交给模型回答,回答完成后,会给出直接答案和对应的测试分析。还可以进行本地回调,就是不依赖大模型,直接回答文档内容与文档位置。(但如果不依赖大模型就需要进行精确匹配了)

6. 查看依据

回答下方可以展开知识库依据,查看命中的分片和内容。
可以进行展开,展示对应的知识依据来源。

7. 生成脑图

如果回答适合结构化表达,可以点击“生成脑图”,把直接答案转换成业务脑图,回答完成后,会有一个生成脑图的按钮,可以直接点击生成。
这里提供历史会话与新建会话
---

十二、对测试团队的价值

需求问答功能对测试团队的价值,可以总结为四点。

1. 降低找资料成本

测试人员不用在多个文件里反复搜索,只要围绕当前项目提问,系统就会自动从已解析资料中召回相关内容。

2. 提高需求理解一致性

回答带引用,脑图带结构。团队可以围绕同一份证据讨论,而不是每个人各自理解一遍文档。

3. 帮助发现信息缺口

当资料不足时,回答会列出“信息不足项”。这可以反向推动需求补充,比如:状态定义不完整、触发条件不明确、异常流程缺失等。

4. 为测试用例设计打基础

需求问答不是用例生成的终点,而是用例设计前的理解层。
只有先把业务概念、流程、状态、规则、风险点弄清楚,后续生成或补充测试用例才更可靠。
---

十三、它不是万能答案机,而是一个可追溯的知识入口

需要明确的是,需求问答并不意味着大模型可以替代需求评审,也不能保证所有问题都自动得到完整答案。
它更准确的定位是:
> 在项目已解析资料范围内,尽可能检索出相关证据,并帮助用户把证据归纳成可读、可追溯、可讨论的回答。
如果资料本身缺失,系统应该提示信息不足;如果证据只覆盖部分内容,回答也应该谨慎表达。
这比“看起来很聪明但没有依据”的回答更重要。
---

 十四、后续可以继续增强的方向

基于当前实现,后续还可以继续增强几个方向。

1. 接入 pgvector 或专用向量数据库

当前实现使用 JSONB 存储向量并在 Python 内计算相似度,适合功能可用和中小规模资料检索。
如果资料规模继续扩大,可以升级为 pgvector 或专用向量数据库,提高检索性能和索引能力。

2. 加入重排序模型

混合召回之后,可以进一步加入 rerank 模型,对候选证据进行二次排序,提高 TopK 证据质量。

3. 支持更多资料来源

除了文件上传,后续可以继续扩展到:
  • 在线文档;
  • 需求管理系统;
  • Jira;
  • 飞书文档;
  • 接口平台;
  • 评审纪要。

4. 与测试用例生成联动

需求问答输出的业务概念、流程、状态和风险点,可以作为后续测试用例生成的上下文。
这样可以形成:
```text
需求资料 → 知识解析 → 需求问答 → 风险识别 → 用例生成 → 用例评审
```
的完整链路。
---

 结语:让需求资料从“存起来”变成“用起来”

很多团队并不缺资料,缺的是把资料用起来的能力。
需求问答的意义,不是多一个 AI 聊天窗口,而是把项目里的需求资料转化为一个可以持续追问、可以引用依据、可以辅助测试分析的知识入口。
它让测试人员不必从一堆文档里重新翻找,让产品和研发可以围绕同一份证据对齐理解,也让后续的测试用例设计有了更可靠的上下文基础。
当需求资料可以被检索、被追问、被引用、被结构化表达时,它才真正从“文件”变成了“知识”。

附录:

这个除了需求问答外,还有一个有趣的玩法,就是蒸馏人,当把某个人事迹和习惯这些全部弄到一个项目中,形成知识库后,会变成那个人的回答,举个例子,比如马上要高考了,张雪峰老师事件想大家都知道了,但是可以把张雪峰老师蒸馏成知识库,你提问,发现它的回答真的有像那么一回事。

也可以蒸馏自己,让自己和自己对话,这个值得大家去讨论与发现。。。