Spring AI 实战 RAG:公司制度问答为何答不上报销标准?

资讯 AI 应用前沿 全文 5039 字 · 约 13 分钟读完 分类数据泄露

企业知识库问答常面临模型不懂内部制度、幻觉严重及数据泄露风险。本文基于 Spring AI 2.0 详解 RAG 全链路落地方案,涵盖文档结构化解析、分块策略优化、pgvector/Redis 向量库选型、中文场景必需的混合检索及重排序机制。重点阐述为何权限过滤必须在检索层而非提示词层实现,并提供可追溯引用回传与分离式

所属频道 政策与风险

为什么大模型答不上来公司的报销标准

不少团队把大模型接进来,头一周就碰上同一件尴尬事:业务同事满怀期待地问“出差住宿标准是多少”,模型要么绕开话题,要么给出一个看着像样、实则完全错误的数字。

问题不在模型笨。它的知识只到训练数据为止。公司内部制度、最新产品参数、历史工单,这些从来不在训练集里,本来也不该进去。

想让模型掌握“你自己的知识”,工程上有三条常见路径:微调(Fine-tuning)、把长上下文全塞进去、以及检索增强生成(RAG)。

微调经常被当成灌知识的手段,其实不是。它调的是模型的“行为倾向”和“语气风格”,让它说话更像你的员工;但要让模型准确记住并复述一条具体事实——还是随时会变的那种——很难。制度一改,就得重新训练,花钱多,还慢半拍。

长上下文全塞听着省事,把所有文档一股脑丢进提示词就行。可它有三个硬伤:每次请求都按全部 Token 计费,成本高得离谱;上下文一长,模型对中间内容的注意力被摊薄,关键信息容易漏;输入越长,首字生成延迟越大。

RAG 是眼下性价比最高的做法。文档先切块存进向量库,提问时只把最相关的几段捞出来交给模型。改文档就能同步生效,实时;每次只付少量 Token 的钱;每段回答还能追到原文出处。企业场景里,“能告诉用户答案在第几页”往往比单纯把准确率往上提更值钱——业务人员可以自己核验。

RAG 的核心逻辑与几个常见误区

道理不复杂:先检索,再生成。可真到工程落地,它拆开是四个独立环节,每个环节都有自己的失败方式。

头一个是查询处理。用户口语里问“怎么报销”,文档写的是“费用核销流程”,语义匹配就可能对不上。

接下来是检索。这一步决定 RAG 效果的天花板。检索没召回对的文档,或者召回了用户无权看的文档,后面做得再漂亮也白搭。

然后是重排与筛选。原始检索结果里可能混着噪声,得靠重排序模型(Rerank)或阈值截断来提纯。

最后才到生成。模型必须严格照着给的片段回答,不能自己编。

调试 RAG 时,很多开发者习惯直接改提示词,比如加重语气写上“请严格根据资料回答”。可检索回来的片段本身就不对,改提示词没用。排查该按“分段验证”来:先把检索出的片段打印出来看。片段里没答案,问题在检索侧(解析、分块、嵌入模型);片段里有答案而模型没用上,才轮到生成侧。

有一条判断准则值得记住:RAG 的效果八成看检索,模型只管表达。检索不到的东西,换更强的生成模型也救不回来。

核心组件怎么选、策略怎么定

Embedding:把语义变成坐标

Embedding 做的事,是把文本映射成多维空间里的向量坐标,语义越近,坐标距离越短。选型要看三点:

第一,不同模型的向量空间互不兼容。换嵌入模型,就得全量重新嵌入,这是一次性的高成本动作,选之前想清楚。

第二,相似度阈值比 Top-K 更关键。用户问的东西知识库里压根没有,检索照样会返回“最接近”的几条无关内容。把阈值设合理,系统拿不准时就老实说“不知道”,比硬编一个答案安全。

第三,中文语料得实测。各家模型对中文专业术语、缩写的理解差得不小。拿 30-50 条真实问句搭个小测试集,对比候选模型的召回表现。

分块(Chunking):最容易被低估的一环

文档太长,没法整体向量化,只能切开。怎么切,直接左右检索精度。

建议从“按结构切分 + 定长兜底”起步。先用文档原有的标题层级切,块内语义能保完整。碰上过长的章节,再按固定长度切,并设重叠(Overlap),免得答案被拦腰截断。

难点落在表格上。整张表要是按行切开,表头和数据就分了家,模型看不懂那些数值代表什么。可行的做法是让整张表当一个块,块首再补一句由模型写出的“表意摘要”,把这张表讲的是什么交代清楚。

每个块都得带上元数据:来源文件、页码、章节路径、文档版本,还有权限标签。后面做过滤、做引用回传,靠的就是这些东西。

向量库选型:复用现有设施

选型就一条:先看手里已经有什么。

团队要是在用 PostgreSQL,优先上 pgvector 扩展。元数据过滤和向量检索能放进同一条 SQL 里跑完,事务和备份这套体系也成熟,百万级以下的数据量够用。

已经在用 Redis、又对延迟敏感的话,Redis 的向量搜索功能可以选,不过内存成本得先算一算。

在用的若是 Elasticsearch,又需要较强的混合检索能力,ES 就是顺理成章的选择,代价是向量性能比专用库稍差一些。

数据量到了千万级,或者对向量性能有极高要求,这时候才值得引入 Milvus 这类专用向量数据库。选型时要重点验证它对“带过滤条件的向量检索”支持得怎么样,这直接决定权限控制好不好做。

混合检索:中文场景的必需品

纯向量检索对精确字符串不敏感。用户要找文档编号“XX-2026-003”,或者搜某个具体产品型号,向量检索常常失灵,原因是这类字符串本身没什么语义特征。

混合检索的做法是把两路合起来:向量检索管语义,关键词检索(比如 BM25)管精确匹配。两路召回之后不能直接相加,因为分数体系不一样,一边是余弦相似度,一边是 BM25 分数。较稳妥的做法是先把两路候选合并去重,再交给重排序模型(Rerank)统一打分排序。

Rerank 会多一次模型调用的延迟,但在“召回多、排序差”的场景里,准确率提升明显。它只在少量候选集里精挑细选,性价比高。

工程落地:从入库到问答

文档解析与入库

RAG 里“垃圾进,垃圾出”这句话体现得最直接。PDF 双栏排版一乱、扫描件没有文本层、Excel 表格被拍平,后面每个环节都会跟着失效。

解析要按类型分别处理:文字版 PDF 得纠正行序,把页眉页脚剔掉;扫描件必须过 OCR,还要抽查错误率;Word 文档要保留标题层级,方便后面分块。

入库代码示例如下:

@Service
public class KbIngestService {
    private final VectorStore vectorStore;
    private final TokenTextSplitter splitter;
    public void ingest(KbDoc doc, List<KbSection> sections) {
        List<Document> docs = new ArrayList<>();
        for (KbSection s : sections) {
            // 结构切分后,过长部分再定长切分
            List<String> pieces = s.text().length() > 800
                    ? splitter.split(s.text())
                    : List.of(s.text());
            for (int i = 0; i < pieces.size(); i++) {
                docs.add(new Document(pieces.get(i), Map.of(
                        "doc_id", doc.id(),
                        "chunk_no", i,
                        "source_name", doc.fileName(),
                        "page_from", s.pageFrom(),
                        "section_path", s.path(),
                        "doc_version", doc.version(),
                        "acl_tags", String.join(",", doc.aclTags()) // 权限标签
                )));
            }
        }
        vectorStore.add(docs); // 批量写入
    }
}

元数据要在入库时就打全,尤其是acl_tags权限标签,这是后续安全过滤的物理基础。

检索与权限控制

检索代码里要把权限过滤表达式显式写进去:

public List<Document> search(String question, UserCtx user) {
    SearchRequest req = SearchRequest.builder()
            .query(question)
            .topK(20) // 多取候选,供后续重排
            .similarityThreshold(0.45) // 阈值标定
            .filterExpression("acl_tags in [" + user.aclTagExpr() + "]") // 检索层过滤
            .build();
    return vectorStore.similaritySearch(req);
}

权限过滤必须在检索层完成,绝不能指望提示词。要是在提示词里让模型“不要回答无权查看的内容”,敏感数据其实已经进了提示词上下文,可能落到日志、调试信息或链路追踪里,数据照样泄露。这就像先把机密文件交给外人,再叮嘱他保密,逻辑上讲不通。

另外,过滤表达式要同时用在向量检索和关键词检索两路上,否则有人走关键词搜索就能绕开权限控制。

提示词约束与引用回传

系统提示词里得放进三条硬性约束。

  1. 回答只能以给定的资料片段为依据,片段里没有的就直接拒答。
  2. 每条结论都要标明来源编号,比如 [1]。
  3. 几个片段说法打架时,要点明冲突,不能自己挑一个。

前端展示的引用编号,必须和注入模型的片段顺序一一对上,回传引用时这一点不能含糊。代码如下:

private List<Citation> toCitations(List<Document> docs) {
    List<Citation> list = new ArrayList<>();
    for (int i = 0; i < docs.size(); i++) {
        Document d = docs.get(i);
        list.add(new Citation(
                "[" + (i + 1) + "]",
                (String) d.getMetadata().get("source_name"),
                (Integer) d.getMetadata().get("page_from"),
                (String) d.getMetadata().get("section_path"),
                abbreviate(d.getText(), 120)
        ));
    }
    return list;
}

评估与运维

分离式评估指标

测 RAG 的时候,“检索命中率”和“答案正确率”要拆开来看。

  • 检索命中率看的是正确文档有没有进 Top-K,它反映分块、嵌入模型和检索策略的效果。
  • 答案正确率看生成结果准不准、引用对不对,反映的是提示词和模型能力。
  • 越权率必须为 0,测试办法是构造低权限用户去查高权限文档。
  • 拒答正确率,指的是碰上没有答案的问题,系统能不能正确拒答。

命中率高、答案正确率低,就去调提示词;命中率本身就低,那就回头优化分块和检索策略。

文档更新与版本管理

文档更新时,应按doc_id旧版本的所有块先删干净,再入库新版本,免得新旧版本并存起冲突。文档系统清单和向量库数据要定期比对,把“孤儿块”清掉,否则已删除的文档还能被检索到。

成本控制

RAG 的成本大头在生成阶段的输入 Token。可优化的地方有几处:注入片段数量收着点(比如用 Top-3 而不是 Top-10),每段长度做限制,简单问题分流给低价模型。检索和嵌入的成本相对固定,不是主要优化点。

总结

做企业级 RAG 系统,关键不在堆最先进的模型,而在工程细节扎不扎实。文档解析的质量、分块策略、混合检索的实现,再加上检索层严格的权限控制,这几样合起来决定系统的可用性和安全性。

五个核心判断要记住:

  1. 检索决定上限,生成只决定表达。
  2. 相似度阈值比 Top-K 更重要,要敢于拒答。
  3. 中文场景离不开混合检索,专有名词匹配的问题靠它解决。
  4. 权限过滤必须做在检索层,提示词靠不住。
  5. 文档解析是隐性的天花板,上线前务必抽样验证。

靠分离式评估加线上反馈闭环,检索策略持续迭代,RAG 系统才能真正服务业务,成为可靠的知识助手。

本文由本站编辑组整理与排版,内容基于公开信息核实后归纳发布,与文中提及的产品、公司无隶属关系。我们持续跟踪 AI 领域的模型、产品与行业动态,力求信息准确、表述清晰;文中涉及的名称、价格与功能细节可能随官方调整而变化,请以官方最新说明为准。如发现疏漏或表述有误,欢迎通过站内渠道反馈指正。

相关推荐 按相关度与热度排序

全部资讯 →
  1. Spring AI 搭配 Ollama 内网部署:三档合规边界与显存账

    针对政企金融等数据不出内网的场景,详解 Spring AI 接入 Ollama 的全流程。文章拆解了三档合规边界,重点分析了显存预算中 KV Cache 的隐形成本,指出了 Ollama 默认无鉴权的安全红线,并提供了从云端迁移到本地的代码零改造方案及提示词降维适配策略。

    来源 AI 应用前沿
  2. AI一小时挖穿十年老雷?PHP惊天漏洞吓醒全球网站运维

    据 公开统计数据,全球使用PHP语言的网站占比近70%,这也意味着全球7成的网站受到影响。PHP的这个惊天漏洞,真可谓把全球运维吓醒,连夜挑灯夜战。一次被AI加速、被泄露打乱的披露这次PHP安全漏洞发现和披露过程,与传统安全事件截然不同。

    来源 TechWeb
  3. OpenAI与Anthropic同天自曝:AI模型测试中越狱,停训11天

    前不久,全球网络安全界经历了最暗黑的48小时。 大量AI智能体入侵美国银行,PHP漏洞导致大量国家政府网站关闭,用户数据泄露……不仅如此,黑客还在发动一轮又一轮的攻击! 这48小时内发生的重大网络安全事件,比任何时候都要多。 国家级安全专家、Gladstone CEO表示:至少在一段时间内,互联网可能会不复存在。 而且

    来源 AI 行业观察
  4. PS5高危漏洞被AI挖出,索尼付5万美元赏金

    IGN 披露了一起颇具象征意味的安全事件:一名 PS5 改装爱好者借助生成式 AI,挖出了主机的一个高危漏洞,并通过索尼的安全上报渠道领走 5 万美元(约 33.4 万元人民币)赏金。 这个被提交的漏洞,原本能用来在 PS5 上直接运行 Linux 系统。在乔迪(Jordy)出手前,其实已另有一位安全工程师先发现它,并

    来源 AI 开发者社区
  5. 黑客借AI挖出PS5高危漏洞,索尼按安全上报计划付了5万美元

    IT之家 10 月 27 日消息,近期出现了不少针对 PS5 的破解尝试。得益于生成式 AI,PS5 游戏在 PC 端的模拟器开发进度推进得很快。现在还有一名黑客借助 AI 找到了一个 PS5 漏洞,并通过索尼的安全上报计划拿到了一笔高额奖金。根据 IGN 的报道,该漏洞通过索尼的安全披露渠道提交之后,索尼兑现了奖金。

    来源 腾讯网
  6. 网友称AI几分钟还原马赛克二维码,实测揭开"假马赛克"陷阱

    近日有网友发帖称:一张打了整体模糊马赛克的二维码,几分钟就被 AI 完整复原并直接扫出内容。对方还特意提醒,给二维码做遮挡时,别用那些支持可逆运算的打码方式。 帖子一出便两极分化:有人担心这类技术会放大隐私泄露风险,也有人怀疑"AI 还原马赛克二维码"到底靠不靠谱。眼下各家社交平台与修图软件提供的马赛克花样繁多,其中最

    来源 AI 开发者社区
  7. AI生成内容风险与管控:企业合规和治理怎么做

    AI生成内容在带来效率的同时,也带来了数据泄露、算法偏见、合规缺失等风险。本文从实际案例出发,梳理了当前国内外的法规框架,包括网络安全法、数据安全法、个保法以及欧盟AI法案等,并给出了企业可以落地的治理框架和检查清单。文章还对比了成功与失败的实践案例,指出安全合规不是创新的障碍,而是保障。对于中小企业,也提供了轻量化的

    来源 AI 应用前沿
  8. Anthropic遭AI智能体攻破:12小时打穿防线,薪酬与Slack消息全曝光

    就在刚刚,Anthropic被攻破了! 「用AI攻击AI」的自动化黑客时代,已经彻底降临。 短短12个小时,AI巨头Anthropic的防线被AI智能体撕得粉碎。 薪酬数据、录用详情、内部会议实录,甚至包含讨论最先进AI模型机密的Slack内部消息,全部暴露在入侵者的视野之下。 这不仅是Anthropic的「社死」瞬间

    来源 AI 行业观察
  9. Spring AI 2.0对接智谱GLM:零源码读文档搭出问答客服

    这是一份面向自学者的 Spring AI 2.0 实战教程,基于智谱 GLM 系列模型,覆盖从项目创建、基础对话、流式输出、结构化输出、对话记忆、函数调用,到多模态视觉、文生图、文生视频、文本向量化、RAG 检索增强,最后整合成一个北邮智能问答客服。教程采用零跳跃设计,每一步只依赖前面已讲的知识,并提供了完整的代码示例

    来源 AI 应用前沿
  10. AI全流程院线片《三星堆:未来往事》上映,基层演员被推到斩杀线下

    2026年10月23日,注定是中国影视行业一个值得被记住的节点。 这一天,国内首部获得国家电影局公映许可证的AI全流程院线长片《三星堆:未来往事》正式登陆全国影院,100分钟的超写实影像里,所有角色均为原创数字形象,没有一位真人演员出镜。 同样是在这天,国务院办公厅印发的《关于适应人工智能技术发展助力构建就业友好型发展

    来源 AI 行业观察
  11. Agnes黑客松收官:536支高校团队用AI做科研,20强项目覆盖材料到芯片

    AI当上了实验员。光学实验中,目标功率计的读数突然下降,原因可能是光路偏移、光源变弱,也可能是仪表读数出现偏差。有经验的实验员不会马上去调反射镜,而是先通过几次测量排查原因,再决定下一步怎么做。在东南大学团队开发的BeamLab中,完成这些判断的是一个AI智能体。它运行在数值模拟的光学台架上,根据实时读数决定...

    来源 腾讯网
  12. 联想AI主机Mini,2999元切入私有化AI部署

    对于法律、财务或医疗等对数据合规有着严格要求的行业来说,公有云AI虽然方便,但数据离开本地网络带来的泄露风险始终是一把悬顶之剑。在推进数字化转型的过程中,如何既能享受大模型带来的效率

    来源 快科技
  13. AI洗劫400家银行系夸大,CyberCartel攻击真相曝光

    快科技10月26日消息,近日,一则“黑客借助AI洗劫400家银行”的消息在网络广泛传播,不少解读渲染全球金融系统遭遇重大崩盘,引发储户恐慌。 据悉,涉事黑客组织名叫CyberCartel,从

    来源 快科技
  14. AI 智能体疯狂入侵人类系统:十几起漏洞依次排开,AI真正攻破了哪一层?

    最近不到一个月,十几起安全事件相继被曝出。这些事件分属不同的攻击面,证书机构的私钥、托管平台的环境变量、包管理器的发版通道,还有编程语言运行时本身。涉事的公司和技术栈互不相干,也没有任何一份通报把它们归到同一个攻击者名下。密度之外,还有一个变化:从漏洞被找到,到它被大规模利用,中间只剩几个小时。10 ...

    来源 腾讯网
  15. 前沿AI实验室撞上商业天花板:一代模型优势撑不起千亿营收

    神译局是36氪旗下编译团队,关注科技、商业、职场、生活等领域,重点介绍国外的新技术、新观点、新风向。 编者按:两代模型的代差撑不起千亿营收的野心。当AI神话撞上商业重力,前沿实验室正沦为利润微薄的云厂商。文章来自编译。 前沿实验室正呼吁放缓前沿探索的步伐。他们对此深信不疑,而在目睹各大厂商的模型屡次黑入外部网站之后,这

    来源 AI 行业观察
  16. 医疗AI诊断为何难独立成生意:212张注册证与三道商业化闸门

    过去28个月,市场对“医疗AI诊断”热门股完成一轮完整的压力测试:Tempus自历史高点回撤约35%;估值大幅回撤引发我们再审视“医疗AI诊断”的现实商业卡点。 本文基于2020年初至2026年9月国内公开披露的212张AI相关医疗器械注册证,以及政策原文,沿“产品化—注册证—价格立项”三道商业化闸门,逐层解析AI诊断

    来源 AI 行业观察
  17. OpenAI、Anthropic:AI风险披露被FTC查什么?

    据Ars Technica报道,美国联邦贸易委员会(FTC)正对OpenAI与Anthropic展开调查,焦点不在模型能力本身,而在两家公司是否在AI风险披露上误导了公众与监管方。报道称,一旦认定违规,罚款量级可能与延迟上报数据泄露事件的企业相当——这意味着AI风险信息本身,正在被纳入消费者保护的法律框架。

    来源 AI 科技快讯
  18. 马克·库班谈AI安全:防失控智能体如防蟑螂,可用AI“喷药”

    IT之家 10 月 24 日消息,对于 AI 时代的网络安全问题,亿万富翁、企业家兼投资人马克 · 库班提出了一套颇有意思的“灭虫”思路。 据《商业内幕》今天(24 日)报道,库班将大量 AI 智能体发动的网络攻击比作蟑螂入侵:即使房屋刚刚喷过杀虫剂,蟑螂仍能找到钻进去的办法。“我经常问网络安全专家,听到各种黑客攻击、

    来源 AI 行业观察
向下滚动自动加载更多