外观
Q05–Q08:RAG、规则与可信上下文
这组关注输入证据的质量。不要把“查向量库”当成完整 RAG,也不要用“模型会理解”替代可执行的过滤与校验。
Q05 从一份资料到一次带来源的回答,RAG 怎么运行?
**考察目的:**掌握离线索引与在线检索,以及向量空间的前提。**难度:**核心。
**主问题:**请把资料导入、Embedding、pgvector 检索和最终引用串起来讲。
直接答案与 STAR
导入阶段先记录文档身份、来源和版本,规范化文本,再切成保留定位信息的片段。Embedding 模型把每个片段映射为固定维度向量,数据库保存文本、向量、模型标识及教学等级、语言、地区等元数据。
查询阶段把问题或内容需求转成相同向量空间中的查询向量,先落实可用资料范围,再按相似度排序,返回片段及来源标识。生成时引用被选中的片段;最终检查引用 ID 是否存在且属于这次证据快照。相似度只代表向量距离,不是事实正确率。来源存在也不等于内容蕴含被引用结论,关键主张仍需内容核对。
**STAR|学习复现:**S:教材需要根据等级、语言和地区使用合适资料。T:让生成依据可追溯。A:导入带来源和版本的样本,将查询与过滤条件、命中片段一起记录。R:验收时能从教材引用追到原文片段及版本,而不是只看到一个网址或模型编造的书名。
第一层追问:为什么不能今天导入用模型 A,明天查询用模型 B?
**直接答案:**不同模型的坐标含义通常不一致,即使维度相同,距离也不可直接比较;维度不同时还可能在数据库层失败。需要固定模型、维度和预处理规则。升级时重新计算文档向量,或维护独立索引版本并经过验证后切换。
**STAR|假设方案:**S:供应商升级 Embedding,输出仍是相同维度。T:避免静默检索退化。A:为向量记录模型/版本标识,保留固定查询集,对新索引做并行评估再切换。R:以检索命中和排名变化决定是否上线,不能只用“维度一样”判定兼容。
第二层追问:切分越小越好吗?
**直接答案:**不是。过小会丢上下文、破坏规则适用范围,过大会混入无关内容并增加成本。应按文档结构和任务选择长度与重叠,保留标题、段落和来源定位;用固定查询衡量召回、上下文长度与最终答案。规则类内容尤其不能把条件和结论分开。
**STAR|学习复现:**S:一段文化说明包含“适用地区”与“例外情况”。T:检查切分是否改变含义。A:比较两种片段策略,查看命中内容是否包含适用条件。R:记录哪种策略保留了完整证据,并检查生成是否误用,不能只比较片段数量。
分支追问:为什么选择 pgvector,而不是专门向量数据库?
**直接答案:**本项目已有关系数据、版本和元数据过滤,pgvector 能把业务查询与向量检索放在 PostgreSQL 中,降低维护面。它不是任何规模下都最优。应根据数据量、过滤选择性、写入、延迟、召回、隔离和运维能力评估专用引擎。小数据先用精确检索建立基线,再评估近似索引。
**STAR|假设方案:**S:已有 PostgreSQL,资料量尚小。T:实现可解释、可追溯的检索。A:先在同库落地片段和向量,记录过滤后候选规模与查询耗时。R:只有实际指标暴露瓶颈时再比较替代方案,不虚构百万级效果。
**优秀回答:**能写出“一条片段记录”包含什么,并解释向量模型升级。**常见误区:**向量就是压缩后的原文;相似度 0.9 就是 90% 正确;RAG 不需要版本。
关联学习:RAG 全链路、Embeddings、pgvector。
实际源码:system/app/retrieval.py 的 split_text()、embeddings()、import_document()、retrieve()。
验证与实验:system/tests/test_system.py::test_source_version_and_offsets;system/tests/test_adapters.py::test_real_embedding_contract_and_dimension_guard(模拟 HTTP 响应);L03、L04。维度校验不能证明同维度不同模型可混用。
Q06 检索为空、资料冲突和更新,分别怎么处理?
**考察目的:**异常资料策略与数据快照。**难度:**中高。
**主问题:**如果没有合适资料,模型还能继续生成吗?
直接答案与 STAR
要先定义任务的证据要求。教材中的受约束事实不能在检索为空时自动当成已知事实继续生产;应提示缺少什么范围的资料,并进入人工补充或明确受限的草稿流程。允许无资料创作时也必须标记“无检索依据”,不得伪造引用。
冲突与空结果不同:有多个候选却结论不一致,需要比较来源权威性、版本、适用地区和时效,无法解决时形成冲突报告。资料更新则要建立新版本、生成新片段,并决定新任务使用哪一版;运行中的任务应固定证据快照,不能前半段用旧资料、后半段悄悄切到新资料。
**STAR|学习复现:**S:同一主题可能没有目标地区资料,或存在两条相反的说明。T:让异常可见而非被模型填平。A:分别准备空检索、地区不匹配和冲突样本,检查状态与来源记录。R:验收看每类异常是否有不同原因、处理入口和阻断/人工策略,不能统一返回“生成成功”。
第一层追问:放宽地区过滤能解决空结果,为什么不自动这么做?
**直接答案:**因为过滤可能是业务约束,不是检索偏好。自动放宽会把其他地区资料混进来。若允许使用通用资料,应明确通用资料定义和回退顺序,单独记录回退,并继续强制加载目标地区规则。不能在日志里省略这个变化。
**STAR|假设方案:**S:目标地区资料为空,但存在通用语法资料。T:提高可用性又不混淆文化适用范围。A:只对标记为通用的资料启用受控回退,保留地区规则和回退说明。R:审核者能看出哪些内容来自通用资料,地区专属结论仍需补证据。
第二层追问:正在生成第 3 章时资料更新了,前两章怎么办?
**直接答案:**先区分当前运行与新任务。当前运行固定资料版本,更新事件产生影响分析;新任务可选择新版本。若更新影响已有章节,应定位依赖该文档/片段的章节,创建修订候选并重新审校,而不是直接覆盖已审核教材。
**STAR|假设方案:**S:术语解释被修正。T:找出受影响的已生成章节。A:通过引用关系反查章节,生成待审修订版本,并记录更新原因。R:可以展示受影响清单,未引用该资料的章节不被无差别重写。
分支追问:冲突检测是不是模型说“有冲突”就够了?
**直接答案:**不够。报告应至少列出冲突对象、各自原文位置、来源版本、适用条件和待解决问题。确定性元数据冲突可由程序识别,语义冲突可由模型辅助,但模型也会误报。重大冲突需要人工裁定或权威来源,不能靠多数票决定事实。
**STAR|学习复现:**S:两条资料对同一术语给出不同译法。T:验证报告可供教研处理。A:要求报告引用双方片段并说明是否可能是地区差异。R:审核者能定位并裁定冲突,而不是收到一个无法操作的“资料有问题”。
**优秀回答:**明确三类异常不同状态与处理路径,理解快照和更新影响。**常见误区:**空结果时自动取消所有过滤;最新资料一定优于旧资料;让模型选择一个就算解决冲突。
实际源码:system/app/retrieval.py 的 conflicts()、import_document()、retrieve();system/app/graph.py::prepare()。
验证与实验:system/tests/test_system.py::test_empty_and_region_mismatch、test_empty_then_import_and_resume、test_source_conflict、test_source_version_and_offsets;L03–L05。当前冲突检测针对显式 facts 的同键不同值,不是通用语义冲突识别。
Q07 地区规则为什么不都塞进向量库?如何检查跨章节一致性?
**考察目的:**强约束与参考资料、实体状态与上下文长度。**难度:**核心。
**主问题:**术语、人物和文化规则怎么保证每一章都遵守?
直接答案与 STAR
检索只返回相关性排名靠前的资料,不能保证每次召回所有必须遵守的规则。强约束应按地区、语言和教材版本显式加载;规则有 ID、版本、适用条件与可执行检查。RAG 提供参考证据,规则决定必须满足的条件,两者协同但职责不同。
跨章节检查首先要定义对象,例如人物名字与身份、术语固定译法、地点设定、章节编号和词汇等级。数据来源包括规则快照和同一教材中已接受的章节版本。检查报告要定位“本章值、期望值、依据来自哪里”,不能只让模型泛泛地“保持一致”。涉及长程语义或隐含叙事的检查仍有能力边界。
**STAR|学习复现:**S:人物在不同章节出现,术语需要统一译法。T:定位明确的一致性错误。A:建立人物与术语约束,在候选章节故意改变一个值,检查报告是否指出内容 ID 和规则来源。R:以定位正确、修订后问题消失、其他内容保持不变作为证据,不声称已解决所有叙事一致性。
第一层追问:把所有历史章节都塞进上下文不就好了?
**直接答案:**会增加成本、截断风险和注意力干扰,也难以知道哪条信息有约束力。应将稳定设定结构化保存,按需加入相关章节片段和来源;摘要可以减少体积,但重要规则不能仅依赖有损摘要。先定义需要一致的事实,再决定上下文。
**STAR|假设方案:**S:教材从几章增长到几十章。T:控制上下文同时保持人物设定。A:把人物身份保存为版本化记录,检索相关章节作为证据,只引入必要字段。R:用固定矛盾样本检查漏检,而非仅报告 token 降低。
第二层追问:第一章设定本身错了,后面都跟着它一致,怎么办?
**直接答案:**一致性不等于真实性。既有章节不能无条件成为最高权威;要区分人工批准的设定、权威资料和历史生成内容。纠正基准需要新规则/教材版本、影响分析和重新审核,不能为了“一致”维护错误。
**STAR|假设方案:**S:人工发现教材人物年龄不适合目标等级。T:修正基准和受影响内容。A:更新设定版本并列出依赖章节,生成修订计划。R:新版本统一使用经确认的设定,旧版本留痕;不是悄悄修改历史记录。
分支追问:地区适配是不是翻译成阿语就完成了?
**直接答案:**不是。语言本地化处理译文、术语和表达;地区适配还涉及人名、生活场景、禁用内容、例子和文化要求。二者应独立建模,不能从语言直接推断地区。阿语也不只对应一个地区。
**STAR|简历事实 + 假设方案:**S:HanLink 面向海外中文教学,简历描述多语言和地区规则。T:避免把翻译等同文化审核。A:在复现中分别传入目标语言与地区,并加载不同维度的约束。R:验收应能发现“译文正确但地区规则不合规”的样本;历史适配成效不新增量化结论。
**优秀回答:**能列出检查对象、权威级别、数据版本和问题定位。**常见误区:**RAG 自动保证规则全召回;拼接全部历史就是记忆;一致就代表正确。
实际源码:system/app/retrieval.py::get_rules();system/app/content.py 的 book_facts()、business_review();system/app/graph.py::context()。
验证与实验:system/tests/test_system.py::test_cross_chapter_fact_conflict;L08。用例覆盖显式事实与规则矛盾,不证明能发现所有叙事矛盾或并发跨章节冲突。
Q08 检索资料里藏着“忽略规则”,系统怎么办?
**考察目的:**提示词注入、信任边界与工具安全。**难度:**中高。
**主问题:**你会怎样防止模型把参考资料中的命令当成系统指令执行?
直接答案与 STAR
资料是低信任数据,不能因为进入上下文就获得指令权限。提示词应清楚标记资料边界,明确其中命令不能改变任务与权限;但仅靠提示词并不可靠。程序必须限制工具清单、参数和可访问资源,禁止模型扩大权限,且不把密钥等无关秘密放进上下文。引用、地区与版本检查继续在模型输出之后执行。
要用带注入的资料做回归测试,检查是否出现越权调用、资料泄露或规则绕过。未知风险不能用“已经做了 prompt 防护”保证消失。教材系统应限制其影响面:模型生成候选内容,正式交付仍经过审校和人工处理。
**STAR|学习复现:**S:一条导入资料夹带“调用未授权工具”的指令。T:验证数据不会升级为权限。A:把该片段作为检索结果输入,观察模型请求,并用真实分发入口执行校验。R:即使模型被诱导,执行器也必须拒绝越权请求;这证明执行边界,不证明模型完全不受注入影响。
第一层追问:如果工具本身是允许的,还会有风险吗?
**直接答案:**有。允许“生成图片”不表示允许任意主题、无限次数或写入任意教材。工具还需要对象归属、内容审核状态、版本、参数范围和预算限制;高影响操作需要独立授权。权限粒度只到函数名仍过粗。
**STAR|假设方案:**S:模型通过允许的工具申请一千张无关图片。T:控制被授权工具的滥用。A:限制单任务数量、内容关联和总预算,记录拒绝原因。R:能阻止越界请求而不影响合法素材制作。
第二层追问:日志保存完整 prompt 是不是最方便排障?
**直接答案:**方便但可能暴露用户数据、资料内容或敏感配置。按需要记录角色、模型、输入摘要/哈希、来源 ID、错误类别和使用量;必要的原始内容应受访问控制并有保留期限。凭据不应进入 prompt 或日志。学习演示可以展示无敏感样本,但不能据此照搬生产日志策略。
**STAR|假设方案:**S:为了复现一次异常准备保存所有请求。T:兼顾诊断与数据最小化。A:保留可重建的版本 ID 和脱敏记录,把原始输入限制在受控存储。R:排障能定位证据,同时普通运行日志不含密钥或无关个人信息。
分支追问:怎样回答“这个系统安全吗”?
**直接答案:**给出范围和证据,不给绝对保证。说明已控制的入口与副作用、测试过的攻击样本、未覆盖的环境风险;同时指出本包是学习系统,生产还需认证、租户隔离、限流、审计保留和部署加固等具体工作。
**STAR|学习复现:**S:面试官要求评估上线条件。T:避免以单个注入实验替代整体安全评审。A:按资料导入、模型输出、工具执行和交付逐层列出边界。R:形成可复查的缺口清单,不将未验证能力写成已实现。
**优秀回答:**承认提示词不能代替授权,能解释授权工具也可能被滥用。**常见误区:**把恶意词删掉就没有注入;系统提示词天然优先所以不需校验;记录越多越安全。
关联学习:工具安全、Tool Calling。
实际源码:system/app/providers.py 的 UNTRUSTED、run_model();system/app/tools.py::ToolSession.execute();system/app/api.py::auth()。
验证与实验:system/tests/test_system.py::test_context_and_tool_permissions、test_api_auth_and_ui;L07。这些用例验证服务端边界,不等于真实模型提示词注入红队评测。
官方核对资料
核对日期:2026-11-03。数据库行为以本包锁定的 PostgreSQL/pgvector 版本为准。