当前位置: 首页 > news >正文

如何用 DeepSeek 搭建自己的 RAG 知识库问答系统?

一、RAG 到底解决什么问题?

RAG,全称 Retrieval-Augmented Generation,中文通常叫“检索增强生成”。

普通大模型问答有一个明显问题:

模型只知道训练时学到的通用知识,不知道你的公司制度、产品文档、售后规则、项目资料、合同模板、实施手册和内部知识库。

如果直接把问题丢给大模型,它可能会:

  • 编造答案;
  • 回答过期信息;
  • 不知道企业内部资料;
  • 无法给出引用来源;
  • 对制度、价格、合同、流程等内容乱猜。

RAG 的思路是:

用户问题 → 先从你的知识库里检索相关资料 → 把检索到的资料作为上下文交给大模型 → 让模型只基于这些资料回答 → 返回答案 + 引用来源

一句话:

RAG 不是让大模型“凭记忆回答”,而是让它“看着你的资料回答”。


二、为什么用 DeepSeek 做 RAG?

DeepSeek API 的优势主要有三点。

1. OpenAI 兼容,接入成本低

DeepSeek 官方 API 文档显示,DeepSeek API 兼容 OpenAI / Anthropic API 格式。使用 OpenAI SDK 时,只需要修改base_urlapi_key,就可以接入 DeepSeek。

这对开发者非常友好,因为你可以复用大量现有代码、框架和生态。

2. 成本适合知识库问答

RAG 系统一般会有大量重复问答和长上下文拼接。模型调用成本会直接影响产品能否长期运行。DeepSeek 官方模型与价格页面显示,其当前模型支持非思考和思考模式,且 API Base URL 为:

https://api.deepseek.com

在知识库问答场景中,通常可以先用性价比更高的模型处理普通问答,再把复杂推理交给更强模型。

3. 长上下文适合文档问答

DeepSeek V4 Preview 官方发布说明显示,DeepSeek-V4-Pro 与 DeepSeek-V4-Flash 均支持 1M context length,并提供 Thinking / Non-Thinking 双模式。对于长文档、制度资料、合同条款、产品手册等场景,长上下文能力会明显降低上下文截断风险。

但要注意:

长上下文不等于不需要 RAG。

即使模型能塞很多内容,也不建议把所有文档一次性扔给模型。原因是成本高、延迟高、答案不可控、引用难管理。正确做法仍然是先检索,再生成。


三、RAG 系统的标准架构

一个最小可用的 RAG 知识库问答系统,通常包含 8 个模块:

模块作用常用工具
文档采集上传 PDF、Word、Markdown、网页、Excel 等文件上传、爬虫、企业文档系统
文档解析把文件变成干净文本pdfplumber、unstructured、docx、pandas
文本切片把长文档切成小块LangChain、LlamaIndex、自定义切片器
向量化把文本变成 EmbeddingDeepSeek 兼容生态 / 第三方 embedding 模型
向量库存储和检索文本向量FAISS、Milvus、pgvector、Qdrant、Chroma
检索器根据问题找到相关片段top-k、混合检索、重排序
生成器用 DeepSeek 根据上下文回答DeepSeek Chat Completion API
引用与评估返回来源、评分、反馈metadata、日志、人工评估集

整体流程:

文档上传 → 文档解析 → 文本清洗 → Chunk 切片 → Embedding 向量化 → 写入向量库 → 用户提问 → 问题向量化 → 检索相关 Chunk → 拼接上下文 Prompt → DeepSeek 生成答案 → 返回答案、引用来源、置信提示

四、第一版技术选型建议

如果你是第一次搭 RAG,不建议一上来就用复杂微服务架构。

最小可用版本

模块推荐选择
后端Python + FastAPI
大模型DeepSeek API
文档格式Markdown / TXT / PDF
文本切片自定义切片或 LangChain TextSplitter
EmbeddingBGE / Jina / Qwen Embedding / OpenAI compatible embedding 服务
向量库FAISS 本地版
前端Streamlit / React / Next.js
部署Docker + 云服务器

企业版升级

模块推荐选择
后端FastAPI / Node.js / Java Spring Boot
队列Redis Queue / Celery
文档存储MinIO / OSS / S3
向量库Milvus / pgvector / Qdrant
权限RBAC + 部门权限 + 文档权限
日志PostgreSQL + ClickHouse / Loki
评估标准问题集 + 人工反馈 + 命中率统计
部署Kubernetes / Docker Compose

初学者不建议一开始做

  • 复杂 Agent;
  • 多轮工具调用;
  • 自动改写企业制度;
  • 自动审批流程;
  • 没有人审的合同/法律/财务问答;
  • 直接对接生产数据库并允许写操作。

第一版目标很简单:

用户问一个问题,系统能从知识库找到依据,并基于依据回答。


五、实测任务与评分标准

测试任务

任务内容目标
任务 1上传 20 篇产品文档测试文档解析与切片
任务 2上传 FAQ测试常见问答准确率
任务 3上传制度文档测试条款检索和引用
任务 4问跨文档问题测试多片段综合能力
任务 5问不存在的问题测试拒答和防幻觉
任务 6问操作步骤测试结构化回答
任务 7问中英混合术语测试专有名词处理
任务 8多用户并发问答测试延迟和成本

评分维度

总分 100 分:

维度权重说明
接入难度10API 和框架是否容易接入
检索准确率20能否找到正确文档片段
回答可靠性20是否基于资料回答,是否胡编
引用来源15是否能返回文件名、页码、段落
成本控制15模型调用和向量检索成本
响应速度10用户体验是否流畅
可扩展性10是否容易升级到企业系统

综合评分

维度评分说明
接入难度90/100OpenAI 兼容,开发门槛低
检索准确率84/100取决于切片、Embedding 和重排序
回答可靠性88/100Prompt 约束后表现稳定
引用来源86/100需要在 metadata 中提前保存来源
成本控制91/100DeepSeek API 适合中高频问答
响应速度85/100与模型、top-k、上下文长度有关
可扩展性87/100可从本地 FAISS 平滑升级到 Milvus/pgvector

综合评分:87 / 100

结论:

DeepSeek 非常适合做 RAG 系统的生成模型层,但 RAG 效果不是 DeepSeek 单独决定的,而是由文档质量、切片策略、Embedding、检索、重排序、Prompt 和评估共同决定。


六、项目目录结构

建议目录:

deepseek-rag-demo/ ├── app.py # FastAPI 主程序 ├── config.py # 配置文件 ├── requirements.txt # 依赖 ├── .env # API Key,不要提交 Git ├── data/ │ ├── raw/ # 原始文档 │ └── processed/ # 解析后的文本 ├── vector_store/ │ └── faiss_index/ # FAISS 索引 ├── rag/ │ ├── loader.py # 文档加载 │ ├── splitter.py # 文本切片 │ ├── embeddings.py # Embedding 调用 │ ├── retriever.py # 检索逻辑 │ ├── prompt.py # Prompt 模板 │ └── generator.py # DeepSeek 生成答案 └── tests/ └── eval_questions.json # 测试问题集

七、安装依赖

requirements.txt示例:

fastapi==0.115.0 uvicorn==0.30.6 python-dotenv==1.0.1 openai==1.99.0 faiss-cpu==1.8.0 sentence-transformers==3.0.1 pydantic==2.8.2 numpy==1.26.4 pypdf==4.3.1 python-multipart==0.0.9

安装:

pipinstall-rrequirements.txt

.env

DEEPSEEK_API_KEY=你的DeepSeek_API_Key DEEPSEEK_BASE_URL=https://api.deepseek.com DEEPSEEK_MODEL=deepseek-v4-flash

如果模型名后续变化,以 DeepSeek 官方模型与价格页面为准。


八、调用 DeepSeek API

DeepSeek API 兼容 OpenAI SDK,因此可以这样调用:

fromopenaiimportOpenAIimportos client=OpenAI(api_key=
http://www.cnnetsun.cn/news/3328003.html

相关文章:

  • 30分钟快速搭建wvp-GB28181-pro:国标视频监控平台容器化部署终极指南
  • 面向演艺合作的头条号清单记录表设计
  • 高压与低压系统互联的光耦隔离技术解析
  • 编译原理实战:从正则表达式到DFA转换的5步算法与Python实现
  • ADP5350与PIC32MX460F512L构建智能电源管理系统
  • Oracle SQL Developer 23.1.1 安装配置:Windows/Linux/Mac 三平台 5 步避坑指南
  • Windows 11专业工作站版重装指南:三种方法详解与实操步骤
  • 暑假外出旅游没时间清日常?手机远控电脑用排队时间搞定!
  • 【无标题】HarmonyOS ArkTS实战:使用 ColumnSplit 与 RowSplit 构建企业级自适应布局(API 23+)
  • Steam成就管理器终极指南:三步掌握游戏成就自由
  • 营业执照识别 API 最小可运行示例:从请求到解析返回字段
  • 高精度ADC与PIC微控制器的工业测量系统设计
  • 如何彻底卸载FanControl?5步完全清理Windows风扇控制软件
  • 【OpenSpec】openspec\config.yaml 项目中config.yaml是如何使用的
  • 免费解锁WeMod专业版:Wand-Enhancer终极方案完全指南
  • 【OpenSpec】/opsx:archive 的作用是什么解析
  • H3C 交换机 VLAN 间路由实战:3步配置子接口与 DHCP 中继实现全网互通
  • ROS2 Service核心原理与生产级实践指南
  • 填坑:LazyForEach 数据更新了,为什么界面没反应?
  • AI驱动的C++跨平台迁移:从语义理解到自动化代码重构
  • 实测GPT-5.6,跑分赢了,却输给了Fable 5
  • UNIX 网络编程 30 种服务器模型对比:从迭代到预线程,性能与复杂度分析
  • FFmpeg 6.1.6 Windows 编译:MSYS2 + MSVC 2022 生成带 PDB 调试符号的 3 种方案
  • 2026数据分析师学习路径:Excel/SQL/PowerBI/Python实战指南
  • VC++实现MFCC语音特征提取:从原理到工程实践
  • Python实现RAR密码恢复:从字典攻击到多进程并行破解
  • GSNode 探针检测报告参数全解读:系统、IP、网络、回程四大板块每一项指标是什么意思
  • BG3ModManager:博德之门3模组管理的最佳解决方案
  • py每日spider案例之最新pdd加密参数anti_content逆向
  • 深入解析CAS:从硬件原理到C++无锁编程实战