文 / STEM Career 编辑部
知识库助手答错时,最容易做的动作是换一个模型、增加提示词,再问一次相同问题。如果第二次碰巧答对,演示看起来已经修好;但你仍然不知道旧文档是否留在索引里、另一类用户能否看到受限内容,以及答案引用的段落是否真的支持结论。面试里,一句“我调了RAG参数”很难回答这些追问。
更有说服力的项目,是把一次错误拆成能够逐层检查的证据链:用户问了什么,系统允许他读取什么,索引里有什么,实际找回哪些材料,最后依据什么生成结论。本文用原创差旅制度知识库做完整推演,并提供不调用模型的离线练习。它练的是诊断方法,不是展示某个框架的功能菜单。
先定义一个可以判定对错的问题
假设公司九月发布差旅制度第一版,住宿上限为每日三百元,十月生效的第二版改为四百元。普通员工可以查差旅制度,人事专用资料仅对人事组开放。用户问“按现在的规定,这次住宿可以报多少”,系统需要先确认适用日期、地区、币种和费用类型;如果这些条件不齐,直接回答四百也可能不完整。
为便于练习,我们把范围收窄为同一地区、同一币种、单日住宿,并明确“现在”指十月三十日的有效制度。正确结果应引用第二版的对应条款,说明上限四百;涉及实际票据是否合格的问题,留给另一个流程。缩小范围让测试有稳定答案,也避免把一个整数输出误当成报销业务已经全面正确。
把任务写成一张样本卡:查询、用户组、业务日期、应使用的文档与版本、预期结论、允许引用和应拒绝的内容。以后改检索、提示词或索引时都重跑同一张卡。若题目条件改变,应增加新样本,而不是悄悄改掉原来的预期,使任何实现都显得通过。
把检索前后的责任分开记录
建议画出文档来源、抽取、切块、元数据、索引、检索、生成与引用的路径。每一段都留一个能回答具体问题的记录:源文件的有效日期,切块保留的条款编号,索引批次,检索过滤条件,候选段落与分数,进入模型的实际上下文,输出与引用对应关系。日志服务于定位,无需把全部内部数据公开。
一个典型错误是源文件已更新,搜索索引却仍指向旧块。若只展示文件夹里的最新版PDF,无法证明模型当时读到的是它。你需要比较文件版本、索引版本与请求发生时间,确认哪一次导入成功、旧记录怎样失效、缓存是否也需要更新。上传成功与搜索可用是两个检查点。
另一种错误发生在切块之后:页眉写着“仅限海外差旅”,正文只剩“四百元”,系统却把它用于国内出差。此时文档版本可能完全正确,缺的是限定条件。修复应让关键范围与条款一起进入检索材料,而不只是把块切得更长。大块保留更多上下文,也会带来噪音与成本,需要用同一任务集比较。
版本更新不能只靠文件名排序
给文档增加稳定的制度标识、版本、生效起止日与废止状态,比在文件名后写“最终版”可靠。检索时根据查询需要选择当前有效版本;用户询问九月份的历史申请,则应匹配那时有效的制度。当前规则与历史规则都可能合理,错误在于把一个时间范围的答案用于另一个范围。
Amazon Bedrock的检索配置文档介绍了文档元数据过滤、检索数量及搜索方式等配置。本项目借此提出一个可验证要求:选择有效制度的条件应当进入检索路径,而非让生成阶段凭语言猜测哪个文件较新。具体字段和更新方式仍取决于实际系统。
可以故意保留两个内容相近的版本,再分别问当前和历史问题。若当前问题偶尔返回旧版,观察是过滤条件未应用、时间字段缺失,还是查询本身没有表达业务日期。不要先删除所有历史资料掩盖问题;真实业务可能仍需查询它们,删除会解决一类测试,却破坏另一类需求。
先核对访问范围 再判断答案是否准确
普通员工询问人事专用资料时,系统不应先把资料交给模型,再要求模型不要透露。合成练习里,人事文档有一个示例数值九千;普通员工即使猜中这个数值,也不能让输出被当作正确,因为他没有读取依据的权限。内容准确和访问获准是两个独立条件。
Azure AI Search的安全过滤说明区分了搜索结果过滤与身份认证本身:用组标识裁剪结果的模式,需要每次查询都正确应用条件,字段设为不可返回也不等于完成安全控制。因此项目中要说明用户组从何而来、由哪一层可信服务决定,以及无组信息时怎样处理。
测试至少覆盖普通员工、人事组、空组和组权限变更后的请求。还要检查按查询文本建立的缓存:若缓存没有纳入授权范围,同一个问题可能把上个用户的结果发给下个用户。权限变化时如何失效,应作为设计问题记录。本文离线程序只检查简化的组交集,不能替代真实认证和完整权限系统。
找回了材料 为什么仍可能答错
检索有两个层次的失败。第一层是该文档根本没有进入候选集;第二层是文档找到了,真正支持结论的条款没有进入最终上下文。前者需要查数据覆盖、索引和查询,后者才考虑候选数量、重排、去重及上下文选择。把两层都叫“幻觉”,会让修复动作失去方向。
可以保留一个正确材料全集,再人工指定正确片段给生成阶段。如果这样能回答,优先查找回与选材;如果仍然把四百说成五百,就检查问题约束、上下文混淆和生成行为。这是一种隔离变量的实验,不能证明所有生产请求都属于同一根因,但能缩小当前错误的范围。
候选数量越多,也不保证越好。假设正确条款原本排第二,多取一些材料可能有用;若同一旧制度的多个重复块占满上下文,继续扩大数量反而增加干扰。面试中应展示候选材料的变化及相关样本结果,而不是宣布某个固定数量是通用最佳值。
引用存在 不等于结论获得支持
把“答案带链接”当作完成标准,会漏掉三种情况:链接指向旧版本,链接属于当前用户无权访问的材料,或者链接虽然有效,但该段只说“需主管批准”,没有支持具体金额。点击能够打开页面,只证明资源可访问,不能证明推理正确。
对一个短答案,可以先把结论拆成事实项,例如适用日期、金额和例外条件。逐项对照原文,记录支持、冲突或无依据。若一个金额来自表格,保留对应行列条件;若来源只是示例,不应把示例推广成制度。文字流畅度与证据完整度分开评分,才能发现“说得很像对的”回答。
修复时也要限制补充推断。没有找到某城市的规则,合理行为可以是说明缺少材料并请求补充,而不是从邻近城市的标准类推。拒绝作答会影响覆盖率,但无依据地补全会影响可信度。根据任务明确两者代价,再比较方案,才是可解释的产品与工程判断。
一套可以实际运行的离线诊断练习
下载知识库诊断练习包,使用Python三点十或更高版本运行其中的 practice.py,无需第三方依赖。数据包括差旅第一版、第二版和人事专用文档,全部是原创合成资料,不含真实公司制度或员工信息。
参考程序先按制度标识、当前版本和用户组筛选,再核验所引文档是否属于允许的结果及数值是否一致。七项检查覆盖当前版本、越权排除、缺失材料、旧引用、引用不支持金额、合格引用和空组。它们已经执行通过,支持这组有限契约;没有调用向量模型或大模型,因此没有所谓RAG准确率或生产效果提升。
先不看正确实现,依次移除当前版本条件、组过滤和引用值核对,预测各会破坏哪项检查。你会发现“同一个回答错误”可以来自不同层。把预测和实际结果并排写下来,就是一份能够在面试里追问的诊断记录,比只交付一个聊天界面更具体。
用失败矩阵决定先修哪一类问题
将问题按版本、授权、覆盖、找回、选材和生成分组,再为每组记录影响范围与错误代价。越权暴露可能只出现一例,却仍需要先阻断;普通措辞不够自然即使出现频繁,也不应挤掉权限问题的优先级。频率与严重程度分别说明,避免把全部失败压缩为一个平均分。
修复一次只改变少量相关条件。例如先修元数据过滤,再用当前、历史、无日期和无材料四类问题回归;如果又同时换模型与切块,结果变好后很难判断哪项有效。确有耦合时可以分阶段实验,并记录每阶段影响,而不是为了“单变量”原则强行忽略真实依赖。
也要保留修复代价。加入强制范围过滤可能使一部分缺少元数据的旧文档无法检索;此时应补资料或明确不可用,而不是静默放宽条件。完善的报告应交代哪些请求变得更可靠、哪些请求转为待补资料,以及后续由谁维护元数据,才能连接到实际交付。
面试时怎样展示你的判断
准备一个四分钟演示:先给出原问题和正确依据,展示一次错误,再说明如何隔离到具体层,最后展示修复与回归。重点不是让面试官看很多界面,而是让他能追问:为什么判为旧版本,怎样排除权限问题,何种证据足以宣告修复,仍有哪些条件未覆盖。
若被问“换大模型是否更快”,可以回答需要先定位。如果输入没有当前制度,模型更强也不能凭空获得正确依据;如果正确材料已在上下文却仍反复误读,再比较生成方案。若被问“怎么保证永不答错”,应给出可测试的范围、监控与升级路径,而不是绝对保证。
在简历里也按真实范围写。离线练习可以写设计并验证版本、权限和引用检查,不应写成企业知识平台上线。进一步准备可参考软件调试练习与机器学习项目评估,分别补定位过程和比较方法。
把下一轮项目补强变成明确任务
给自己安排一轮有限练习:第一步列出十个带来源的任务样本,第二步保留两个相互冲突的文档版本,第三步加入两类访问组,第四步保存每次请求实际取回的材料。完成后请同伴挑一条“有链接但没依据”的回答,检查你能否稳定复现、解释并修复,而不依赖重问直到答对。
再增加一个更新回滚场景:第二版文件被管理员撤回后,系统应停止把它作为当前依据,并明确是回到已确认有效的旧规则,还是暂停回答等待发布者确认。这两个业务选择不能由程序私自决定。保留撤回前后的索引状态和同一条查询结果,可以检查删除标记、缓存和引用失效是否连贯。
最后让同伴换一种问法,或把“现在”改成一个历史日期。若只有你背熟的原句能通过,说明项目还缺少查询变化下的证据。为失败重新归因即可,不需要把每一种新失败都包装成模型能力不足;有时需要的只是一个明确的日期字段和一次澄清。
若你已经做出知识库Demo,但只会说“效果还可以”,可以带一份目标JD、失败样本与运行记录咨询。需要补的可能是数据整理、权限设计、检索诊断,也可能是把已经做过的判断表达清楚。蒸汽求职与面试服务可以围绕你的实际目标讨论准备重点,不必先把项目包装成一个不存在的企业成果。
常见问题(FAQ)
答错时应该先换模型吗?
先核对输入、版本、权限和实际检索材料,再判断生成阶段是否是当前根因。
练习通过能说明真实RAG效果吗?
不能,练习未调用向量模型或大模型,只检查合成资料的元数据和引用规则。
有引用链接就算正确吗?
还要检查版本、访问授权与条款是否支持具体结论。
- Configure and customize queries and response generation· Amazon Web Services
- Security filters for trimming results in Azure AI Search· Microsoft
添加顾问微信,带目标AI岗位、一个失败样本和你的诊断记录,讨论项目补强与技术面试表达。
