企业级 RAG 与知识库工程

共 17 题
📑 题目列表 17 题
#
★★★

1. 企业 RAG 系统的分层架构,文档解析→分块→嵌入→索引→检索→重排→生成,各层选型与典型方案?

请说明企业 RAG 系统的分层架构:文档解析、分块、嵌入、索引、检索、重排、生成各层的职责与典型选型方案?

  • RAG 全链路各层(解析、分块、嵌入、索引、检索、重排、生成)的职责
  • 各层典型选型:解析工具、分块策略、embedding 模型、向量库、重排模型、LLM
  • 各层之间的数据流与质量瓶颈

企业 RAG 分层架构从数据到答案依次为:文档解析——把 PDF/Word/HTML/扫描件转成结构化文本,典型工具如 PyMuPDF、Unstructured、OCR(Tesseract/PaddleOCR)或 VLM 视觉解析;分块——把长文切成合理粒度,常见固定窗口、语义切分、父子分块(Parent-Child);嵌入——用 embedding 模型(如 text-embedding-3、BGE、Qwen-Embedding)把文本块转成向量,保证语义相似文本向量相近;索引——向量库(Milvus、pgvector、Qdrant、Weaviate)建索引并支持向量+元数据过滤;检索——向量相似度检索(必要时 hybrid:BM25+向量),取 Top-K;重排——用 Cross-Encoder Reranker(如 bge-reranker)对初检索结果精排,提升命中质量;生成——把命中的上下文与用户问题交给 LLM 生成带引用的答案。各层选型要匹配数据规模、延迟与成本:数据大用专用向量库,数据小可用 pgvector 降低运维;延迟敏感用轻量重排或跳过重排。

RAG 的价值在"可检索、可溯源、可更新",相比纯 LLM 幻觉更可控。分层架构的核心是每层可独立调优,质量瓶颈往往在解析与分块(源头数据质量)而非检索算法。选型要权衡性能、成本、运维复杂度,并建立端到端评测闭环持续优化。

#
★★★

2. 企业文档解析的工程难点,扫描 PDF、表格、双栏、图表、公式的解析准确率与 OCR/VLM 协同?

请说明企业文档解析的工程难点:扫描 PDF、表格、双栏、图表、公式的解析准确率,以及 OCR 与 VLM 如何协同?

  • 各类文档类型(扫描 PDF、表格、双栏、图表、公式)的解析难点
  • OCR(文本识别)与 VLM(视觉理解)在解析中的分工与协同
  • 解析质量对下游 RAG 检索的影响与评估

企业文档解析的难点在于文档形态多样、结构复杂。扫描 PDF 是图像,需 OCR 识别文字,但手写、低分辨率、倾斜都会降低准确率;表格结构复杂,需识别行列合并与单元格层级,纯文本解析易丢结构,需用表格识别(如 Table Structure Recognition)或 VLM 输出 markdown/HTML;双栏排版需按阅读顺序还原,防止文字串栏;图表需理解坐标轴与图例,仅 OCR 无法还原语义,需 VLM 描述;公式需用 LaTeX 还原,普通 OCR 会出错。OCR 与 VLM 的协同:OCR 擅长纯文本、速度快、成本低,适合扫描件文字识别;VLM(如 GPT-4V、Qwen-VL)能理解版面、表格、图表、公式的整体语义,适合结构复杂或 OCR 失败的高价值文档。工程上常用"OCR 为主、VLM 兜底"的双流水线:先 OCR 批量处理,对低置信度/复杂结构文档送入 VLM 精修,兼顾成本与准确率。

解析质量是 RAG 的"源头",源头文本错误会直接影响检索与生成。难点在于"结构化还原"而非"文字识别"——表格、双栏、图表、公式的语义还原比单纯 OCR 更难。OCR+VLM 协同是成本与准确率的平衡:全量 VLM 成本高,全量 OCR 准确率不够,故用置信度分流。需建立解析质量评测集持续验证。

#
★★★

3. Hybrid Search(BM25 + 向量)的权重融合与重排序,RRF(Reciprocal Rank Fusion)与 Cross-Encoder Reranker 的工程取舍?

请说明 Hybrid Search(BM25 + 向量)的权重融合与重排序:RRF(Reciprocal Rank Fusion)与 Cross-Encoder Reranker 的工程取舍?

  • 关键词检索(BM25)与向量检索的互补性与融合方式
  • RRF 融合(基于排名的无参数融合)的原理
  • Cross-Encoder Reranker 与 Bi-Encoder 的差异及工程取舍

Hybrid Search 结合 BM25(精确词匹配、对专有名词/编号强)与向量检索(语义匹配、对同义改写强),覆盖两种查询模式。融合方式有加权分数融合(把两种分数归一化后加权)与 RRF 融合。RRF(Reciprocal Rank Fusion)按排名位置融合,公式为 score = Σ 1/(k + rank),无需归一化分数、对分数尺度不敏感,鲁棒且实现简单,是工程常用方案。重排序:初检(BM25+向量)用 Bi-Encoder(对 query 和 doc 分别编码,快但精度低)召回 Top-50,再用 Cross-Encoder Reranker(把 query 和 doc 拼接一起编码,精度高但慢)对 Top-50 精排取 Top-K。工程取舍上,RRF 简单、快、无需重训,适合作为首轮融合;Cross-Encoder 精度高但计算量大,适合数据量小、精排要求高的场景,且需评估重排带来的延迟(通常几毫秒到几十毫秒/条)。

检索链路是"粗召回 + 精排"两阶段:Bi-Encoder/向量检索做粗召回(快、广),Cross-Encoder 做精排(准、慢)。RRF 解决"两种分数不可比"的问题,避免归一化不稳定。取舍核心是延迟与精度:召回质量够时可不做重排,重排收益要量化评测,过度重排不划算。

def rrf_score(rank_lists, k=60):
    scores = {}
    for ranks in rank_lists:
        for rank, doc_id in enumerate(ranks):
            scores[doc_id] = scores.get(doc_id, 0) + 1.0 / (k + rank + 1)
    return sorted(scores.items(), key=lambda x: -x[1])
#
★★★

4. RAG 评估体系,检索质量(Recall@K/MRR)、生成质量(Faithfulness/Relevance)、端到端人工评估的分层指标?

请说明 RAG 评估体系:检索质量(Recall@K、MRR)、生成质量(Faithfulness、Relevance)以及端到端人工评估的分层指标如何设计?

  • 检索质量指标:Recall@K、MRR、Precision@K 的含义与适用
  • 生成质量指标:Faithfulness(忠实)、Answer Relevance(相关)的测量
  • 离线自动指标与端到端人工评估的分层与联动

RAG 评估分三层:检索层、生成层、端到端层。检索质量指标:Recall@K(Top-K 中相关文档占比,衡量召回能力)、MRR(第一个相关文档的排名倒数,衡量排序质量)、Precision@K(Top-K 中相关比例)。生成质量指标:Faithfulness(生成答案是否忠于检索上下文,是否幻觉,可用 LLM-as-judge 或 NLI 模型测量)、Answer Relevance(答案是否回答用户问题,无关则得分低)。端到端人工评估:对完整问答对做人工评分(有用性、准确性、可引用性),是最可信但最贵的方式。体系上形成"离线自动指标(快速回归)+ 在线指标(用户反馈、采纳率)+ 人工评估(抽样精评)"的分层闭环,自动指标用于迭代,人工结果用于校准自动指标。

RAG 评估的核心是"分层定位问题":检索不好改检索,生成不好改 Prompt/模型,不能混为一谈。Recall@K 与 MRR 定位检索,Faithfulness 定位幻觉,Relevance 定位答非所问。自动指标可批量迭代但可能失真,人工评估准但贵,故用"自动先筛、人工精评"并结合在线反馈形成闭环。

#
★★★

5. 分块(Chunking)策略如何选择,固定窗口、语义切分、父子分块(Parent-Child)各自的适用场景与召回质量差异,如何用评测数据验证?

请说明分块(Chunking)策略的选择:固定窗口、语义切分、父子分块(Parent-Child)各自的适用场景与召回质量差异,以及如何用评测数据验证?

  • 固定窗口、语义切分、父子分块三种策略的机制与适用场景
  • 三种策略在召回质量(粒度、上下文完整性)上的差异
  • 用评测集(Recall@K、问答准确率)验证分块策略的方法

三种分块策略各有取舍。固定窗口:按固定 token 数切割,简单、实现快、可控,但可能切断语义段落(一句话被拆两半),上下文不完整,适合内容规整、低延迟场景。语义切分:按语义边界(段落、标题、句子相似度)切分,保持语义完整,召回质量更好,但速度较慢、需额外处理,适合长段落、结构清晰的文档。父子分块(Parent-Child):把文档切成细粒度子块(Child)用于检索,命中后返回包含它的父块(Parent)作为上下文交给 LLM,兼顾"检索精准"与"上下文完整",是召回质量与精度的平衡方案,适合需要长上下文回答的场景。验证方法:构建带标注的评测集(问题-相关文档片段),跑不同分块策略,对比 Recall@K、MRR 与端到端问答准确率,用数据而非直觉选型。

分块是"检索粒度 vs 上下文完整性"的权衡。块太小检索到但上下文不足,块太大噪声多、精度低。父子分块把"检索粒度"与"生成粒度"解耦,是工程上的最优解之一。选型必须用评测数据验证,因为不同领域(合同、代码、医学)的最优块大小差异大,不能拍脑袋。

#
★★★

6. 查询改写与多查询检索,Query Rewriting、HyDE、Multi-Query 在什么场景能提升召回,引入的额外延迟与成本如何控制?

请说明查询改写与多查询检索:Query Rewriting、HyDE、Multi-Query 分别在什么场景能提升召回,以及它们引入的额外延迟与成本如何控制?

  • Query Rewriting(改写)、HyDE(假设文档)、Multi-Query(多查询生成)的原理
  • 各技术在何种场景(模糊查询、简写、专业术语)提升召回
  • 额外延迟与成本的来源与控制手段

查询改写类技术用于增强"查询→检索"的匹配能力。Query Rewriting:把用户的模糊/口语化/简写查询改写成更规范、更利于检索的查询(如补全术语、拆解指代),改善与文档的匹配;HyDE(Hypothetical Document Embeddings):先让 LLM 生成一个假设答案,再用假设答案的 embedding 去检索,把"查询匹配文档"转为"答案匹配文档",在查询与文档表达差异大时提升召回;Multi-Query:让 LLM 生成多个角度/同义改写后的查询,分别检索后合并去重,扩大召回覆盖面。这些方法的代价是额外的 LLM 调用(改写、生成假设、多查询)带来的延迟与 token 成本。控制手段:改写只在"低召回/模糊查询"时触发(用规则或检测器判断),而非全量;用小模型做改写;多查询数量设上限(如 2~3 个)并行检索;对高 QPS 低延迟场景可预先缓存改写结果。

这些技术的本质是"弥合查询与文档的语义鸿沟",让检索更容易命中。但它们是以"额外 LLM 调用"换"召回",需评估收益是否值得。工程上应"按需触发、限量执行、并行化、缓存",避免全量改写带来的延迟与成本失控。收益要量化(召回提升 vs 延迟增加)。

#
★★

7. 增量索引与变更追踪,文档更新时如何避免全量重建?实时索引(Kafka→Embedding Worker)的工程实现?

请说明增量索引与变更追踪的实现:文档更新时如何避免全量重建,以及实时索引(Kafka→Embedding Worker)的工程实现?

  • 变更追踪(CDC/事件驱动)捕获文档变化的机制
  • 增量更新(只更新变化的块)vs 全量重建的取舍
  • Kafka→Embedding Worker 的实时索引流水线

避免全量重建的关键是"变更追踪 + 增量更新"。文档源(如数据库、对象存储、文档库)的变化通过 CDC(Change Data Capture,监听 binlog/变更日志)或事件回调捕获,产生"文档变更"事件。事件进入消息队列(Kafka),由 Embedding Worker 消费:对变更文档做解析、分块、embedding,然后只更新该文档对应块在向量库中的索引(删除旧块、写入新块),而非重建整个库。增量更新大幅降低资源消耗与延迟,适合文档频繁更新的场景。为处理不一致,还会做版本号/时间戳比对,避免旧事件覆盖新数据。实时性由 Kafka 的订阅保证,worker 可水平扩展处理高吞吐;分批/事务保证一次性、及时性语义。

增量索引的核心是"事件驱动 + 定向更新"。全量重建在文档量大时不可行(成本高、窗口长),增量只处理变化的文档。Kafka 提供解耦、缓冲、重试与顺序保证,Worker 负责幂等处理。难点是"事件与向量库状态的一致性"(防止丢事件、乱序、重复),需幂等写入与版本比较。

// Kafka → Embedding Worker 增量索引
@KafkaListener(topics = "doc-change")
public void onDocChange(DocChangeEvent ev) {
    Doc doc = documentService.load(ev.docId);          // 读取最新文档
    List<Chunk> chunks = chunker.chunk(doc);            // 解析+分块
    List<Vector> vecs = embedding.encode(chunks);       // embedding
    if (ev.version < doc.version) return;               // 丢弃过期事件
    vectorStore.deleteByDocId(ev.docId);                // 删除旧块
    vectorStore.upsert(vecs);                           // 写入新块
}
#
★★

8. 多租户 RAG 系统的数据隔离,向量库 namespace、租户级加密、检索过滤的工程边界?

请说明多租户 RAG 系统的数据隔离:向量库 namespace、租户级加密与检索过滤的工程边界?

  • 向量库层 namespace/partition 的物理或逻辑隔离
  • 租户级加密(数据加密、密钥隔离)
  • 检索过滤(应用层/索引层按租户过滤)与失效边界

多租户 RAG 数据隔离需在多个层面落实。向量库 namespace:多数向量库(Milvus、Qdrant、Weaviate)支持 namespace/partition 隔离,把不同租户的数据分到独立命名空间,检索时限定在租户的 namespace,从索引层阻断跨租户访问。租户级加密:存储层对租户数据加密(静态加密),密钥按租户隔离(KMS 每租户一张主密钥),防止数据泄露时跨租户暴露。检索过滤:即使 namespace 隔离,应用层仍要强制按租户传入过滤条件(tenant_id 过滤),作为纵深防御,防止代码 bug 导致越权检索。工程边界上,namespace 是"逻辑隔离优先",数据量大时用分区/分库;加密是"静态防护",检索过滤是"访问控制",三者叠加,任一失效仍可兜底。还要在后端模型生成时保证上下文不跨租户。

多租户隔离是"纵深防御",不能只靠一层。namespace 防检索越权,加密防存储泄露,过滤防应用层漏洞。隔离的边界要明确:索引层、存储层、应用层分别做职责,且所有层的租户标识必须一致、可审计。隔离的代价是 namespace 增多可能降低检索性能,需权衡。

#
★★

9. 检索权限与数据安全,向量库的 namespace/partition 过滤、租户级 ACL 与文档级脱敏如何组合,防止越权检索与生成泄露?

请说明检索权限与数据安全:向量库 namespace/partition 过滤、租户级 ACL 与文档级脱敏如何组合,以防止越权检索与生成泄露?

  • 向量库 namespace/partition 过滤的索引层权限
  • 租户级 ACL(访问控制列表)与文档粒度的权限
  • 文档级脱敏(敏感字段在生成前过滤)与防止生成泄露

防止越权检索与生成泄露需"索引层过滤 + 应用层 ACL + 生成层脱敏"组合。索引层:向量库按 namespace/partition 隔离,检索语句强制携带租户/权限过滤条件,从源头限制可检索的文档集。应用层 ACL:每个用户/租户有权限范围的文档集合,检索前用 ACL 计算"可见文档 ID 列表",作为过滤条件注入,block 级别也可做权限(如文档部分可见)。生成层脱敏:检索结果在送入 LLM 前做文档级脱敏——过滤无权访问的段落、对敏感字段(PII、机密)掩码,防止 LLM 把本不该泄露的内容拼进答案。三层组合构成纵深防御:索引过滤挡越权检索,ACL 挡权限判定错误,脱敏挡生成泄露。任何一层失效仍有兜底,且全程审计。

权限控制的本质是"每一层都按最小权限执行"。检索不止是"找到相关",还要"权限内相关"。索引层过滤是性能与安全兼得,ACL 是权限语义,脱敏是最后防线。真正的难点是"权限粒度":文档级、块级、字段级权限不同,检索与生成要一致执行,防止"检索到了但生成时泄露"。

#
★★

10. 引用溯源(Citation/Grounding),如何让回答标注来源片段并支持人工核验,从工程上降低幻觉的扩散?

请说明引用溯源(Citation/Grounding)的实现:如何让回答标注来源片段并支持人工核验,以从工程上降低幻觉的扩散?

  • 让 LLM 生成时标注引用(来源文档/片段 ID)的机制
  • 引用与检索片段的映射与校验(防幻觉引用)
  • 人工核验 UI 与"无引用不答"策略

引用溯源(Grounding)让回答的每句话都能追溯到来源。实现机制:检索阶段保留每个块的文档 ID 与块号;生成阶段要求 LLM 输出时用引用标记(如 [1]、[2]),并在 Prompt 中强约束"只基于引用内容作答,无引用不回答";返回时把引用编号映射到具体来源文档与片段,前端展示来源链接。工程上要防"幻觉引用":LLM 可能编造不存在的引用,需在生成后校验引用的编号是否真实存在、映射是否准确,剔除无效引用。还应做"引用一致性校验"——用自动或人工判断生成的句子是否真的由对应片段支撑。人工核验 UI 提供"点击引用跳转原文片段"的能力,支持核验者逐条确认。策略上"宁缺毋滥":无法引用的内容不输出或标注不确定,降低幻觉扩散。

引用溯源是"把 AI 回答变成可核验的",从工程上对抗幻觉。关键在"生成-引用-来源"三者的真实映射,而非仅显示编号。防幻觉引用靠校验,支持核验靠 UI 与映射。Grounding 要求"回答必须 grounded",无来源的推断要明确区分,提升可信度与合规性。

#
★★

11. 知识时效性与一致性,文档更新、删除、版本回滚时索引增量更新与缓存失效如何保证检索结果不过期?

请说明知识时效性与一致性:文档更新、删除、版本回滚时,索引增量更新与缓存失效如何保证检索结果不过期?

  • 文档更新/删除/回滚时索引的增量同步
  • 缓存(语义缓存、问答缓存)失效策略
  • 保证检索结果与源文档一致(版本、时间戳)的机制

保证检索结果不过期需"索引更新 + 缓存失效"双管齐下。文档更新/删除/回滚时,通过事件驱动(CDC/消息队列)触发增量更新:更新→重算 embedding 并 upsert 对应块;删除→从向量库删除该文档全部块;回滚→恢复到指定版本的内容并重建索引。索引更新要有版本号/时间戳,检索时比对版本,避免旧数据覆盖新数据。缓存失效:问答/语义缓存需在文档变更时主动失效——事件触发清除涉及该文档的缓存条目,或设短 TTL 兜底;对语义缓存,还需标记"数据源版本"作为缓存键的一部分,源更新则缓存自动失效。为保证一致性,可让"检索结果附带数据版本号",与源版本比对,不一致则触发刷新。

时效性问题的本质是"源数据、索引、缓存三者一致"。增量更新解决索引同步,缓存失效解决缓存过期,版本号解决"新旧覆盖"的乱序问题。架构上把"变更事件"作为统一驱动,索引与缓存都订阅同一事件,保证一致性。缓存失效比索引更新更易被忽略,需显式设计。

#
★★

12. 语义缓存(Semantic Cache)的成本收益,相似度阈值如何设定,缓存命中率与误命中(语义近但答案不同)如何权衡?

请说明语义缓存的成本收益:相似度阈值如何设定,缓存命中率与误命中(语义相近但答案不同)如何权衡?

  • 语义缓存命中率与误命中的关系(阈值的作用)
  • 相似度阈值设定的方法论(成本、风险)
  • 按场景/风险分级设置阈值

语义缓存的成本收益取决于阈值设定:阈值越高,命中条件越苛刻,命中率低但误命中少;阈值越低,命中率高但可能把"语义相近但答案条件不同"的请求误判为命中,返回错误答案。误命中代价随场景而异:低风险场景(重复查询、常识问题)误命中代价小,可低阈值提高命中率;高风险场景(医疗、法律、金额、时效敏感)误命中可能造成严重后果,必须高阈值或禁用。阈值设定方法:用标注样本做"相似度 vs 误命中率"曲线,找到收益拐点;也可用"命中次数 + 源数据版本"做二次校验,命中时确认源未变。工程上通常按场景分级:默认中阈值,高风险收紧、低风险放宽,并支持动态调整与 A/B 验证。

语义缓存本质是"用近似匹配换成本"。阈值是"命中率-正确率"的旋钮,没有绝对最优,只有按场景权衡。关键是把"误命中代价"量化——代价高的场景宁可牺牲命中率。通过阈值曲线 + 分级策略 + 源版本校验,既能省成本又不失正确性。

#
★★

13. 知识库的版本发布与回滚,文档版本化、批量更新审批、检索一致性(索引与源文档同步)的工程实践?

请说明知识库的版本发布与回滚:文档版本化、批量更新审批、检索一致性(索引与源文档同步)的工程实践?

  • 文档版本化(版本号、历史、回滚点)的建模
  • 批量更新审批流程(发布前审阅、灰度)
  • 检索一致性:索引与源文档同步,避免发布后检索到旧版本

知识库版本发布要"可追溯、可审批、可回滚"。文档版本化:每个文档有版本号与历史,修改不覆盖旧版本,保留回滚点,支持按版本回滚。批量更新审批:批量发布前走审批流程(审阅内容、评估影响、灰度到小范围),验证无误再全量发布,审批记录留痕。检索一致性:发布时索引与源文档必须同步——发布确认后触发索引更新,保证检索到的内容是"已发布的最新版本";检索结果带版本号,与源比对,防止新旧混用。回滚时同步回滚索引与缓存,避免"源回滚了但索引还是新版"。工程上用一个"发布状态机"(草稿→审核→发布→回滚)驱动索引与缓存联动,保证一致性。

知识库发布的核心是"源、索引、缓存三者一致性 + 审批流程"。版本化提供回滚能力,审批控制风险,发布状态机保证索引与源同步。难点是自动化:发布动作要自动触发索引更新与缓存失效,回滚要自动恢复旧版本索引,避免人工遗漏导致检索到过期内容。

#

14. GraphRAG(Microsoft GraphRAG)与传统向量 RAG 的对比,实体关系建模在复杂推理场景的工程价值?

请说明 GraphRAG(Microsoft GraphRAG)与传统向量 RAG 的对比,以及实体关系建模在复杂推理场景的工程价值?

  • GraphRAG 与向量 RAG 的机制差异(知识图谱 vs 向量块)
  • 实体关系建模对多跳推理、全局性问题的价值
  • GraphRAG 的工程成本(建图、查询复杂度)与适用边界

传统向量 RAG 把文档切块嵌入,靠向量相似度检索,擅长"单点局部"问题(答案在某块内),但难以回答需要跨多块、多文档关联推理的"全局性问题"(如"所有产品的共同点")。GraphRAG(Microsoft)用 LLM 从文档抽取实体与关系构建知识图谱,再结合社区检测(如 Leiden)做全局摘要,能回答"全局性问题"与多跳推理。实体关系建模的价值在于显式表达实体间的结构与因果,使检索能沿关系路径展开,而非仅靠语义相似。工程成本上,GraphRAG 建图需要额外 LLM 抽取(成本高、处理慢),图谱查询与存储更复杂,且图谱质量依赖抽取准确率。因此工程上常"混合":向量 RAG 处理局部细节,GraphRAG 处理全局/关联问题,按问题类型路由。

GraphRAG 与向量 RAG 是互补而非替代:向量适合局部语义检索,图谱适合全局与多跳推理。实体关系建模的价值在"结构化关联",正是 LLM 局部检索的短板。但建图成本高、质量依赖抽取,故需评估收益,按问题类型混合使用,避免为所有场景都建图。

#

15. 多轮对话中的 RAG,历史对话参与检索的两种策略(全文拼接 vs 重写为独立查询)的取舍,以及上下文窗口管理?

请说明多轮对话中的 RAG:历史对话参与检索的两种策略(全文拼接 vs 重写为独立查询)的取舍,以及上下文窗口管理?

  • "历史全文拼接 vs 重写为独立查询"两种检索策略的机制
  • 两种策略在召回质量、延迟、成本上的取舍
  • 多轮对话的上下文窗口管理(历史裁剪、摘要)

多轮对话中,用户问题常依赖历史(如"它呢?"),检索时需要历史参与。两种策略:全文拼接——把历史对话完整拼接到当前问题再检索,保留全部上下文,但历史过长会增加 token 成本、稀释当前问题权重、还可能超出检索长度限制;重写为独立查询(Query Rewriting)——先用 LLM 把当前问题结合历史改写成独立查询("它"替换为具体实体),再检索,检索更精准、节省 token,但多一次 LLM 调用。取舍上,简单场景用全文拼接(快、保留上下文),复杂/长历史场景用重写(精准、省 token),常混合:短历史拼接、长历史重写。上下文窗口管理:多轮对话不能无限累积,需裁剪(保留最近 N 轮)、摘要(对早期历史做压缩)、或按与当前问题相关性过滤历史,控制送入 LLM 的上下文长度,兼顾成本与准确性。

多轮对话的难点是"历史如何参与检索 + 如何控制上下文"。重写为独立查询本质是"把歧义消解在检索前",比全文拼接更精准但多成本。上下文窗口管理是"在信息完整性与成本/延迟之间权衡",裁剪+摘要+相关性过滤是常见组合。策略要按场景评测,避免历史过载稀释当前意图。

#

16. RAG 评测自动化,离线指标(Recall@K、MRR、Faithfulness、Answer Relevance)与在线指标(用户反馈、会话成功率、采纳率)如何联动形成闭环?

请说明 RAG 评测自动化:离线指标(Recall@K、MRR、Faithfulness、Answer Relevance)与在线指标(用户反馈、会话成功率、采纳率)如何联动形成闭环?

  • 离线自动评测指标(检索 + 生成)的作用
  • 在线业务指标(反馈、成功率、采纳率)的采集
  • 离线与在线指标的联动与闭环迭代机制

RAG 评测自动化形成"离线训练迭代 + 在线业务验证"的闭环。离线指标:Recall@K、MRR 评估检索,Faithfulness、Answer Relevance 评估生成,用标注集自动批量跑,快速发现回归、指导迭代(改分块、检索、Prompt)。在线指标:用户反馈(点赞/点踩)、会话成功率(是否解决用户问题)、采纳率(引用是否被点击/采纳),反映真实业务效果。联动闭环:离线评测发现问题→改进→发布→在线观测指标是否改善→若改善则固化,否则回滚;离线指标用于快速回归与定位,在线指标用于最终验收,二者互补。为消除偏差,可用"离线预测在线效果"的关联分析,找到离线指标与在线成功的相关性,让离线指标更可信。

闭环的核心是"离线快、在线准、相互校准"。离线指标快但可能失真(标注集与真实分布不同),在线指标准但反馈滞后、样本稀疏。所以用离线快速迭代、在线最终验证,并建立两者的相关性,让离线指标成为在线效果的代理。无答案率、引用点击率等在线指标也帮助发现离线未覆盖的失败模式。

#

17. RAG 链路的可观测性,检索耗时、命中率、无答案率与引用点击率的监控看板与告警?

请说明 RAG 链路的可观测性:检索耗时、命中率、无答案率与引用点击率等指标的监控看板与告警设计?

  • RAG 关键指标:检索耗时、命中率、无答案率、引用点击率
  • 监控看板的分层(链路、检索、生成、引用)
  • 关键指标的告警阈值与预警

RAG 可观测性围绕"检索质量、生成质量、用户体验"建立监控。检索耗时:从查询到检索返回的延迟(按分位 P50/P95),反映检索性能;命中率:检索是否返回相关结果(可定义"无结果比例"或"低分结果比例"),命中率低说明索引/分块/embedding 有问题;无答案率:LLM 因上下文不足而拒答或"无答案"的比例,过高说明检索召回不足;引用点击率:用户点击引用/来源的比例,反映答案可信度与用户信任。监控看板分层展示:链路总览(RAG 请求量、端到端延迟、错误率)、检索层(检索耗时、命中率、Top-K 分数分布)、生成层(生成耗时、无答案率、Faithfulness)、引用层(引用点击率、来源分布)。告警:检索耗时超阈值、无答案率持续上升、命中率下降、错误率突增,分别设置告警并关联到具体链路定位(是分块、检索还是生成层问题)。

RAG 可观测性的关键是"指标可定位到层"。检索耗时/命中率反映检索层,无答案率反映"检索与生成的衔接",引用点击率反映用户体验。指标异常要能下钻到具体环节定位根因。告警阈值要基于历史基线设定,避免误报,并与日志/trace 关联。