ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

大模型外挂记忆系统:RAG检索增强生成架构设计与实操指南

大模型外挂记忆系统:RAG检索增强生成架构设计与实操指南

1. 为什么你的大模型需要一套外挂记忆系统

做过大模型应用落地的人都有一个共同体会:模型本身很聪明,但它不知道你公司上个月的销售数据,不知道你手里那份三百页的产品手册写了什么,更不知道你昨天刚更新的客服话术。你问它,它要么一本正经地胡说八道,要么礼貌地告诉你“我的知识截止到某年某月”。这不是模型不行,而是它的工作方式决定的——它把知识压缩在参数里,训练完就冻结了,想更新就得重新训练,成本高到大多数团队根本玩不起。

RAG,全称 Retrieval-Augmented Generation,检索增强生成,就是来解决这个问题的。它的思路特别朴素:既然模型记不住,那就不让它记,需要什么信息,临时去外部知识库里查,查到了连同问题一起塞给模型,让它基于查到的内容来回答。你可以把它理解成开卷考试——模型是那个脑子好使但没背书的考生,检索系统是那本可以随时翻的教材,考生拿到题目后先翻书找到相关章节,再组织语言作答。

这套方案能干什么?最典型的场景就是企业知识库问答、智能客服、文档助手、代码辅助检索、法律条文查询、医疗指南匹配等等。凡是“知识更新频繁、答案需要溯源、模型自身知识不够用”的场合,RAG都是当前性价比最高的解法。它适合谁看?如果你正在做AI应用开发,或者准备把大模型接入自己的业务系统,又或者你只是好奇为什么有些AI产品能准确引用你上传的文档,那这篇内容就是写给你的。我会从整体设计思路讲到具体实现细节,把踩过的坑和实测有效的参数都摊开来说,尽量让你看完就能动手搭一套能跑起来的东西。

2. RAG整体架构设计与核心思路拆解

2.1 从“检索”到“生成”的完整链路

RAG不是单一技术,而是一条流水线。这条流水线大致分成两段:离线阶段和在线阶段。离线阶段负责把原始文档处理成可检索的知识库,在线阶段负责接收用户问题、检索相关内容、组装提示词、调用模型生成答案。

离线阶段的核心动作是“切”和“存”。原始文档可能是PDF、Word、网页、数据库记录,格式五花八门,第一步得把文本提取出来,然后切成合适大小的片段,再用嵌入模型把每个片段转成向量,最后存进向量数据库。这个过程叫索引构建,相当于给每段知识编一个“语义身份证”,方便后续按意思而不是按关键词去匹配。

在线阶段的核心动作是“查”和“答”。用户提问后,系统先把问题也转成向量,去向量数据库里找最相似的若干片段,然后把这些片段和原始问题拼成一个提示词,交给大模型生成最终回答。整个链路听起来不复杂,但每个环节都有讲究,选错了参数或者策略,效果可能天差地别。

2.2 为什么是“检索增强”而不是“微调”

很多人第一反应是:我直接拿自己的数据微调模型不就行了?微调确实能让模型学会特定领域的表达风格和知识,但它有几个硬伤。第一,微调成本高,一次全量微调动辄几十上百张卡,普通团队扛不住。第二,知识更新麻烦,你今天微调完,明天业务数据变了,又得重新来一遍。第三,微调后的模型容易“遗忘”通用能力,在非专业问题上表现下降。第四,微调模型很难给出引用来源,用户问“这个结论哪来的”,你答不上来。

RAG恰好绕开了这些坑。知识存在外部数据库里,更新就是改几条记录的事,成本几乎为零。模型本身不用动,通用能力不受影响。检索到的片段可以直接展示给用户,答案有据可查。而且你可以随时替换检索库的内容,今天用产品手册,明天换成售后政策,灵活度极高。当然RAG也不是万能药,它对检索质量高度依赖,检索不准,后面全白搭。所以实际工程中,检索环节的优化往往占了整个项目70%以上的精力。

2.3 核心组件选型背后的考量

一套完整的RAG系统通常包含四个核心组件:文档处理器、嵌入模型、向量数据库、生成模型。每个组件的选型都直接影响最终效果和运行成本。

文档处理器负责把各种格式的原始文件转成纯文本。PDF是最麻烦的,尤其是扫描版PDF,得走OCR。Word和网页相对简单,但也要注意表格、列表、代码块的结构保留。我一般建议用成熟的开源库来做,比如处理PDF的解析工具、处理网页的正文提取库,不要自己从头写,坑太多。

嵌入模型是把文本转成向量的关键。选型时主要看三个指标:语义表达能力、推理速度、向量维度。表达能力强的模型通常更大更慢,维度也更高,存储和检索成本随之上升。实际项目中,如果知识库规模在百万级片段以内,中等规模的嵌入模型就够用了,没必要一味追求最大最强的。另外要注意,嵌入模型的语言支持很重要,中文场景必须选中文语料训练充分的模型,否则语义匹配会明显偏弱。

向量数据库负责存储向量并支持相似度检索。选型时考虑的因素包括:数据规模、查询延迟、是否支持混合检索、运维复杂度。小规模场景用本地文件型方案就够,比如基于FAISS的轻量方案。中等规模可以考虑单机版的专业向量库。大规模分布式场景才需要上集群方案。我的经验是,不要一上来就追求分布式,先把单机跑通,数据量真的上来了再考虑扩展。

生成模型就是最终组织语言回答问题的那个大模型。选型时看三点:上下文窗口大小、指令遵循能力、幻觉控制水平。上下文窗口决定了你一次能塞多少检索片段进去,太小了装不下,太大了推理成本高。指令遵循能力决定了模型会不会老老实实基于检索内容回答,而不是自己发挥。幻觉控制水平决定了模型会不会在检索内容没有覆盖的地方胡编。实际用下来,中等规模的模型在RAG场景下往往比超大模型更划算,因为RAG的核心是“基于给定内容回答”,不需要模型有太强的自由发挥能力。

3. 核心细节解析与实操要点

3.1 文档切分:最容易被低估的关键环节

文档切分看起来简单,实际上直接决定检索质量的上限。切得太碎,每个片段信息不完整,检索到了也答不好。切得太粗,一个片段里混了好几个主题,向量表示被稀释,检索精度下降。我见过太多项目在切分这一步偷懒,后面怎么调都效果不好。

切分策略主要有三种:固定长度切分、按语义切分、按文档结构切分。固定长度最简单,比如每500个字符切一段,段与段之间留50个字符的重叠。重叠的目的是防止一个完整句子被切断后,前后两段都丢失关键信息。这种策略适合结构不明显的纯文本,但缺点也很明显——它可能把一段完整的论述拦腰截断。

按语义切分更聪明一些,它先分析文本的语义边界,在段落、章节、主题转换的地方下刀。实现方式通常是先用嵌入模型计算相邻句子的相似度,相似度骤降的地方就是潜在的分割点。这种策略切出来的片段语义更完整,但计算成本更高,而且对嵌入模型的质量有依赖。

按文档结构切分是最理想的,如果原始文档本身有清晰的标题层级、章节划分,直接按结构切分效果最好。比如Markdown文档按标题层级切,HTML按标签结构切,法律条文按条款切。这种切分方式保留了文档的天然逻辑,检索到的片段自带上下文,模型理解起来也更容易。

实际操作中,我通常采用混合策略:优先按文档结构切,结构不明显的部分退回到语义切分,最后再用固定长度做兜底。切分粒度方面,中文场景下每个片段控制在300到800字之间比较合适,具体取决于文档类型和问题复杂度。技术文档可以短一些,叙述性内容可以长一些。另外,每个片段最好带上来源信息,比如文件名、章节标题、页码,方便后续引用和溯源。

注意:切分时一定要保留一定的重叠区域,尤其是固定长度切分。重叠比例建议在10%到20%之间。完全不重叠会导致边界信息丢失,重叠太多又会造成检索结果冗余。

3.2 向量化与索引构建的实操细节

文本切分完之后,下一步是用嵌入模型把每个片段转成向量。这一步有几个实操要点。

批量处理很重要。不要一条一条地调嵌入接口,那样效率太低。大多数嵌入模型都支持批量输入,一次传几十条甚至上百条,吞吐量能提升一个数量级。但要注意批次大小不能超过模型的最大输入限制,也不能太大导致内存溢出。我一般从32条一批开始试,根据显存和延迟调整。

向量归一化是个小细节但影响不小。很多相似度计算方法默认向量已经归一化,如果你不做这一步,算出来的相似度可能不准。归一化就是把向量除以它的模长,让所有向量都落在单位球面上。这样余弦相似度就等价于内积,计算更快,结果也更稳定。

索引构建时,除了向量本身,还要存储原始文本和元数据。原始文本用于后续组装提示词,元数据用于过滤和溯源。元数据可以包括来源文件、章节、页码、创建时间、权限标签等。权限标签在企业场景特别有用,不同用户能检索到的内容范围不同,可以在检索阶段就做过滤,避免敏感信息泄露。

索引更新策略也要提前想好。全量重建简单但耗时,增量更新快但实现复杂。如果知识库更新频率不高,比如每周一次,全量重建完全可接受。如果更新频繁,比如每天都有新文档进来,那就需要支持增量添加和删除。大多数向量数据库都支持按ID删除和插入,实现增量更新不难,关键是要维护好文档ID和向量ID的映射关系。

3.3 检索策略:从单路召回 to 多路融合

最简单的检索就是拿问题向量去数据库里找最相似的Top-K个片段。但实际用下来,单路向量检索经常不够用。原因在于,向量检索擅长语义匹配,但对精确关键词、专有名词、数字的匹配能力较弱。用户问“第三季度的营收是多少”,向量检索可能找回来一堆讲营收分析的段落,但偏偏漏掉了那个写着具体数字的表格。

解决办法是混合检索,也就是同时走向量检索和关键词检索,然后把两路结果融合。关键词检索可以用传统的BM25算法,它对精确匹配非常有效。融合策略有两种:一种是加权求和,给两路结果分别打分然后按权重相加;另一种是倒数排名融合,不看具体分数只看排名,把两路排名做加权融合。倒数排名融合的好处是不需要归一化分数,实现简单,效果也稳定,我一般优先用这种。

检索数量方面,Top-K的K值需要调。K太小,可能漏掉关键信息;K太大,塞给模型的上下文太长,推理成本高,而且可能引入噪声干扰模型判断。我的经验是,先用一个较大的K做召回,比如20到50,然后用重排序模型做精排,最后取Top-3到Top-5送给生成模型。重排序模型比嵌入模型更重但更准,它会对每个候选片段和问题的相关性做精细打分,把真正相关的排到前面。

查询改写也是提升检索质量的重要手段。用户的问题往往口语化、有歧义、信息不完整。可以先让大模型把问题改写成更适合检索的形式,比如补充同义词、拆解多跳问题、消除指代。举个例子,用户问“它支持哪些格式”,这个“它”指什么,检索系统不知道。可以先让模型结合对话历史把问题改写成“某某工具支持哪些文件格式”,再去检索,命中率会高很多。

3.4 提示词组装与生成控制

检索到相关片段后,下一步是把它们和用户问题组装成提示词,交给生成模型。提示词的设计直接决定模型会不会老老实实基于检索内容回答。

一个有效的提示词模板通常包含四部分:角色设定、检索内容、用户问题、回答要求。角色设定告诉模型它是谁,比如“你是一个基于给定资料回答问题的助手”。检索内容按相关性排序依次列出,每段前面标注来源编号。用户问题原样附上。回答要求最关键,要明确告诉模型:只基于给定资料回答,资料中没有的信息不要编造,如果资料不足以回答就直说,回答时标注引用的来源编号。

注意:检索内容不要一股脑全塞进去,要控制总长度。大多数模型有上下文窗口限制,超了会被截断。建议检索内容总长度不超过上下文窗口的60%,留出空间给系统提示、对话历史和模型输出。

生成参数方面,温度建议调低,0.1到0.3之间比较合适。RAG场景不需要模型发挥创造力,需要的是准确和稳定。温度太高,模型容易自由发挥,偏离检索内容。Top-p也可以相应调低,进一步限制采样范围。最大输出长度根据场景设定,问答场景一般512到1024个token足够,摘要场景可能需要更长。

还有一个实用技巧是让模型输出结构化结果。比如要求它返回JSON格式,包含答案正文和引用来源列表。这样前端可以方便地解析和展示,用户点击引用编号就能跳转到原文。结构化输出还能减少模型废话,让它更聚焦于回答问题本身。

4. 完整实操流程与核心环节实现

4.1 环境准备与依赖安装

动手之前先把环境搭好。我假设你用的是Python技术栈,这是目前RAG开发最主流的选择。需要安装的核心依赖包括:文档解析库、嵌入模型推理库、向量数据库客户端、大模型调用SDK。具体包名根据你选的组件不同而不同,这里不展开列具体版本号,因为版本更新太快,建议直接装最新稳定版。

硬件方面,如果嵌入模型和生成模型都走本地推理,需要一张显存足够的GPU。嵌入模型通常不大,几GB显存就够。生成模型如果选中等规模,量化后十几GB显存也能跑。如果走API调用,那本地只需要能跑向量数据库和文档处理就行,普通开发机完全够用。我的建议是,原型阶段嵌入模型本地跑,生成模型走API,这样迭代最快,成本也可控。

目录结构建议提前规划好。我一般会建这么几个目录:原始文档存放目录、处理后的文本目录、向量索引目录、配置目录、日志目录。配置文件用YAML或JSON都行,把模型名称、数据库路径、检索参数、提示词模板都放进去,方便调整和版本管理。

4.2 文档入库全流程演示

文档入库的完整流程是:加载原始文档、提取文本、切分片段、生成向量、存入数据库。我拿一个模拟场景来演示,假设你有一批产品手册PDF需要入库。

第一步,加载PDF并提取文本。用文档解析库打开PDF,逐页提取文字。如果是扫描版,需要先走OCR。提取出来的文本按页存储,同时记录页码信息。这一步的坑在于PDF里的表格和图片,纯文本提取会丢失表格结构,图片里的文字也提取不到。如果文档里表格很多,建议用支持表格提取的解析方案,或者单独处理表格页。

第二步,文本清洗。提取出来的文本往往有页眉页脚、乱码、多余换行。用正则表达式把明显的噪声去掉,比如重复出现的页眉文字、单独成行的页码数字。但清洗要适度,不要把有意义的格式也洗掉了。我一般只做最基本的清洗,保留段落结构。

第三步,切分片段。按前面讲的混合策略切分,每个片段控制在500字左右,重叠100字。切分时把页码、章节标题作为元数据附上。切分完可以人工抽查几条,看看有没有把完整段落切碎的情况。

第四步,生成向量。加载嵌入模型,批量把片段转成向量。注意做归一化。生成完可以随机抽几条,算一下它们和原始文本的语义相似度,确认模型工作正常。

第五步,存入向量数据库。把向量、原始文本、元数据一起写入。写入时建议分批提交,每批几百条,避免一次性写入太多导致超时。写完后做个简单查询测试,确认能正常检索。

# 伪代码示意,展示入库流程的骨架 documents = load_pdfs("docs/") chunks = [] for doc in documents: text = extract_text(doc) text = clean_text(text) chunks.extend(split_text(text, chunk_size=500, overlap=100)) vectors = embed_model.encode([c.text for c in chunks], batch_size=32) vectors = normalize(vectors) for i in range(0, len(chunks), 256): batch = chunks[i:i+256] batch_vectors = vectors[i:i+256] vector_db.insert(batch, batch_vectors)

4.3 检索与生成联调实操

入库完成后,就可以测试检索和生成效果了。先单独测检索,拿几个典型问题去查,看看返回的片段是否相关。如果检索结果不理想,先调切分策略和检索参数,不要急着调生成模型。

检索测试通过后,接入生成模型。把检索到的片段按相关性排序,取前5条,填入提示词模板,调用模型生成回答。观察回答是否基于检索内容,有没有编造,引用标注是否正确。

联调阶段最容易出现的问题是:检索到了正确内容,但模型没有好好利用。可能原因有几个:提示词没有强调“只基于给定资料”,模型习惯性自由发挥;检索内容太长,关键信息被淹没在中间;检索内容格式混乱,模型读不懂。针对这些情况,可以分别调整提示词、减少检索数量、规范检索内容格式。

另一个常见问题是多轮对话场景下的检索。用户第二轮追问时,问题里往往有指代,比如“那它的价格呢”。直接拿这个问题去检索,肯定找不到相关内容。解决办法是在检索前先做查询改写,结合对话历史把问题补全成独立完整的问题,再去检索。

4.4 效果评估与迭代优化

RAG系统上线后需要持续评估和优化。评估分两个层面:检索质量和生成质量。

检索质量的核心指标是召回率和准确率。召回率衡量的是“该找到的有没有找到”,准确率衡量的是“找到的对不对”。实际评估时,可以人工标注一批问题-片段对,然后看系统检索结果和标注的吻合程度。如果召回率低,说明切分或嵌入模型有问题;如果准确率低,说明检索策略需要调整。

生成质量的评估更主观一些,主要看回答是否准确、是否基于检索内容、引用是否正确、语言是否通顺。可以设计一个评分表,从这几个维度打分。也可以让另一个大模型来做自动评估,但自动评估结果只能参考,最终还是要人工抽查。

迭代优化的优先级是:先优化检索,再优化生成。检索是源头,源头不准,后面怎么调都白搭。检索优化手段包括:调整切分粒度、换嵌入模型、加混合检索、加重排序、加查询改写。生成优化手段包括:调整提示词、调生成参数、换生成模型、加后处理校验。

我自己的经验是,一个RAG系统从能跑到好用,通常需要两到三轮完整迭代。第一轮解决“能不能检索到”,第二轮解决“检索准不准”,第三轮解决“回答好不好”。每轮迭代都要有明确的评估数据和优化目标,不要凭感觉调。

5. 常见问题与排查技巧实录

5.1 检索不准的排查思路

检索不准是最常见的问题,表现是返回的片段和问题不相关,或者相关片段没被召回。排查时按以下顺序检查。

先看切分。把检索结果对应的原始片段调出来,看看切分是否合理。如果片段本身就不完整或者混了多个主题,那问题出在切分环节。调整切分粒度,增加重叠,或者换切分策略。

再看嵌入模型。拿几个问题和正确片段,手动算一下它们的向量相似度。如果相似度很低,说明嵌入模型对这个领域或这种语言的支持不够。考虑换一个在相关语料上表现更好的嵌入模型。

然后看检索策略。如果单路向量检索效果不好,加上关键词检索做混合。如果Top-K太小导致漏召回,增大K值。如果噪声太多,加重排序模型做精排。

最后看查询本身。用户问题是否有歧义、是否信息不完整、是否包含指代。如果是,加查询改写环节。

注意:排查时一次只改一个变量,改完立即测试对比。同时改多个参数,你根本不知道是哪个起了作用。

5.2 模型胡编乱造的抑制方法

模型胡编是RAG落地最头疼的问题之一。明明检索内容里没有相关信息,模型还是编了一个像模像样的答案。抑制方法有几种。

提示词层面,明确要求“只基于给定资料回答”“资料中没有的信息不要编造”“如果资料不足以回答,请直接说明”。把这几条放在提示词靠前的位置,并用强调语气。实测下来,明确指令能显著降低胡编概率。

检索层面,设置相关性阈值。如果检索到的片段相似度都低于某个阈值,说明知识库里可能没有相关内容,这时候直接返回“未找到相关信息”,不要硬塞给模型。阈值需要根据实际数据调,一般从0.5到0.7之间试。

生成层面,降低温度,限制采样范围。温度越低,模型越倾向于选择概率最高的词,胡编的空间越小。另外可以要求模型输出引用编号,如果它引用了不存在的编号,说明它在编造,可以在后处理阶段拦截。

后处理层面,加一层校验。把模型生成的回答和检索内容做比对,看关键信息是否能在检索内容中找到依据。如果找不到,标记为可疑回答,转人工处理或者返回兜底话术。

5.3 性能与成本优化技巧

RAG系统的性能瓶颈通常在检索和生成两个环节。检索慢主要是向量数据库查询慢,优化手段包括:建索引、减少向量维度、限制检索范围、加缓存。生成慢主要是模型推理慢,优化手段包括:换更小的模型、量化、流式输出、缓存常见问题的回答。

成本方面,嵌入模型如果走API,按token计费,批量处理能摊薄成本。生成模型如果走API,输入输出都计费,控制检索内容长度和输出长度能显著降本。如果本地部署,主要成本是GPU电费和运维人力,利用率越高越划算。

一个实用的降本技巧是分级处理。简单问题走小模型或缓存,复杂问题才走大模型。判断问题复杂度可以用规则,也可以用一个小分类模型。另一个技巧是异步处理,用户提交问题后先返回“正在检索”,后台慢慢处理,处理完再推送结果。这样用户体验不差,系统压力也小。

5.4 常见问题速查表

问题现象可能原因排查方向解决手段
检索结果不相关切分不合理或嵌入模型不匹配检查片段完整性和相似度分数调整切分策略,换嵌入模型
相关片段没召回Top-K太小或检索策略单一增大K值,检查关键词匹配加混合检索,加查询改写
模型胡编乱造提示词不明确或检索内容不足检查提示词和检索相关性强化指令,设相关性阈值
回答不完整检索片段太少或上下文超限检查检索数量和总长度增加检索数量,精简片段
多轮对话效果差查询指代未消解检查改写后的查询加查询改写,结合对话历史
响应速度慢检索或生成环节瓶颈分别计时定位加缓存,换小模型,流式输出
引用标注错误模型未正确理解编号检查提示词编号格式规范编号格式,加后处理校验

6. 进阶优化与场景扩展思路

6.1 多路召回与重排序的工程实现

单路检索的天花板有限,多路召回是提升召回率的有效手段。除了向量检索和关键词检索,还可以加入基于规则的检索、基于知识图谱的检索、基于协同过滤的检索。多路结果融合时,倒数排名融合是最省事的方案,不需要调权重,效果也稳定。

重排序是精排环节的核心。它的输入是粗排返回的候选片段,输出是重新排序后的结果。重排序模型通常比嵌入模型更大更准,因为它可以对问题和片段做交叉编码,捕捉更细粒度的相关性。代价是速度慢,所以只用在Top-K的候选上,不要对全库做重排序。

工程实现上,多路召回可以并行执行,每路返回自己的Top-K,然后合并去重,再送重排序。重排序后取Top-N送给生成模型。整个链路可以用异步框架串起来,减少等待时间。

6.2 面向不同场景的RAG变体

RAG不是一成不变的,不同场景需要不同变体。

对话场景需要多轮RAG,核心是查询改写和对话历史管理。每一轮都要结合历史把问题补全,检索时可以考虑历史信息的权重。

代码场景需要代码RAG,嵌入模型要选代码语料训练的,切分要按函数或类来切,检索时要注意代码结构的匹配。

表格场景需要表格RAG,表格不能简单转成文本,要保留行列结构,检索时可以用表格特有的匹配方式,生成时让模型理解表格语义。

多模态场景需要多模态RAG,图片、音频、视频都要能检索。这需要多模态嵌入模型,把不同模态的内容映射到同一向量空间。

6.3 知识库维护与更新策略

知识库不是建完就一劳永逸的,需要持续维护。维护内容包括:新增文档入库、过期文档删除、错误内容修正、索引重建。

新增文档入库最好自动化,监听文件目录变化或者对接内容管理系统,有新内容自动触发入库流程。删除文档要同步删除向量索引,否则会检索到已删除的内容。修正内容需要先删旧向量再插新向量,保证一致性。

索引重建周期取决于数据更新频率和检索质量要求。如果更新频繁且对质量要求高,可以每周重建一次。如果更新少,每月重建也行。重建时建议用新索引先跑一段时间影子流量,对比效果后再切换,避免直接替换导致线上事故。

注意:删除操作一定要做软删除标记,不要物理删除。万一误删了还能恢复。向量数据库里也要同步标记,检索时过滤掉已删除的片段。

6.4 效果监控与持续迭代

上线不是终点,监控和迭代才是。需要监控的指标包括:检索命中率、回答准确率、用户满意度、响应延迟、调用成本。这些指标要定期统计,发现异常及时排查。

用户反馈是最宝贵的优化信号。可以在回答旁边加“有用/没用”按钮,收集用户评价。对于“没用”的回答,人工分析原因,是检索问题还是生成问题,然后针对性优化。

迭代节奏建议按周或按双周走。每次迭代聚焦一个核心问题,改完用评估集验证效果,有效就保留,无效就回滚。不要一次改太多,否则出了问题都不知道是哪个改动导致的。

我个人在实际操作中的体会是,RAG系统的效果提升不是线性的,而是阶梯式的。前期调切分和检索,效果提升明显。中期调提示词和生成参数,效果稳步提升。后期优化空间越来越小,需要靠数据积累和精细运营。所以不要指望一次调优就能达到完美,把它当成一个持续运营的产品来做,效果才会越来越好。

最后再分享一个小技巧:建一个“黄金测试集”,包含几十个典型问题和标准答案。每次改动后都跑一遍测试集,对比改动前后的效果。这个测试集不需要很大,但要有代表性,覆盖各种问题类型和边界情况。有了它,你的每次迭代都有据可依,不会越调越乱。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进