PM Vibe

1. 制度问答把征求意见稿当成了正式规定

一家证券公司的财富管理部,把三类制度放进了知识库:产品适当性管理办法、客户风险评估指引、代销产品准入规则。分支机构的客户经理在智能助手上查,比如「客户是 C3 等级,能不能买这只 R4 的产品」。

这套问答上线之后,出过三回问题。

第一回是漏字。适当性管理办法里有一段讲的是「保守型客户不得购买 R3 及以上产品」,这段在一份扫描件里,扫描件是手机拍的盖章版,解析出来少了一行,漏掉的正好是「及以上」三个字。助手按漏掉之后的文本答,答反了。

第二回是断了半句。客户风险评估指引里有条长条款,原文是「风险承受能力为 C3 及以上的客户,可以购买 R3 级产品,但同一客户持有 R3 及以上产品的市值合计不得超过其金融资产的 30%」。切片的时候从「但同一客户」前面断开,检索命中的是后半句,助手给出的回答里只有 30% 这一条,前面那句「可以购买 R3 级产品」没提。

第三回是权限没带。库里有总部一份还在征求意见阶段的规则修订稿,标着待发布。检索是全库检索,这份征求意见稿也被搜出来了,助手引用了它,客户经理照着说给了客户。

这三回分别落在三个环节:文件有没有被完整读进来、读进来之后怎么切、检索的时候谁能看到什么。

2. 为什么有些问题不能靠模型自己答

2.1 模型答不上来的三种情况

模型的知识来自训练,训练有截止时间,也有覆盖范围。落在单位内部的事情上,它会出三种问题。

不知道。产品适当性管理办法是这家公司自己的文件,训练数据里没有,模型编不出来。

记不准。条款编号、比例、时限这些细节,模型记得住大意,记不准数字。上面那 30% 到底是不是 30%,它给不出可靠答案。

说不出出处。就算它答对了,也说不出这句话出自哪份文件第几条,客户经理拿不出依据,不敢照着用。

三种情况各自都能补,凑在一起才需要一整套知识库。
图注:三种情况各自都能补,凑在一起才需要一整套知识库。

2.2 有据可依是什么意思

知识库(Knowledge Base)要解决的是这三件事凑在一起的那一个:让回答有出处。

有据可依(Grounded)指回答里的每个关键结论都能追到一段原文。做法是把检索到的原文段落连同回答一起交出去,界面上点一下就能翻到原文那一条。这一段追不出去,回答再顺也不能用。

一个成熟的制度问答会带两层出处:回答里标着依据的是哪几条,点开看得到条款全文和它所在的文件版本。

2.3 知识库和微调各自管什么

两者都能让模型多知道一点东西,但用法不一样。

知识库管的是经常变的、必须出处的、量大到装不进模型的内容。制度改了只要更新那几份文件,模型不用动。

微调(Fine-tuning)管的是说话方式和输出格式,比如让模型永远按公司的公文口吻写、固定按四个字段输出。它不适合拿来灌知识:灌进去的内容改起来要重新训一遍,也说不清那句话是学来的还是编的。

判断标准很清楚:这段内容会不会改,改了之后要不要能说出它出自哪一版。答「会」和「要」,放知识库。

3. 一份文件从上传到能查,中间经过什么

3.1 文档解析与 OCR

文件进库的第一步是把它变成文本。这一步看起来最不起眼,出的错却最多。

可复制文本的文件,直接抽文字。扫描件、图片、手机拍的盖章文件,要走 OCR(Optical Character Recognition,光学字符识别)把图片里的字认出来。

OCR 会认错。数字 1 和字母 l、0 和 O,中文里的「未」和「末」,都是常见的错。表格线、印章、手写批注会干扰识别。上面那家证券公司的漏字,就出在一份手机拍的盖章文件上。

入库规范里要写三条:哪些文件必须走 OCR、走完 OCR 的文件需不需要人工抽查、抽查比例是多少。制度、合同、病历这类文件,建议按不低于百分之十的比例抽查,抽查记录留档。

3.2 切片策略

解析出的文本是一整篇,检索的单位是一小段,中间要把它切成段。这一步叫切片(Chunking)。

切法有几种,差别在于按什么切。

按固定长度切最省事,每五百字一刀。它的毛病在条款类文件上很明显:一个条款被从中间切开,前半句在一段、后半句在另一段,检索只命中一段,回答就只剩半句。

按结构切更稳,遇到「第一条」「第二条」这种编号就断开,编号本身作为这段的标题带上。条款、规程、操作手册这类有明确结构的文件,优先走这条。

还有一种父子分块(Parent-Child Chunking):把大段和小段同时存下来,检索时用切得细的子块去匹配(子块 300 字,匹配更准),找到之后把这段所在的父块整段(1500 字)交给模型。它的好处是匹配用的是小段,读进窗口的是完整上下文,前面那个「断了半句」的问题,靠这一招就能解决大半。

一个条款被切成两半,答出来就只剩半句

左边 · 按固定长度切,每五百字一刀

  • 第十三条前半句落在一段的末尾,后半句落到下一段的开头
  • 检索命中只有前半句那一段
  • 答出来的C3 级客户可以购买 R3 级产品
  • 丢掉的但不能购买 R4 级产品

条款从中间切开,答出来只有半句。

右边 · 按结构切,加父子分块

  • 第十三条整条作为一段,编号当标题带上
  • 匹配用的子块300 字,找得准
  • 交给模型的父块1500 字,整条都在里面
  • 答出来的C3 级客户可以购买 R3 级产品,但不能购买 R4 级产品

匹配用小块,读进窗口的是完整上下文。

条款、规程、操作手册这类有编号结构的文件优先按结构切。

这一块要看懂什么:切法决定检索命中什么;按结构切再用父子分块,匹配用小段,读进窗口的是整条。
入库规范里写清切法:条款类按编号结构切,检索用 300 字的子块匹配,命中之后把整条 1500 字的父块交给模型。

3.3 长文档和表格怎么处理

两种内容需要单独交代。

一种是几百页的长文档,比如一整套管理办法汇编。整篇切完会切出上千段,检索的时候噪声大。常见做法是先按章节建目录层,每一章带一句摘要,检索先在章这一层定位,再进到章里找段。

另一种是表格。表格直接按行抽文字,会丢掉表头。退货时限表抽出来变成一行行孤立的数字,谁也看不出来那一列是什么。处理办法是把表头拼到每一行上再切,或者在表格上下文里补一句「下表的列依次是产品类型、风险等级、退货时限」。

4. 嵌入和向量解决的是「意思相近」

4.1 嵌入把一段话变成一个向量

关键词检索靠字面匹配,客户问「我这种能买 R4 吗」,制度里写的是「C3 等级的客户不得购买 R4 级产品」,两边没有一个字相同,关键词检索什么都找不到。

嵌入(Embedding)解决的就是这一类问题。它把一段文字变成一串数字,这串数字叫向量(Vector),意思相近的文字算出来的向量也接近。检索时先算问题的向量,再在库里找向量最接近的那些段。

这件事的原理不必深究,产品经理要知道的是它的两个性质:它对同义表达友好,对字面词不敏感;它靠的是训练语料里的语义,专业缩写、内部代号、刚出现的新名词,它可能完全没有概念。

4.2 相似度怎么算

两个向量的接近程度,常用余弦相似度(Cosine Similarity)来算,取值在 -1 到 1 之间,越接近 1 表示方向越接近。

实际用的时候,不设一个「超过多少分才算命中」的硬阈值,改设取前几名更稳。因为分数的绝对值跟语料和模型都有关,换一批资料分数整体都会变,取前 5 段这种相对口径反而好控制。

它也会错,而且错的方式很固定:字面很像但意思相反的两句话,它算得挺近。「可以购买 R3 级产品」和「不得购买 R3 级产品」,只差一个字,向量距离很近。制度、合规、医疗这几类内容,方向上差一个「不」字就是两回事,这类文件要靠后面的重排环节兜住。

意思接近的两句话,算出来的向量也接近;字面不像也能被找出来。
图注:意思接近的两句话,算出来的向量也接近;字面不像也能被找出来。

4.3 什么时候该换一条检索路

出现下面几种情况,说明单靠语义检索不够用,要补关键词检索:制度编号、产品代码、设备型号这类专有名词查不到;用户输入的是精确的短词,比如「R4」;资料里有大量缩写和内部代号。

反过来,用户用大白话问、资料里用的是书面语,语义检索就比关键词强很多。两条路都留着,怎么合在下一节讲。

5. 入库时要把两样东西带上

5.1 元数据留什么

切出来的每一段,除了文字本身,还要带一批说明信息,这批信息叫元数据(Metadata)。检索的时候靠它筛,出了问题靠它追溯。

制度类文件至少要留这几项:文件名称、文件编号、发布部门、生效日期、版本号、效力状态、所属章节。效力状态这一项别省,它标记的是「现行有效」还是「征求意见」「已废止」。

这套字段在不同行业里权重不一样。制度类文件(金融、政务)最先看的是效力状态和文件编号,因为废止稿和征求意见稿混进来最要命;技术类文件(制造、能源)最先看的是版本号和适用设备范围,旧版图纸配上新设备会直接导致误判;医疗类最先看的是适用科室和证据级别,同一条建议在不同科室的适用性不同。字段都要有,筛选顺序按行业调。

5.2 权限标签怎么带

权限标签是在入库时打在每一段上的,标明哪些人能看到它。打标签的单位通常是部门、角色、区域三个维度。

上面那家证券公司的问题就出在这里:总部那份征求意见稿如果入库时打了「仅总部财富管理部可见」的标签,检索时就不会漏出去。

标签一定要跟元数据一起打在段上,不能等检索回来再过滤。检索回来再过滤有两个隐患:一是没权限的内容已经进过模型,答出来的口径可能已经被影响;二是分数排名会因为被过滤掉的内容而错位。

5.3 更新怎么同步

制度是会改的,改完必须同步到库里,而且要让旧版本停下来。

同步方式分两种。全量重建是把整个库清掉重新入库,适合文件少、改动大的场景。增量更新只处理变动的文件,快,但要处理干净三件事:新增的文件要入库;修改过的文件要把旧版段落标记失效,不能两版并存;废止的文件要整份下线。

库里同时存在两版制度是最危险的状态,因为用户问同一个问题可能拿到两个口径的回答。更新规范里要写清一件事:任何一份文件入库时,必须同时说明它替代了哪一版。

新版入库、旧版标失效两件事要同时做,库里不能同时存在两个口径。
图注:新版入库、旧版标失效两件事要同时做,库里不能同时存在两个口径。

6. 检索不止一种做法

6.1 关键词检索和语义检索各有什么毛病

关键词检索(Keyword Search)按字面匹配,快,对编号、型号、代码这类精确内容准,但认不出同义表达。

语义检索(Semantic Search)按意思匹配,能接住大白话提问,但对精确编号不敏感,还可能把「可以」和「不得」算成很近的两段。

两条路的毛病正好互补,所以主流做法是两条都跑,再合起来。

两条路各召回一批,合并去重之后重排,最后只把最相关的几段交给模型。
图注:两条路各召回一批,合并去重之后重排,最后只把最相关的几段交给模型。

6.2 混合检索、查询改写、重排怎么串

完整的检索链路一般是四段。

先说查询改写(Query Rewriting)。用户的原话往往不适合直接拿去检索,比如「客户 C3 想买 R4 行不行」。改写这一步把口语问题转成几条更接近资料写法的检索词,比如「C3 等级 R4 级产品 购买限制」。多查询扩展(Multi-Query Expansion)就是一次生成好几条检索词,分别去检索,再合并结果。

再说召回。关键词和语义两条路各取前 200 段,这一步要的就是多,宁可多捞不能漏。

第三步是合并去重,两路结果里重复的段合并成一段,剩下两百多段。

最后是重排(Reranking)。重排用的是更贵的模型,把候选段和问题放一起逐条打分,按新分数排序,取前 5 段进窗口。前面说的「可以」和「不得」这类反向表述,主要靠重排这一环把顺序拨回来。

重排值不值得上,看内容性质。条款、医嘱、合同时限这类差一个字就出事的资料,建议上;一般的产品介绍、操作说明,不上也能用。

一句口语提问,走完整条检索流水线

第 1 步 / 共 4 步
  • 用户提问「客户 C3 想买 R4 行不行」
  • 改写出来的三条检索词「C3 等级 R4 级产品 购买限制」「保守型客户 R4 级产品 禁买」「客户风险等级 产品风险等级 匹配规则」

一句口语变成三条更接近资料写法的检索词。

第 2 步 / 共 4 步
  • 全库 24000 段
  • 关键词路 200 段语义路 200 段

这一步要的就是多,宁可多捞不能漏。

第 3 步 / 共 4 步
  • 260 段其中两段是两路都命中

两路重复的合成一段。

第 4 步 / 共 4 步
  • 「第十三条 风险承受能力为 C3 及以上的客户,可以购买 R3 级产品…」· 分数 0.62 升到 0.94,从后面升到第一位
  • 「不得向 C3 级客户销售 R4 级产品」· 分数 0.71 升到 0.88,从第一位落到第三位
  • 模型最后的回答「C3 等级客户可以购买 R3 级产品,但不能购买 R4 级产品」,后面跟两个引用标记

能买什么、不能买什么的顺序被拨回来了。

条款、医嘱、合同时限这类差一个字就出事的资料,重排值得上。

这一块要看懂什么:每一步剩下多少候选,重排为什么能把「可以」和「不得」这类反向表述的顺序拨回来。
检索链路按改写、召回、合并去重、重排四步写进需求,重排取前 5 段进窗口,回答里带上引用标记。

6.3 多模态检索与图谱增强检索

两类资料用普通文本检索找不到。

一类是图。设备图纸、现场照片、影像报告,用的是多模态检索(Multimodal Retrieval):图片和文字都变成向量,存在同一个空间里,用文字能找到图,用图也能找到相似的图。

另一类是关系。有些问题问的是「这件事影响哪些对象」,「这条产品规则会影响哪些客户等级、哪些产品线」这类问题,一段一段找资料是找不全的,要靠图谱增强检索(Graph-Enhanced Retrieval):把实体和关系先建成一张图,检索时沿着关系走一跳两跳,把相关的都带出来。

这两种都不便宜,用不用看问题形态。问的是「哪一条规定」用普通检索就够,问的是「影响面」才需要图谱。

7. 同一句话,不同的人搜出来的结果不一样

7.1 检索时按权限过滤

检索必须带着提问人的身份去查。同一条问题,总部的人能搜到征求意见稿和正式稿两份,分支机构的客户经理只能搜到正式稿。

做法是给每一段打权限标签,检索时先按标签过滤,再在剩下的范围里排序。这件事在入库那一环就要做好,检索时才想起来补,是补不上的。

顺带说一句,检索回来的资料里可能夹着指令,比如资料正文里写着一句「忽略以上要求」。这类东西该怎么防属于权限与安全那部分的事,这里只提一句:凡是检索出来的内容进窗口,都要当成不可信的内容看待。

同一条问题,身份不同能看到的资料不同,差异在检索之前就已经由权限标签定好了。
图注:同一条问题,身份不同能看到的资料不同,差异在检索之前就已经由权限标签定好了。

7.2 检索这一环怎么单独测

回答答错了,先别急着换模型。把回答拆成两段看:资料有没有找对,找到之后有没有用好。第一段测的就是检索。

测法很简单:准备一批问题,每个问题人工标出应该命中的那几段,然后只看检索结果里有没有这几段、排在第几位。两个指标够用:命中率(该找到的有没有找到)和首位命中率(该找到的有没有排在最前面)。

测出问题之后,按症状定位到环节。

症状 先查哪里
该找到的资料一段都没召回 切片是不是把关键条款切断了;资料本身有没有入库
找到了但排得很后 要不要加重排;查询改写是不是把原意改偏了
找到了正确段落,回答还是错的 这一环不在检索上,去查提示词和回答生成
搜出来的是旧版或没权限的内容 更新同步和权限标签哪里漏了

8. 制度问答的库最后怎么搭

财富管理部那份制度问答最后改了四处。

解析这一环加了抽查。扫描件、盖章文件一律走 OCR,入库后按不低于百分之十抽查,抽查人是业务口的合规专员,查完在入库单上签字。那份漏掉「及以上」三个字的文件,是在抽查里被拦下来的。

切片改成了按条款结构切,加上父子分块。子块按 300 字切,用来匹配;命中之后把 1500 字以内的父块整段交给模型。断句那个问题没了,因为模型看到的是完整的条款。

入库加了两个字段,一个是效力状态,取值是现行有效、征求意见、已废止;一个是权限标签,按部门、角色、区域三个维度打。总部那份征求意见稿,现在只有财富管理部和合规部的人搜得到。

检索换成了四段链路:查询改写生成三条检索词,关键词和语义各召回 200 段,合并去重后剩 260 段,重排后取前 5 段进窗口。重排之后,「可以购买 R3」这条排在第一位,「不得销售 R4」排在第三位,两条一起交给模型,回答里把两句话都带上了。

制度再改版时,更新规范要求新版生效当天入库,同时把旧版段落标成失效,并在入库单上写明替代关系。库里存着两版同样内容的状况,从那之后没再出现。

9. 入库和检索的自检表

要检查的点 答「否」的时候怎么办
扫描件、盖章文件是不是都走了 OCR,并且按比例抽查过? 补上抽查环节,制度、合同、病历这类文件抽查比例不低于百分之十
切片是不是按文件自身结构走的,有没有出现断句? 条款类文件改成按编号切,再加上父子分块
每一段是不是都带了文件名称、编号、版本、生效日期、效力状态? 补齐元数据,缺一项就先不进库
每一段是不是都打了权限标签? 补齐部门、角色、区域三个维度的标签
同一份文件的新旧版本,是不是只有一个现行有效? 新版入库时同步把旧版标失效,并记录替代关系
检索是不是带着提问人的身份做的? 改成先按权限过滤,再排序
关键词和语义两条路是不是都跑了? 加另一条路,两条路结果合并去重
条款、医嘱、合同这类资料,有没有加重排? 加重排,并准备一批问题测命中率和首位命中率
回答里的关键结论,能不能点开看到原文段落? 补引用标记和原文跳转
检索这一环有没有单独测过,还是只测最终答案? 拆开测,先看资料找对没有,再看答案写得好不好

10. 传完就不管的库,三个月后什么样

把知识库当换个地方存文件。 文件传上去只是第一步,解析、切片、元数据、权限标签、更新同步,每一环都会影响回答质量。传完不管的库,过三个月自己都不知道里面有几版文件。

全库检索,不分权限。 权限标签要在入库时打在每一段上,检索时先过滤。等检索回来再筛,没权限的内容已经进过模型,答出来的口径已经被影响过了。

答不准就换模型。 先在检索这一环测一遍:该找的资料找回来了没有、排在第几位。检索都对,才轮得到去看提示词和模型。顺序反过来,换十个模型也解决不了切片切错了的问题。

11. 资料找得到的四个判断,就到这里

资料这一块能带走的判断有四条:找不找得到看解析和切片,语义对不对得上看嵌入和向量,谁能看到看元数据和权限标签,最后交给模型的那几段准不准看四段检索链路。

手上要是有正在用的知识库,可以按第 9 节那张自检表过一遍,重点看切片和权限标签这两行。资料这块讲完,接着要解决的是另一类问题:一件事太杂,一个智能体管不过来,得几个人分开干。下一份材料讲主代理、专家和专家团怎么分工,以及分工之后上下文怎么隔离。