尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

让回答有据可查:引用的生成、校验与失效处理

让回答有据可查:引用的生成、校验与失效处理 说明本文讨论的是检索增强回答里引用的生成、校验与失效处理属于 Agent 工程话题不涉及具体模型版本与价格。AI 领域版本迭代极快凡涉及版本号、价格、可用性请以你阅读时的官方页面为准。文中代码为结构示意请按自己的技术栈调整后再上生产。一、引用不是排版是契约回答后面挂几个角标第一眼看是排版问题。等它进了评审流程或者线上事故复盘问题就变成另一件事这些角标能不能被验证。1.1 三种引用验收标准互不相同同一段回答里的引用实际服务于三类不同的读者验收标准也不一样。给人看的引用读者点开能对上原文。判据是链接可达且指向的内容和这句话说的是同一件事。验收靠人。给程序校验的引用系统能用自己的数据取回被引对象逐条比对。判据是引用标识可解析且内容确实支撑结论。验收靠代码。给审计留痕的引用事后能还原这次回答当时看到了什么。判据是能定位到具体版本的具体片段且这份内容在事后可复现。验收靠记录。把三类当成一类最常见的后果是界面上链接是通的人工抽检也说得过去但程序侧回答不了这句话来自哪一段于是任何自动化质检都做不起来。引用类型服务对象验收标准失效后的代价展示型读者链接可达且内容对应信任下降但能被人工发现校验型程序标识可解析且内容支撑结论自动化质检形同虚设坏答案静默放行留痕型审计与回溯可定位到具体版本与片段事后查不到原因也认不了责任这三类引用的实现成本是递增的可靠性却要靠最贵的那一类兜底。展示型几乎不需要额外工程校验型要落契约、要能取回片段、要能判相关性留痕型最贵因为它要求内容本身可复现。多数系统停在展示型不是因为不想做后两类而是第一步没把字段定下来后面每补一处都要动整条链路。1.2 契约里要写死的字段引用要被程序消费至少要能回答四个问题引的是谁、引的是哪一版、引的是哪一段、这句结论与那一段是什么关系。⚠️ 代码待验证{claim_id:c-001,citation:{source_id:handbook,revision:2026-06-a,span:{start:412,end:468},relation:supports},anchor_text:被引片段的起止字符}四个字段各自解决一个问题。source_id用于回查revision用于判断是否漂移缺了它就只能全量重跑校验span用偏移量而不是第几段因为段落编号会随排版变化而错位relation用来区分支撑、补充与反驳很多引用其实只是补充说明。1.3 少一个字段的后果缺span引用只能停在文档级第六章要讲的漂移检测无从下手。缺relation系统会把相关当成支撑校验通过率看着很高实际误判不少。缺revision源更新之后你无法区分是内容变了还是引用错了。这三个字段不是设计洁癖是后面五章所有校验逻辑的输入。还有一个容易漏的点契约字段要在材料进入上下文的那一刻就写进去不能等答案生成完再回头拼。材料被拼装、截断、重排之后偏移量就对不上了。把契约字段当成材料的一部分而不是答案的一部分是最省事的分界。二、引用粒度从文档到字段四种切法粒度决定了引用能支撑多细的结论也直接决定校验成本。先分清四种粒度再按结论的强度去选。2.1 四种粒度各自能支撑什么粒度能支撑的结论强度定位成本主要问题文档级只能说这份文档里提到过低支撑不了具体数值与成立条件段落级能支撑该主题下存在这个说法中段内可能同时写了几条互斥表述句子级能支撑一句事实性陈述中高指代与省略会让句子离开上下文走形字段级能支撑一个具体取值高只适用于结构化数据文档级引用最省事也最容易出问题。结论写某参数上限是某个值引用挂在整份规范上读者翻进去发现规范按三种场景给了三个上限这条引用等于没说清。字段级另一头结论是某字段在某条件下取多少直接引到字段与条件校验可以完全自动把条件代入数据比一次值即可。2.2 粒度越细成本花在哪三处成本各自独立。切分成本段落靠规则切句子要靠句边界识别字段要能对上 schema。切分错了后面所有引用一起错位。存储成本每个片段都要留稳定锚点。偏移量最省但要求源不变或者能被重建索引。校验成本粒度越细比对越精确。一段文字的相关性判断可以粗一点一个取值必须精确对上。这里还有一项常被低估的成本切分边界必须和引用粒度用同一套规则。如果切片按固定长度硬切片上没有自然边界句子级引用就会指向一个被截断的半句校验时无论怎么比都判不支撑。让切片和引用粒度共用一套边界定义等于把两个问题合成一个问题。2.3 按结论强度选粒度一个可操作的判据这条结论能不能被量化或者被反驳。能量化、能被反驳的比如数值、条件、条款用句子级或字段级只是背景交代的文档级或段落级就够。另一条判据同一份源里会不会存在互斥表述。会有的粒度必须细到能区分它们不会有的用粗粒度反而更省。粒度可以逐步加细但不该反向收粗。粗改细是补数据历史引用继续可用细改粗要重新映射老引用会整批失效。第一版先做段落级等校验链路跑通、误判来源清楚了再把关键结论的引用提到句子级顺序不要反过来。三、引用从哪来自报、回填与混合3.1 模型自报相关性常对位置常错让模型在回答里自己带引用好处是它能判断哪段材料对结论有用。代价是它给的位置不可信来源标识可能记错偏移量基本对不上偶尔还会把两段内容拼成一条并不存在的引用。可以用的做法是把自报限制在指认哪条材料相关不让它输出定位信息。定位交给系统按材料标识补上。3.2 检索结果回填位置准相关性要另判回填的机制是材料进入上下文时带一个稳定标识模型只回答用了哪些标识系统按标识还原出处。这条路位置一定准因为位置取自材料本身。前提有两个上下文里每块材料必须有唯一标识编号重复会让回填整体错位模型回传的标识必须落在当次上下文集合内不在集合内的直接丢弃。编号设计比想象中重要。它要在单次请求的上下文里唯一且稳定同一份文档的两个片段不能共用编号否则两处引用会被指到同一位置。常见做法是把源标识、版本和片段偏移拼成复合编号长度可控也方便事后按源前缀做聚合统计。3.3 混合各管一半做法谁定相关性谁定位置可靠性代价模型自报模型模型低位置不可复现低一次调用结果回填模型系统高位置可复现中需要材料编号与集合校验混合模型系统高且能区分支撑与补充中高多一次关系判定混合的增量在relation上模型不只回答用了哪条还回答这条是支撑、补充还是反驳。这个语义判断模型做得比系统好位置仍然由系统填。⚠️ 代码待验证defresolve_citations(raw_ids,context_blocks):模型只回传标识位置与版本由系统补集合外的标识直接丢弃。index{b[block_id]:bforbincontext_blocks}resolved,dropped[],[]foriteminraw_ids:blockindex.get(item[block_id])ifblockisNone:# 不猜、不修正落到集合外说明这条结论没有可靠出处dropped.append(item[claim_id])continueresolved.append({claim_id:item[claim_id],source_id:block[source_id],revision:block[revision],span:block[span],relation:item.get(relation,supports),})returnresolved,dropped丢掉的标识要计数。丢弃比例是检索与提示词质量的一个直接读数比最终答案的对错更早暴露问题。还有一类边界情况要提前定模型回传的标识语法正确内容却对不上它说用了某条材料而这条材料与结论毫无关系。这种回填不会报错位置也取得出来问题要到内容校验才暴露。位置与内容两级校验都要有少一级就会漏掉一整类问题。四、校验一条引用有没有真的支撑结论4.1 逐条比对先把判据定死校验一条引用要回答两个问题位置对不对内容支不支撑。位置校验是确定性的三项检查标识存在、版本匹配、片段可取出。任何一项失败这条引用直接判无效不用进入内容判定。内容判据要提前定死常见三种。蕴含判据把结论当待验证命题只用被引片段当前提看能否推出。判据严格误判少代价是依赖上下文的引用会被判成不支撑。重合判据看结论里的关键实体与数值是否出现在片段里。实现简单但会放过数值对了、条件错了这类问题。人工抽检用来校准前两种不适合全量。4.2 覆盖度与反向检查逐条校验只管每条引用是否成立管不了结论是不是每条都有引用。这两件事要分开做。覆盖度把回答拆成原子陈述统计被引用支撑的比例。数值型和条件型陈述要求高覆盖度过渡句和总结句不要求。反向检查拿被引片段反推看它是否同样能支持一个与结论相反的表述。能支持相反表述的说明这条引用对结论没有区分力应当降级为补充。覆盖度的分母要先统一口径。按标点切句当原子陈述最省事也最容易失真一句话里常包含两个独立判断切句会把它们算成一条覆盖度虚高。更稳的是按语义拆到不可再分多花一次拆分换来后面所有统计口径一致。⚠️ 代码待验证defcheck_citation(claim,citation,store,checker):# 第一步位置校验确定性检查失败即无效ifnotstore.exists(citation[source_id],citation[revision]):returninvalid,source_or_revision_missingspan_textstore.fetch_span(citation[source_id],citation[revision],citation[span])ifspan_textisNone:returninvalid,span_unresolvable# 第二步内容校验蕴含判据ifnotchecker.entails(claim[text],span_text):returnunsupported,not_entailed# 第三步反向检查能支持相反表述的降级为补充ifchecker.entails(claim[negation],span_text):returnweak,no_discriminative_powerreturnvalid,4.3 校验的成本与采样成本来自两块一次额外的判定调用以及片段取出与比对的工程开销。三种控制手段按收益排序。先位置后内容位置校验失败的直接判无效能省掉大部分无效调用。分层采样高风险结论全量校验背景陈述按比例抽样。结果缓存键用引用标识加结论指纹同一条引用配同一句结论只判一次。缓存有个前提指纹里必须包含结论文本本身。同一条材料可能支撑多个结论如果键只带引用标识第二条结论命中的会是第一条的判定结果看着省了调用实际是把错误结论放行。五、没有依据的时候怎么办引用链路的真实价值分两半有依据时给得出出处没依据时不给错答案。后半截更容易被忽略因为它不产生任何可见产出。5.1 三档处置档位适用条件输出形态风险拒绝回答检索无命中或命中片段与问题不相关明确说明没有找到依据可用性下降可能被当成能力不足标注不确定有命中但支撑不足或来源之间冲突给出结论并标注依据强度与冲突点用户容易忽略标注给候选命中多个来源但需要用户确认条件列出候选及各自依据请用户选定交互变长三档怎么选不是纯技术问题要看业务能承受哪一种错。面向对外承诺的场景宁可拒绝也不能给一个没有依据的数面向内部检索的场景给候选比拒绝更有用因为用户自己能判断。同一套系统可以按场景配不同的默认档但档位定义本身要保持一致否则指标没法横向比。5.2 触发条件写死在代码里这三档不能交给模型临场决定触发条件要能被枚举。可用判据有三组。检索侧命中数量为零、最高相关分低于阈值、命中来源全部低于可信等级。校验侧逐条校验的无效比例超过阈值、覆盖度低于阈值、反向检查发现引用无区分力。来源侧多个来源对同一事实给出不同取值且无法判断时间先后。⚠️ 代码待验证defdecide_disposition(hits,checks,t):ifnothits:returnrefuseifchecks.invalid_ratiot.max_invalid_ratio:returnhedgeifchecks.coveraget.min_coverage:returnhedgeifchecks.conflicts:returnoffer_candidatesreturnanswer判定顺序固定下来之后线上出现争议可以先看落在哪一档再回头调阈值而不是现场讨论这算不算没依据。5.3 档位要能被观测三档各自的数量与占比都要落指标。拒绝率突然升高通常指向索引缺失或检索退化标注不确定的占比升高多半是来源冲突变多。这两个信号比单看错误率更早暴露问题因为错误率要等到用户投诉才涨。完整版资料清单本文用到的引用契约模板、校验判据对照表与失效巡检清单都整理在里面了扫码即可获取六、引用失效与漂移引用的生命周期比答案长。答案发出之后源还在变隔一段时间回看这条引用可能已经不再成立。6.1 三类失效失效类型表现发现方式处置源被更新片段内容变了结论可能不再成立版本号或片段指纹比对重跑校验必要时修正结论源被删除引用取不回来定期回查存在性转为留痕引用标注不可再取回链接失效对外链接打不开内容可能仍在定期可达性巡检换成稳定定位或内部留档三类里最危险的是源被更新链接照样能打开内容已经不同人工抽检不一定看得出来。6.2 版本锚点与片段快照两个手段配合使用。版本锚点引用里带revision回查时先比版本。版本不同就进重校验队列而不是直接判失效因为多数更新并不影响原结论。片段快照对校验型与留痕型引用落一份片段级快照。快照让当时看到的是什么可复现也让失效后的回溯不再依赖外部可达。快照要有边界只对进入过最终答案的引用做粒度到片段不到整份文档。否则存储量会随检索量上涨而绝大多数检索结果从未被引用过。片段指纹的算法要选对。直接对整段内容做哈希最准但源里改一个标点就判漂移噪声太大。实用的做法是先归一化抹掉空白与格式差异再算指纹只留下措辞与数值的真实变化。指纹用来触发重校验不用来直接判失效这个分工能挡掉大部分误报。⚠️ 代码待验证-- 引用失效巡检先比版本再比片段指纹避免无差别全量重校验SELECTc.citation_id,c.source_id,c.revisionAScited_revision,s.revisionAScurrent_revision,(c.span_hashs.span_hash)AScontent_driftedFROMcitations cJOINsources sONs.source_idc.source_idWHEREc.revisions.revisionORc.span_hashs.span_hash;巡检节奏按源的更新频率分层变动频繁的源按天巡检稳定的源按周期巡检。全量逐条回查代价太高按上次校验时间加源更新频率排队更实际。6.3 降级与回溯失效后的降级沿用第五章那套语汇保持三档一致重校验通过就继续用重校验不通过但有替代来源就换引用两条都做不到就把结论标为历史结论保留原引用作为留痕并显式标注不可再验证。标注不可再验证比悄悄删掉引用好。删掉之后读者看到的是一个没有出处的结论会误以为它本来就没有依据。重校验队列要有优先级。同一批源更新往往一次性影响很多条引用按引用逐条排队会让判定调用在短时间里集中涌出。按源标识聚合一个源只跑一次重校验再把结果分发到它下面的所有引用调用量能压下一个台阶。七、展示、成本与观测7.1 引用给谁看怎么去重排序同一段材料可能被多次引用展示时先去重再排序。去重按源标识加片段定位合并同一片段的多条引用合成一条标注它支撑了几处结论。排序按可验证性不按出现顺序能定位到片段的排前面只能到文档级的排后面。读者点开一条落不到具体位置的引用体验比没有引用更差。展示范围也要分。面向终端用户的回答只展示支撑型引用面向内部评审场景补充型与留痕型一并展示。7.2 校验的额外成本校验链路的开销有三项要单独计量校验调用每条引用一次判定随引用条数线性增长片段取出读写开销偏移量方案与快照方案的差距主要在这里巡检回查周期性与源更新频率成正比。降成本的手段按收益排序位置校验先行挡掉无效引用同源引用合并后再校验一段材料被引多处只判一次结果缓存键用引用标识加结论指纹。7.3 上线顺序与要盯的数分四步上线每步都能单独回滚。先落契约字段与材料标识只存不校验用户看到的内容不变。打开位置校验无效引用只记录不拦截观察无效比例。打开内容校验与覆盖度先只对高风险结论生效。最后接第五章的三档处置与第六章的失效巡检。要盯的数示意⚠️ 代码待验证# 引用链路观测项 citation_total # 引用条数 citation_resolvable_ratio # 位置校验通过率 citation_supported_ratio # 内容校验通过率 claim_coverage_ratio # 原子陈述的引用覆盖度 conflict_pair_count # 来源冲突对数 disposition_total{band} # 三档处置数量answer|offer_candidates|hedge|refuse drift_detected_total # 漂移检出数 citation_check_cost_ratio # 校验开销占总量比例覆盖度与前几项要一起看覆盖度下降和拒绝率上升同时出现基本可以定位到索引或检索侧而不是模型侧。完整版资料清单本文用到的引用契约模板、校验判据对照表与失效巡检清单都整理在里面了扫码即可获取附表 A关键取舍一览取舍本文结论判断依据位置引用要不要做成契约要至少含来源、版本、片段、关系四个字段缺字段会让漂移检测与自动校验无法进行第一章三种引用能否合成一种不能读者、程序、审计的验收标准不同第一章默认粒度选哪一档按结论强度定数值与条件类用句子级或字段级文档级支撑不了具体取值与成立条件第二章引用位置由谁给由系统按材料标识回填模型输出的位置不可复现第三章相关性由谁判模型判系统只判位置语义判断系统难以替代第三章回传标识落在当次集合外怎么办直接丢弃并降级该结论猜测会造出一条看着合理的假引用第三章引用校验的默认手段位置校验先行再做蕴含判据位置失败可直接判无效省掉无效内容判定第四章校验要不要全量高风险结论全量背景陈述抽样成本随引用条数线性增长第四章无依据时的默认档位拒绝回答或标注不确定给错答案的代价高于少答第五章触发档位由谁定由代码按枚举条件判定交给模型临场决定会不稳定第五章源更新后是否直接判失效先比版本再进重校验队列多数更新不影响原结论第六章快照要留多细只留片段且只留进入最终答案的引用全量整档存储代价过高第六章引用展示按什么排序按可验证性不按出现顺序落不到具体位置的引用体验更差第七章上线顺序先存契约再位置校验再内容校验最后接处置与巡检每一步都能单独回滚第七章附表 B术语速查表术语含义引用契约规定引用必须携带的字段与验收标准使引用可被程序消费展示型引用面向读者要求链接可达且内容对应校验型引用面向程序要求标识可解析且内容支撑结论留痕型引用面向审计要求可定位到具体版本与片段引用粒度引用定位的粗细程度文档级、段落级、句子级、字段级回填由系统按材料标识还原出处位置模型只指认用了哪条材料原子陈述拆开后不可再分、可单独判定真假的一句陈述覆盖度回答中的原子陈述被引用支撑的比例反向检查判断被引片段是否同样支持相反表述用于识别无区分力的引用漂移源被更新后内容改变而引用仍指向旧位置的情形版本锚点引用中携带的源版本标识用于回查时判断是否漂移片段快照对进入最终答案的引用片段留存的内容副本三档处置无依据时的三种输出拒绝回答、标注不确定、给候选写在最后这篇用到的资料写这篇文章时我把几个模型的官方文档、参数表和实测记录都对了一遍顺手整理成几份配套的东西大模型学习路线图从 LLM 基础到 Agent 开发各阶段该学什么、用什么资料大模型全套教程按主题分好的视频与文档清单大模型实战好书24 本附每本适合的阶段资料是我自己整理的放在下面这个码上扫码即可获取添加时备注「大模型」优先通过。拿到之后建议先看学习路线图那一份先定位自己在哪个阶段再决定学什么比一上来就啃框架效率高得多。
返回列表