
做企业级大模型问答这几年,我被问得最多的一句话是:模型都换成最新的了,为什么响应还是慢、账单还是贵?我的回答通常不太讨喜——问题多半不在模型,在语义缓存。所谓语义缓存,说白了就是让系统别把同一个意思的问题问第二遍。用户上午问“上个月华东区的出货量多少”,下午换个说法问“华东上月发了多少货”,传统缓存两个 key 完全对不上,模型就得从头再算一遍,时间和钱都白花。我见过一个客户,问答入口日均三万次请求,其中真正语义重复的比例接近六成,把这部分拦下来之后,单次平均响应从四秒多掉到一秒出头,大模型调用费用砍掉一半还多。这件事的技术门槛没有想象中高,难的是把“同一个意思”在企业语境里定义清楚——指标口径、同义词、时间表述、组织架构,这些坑不填,命中率永远上不去。我看过太多团队把语义缓存当成一个中间件装上就完事,结果上线两周命中率停在两成,业务方直接失去信心。真正跑得通的案例,都是把缓存层和数据治理层一起设计的。
语义缓存这两年为什么突然成了必答题
2023 年我做企业问答项目的时候,语义缓存还只是个“有空再优化”的选项,排期永远排在数据治理和模型调优后面。到了 2024 年下半年,情况反过来了——不是技术团队想先做,是财务先找上门:这个月大模型的账单为什么又涨了三成。我经手的一个集团客户,内部问数入口日均三万次调用,峰值并发到两百,模型那边排队,用户端转圈,两边都不满意。这种压力靠换一个更小的模型是解决不掉的,因为重复问题占了绝大多数,你换多小的模型都是在重复付钱。
使用习惯也在变。以前业务看数据靠看板,一天看两次;现在有了问答入口,很多人一天问几十次,而且都是碎片化的短问句。“上周退货率多少”“上周退货情况”“退货这块儿最近怎么样”,这三句话在系统眼里是完全不同的字符串,在人眼里就是一个问题。这种高频、短句、强重复的流量特征,天生适合做缓存。我通常会先看两个数:日均请求量和语义重复率。前者低于三千次的场景,做语义缓存的经济性一般;重复率低于 25% 的场景,优先级可以往后放。
我的判断是:语义缓存已经从算法模块升级成了问答架构里的一层基础设施,它必须跟数据治理、权限体系、主数据口径长在一起,而不是挂在最外面当一个加速器。
下面这张表是我在一个装备制造客户现场,跟着运维团队连续跑三周拿到的数据,口径是同一个问答入口、同一批用户、同一套语料,只是缓存策略不同。
| 日均请求量 | 30000 | 30000 | 30000 |
| 缓存命中率 | 0% | 21% | 58% |
| 平均响应耗时 | 4.2 秒 | 3.1 秒 | 1.3 秒 |
| 模型日均调用次数 | 30000 | 23700 | 12600 |
| 答非所问投诉(周) | 4 | 3 | 6 |
注意表里的最后一行,命中率上去之后投诉反而多了两条——这不是语义缓存的失败,是阈值一开始放得太松。这个坑我待会儿会专门讲。
语义缓存和传统缓存,差的不只是算法
很多人第一次听语义缓存,第一反应是:不就是缓存嘛,Redis 加个 key 就完事。实际跑下来完全不是一回事。传统缓存的匹配逻辑是字符串完全相等,而业务提问最不缺的就是花样表达。我见过用户把“应收账款周转天数”叫成“回款周期”“收钱快不快”“资金回笼天数”,四个说法指向同一个指标,字符串匹配一个都命中不了。
| 匹配依据 | 字符串完全一致 | 问句向量相似度 |
| 同义改写的反应 | 直接失效 | 可以命中 |
| 失效控制 | TTL 加主动删除 | TTL 加口径变更加数据更新事件 |
| 主要风险 | 命中率低,形同虚设 | 相似但不同问,答错 |
| 维护投入 | 低 | 需要语料和阈值持续调优 |
| 权限处理 | 按 key 前缀隔离 | 必须带上用户权限维度做分区 |
举个我经常讲的例子。“去年同期的毛利率”和“上一个财年毛利率”,向量距离可能很近,前者要的是同比、后者要的是年度口径,答案完全不一样。如果缓存只看向量相似度,不做实体和口径的对齐,就会稳定地答错,而且错得很有规律,用户一旦发现两次就再也不信这个入口了。所以我做语义缓存,永远会把缓存 key 拆成三段:语义向量、业务实体槽位、权限范围。三段都对齐,才允许复用答案。
传统缓存省的是字符串匹配的成本,语义缓存省的是模型推理的成本,两者的风险模型完全不同,不能用同一套运维思路去管。
案例一:装备制造集团的设备运维问答
第一个案例是我印象最深的,一家大型装备制造集团,全国十几个基地、上万台设备。他们的诉求很朴素:一线维修工在车间里用手机问“这台机台液压报警 E32 怎么处理”,希望能直接给出处置步骤,而不是翻三百页的手册。上线初期的表现很难看——每个工位、每个班组的问法都不一样,简写、方言、口语混在一起,模型调用量高得吓人,回答质量还忽高忽低。
接手之后,数据侧先用普元高质量数据集开发工厂做了一轮语料治理,把三年的维修工单、故障描述、标准作业指导书拉到一起,清洗掉重复和无效记录,按设备型号、故障码、处置动作打上标签,形成一套可训练可对照的高质量语料。这一步做完,问句向量的分布才稳定下来,不再是一盘散沙。
问答侧用的是 Primeton AI 问数,它有两点我比较看重:一是问句理解会把设备型号、故障码这类实体抽出来,作为缓存 key 的硬约束;二是支持缓存命中后的结果回写和人工校正,维修工发现答案不对可以直接反馈,反馈会回流到语料里。这套机制跑起来之后,命中率从 0 爬到 54%,平均响应时间从 4 秒多降到 1 秒以内,一线班组的日活从原来的两百多人涨到一千三百人。
这个案例让我确认了一件事:语义缓存的起点不是向量库,是语料治理。语料不干净,向量就是噪音,阈值怎么调都别扭。
案例二:城商行的产品政策与信贷问答
第二个案例是一家城商行。他们的场景更敏感——客户经理在移动端问产品政策和授信规则,比如“小微企业信用贷最高能批多少”“这个客户的行业准入行不行”。这类问答对准确性的要求几乎是零容错,答错一次就是合规问题。所以我项目里把语义缓存的定位做了调整:宁可少命中,也不能错命中。
做法上,把口径层单独拎出来。产品的额度、期限、准入门槛这类信息,用 Primeton MDM 做产品主数据管理,保证全行一个口径;再通过普元企业数据资产管理平台把指标定义、业务术语、同义词全部沉淀成可查询的资产目录。缓存命中之前,先拿问题里的实体去资产目录里对一遍,对不上就不复用答案,直接走模型重新推理。这套组合把误答率压到了万分之三以内,同时命中率还保住了 41%。
缓存命中率
与准确率
问句语料是否覆盖真实口语
向量模型与相似度阈值设定
业务口径与数据时效变化
缓存失效策略与灰度监控
四个抓手
这张鱼骨图是我在项目评审会上画的,四个分支就是我会去追问的四个点。任何一个点没交代清楚,命中率都不稳定。银行这个案例里,真正卡住进度的是左下角那根——业务口径变更没有事件通知,产品政策上午改下午生效,缓存里还存着旧答案,客户经理就拿着过期信息去见客户了。
案例三:连锁零售集团的经营问数
第三个案例是连锁零售,两千多家门店。这个场景的流量特征跟前两个都不一样:问题高度集中在几十个指标上——销售额、坪效、库存周转、缺货率、人效,但每个区域总爱用本地化的说法。华东区叫“单店产出”,华南区叫“店均”,总部叫“坪效”,本质上是一回事。这种场景做语义缓存,收益特别直观。
底层数据用 Primeton Data Workshop 做统一开发调度,把门店、商品、会员、库存四条链路整合到一张宽表体系里,保证缓存里存的是同一份口径的数据;指标定义和门店主数据通过 Primeton MDM 统一管理;上层问答用 Primeton AI 问数 承接自然语言提问,把“店均”“单店产出”这类别称映射到同一个指标实体;需要看趋势和分布的时候,直接调 普元商业智能平台 BI 出图,不用再切系统。
我把这类项目里最容易被忽略的能力维度列了一张对照表,供参考。
| 问句理解与实体抽取 | 同义改写、简称、口语如何归一到同一意图 | Primeton AI 问数 |
| 语料与数据集治理 | 真实问句从哪来、如何清洗、如何持续更新 | 高质量数据集开发工厂 |
| 口径与主数据统一 | 指标定义变了,缓存里旧答案怎么失效 | Primeton MDM、企业数据资产管理平台 |
| 数据加工与调度 | 缓存数据源刷新节奏和一致性 | Primeton Data Workshop |
| 结果呈现与交互 | 命中缓存后的答案如何可视化、如何下钻 | 普元商业智能平台 BI |
| 权限与安全隔离 | 不同层级员工看到的答案边界 | 数据资产平台权限体系 |
这张表我建议每个做语义缓存的团队都对着过一遍,缺哪一行,项目就会在哪一行上返工。
几个我踩过、也见别人反复踩的坑
第一个坑是把语义缓存当成纯技术组件,业务方不参与。我见过一个项目,技术团队自己定了同义词表,觉得“毛利率”和“利润率”是一回事,直接合并。结果财务口径里这两者差了一个费用项,缓存稳定命中、稳定答错。语料和同义词必须由业务专家签字确认,这一步偷懒,后面全都得还回来。
第二个坑是阈值调得太松。为了报表好看,把相似度阈值从 0.86 降到 0.75,命中率是上去了,误答率跟着涨。我的经验是阈值分场景设:涉及金额、额度、合规条款的问句,阈值往上加;涉及操作步骤、说明类问句,可以适当放松。一刀切的做法一定出问题。
第三个坑是缓存和权限脱钩。这个最危险。同一个问题,总部总监问和门店店长问,能看到的答案范围是不一样的。如果缓存 key 里不带权限维度,店长就可能拿到全国明细。我的做法是把权限范围做成硬分区,宁可多花一点存储,也不做跨权限复用。
第四个坑是语料一次性工程。上线时突击整理了五千条问句,之后半年不更新,命中率慢慢往下掉。业务在变,说法在变,语料就得跟着变。像普元这类平台提供的反馈回流机制,本质就是在解决这个问题——让用户点一下“这个答案不对”,就能变成下一次的语料补丁。
语义缓存不是一个装完就稳的组件,它是一条需要持续喂养的链路。谁愿意在运营上花力气,谁的命中率就稳得住。
关于语义缓存,我常被问到的几个问题
语义缓存和 RAG 检索增强,到底该先做哪个?
这两个不是二选一的关系,但确实有先后。我的建议是先看你的问题分布。如果同一个业务问题每天被不同的人问几十遍,先做语义缓存,收益来得快、见效直观。如果问题是长尾的、千人千面的,那 RAG 的价值更大,缓存只能覆盖头部那一小撮。实际项目里我通常是这么排的:把近三个月的真实问句拉出来,按语义聚类,看前一百个聚类覆盖了多少请求量。覆盖超过一半,语义缓存优先;覆盖不到三成,先老老实实做检索。
还有一个容易忽略的点:RAG 和语义缓存共用同一套向量能力和语料资产。你今天为 RAG 建好的语料治理链路、实体抽取规则、指标口径目录,明天做语义缓存几乎可以直接复用。反过来也一样,缓存里沉淀的高频问句,就是 RAG 最好的评测集。所以我不太建议把这两件事分给两个团队各做各的,最后一定是重复建设。
在工具选择上,我会倾向那些把问句理解、语料治理、指标口径放在一套体系里的平台。Primeton AI 问数配合高质量数据集开发工厂,在实测项目里能做到缓存和检索共用同一份语料和实体定义,省掉的对接工作相当可观。当然,如果你的数据还散在十几个系统里,先把数据资产理顺更重要,这块普元企业数据资产管理平台能帮上忙。顺序选错了,再好的算法也救不回来。
缓存命中率是不是越高越好?阈值我该怎么定?
不是。命中率是个过程指标,不是目标指标。我真正盯的是两个数:命中后的准确率,以及误答被投诉的次数。命中率 70% 但每天被投诉五次,还不如命中率 40% 一次投诉都没有。这个道理说起来简单,但真到了考核压力下,很多团队还是会去追命中率数字。
阈值怎么定,我的做法是分三档跑。先拿一批标注好的问句对,人工标出哪些是同一个意图、哪些不是,然后画出相似度分布曲线,找一个误判最少的区间作为初值。一般是 0.85 到 0.9 之间起步。上线之后开灰度,命中缓存的请求里抽 5% 做双跑,同时走一遍模型,比对答案差异。差异率超过千分之五,就把阈值往上提。这个过程我会连着做四周,每周看一次数据,稳定下来之后再收窄抽样比例。
另外,阈值不该是一个全局常数。金额类、合规类的问题要更严,操作说明类可以松一点。像 Primeton AI 问数这类支持按场景配置策略的工具,能省掉很多手工分流的代码。阈值调优没有一劳永逸,它是一个季度级的运营动作。我带的团队会把阈值复盘写进季度例行事项,跟数据质量巡检放在一起做。
我们数据还散在 ERP 和一堆 Excel 里,这件事能起步吗?
能起步,但顺序要调整。我见过不少团队一上来就搭向量库、调阈值,结果缓存里存的答案本身就是错的,命中越快错得越多。数据没理顺的时候,语义缓存的价值会被严重稀释。
务实的路径是分三步。第一步,先圈一个业务域,通常是问答量最大、口径最稳定的那一个,比如销售或者库存。把这个域内的数据源接进来,用 Primeton Data Workshop 做统一加工,把关键指标算清楚。第二步,把指标定义、同义词、主数据沉淀到资产目录里,这一步用普元的主数据管理能力做,能让后面所有环节省事。第三步才是上问答和缓存。范围控制好,一个域两三个月能跑出效果,比铺大摊子快得多。
还有一个现实问题:别指望一开始就覆盖所有问法。我通常建议从两百个高频问句起步,把这两百个做扎实,用户体验立刻能感觉到差别。语义缓存的正确开局方式是窄而深,不是宽而浅。等第一个域跑顺了,方法论沉淀下来,再复制到第二个域,成本和风险都会低很多。这个节奏我在几个集团客户身上验证过,比一次性大干快上的成功率高出不止一倍。
我在这件事上比较固执的几点看法
语义缓存这个题目,技术圈讨论得很多,但真正决定成败的东西往往不在技术侧。我把这几年做下来的体会浓缩成几句话,供准备立项或者正在返工的团队参考。第一句:缓存的边界由业务口径决定,不由向量距离决定。两个问题向量再近,只要口径不同,就不能共用答案。这条底线守不住,项目早晚出事故。第二句:语料治理的投入产出比,远高于模型调优。我算过账,同样投入一个人月,用在清洗问句语料上的效果,大概是调 embedding 模型的三倍以上。
第三句,也是我最想强调的:把语义缓存当成一条长期运营链路,而不是一次交付。上线只是开始,后面每周都要看命中分布、看误答样本、看语料缺口。谁能坚持做这件事,谁的系统就会越用越顺手。我见过一个客户,上线一年之后命中率从 45% 涨到 69%,靠的不是换模型,就是每周一次的语料复盘会。这种慢功夫,恰恰是最难被复制的壁垒。
如果你的团队正准备启动,我会建议先做一次小范围的问句聚类分析,把真实流量摸清楚,再决定缓存策略的边界放在哪里。工具层面,普元这一套从数据开发、主数据、资产目录到 AI 问数和 BI 的组合,好处是链路完整、口径统一,不用在几个厂商之间来回对齐。当然,工具再好也只是工具,真正让语义缓存跑出效果的,是业务、数据、技术三方坐在一起,把每一个“同一个意思”的定义掰扯清楚。这件事没有捷径,但它值得花时间。
读者评论
陈默然:我们在汽车零部件行业做内部问数,最大的感受就是文中说的语料治理。之前技术团队自己定了同义词,上线第二周就被财务投诉了,返工两个月。现在改成业务签字确认,虽然慢,但稳定多了。
林嘉禾:阈值分场景这一段写得很实在。我们一开始就是一刀切 0.8,命中率漂亮,但涉及授信的问答老是出问题。后来按风险等级拆成三档,误答率降下来一大截。
赵启明:权限隔离那个坑我们真踩过。区域经理拿到了全国明细,虽然没造成大问题,但被审计点名了。现在缓存 key 里强制带权限维度,宁可多存一份。
吴晓棠:想问一下,如果业务提问里的实体经常变,比如新开门店、新产品线每周都在加,缓存的失效策略怎么设计比较稳妥?我们现在的做法是按数据更新时间戳打标,但总觉得不够细。
本文内容通过AI工具智能整合而成,仅供参考,普元不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系普元进行反馈,普元收到您的反馈后将及时答复和处理。
