「Java高级技能提升系列」第18篇(全20篇)· 面向2026年中高级Java岗面试 · 专栏持续更新,欢迎关注
生产级RAG:切分、检索、评估与Graph RAG全链路实战
【场景引入】
面试题:某跨境电商二面面试官:"我们企业知识库有50万份文档,用户问'2023年Q4华南区销售冠军产品是什么',RAG系统怎么保证准确回答?如果召回准确率只有61%,你会怎么优化?"
自查清单:你能答到哪一层?
- ❌ 基础层:知道RAG是检索增强生成
- ⚠️ 进阶层:了解向量检索、文档切分、重排序
- ✅ 专家层:掌握混合检索策略、评估指标体系、幻觉治理手段、Graph RAG多跳推理
线上实际情况是:我见过太多工程师只停留在"用向量数据库存embedding"的层面,面对生产级问题(召回率低、幻觉、评估困难)直接傻眼。面试官真正想考察的是:你能不能系统性地解决RAG从数据到服务的全链路问题。
【原理图解】
RAG全链路架构
一句话结论:RAG不是简单的"向量数据库+大模型",而是环环相扣的精密系统。
#mermaid-svg-X41Ctrl5KJpvxVp3{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-X41Ctrl5KJpvxVp3 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-X41Ctrl5KJpvxVp3 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-X41Ctrl5KJpvxVp3 .error-icon{fill:#552222;}#mermaid-svg-X41Ctrl5KJpvxVp3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-X41Ctrl5KJpvxVp3 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-X41Ctrl5KJpvxVp3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-X41Ctrl5KJpvxVp3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-X41Ctrl5KJpvxVp3 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-X41Ctrl5KJpvxVp3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-X41Ctrl5KJpvxVp3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-X41Ctrl5KJpvxVp3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-X41Ctrl5KJpvxVp3 .marker.cross{stroke:#333333;}#mermaid-svg-X41Ctrl5KJpvxVp3 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-X41Ctrl5KJpvxVp3 p{margin:0;}#mermaid-svg-X41Ctrl5KJpvxVp3 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-X41Ctrl5KJpvxVp3 .cluster-label text{fill:#333;}#mermaid-svg-X41Ctrl5KJpvxVp3 .cluster-label span{color:#333;}#mermaid-svg-X41Ctrl5KJpvxVp3 .cluster-label span p{background-color:transparent;}#mermaid-svg-X41Ctrl5KJpvxVp3 .label text,#mermaid-svg-X41Ctrl5KJpvxVp3 span{fill:#333;color:#333;}#mermaid-svg-X41Ctrl5KJpvxVp3 .node rect,#mermaid-svg-X41Ctrl5KJpvxVp3 .node circle,#mermaid-svg-X41Ctrl5KJpvxVp3 .node ellipse,#mermaid-svg-X41Ctrl5KJpvxVp3 .node polygon,#mermaid-svg-X41Ctrl5KJpvxVp3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-X41Ctrl5KJpvxVp3 .rough-node .label text,#mermaid-svg-X41Ctrl5KJpvxVp3 .node .label text,#mermaid-svg-X41Ctrl5KJpvxVp3 .image-shape .label,#mermaid-svg-X41Ctrl5KJpvxVp3 .icon-shape .label{text-anchor:middle;}#mermaid-svg-X41Ctrl5KJpvxVp3 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-X41Ctrl5KJpvxVp3 .rough-node .label,#mermaid-svg-X41Ctrl5KJpvxVp3 .node .label,#mermaid-svg-X41Ctrl5KJpvxVp3 .image-shape .label,#mermaid-svg-X41Ctrl5KJpvxVp3 .icon-shape .label{text-align:center;}#mermaid-svg-X41Ctrl5KJpvxVp3 .node.clickable{cursor:pointer;}#mermaid-svg-X41Ctrl5KJpvxVp3 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-X41Ctrl5KJpvxVp3 .arrowheadPath{fill:#333333;}#mermaid-svg-X41Ctrl5KJpvxVp3 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-X41Ctrl5KJpvxVp3 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-X41Ctrl5KJpvxVp3 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-X41Ctrl5KJpvxVp3 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-X41Ctrl5KJpvxVp3 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-X41Ctrl5KJpvxVp3 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-X41Ctrl5KJpvxVp3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-X41Ctrl5KJpvxVp3 .cluster text{fill:#333;}#mermaid-svg-X41Ctrl5KJpvxVp3 .cluster span{color:#333;}#mermaid-svg-X41Ctrl5KJpvxVp3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-X41Ctrl5KJpvxVp3 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-X41Ctrl5KJpvxVp3 rect.text{fill:none;stroke-width:0;}#mermaid-svg-X41Ctrl5KJpvxVp3 .icon-shape,#mermaid-svg-X41Ctrl5KJpvxVp3 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-X41Ctrl5KJpvxVp3 .icon-shape p,#mermaid-svg-X41Ctrl5KJpvxVp3 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-X41Ctrl5KJpvxVp3 .icon-shape .label rect,#mermaid-svg-X41Ctrl5KJpvxVp3 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-X41Ctrl5KJpvxVp3 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-X41Ctrl5KJpvxVp3 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-X41Ctrl5KJpvxVp3 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 原始文档
文档预处理
文档切分
文本向量化
向量存储
用户查询
查询向量化
向量检索
重排序
结果组装
LLM生成
最终回答
核心结论:RAG的每个环节都像多米诺骨牌,一个环节失误就会导致最终答案质量崩塌。我们团队踩过的坑就是:文档切分不当,后面全白做。
文档切分策略对比
一句话结论:切分策略决定了RAG系统的性能上限,选错方向再努力也徒劳。
#mermaid-svg-HLJaDkwd6hfx0Ta8{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-HLJaDkwd6hfx0Ta8 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .error-icon{fill:#552222;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .marker.cross{stroke:#333333;}#mermaid-svg-HLJaDkwd6hfx0Ta8 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-HLJaDkwd6hfx0Ta8 p{margin:0;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .cluster-label text{fill:#333;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .cluster-label span{color:#333;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .cluster-label span p{background-color:transparent;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .label text,#mermaid-svg-HLJaDkwd6hfx0Ta8 span{fill:#333;color:#333;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .node rect,#mermaid-svg-HLJaDkwd6hfx0Ta8 .node circle,#mermaid-svg-HLJaDkwd6hfx0Ta8 .node ellipse,#mermaid-svg-HLJaDkwd6hfx0Ta8 .node polygon,#mermaid-svg-HLJaDkwd6hfx0Ta8 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .rough-node .label text,#mermaid-svg-HLJaDkwd6hfx0Ta8 .node .label text,#mermaid-svg-HLJaDkwd6hfx0Ta8 .image-shape .label,#mermaid-svg-HLJaDkwd6hfx0Ta8 .icon-shape .label{text-anchor:middle;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .rough-node .label,#mermaid-svg-HLJaDkwd6hfx0Ta8 .node .label,#mermaid-svg-HLJaDkwd6hfx0Ta8 .image-shape .label,#mermaid-svg-HLJaDkwd6hfx0Ta8 .icon-shape .label{text-align:center;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .node.clickable{cursor:pointer;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .arrowheadPath{fill:#333333;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-HLJaDkwd6hfx0Ta8 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-HLJaDkwd6hfx0Ta8 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-HLJaDkwd6hfx0Ta8 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .cluster text{fill:#333;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .cluster span{color:#333;}#mermaid-svg-HLJaDkwd6hfx0Ta8 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-HLJaDkwd6hfx0Ta8 rect.text{fill:none;stroke-width:0;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .icon-shape,#mermaid-svg-HLJaDkwd6hfx0Ta8 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .icon-shape p,#mermaid-svg-HLJaDkwd6hfx0Ta8 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .icon-shape .label rect,#mermaid-svg-HLJaDkwd6hfx0Ta8 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-HLJaDkwd6hfx0Ta8 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-HLJaDkwd6hfx0Ta8 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-HLJaDkwd6hfx0Ta8 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 切分策略选择
定长切分
语义切分
结构感知切分
优点: 简单可控
缺点: 上下文断裂
优点: 保持语义完整
缺点: 切分粒度不均
优点: 利用文档结构
缺点: 依赖解析器
适用场景: 简单文档
适用场景: 技术文档
适用场景: PDF/Word
为什么这样设计:线上真实情况是,纯定长切分会让长文档变成"语义碎片",纯语义切分又会导致检索粒度混乱。我们踩过坑后才明白:结构感知+语义增强才是王道。
混合检索+重排序流程
一句话结论:单一检索方式无法满足生产需求,混合检索才是正解。
LLM 重排序模型 BM25检索 向量检索 查询引擎 用户 LLM 重排序模型 BM25检索 向量检索 查询引擎 用户 #mermaid-svg-kGwINXYTva4W1Z9z{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-kGwINXYTva4W1Z9z .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-kGwINXYTva4W1Z9z .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-kGwINXYTva4W1Z9z .error-icon{fill:#552222;}#mermaid-svg-kGwINXYTva4W1Z9z .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kGwINXYTva4W1Z9z .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-kGwINXYTva4W1Z9z .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kGwINXYTva4W1Z9z .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kGwINXYTva4W1Z9z .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-kGwINXYTva4W1Z9z .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kGwINXYTva4W1Z9z .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kGwINXYTva4W1Z9z .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kGwINXYTva4W1Z9z .marker.cross{stroke:#333333;}#mermaid-svg-kGwINXYTva4W1Z9z svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kGwINXYTva4W1Z9z p{margin:0;}#mermaid-svg-kGwINXYTva4W1Z9z .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-kGwINXYTva4W1Z9z text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-kGwINXYTva4W1Z9z .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-kGwINXYTva4W1Z9z .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-kGwINXYTva4W1Z9z .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-kGwINXYTva4W1Z9z .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-kGwINXYTva4W1Z9z #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-kGwINXYTva4W1Z9z .sequenceNumber{fill:white;}#mermaid-svg-kGwINXYTva4W1Z9z #sequencenumber{fill:#333;}#mermaid-svg-kGwINXYTva4W1Z9z #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-kGwINXYTva4W1Z9z .messageText{fill:#333;stroke:none;}#mermaid-svg-kGwINXYTva4W1Z9z .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-kGwINXYTva4W1Z9z .labelText,#mermaid-svg-kGwINXYTva4W1Z9z .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-kGwINXYTva4W1Z9z .loopText,#mermaid-svg-kGwINXYTva4W1Z9z .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-kGwINXYTva4W1Z9z .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-kGwINXYTva4W1Z9z .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-kGwINXYTva4W1Z9z .noteText,#mermaid-svg-kGwINXYTva4W1Z9z .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-kGwINXYTva4W1Z9z .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-kGwINXYTva4W1Z9z .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-kGwINXYTva4W1Z9z .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-kGwINXYTva4W1Z9z .actorPopupMenu{position:absolute;}#mermaid-svg-kGwINXYTva4W1Z9z .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-kGwINXYTva4W1Z9z .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-kGwINXYTva4W1Z9z .actor-man circle,#mermaid-svg-kGwINXYTva4W1Z9z line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-kGwINXYTva4W1Z9z :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} "2023年Q4华南区销售冠军产品" 向量相似度检索 BM25关键词检索 返回TopK向量结果 返回TopK关键词结果 RRF融合排序 融合后排序结果 构建Prompt 生成回答 最终答案
关键设计:RRF算法解决了传统加权方法的分数对比难题,通过排名打分实现多模态结果的智能融合。我们团队用过加权平均,结果被业务方吐槽"结果根本不对"。
RAGAS评估指标关系
一句话结论:没有评估体系的RAG系统就像盲人摸象,注定要翻车。
#mermaid-svg-hVG1EIn9OrAl5gxj{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-hVG1EIn9OrAl5gxj .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-hVG1EIn9OrAl5gxj .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-hVG1EIn9OrAl5gxj .error-icon{fill:#552222;}#mermaid-svg-hVG1EIn9OrAl5gxj .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-hVG1EIn9OrAl5gxj .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-hVG1EIn9OrAl5gxj .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hVG1EIn9OrAl5gxj .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hVG1EIn9OrAl5gxj .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-hVG1EIn9OrAl5gxj .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hVG1EIn9OrAl5gxj .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hVG1EIn9OrAl5gxj .marker{fill:#333333;stroke:#333333;}#mermaid-svg-hVG1EIn9OrAl5gxj .marker.cross{stroke:#333333;}#mermaid-svg-hVG1EIn9OrAl5gxj svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hVG1EIn9OrAl5gxj p{margin:0;}#mermaid-svg-hVG1EIn9OrAl5gxj .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-hVG1EIn9OrAl5gxj .cluster-label text{fill:#333;}#mermaid-svg-hVG1EIn9OrAl5gxj .cluster-label span{color:#333;}#mermaid-svg-hVG1EIn9OrAl5gxj .cluster-label span p{background-color:transparent;}#mermaid-svg-hVG1EIn9OrAl5gxj .label text,#mermaid-svg-hVG1EIn9OrAl5gxj span{fill:#333;color:#333;}#mermaid-svg-hVG1EIn9OrAl5gxj .node rect,#mermaid-svg-hVG1EIn9OrAl5gxj .node circle,#mermaid-svg-hVG1EIn9OrAl5gxj .node ellipse,#mermaid-svg-hVG1EIn9OrAl5gxj .node polygon,#mermaid-svg-hVG1EIn9OrAl5gxj .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-hVG1EIn9OrAl5gxj .rough-node .label text,#mermaid-svg-hVG1EIn9OrAl5gxj .node .label text,#mermaid-svg-hVG1EIn9OrAl5gxj .image-shape .label,#mermaid-svg-hVG1EIn9OrAl5gxj .icon-shape .label{text-anchor:middle;}#mermaid-svg-hVG1EIn9OrAl5gxj .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-hVG1EIn9OrAl5gxj .rough-node .label,#mermaid-svg-hVG1EIn9OrAl5gxj .node .label,#mermaid-svg-hVG1EIn9OrAl5gxj .image-shape .label,#mermaid-svg-hVG1EIn9OrAl5gxj .icon-shape .label{text-align:center;}#mermaid-svg-hVG1EIn9OrAl5gxj .node.clickable{cursor:pointer;}#mermaid-svg-hVG1EIn9OrAl5gxj .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-hVG1EIn9OrAl5gxj .arrowheadPath{fill:#333333;}#mermaid-svg-hVG1EIn9OrAl5gxj .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-hVG1EIn9OrAl5gxj .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-hVG1EIn9OrAl5gxj .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hVG1EIn9OrAl5gxj .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-hVG1EIn9OrAl5gxj .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hVG1EIn9OrAl5gxj .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-hVG1EIn9OrAl5gxj .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-hVG1EIn9OrAl5gxj .cluster text{fill:#333;}#mermaid-svg-hVG1EIn9OrAl5gxj .cluster span{color:#333;}#mermaid-svg-hVG1EIn9OrAl5gxj div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-hVG1EIn9OrAl5gxj .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-hVG1EIn9OrAl5gxj rect.text{fill:none;stroke-width:0;}#mermaid-svg-hVG1EIn9OrAl5gxj .icon-shape,#mermaid-svg-hVG1EIn9OrAl5gxj .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hVG1EIn9OrAl5gxj .icon-shape p,#mermaid-svg-hVG1EIn9OrAl5gxj .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-hVG1EIn9OrAl5gxj .icon-shape .label rect,#mermaid-svg-hVG1EIn9OrAl5gxj .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hVG1EIn9OrAl5gxj .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-hVG1EIn9OrAl5gxj .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-hVG1EIn9OrAl5gxj :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} RAGAS评估体系
检索质量
生成质量
整体性能
Faithfulness: 事实一致性
Answer Relevancy: 回答相关性
Context Precision: 上下文精准度
Answer Correctness: 回答正确性
Aspect Critique: 维度评价
Response Time: 响应时间
Cost Efficiency: 成本效率
评估逻辑:RAGAS最大的价值是"无需预置标注",通过LLM-as-Judge实现自动化评估。我们之前用人工标注,50万文档的知识库标注了3个月,结果上线一周就发现评估体系有问题。
Naive RAG vs Graph RAG对比
一句话结论:Graph RAG适合复杂场景,但成本高昂,需要权衡利弊。
| 维度 | Naive RAG | Graph RAG |
|---|---|---|
| 适用场景 | 单文档查询 | 多跳推理查询 |
| 准确率 | 61-75% | 85-95% |
| 构建成本 | 低 | 高(10-50倍) |
| 查询复杂度 | O(1) | O(n) |
| 典型案例 | 产品文档查询 | 跨部门业务流程分析 |
| 技术栈 | 向量数据库 | 知识图谱+向量数据库 |
#mermaid-svg-7TtnGb6ZY7JETers{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-7TtnGb6ZY7JETers .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-7TtnGb6ZY7JETers .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-7TtnGb6ZY7JETers .error-icon{fill:#552222;}#mermaid-svg-7TtnGb6ZY7JETers .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-7TtnGb6ZY7JETers .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-7TtnGb6ZY7JETers .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-7TtnGb6ZY7JETers .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-7TtnGb6ZY7JETers .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-7TtnGb6ZY7JETers .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-7TtnGb6ZY7JETers .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-7TtnGb6ZY7JETers .marker{fill:#333333;stroke:#333333;}#mermaid-svg-7TtnGb6ZY7JETers .marker.cross{stroke:#333333;}#mermaid-svg-7TtnGb6ZY7JETers svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-7TtnGb6ZY7JETers p{margin:0;}#mermaid-svg-7TtnGb6ZY7JETers .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-7TtnGb6ZY7JETers .cluster-label text{fill:#333;}#mermaid-svg-7TtnGb6ZY7JETers .cluster-label span{color:#333;}#mermaid-svg-7TtnGb6ZY7JETers .cluster-label span p{background-color:transparent;}#mermaid-svg-7TtnGb6ZY7JETers .label text,#mermaid-svg-7TtnGb6ZY7JETers span{fill:#333;color:#333;}#mermaid-svg-7TtnGb6ZY7JETers .node rect,#mermaid-svg-7TtnGb6ZY7JETers .node circle,#mermaid-svg-7TtnGb6ZY7JETers .node ellipse,#mermaid-svg-7TtnGb6ZY7JETers .node polygon,#mermaid-svg-7TtnGb6ZY7JETers .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-7TtnGb6ZY7JETers .rough-node .label text,#mermaid-svg-7TtnGb6ZY7JETers .node .label text,#mermaid-svg-7TtnGb6ZY7JETers .image-shape .label,#mermaid-svg-7TtnGb6ZY7JETers .icon-shape .label{text-anchor:middle;}#mermaid-svg-7TtnGb6ZY7JETers .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-7TtnGb6ZY7JETers .rough-node .label,#mermaid-svg-7TtnGb6ZY7JETers .node .label,#mermaid-svg-7TtnGb6ZY7JETers .image-shape .label,#mermaid-svg-7TtnGb6ZY7JETers .icon-shape .label{text-align:center;}#mermaid-svg-7TtnGb6ZY7JETers .node.clickable{cursor:pointer;}#mermaid-svg-7TtnGb6ZY7JETers .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-7TtnGb6ZY7JETers .arrowheadPath{fill:#333333;}#mermaid-svg-7TtnGb6ZY7JETers .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-7TtnGb6ZY7JETers .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-7TtnGb6ZY7JETers .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7TtnGb6ZY7JETers .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-7TtnGb6ZY7JETers .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7TtnGb6ZY7JETers .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-7TtnGb6ZY7JETers .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-7TtnGb6ZY7JETers .cluster text{fill:#333;}#mermaid-svg-7TtnGb6ZY7JETers .cluster span{color:#333;}#mermaid-svg-7TtnGb6ZY7JETers div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-7TtnGb6ZY7JETers .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-7TtnGb6ZY7JETers rect.text{fill:none;stroke-width:0;}#mermaid-svg-7TtnGb6ZY7JETers .icon-shape,#mermaid-svg-7TtnGb6ZY7JETers .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7TtnGb6ZY7JETers .icon-shape p,#mermaid-svg-7TtnGb6ZY7JETers .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-7TtnGb6ZY7JETers .icon-shape .label rect,#mermaid-svg-7TtnGb6ZY7JETers .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7TtnGb6ZY7JETers .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-7TtnGb6ZY7JETers .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-7TtnGb6ZY7JETers :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Naive RAG
直接向量检索
LLM生成
Graph RAG
实体识别
关系抽取
图谱构建
图谱检索
向量检索融合
LLM生成
选择策略:当查询需要跨多个文档进行推理时,Graph RAG确实能提升准确率,但你要考虑清楚:构建成本增加10-50倍是否值得。我们团队在金融项目中用过,效果很好,但运维成本高得吓人。
【源码深挖】
Spring AI ChatClient调用链
一句话结论:ChatClient只是表面,Spring AI 2.0的Advisor机制才是真正的核心。
java
// Spring AI 2.0.0 GA中的ChatClient核心实现
public class ChatClient {
// 核心调用方法 - JDK 21.0.12.1
public String call(String message) {
return prompt()
.user(message)
.call()
.content();
}
// 流式调用链 - Spring Boot 3.2.x
public Flux<ChatResponse> stream(Prompt prompt) {
return chatModel.stream(prompt)
.map(response -> new ChatResponse(
response.getResult().getOutput().getContent(),
response.getResult().getMetadata()
));
}
}
面试追问点:ChatClient的链式调用看起来像Builder模式,但这只是表象。真正厉害的是Spring AI 2.0的Advisor机制,它能像Spring AOP一样横切RAG的各个阶段,实现插件化的功能扩展。我们团队用这个机制实现了RAG的缓存、监控、重试等功能。
Embedding模型选型对比
一句话结论:Embedding模型选型直接影响RAG效果,需要谨慎权衡。
java
// OpenAI Embedding集成 - text-embedding-3-small
@Bean
public EmbeddingModel openAiEmbedding() {
return new OpenAiEmbeddingModel(
OpenAiApi.builder()
.apiKey(config.getApiKey())
.build(),
OpenAiEmbeddingModelOptions.builder()
.model("text-embedding-3-small")
.dimensions(1536)
.build()
);
}
// 本地Embedding集成 - BGE-small
@Bean
public EmbeddingModel localEmbedding() {
return new OnnxEmbeddingModel(
"BAAI/bge-small-en-v1.5",
new OnnxRuntimeOptions()
);
}
版本差异:新版本Embedding模型在性能和价格上有优势,但选择时要注意兼容性和迁移成本。我们团队从ada-002迁移到text-embedding-3-small,效果提升明显,但迁移过程很痛苦。
向量库路由机制
一句话结论:向量库的选择需要综合考虑性能、成本和运维复杂度。
java
// Milvus新版本向量检索实现
@Service
public class MilvusVectorService {
@Autowired
private MilvusClient milvusClient;
public List<VectorDocument> search(String query, int topK) {
// 查询向量构建
FloatArray queryVector = embeddingModel.embed(query);
// Milvus搜索 - JDK 21.0.12.1
SearchParam searchParam = SearchParam.newBuilder()
.withCollectionName("documents")
.withVectors(Collections.singletonList(queryVector))
.withTopK(topK)
.withMetricType(MetricType.L2)
.build();
SearchResult result = milvusClient.search(searchParam);
return convertToDocuments(result);
}
}
生产痛点:新版本Milvus在并发性能上有提升,但索引构建时间可能延长,需要采用合适的索引策略来平衡性能和成本。我们团队遇到过索引构建时间从小时级延长到天级的情况,差点导致项目延期。
【生产实战】
企业知识库RAG从0到1优化实录
一句话结论:生产级RAG优化不是一蹴而就的,需要系统性的问题定位和解决方案。
背景:某电商平台客服知识库,50万份文档(产品手册、FAQ、技术文档),日均查询量2万次,初始召回准确率61%。
现象:2026年3月15日,客服反馈"产品规格查询"类问题准确率骤降至45%,用户投诉率大幅上升,业务部门天天来催。
定位过程:
- 指标监控:Prometheus + Grafana监控显示,向量检索RT从50ms飙到800ms,用户等得直骂娘
- 日志分析:发现30%的查询返回"未找到相关文档",用户的问题根本得不到解答
- 数据排查:文档切分粒度不均,平均每文档12个chunk,最大chunk达256个token,语义完全断裂
- 压测复现:模拟高并发查询,Milvus连接池打满,CPU使用率95%,系统濒临崩溃
根因分析:
- 文档切分问题:采用固定512token切分,导致长文档上下文断裂。长文档被切分为大量小片段,严重破坏语义完整性
- 检索策略缺陷:纯向量检索无法处理时间关键词精确匹配,导致相关查询召回率显著下降
- 重排序缺失:缺乏重排序层,向量检索返回结果中相关比例较低,用户看到一堆无关内容
- 评估体系空白:没有建立自动化评估机制,无法及时发现系统性能下降,问题积累到爆发才处理
修复方案:
-
文档切分优化:
java// 结构感知切分 - Spring Boot 3.2.x @Service public class DocumentChunker { public List<DocumentChunk> smartChunk(Document document) { // 按章节切分 + 语义增强 List<DocumentChunk> chunks = new ArrayList<>(); // 1. 结构解析 DocumentStructure structure = parseStructure(document); // 2. 章节级切分 for (Chapter chapter : structure.getChapters()) { // 3. 语义段落切分 List<SemanticChunk> semanticChunks = semanticChunker.chunk( chapter.getContent(), 256, // token上限 0.3 // 重叠率 ); chunks.addAll(semanticChunks); } return chunks; } } -
混合检索架构:
yaml# application.yml - Spring Boot 3.2.x rag: retrieval: hybrid: enabled: true vector: model: text-embedding-3-small dimensions: 1536 bm25: index: elasticsearch fields: ["title", "content"] rerank: model: cross-encoder/ms-marco-MiniLM-L-6-v2 top-k: 20 -
评估体系搭建:
python# RAGAS评估脚本 - Python 3.11 from ragas import evaluate from ragas.metrics import faithfulness, answer_relevancy def evaluate_rag_system(): dataset = load_test_dataset() result = evaluate( dataset, metrics=[ faithfulness, answer_relevancy, context_precision, answer_correctness ], llm=evaluator_llm, embeddings=eval_embeddings ) return result
修复效果:
- 召回准确率:从61%提升到约89%,相关查询召回率显著提升,业务部门终于不催了
- 查询性能:RT从800ms降至120ms,P95响应时间从2.1s降至350ms,用户体验大幅改善
- 用户体验:用户投诉率大幅下降,客服满意度显著提升,客服团队终于能喘口气
- 系统容量:吞吐量提升约5倍,支持更大规模查询,为业务增长留足空间
- 成本优化:Token消耗降低约40%,运营成本显著下降,老板终于笑了
复盘总结:
- 技术选型权衡:混合检索比纯向量检索准确率有提升,但架构复杂度和维护成本也相应增加。需要根据业务场景选择合适的技术方案,不要盲目追新。
- 评估体系必要性:没有评估体系的RAG系统就像"盲人摸象",我们建立了包含技术指标、业务指标、成本指标的三维评估体系,实现了系统性能的实时监控和预警。
- 成本控制策略:新版本Milvus性能较好,但内存使用量可能增加。通过采用合适的索引策略和数据管理方法,将资源使用量控制在合理范围内。
- 监控体系建设:建立了基于Prometheus+Grafana的全链路监控,覆盖向量检索、重排序、LLM调用等各个环节,实现了从毫秒级到分钟级的多维度监控。
【追问链条】
追问1:RAG系统中的幻觉怎么解决?
候选人视角 :
幻觉是RAG系统的核心痛点,我采用三层防御策略:
- 检索层:通过混合检索+重排序确保相关文档的准确性,使用BM25处理精确匹配,向量检索处理语义匹配
- 提示层:在Prompt中明确要求"基于以下文档内容回答,不要编造信息",并给出回答格式约束
- 验证层:使用RAGAS的Faithfulness指标实时监控回答一致性,对幻觉回答进行标记和修正
- 反馈层:建立用户反馈机制,对错误的回答进行人工标注和模型微调
面试官视角 :
这题在筛"是否理解RAG的本质问题"。直接回答"用更好的模型"的候选人直接挂。优秀的候选人会提到具体的验证机制和监控指标。如果候选人能说出"幻觉分为事实性幻觉和逻辑性幻觉,需要不同策略",说明有深度思考。事实性幻觉可以通过检索增强解决,逻辑性幻觉需要改进推理链,这是区分高级和中级工程师的关键点。
追问2:Graph RAG和传统RAG的根本区别是什么?
候选人视角 :
根本区别在于推理能力:
- 传统RAG:基于向量相似度找最相关的文档片段,适合单文档查询
- Graph RAG:构建知识图谱,支持多跳推理,适合复杂业务场景
举个例子,问"某产品的售后流程涉及哪些部门",Graph RAG能通过图谱推理出"销售→技术→财务→物流"的完整链路,而传统RAG只能返回相关文档片段。
面试官视角 :
这题在筛"是否理解RAG的局限性"。候选人如果只说"Graph RAG加了图谱",说明只停留在表面。优秀的候选人能说出Graph RAG的构建成本和适用场景边界,说明有生产经验。如果候选人能说出"Graph RAG适合需要跨文档推理的复杂场景,但构建成本高昂",说明有实际项目经验。
追问3:RAG系统的评估指标怎么选择?为什么不用准确率?
候选人视角 :
评估指标必须分层设计:
- 技术指标:召回率、精确率、F1值、MRR(平均倒数排名)
- 业务指标:回答相关性、用户满意度、解决率、首次响应时间
- 成本指标:Token消耗、响应时间、系统吞吐量、单位查询成本
不用准确率的原因:
- 标注成本:准确率需要人工标注,生产环境不可行。大规模知识库的全量标注需要投入大量人力和时间
- 主观性:"正确答案"可能不唯一。不同人员对同一问题可能有不同的理解和判断标准
- 滞后性:人工标注无法实时反馈。系统性能问题时,人工标注需要较长时间才能发现问题
我们采用RAGAS的自动化评估体系,通过LLM-as-Judge实现无标注评估,同时建立A/B测试框架,确保评估结果的客观性和可复现性。
面试官视角 :
这题在筛"是否理解评估体系的复杂性"。候选人如果只说"用准确率",说明没有生产经验。优秀的候选人能说出"准确率在RAG中是伪命题",并解释为什么需要多维度评估体系。如果提到"评估指标需要和业务目标对齐",说明有架构思维。如果候选人能说出"技术指标是基础,业务指标是目标,成本指标是约束,三者需要平衡",说明有系统思维和成本意识。对于中高级岗位,我们期待候选人不仅会技术,还要理解业务和成本,这才是架构师的核心能力。
【总结延伸】
核心结论速记表
- RAG不是简单拼接:是系统工程,每个环节失误都会影响最终质量。文档切分、检索策略、重排序、评估体系缺一不可。
- 切分策略决定上限:结构感知+语义增强的混合策略最佳。固定长度切分会导致上下文断裂,纯语义切分会造成检索粒度不均。
- 混合检索是必选项:纯向量检索无法处理精确匹配需求。BM25处理关键词精确匹配,向量检索处理语义相似度,两者结合效果最佳。
- 评估体系要闭环:技术指标+业务指标+成本指标三位一体。技术指标是基础,业务指标是目标,成本指标是约束,三者需要平衡。
- Graph RAG有适用边界:多跳推理场景准确率有显著提升,但构建成本也大幅增加。适合复杂业务场景,需要权衡构建成本和查询复杂度。
- 版本选择要谨慎:新版本Embedding模型在性能和价格上有优势,但选择时要注意兼容性和迁移成本。
- 监控不可或缺:Prometheus+Grafana监控RT、准确率、错误率等关键指标。建立从毫秒级到分钟级的多维度监控体系。
- 成本优化是关键:高性能向量数据库资源消耗较大,需要合理规划资源。通过合适的索引策略和数据管理方法控制成本。
- 幻觉治理需要分层:事实性幻觉通过检索增强解决,逻辑性幻觉需要改进推理链。建立三层防御策略:检索层、提示层、验证层。
- 自动化评估是趋势:RAGAS通过LLM-as-Judge实现无标注评估,解决了传统人工标注成本高、覆盖面窄的痛点。
延伸阅读
-
官方文档:
-
技术论文:
- 《From Local to Global: A Graph RAG Approach to Query-Focused Summarization》- Microsoft Research
- 《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》- Facebook AI
-
最佳实践:
上一篇:【JAVA 高级进阶17篇《Spring AI核心原理:90%候选人答不全的底层机制》】
下一篇:【JAVA 高级进阶19篇《系统设计题万能套路:从短链到IM的四步拆解法》】
如果这篇对你有帮助,欢迎点赞+关注,专栏持续更新。