deepseek rag 搭建,从零开始的完整步骤和常见问题

接入与开发

面向有基础的开发者,把用 DeepSeek 搭一套 RAG 问答系统的完整步骤拆成可执行清单,并给出常见卡点的排查顺序。

你可能已经拿到 DeepSeek 的 Key,也知道 RAG 大致是「切块—向量化—召回—拼提示」,但真正动手时还是会卡:文档怎么清洗、向量模型用谁、召回的片段塞不进上下文怎么办、答非所问该改哪一环。这篇不铺概念,按从零到能问答的顺序给步骤和检查点,每一步都写清做到什么程度算过关。

你大概已经拿到 DeepSeek 的 Key,也清楚 RAG 就是「切块、向量化、召回、拼提示」这条线,但真开工会卡在很具体的地方:PDF 抽出来一堆页眉页脚、向量模型挑花眼、召回片段塞不进上下文、答非所问不知道改哪一环。这篇不铺概念,按从零到能问答的顺序,把每一步做什么、做到什么程度算过关、卡住先查哪里讲清楚。

先说明适用范围:下面的步骤假定你有基础开发能力,能自己起服务、调接口,目标是把一个相对固定的文档集做成一问一答的内部问答。如果你的文档天天空变、或者问题面覆盖整个互联网,这套流程不直接适用,得先缩小范围再进来。

第一步:先定链路和范围,别急着写代码

动手前先把整条链路画出来,四段各自定组件:文档进料、切块与向量化、召回、拼提示调 DeepSeek。每段先写清楚用谁,不然后面出问题你根本不知道是哪一段的锅。范围也要先收窄,一个文档集、一类问题,比如内部规范问答,先别想着一次吃掉全公司资料。

  • 链路四段各选一个组件,写在一张纸上,后面排查对照着看
  • 范围收窄到一个文档集加一类问题,先跑通再扩
  • 模型和接口规格到 /official-api/providers/deepseek 核对当前口径,别照旧文章抄参数
  • API 连通性单独跑一次,只测能不能通、返回结构对不对,别和业务逻辑混在一起

第二步:文档清洗与切片,这一步决定上限

召回质量的上限在这一步就定了。PDF、扫描件、表格先做文本抽取和清洗,乱码、页眉页脚、重复导航会直接污染召回结果,模型再强也救不回来。切片按语义段落切,别按固定字数硬切;每块带上标题和来源字段,回答时才能给出处,用户也更容易信。

  1. 抽取与清洗把文档转成纯文本,去掉页眉页脚、页码、空行和乱码,抽完先随机翻几页看有没有明显缺失。
  2. 按语义切片以段落或小标题为界切块,块与块之间留点重叠,避免一句话被切两半。
  3. 人工抽检随机抽十条切片,问自己只看这一块能不能回答问题,答不上就说明切错了,回去重切。
  4. 向量模型单独评估嵌入模型和对话模型分开选,嵌入模型清单到 /embeddings 比对,别默认用同一个。

这里的判断标准很简单:抽检的十条里大部分切片能独立表意,就往下走;如果大量切片语义残缺,说明切法有问题,继续调块度和边界,不要指望召回阶段补救。

第三步:入库、召回与拼提示

向量库先用轻量方案跑通,规模没上来之前别提前上分布式,目录在 /stacks/vector-dbs。召回先取 Top-K 再重排,重排能明显减少无关片段挤占上下文;K 值和相似度阈值都做成可配置项,方便按问题类型调。拼提示用固定结构,别每次随手写。

环节常见做法出问题时的信号
入库轻量向量库先跑通检索结果和文档对不上
召回Top-K 加阈值再重排召回了但都是无关片段
拼提示系统指令加检索片段加用户问题片段对但答案跑偏
输出先非流式再上流式前端拼接错乱或超时

拼提示时明确要求模型答不出来就说不知道,这条比什么写作风格要求都重要。流式和非流式按产品形态定,先跑通非流式,确认逻辑无误再接流式,否则两类问题会缠在一起。

第四步:答不准时的排查顺序

答不准别一上来就调模型参数,按「文档有没有、切得对不对、召回到了没、提示拼得对不对」四层往下查。每一层都有可验证的证据,前一层没过就别跳层。这套顺序的价值在于把玄学问题变成能定位的工程问题。

  • 先确认文档确实入库了,搜关键词能搜到原文
  • 再看切片,命中的块本身是否语义完整
  • 然后看召回日志,正确片段是否在返回结果里、分数多少
  • 最后看提示,片段进去后模型是否被无关内容带偏
  • 改完用固定问题回归,避免修好一个坏掉三个

一条日志的价值大于十次盲调:记下每次问题召回了哪几块、分数多少、最终答案怎么来的。没有这份记录,你只能凭感觉换模型、调长度,效率极低。成本与用量口径到 /tools/token-price-calculator 自己算,别凭感觉估。

下一步链路跑通后,选型和成本是下一道坎,去 /embeddings 对比嵌入模型,再到 /stacks/vector-dbs 看向量库方案,用站内数字做决定比拍脑袋靠谱。

常见问题

搭建 RAG 一定要用向量数据库吗?

数据量小的时候用内存里的向量检索或本地索引就够,等文档上千、需要多用户并发再上专门向量库。过早引入会增加部署和运维负担,先跑通链路更重要。

回答答非所问,是模型不行还是检索不行?

大概率是检索。先把召回片段打出来看,如果片段里根本没有答案,换模型也没用;只有片段正确但回答仍跑偏,才去调提示词或换更强模型。

DeepSeek 的接口在 RAG 里要注意什么?

主要是上下文长度和调用频率。检索片段要控制在预算内,并发高时按限流做排队和重试。具体参数和价格以官方页面和站内价格页当时的数据为准。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。