别再只会调大模型了:用 Python 搭一套自己的知识库问答系统(RAG 实战指南)

简介: 别再只会调大模型了:用 Python 搭一套自己的知识库问答系统(RAG 实战指南)

别再只会调大模型了:用 Python 搭一套自己的知识库问答系统(RAG 实战指南)

大家好,我是 Echo_Wish。

这两年很多人玩大模型,张口就是“接个 API 就行”。
但真正落地的时候你会发现一个残酷现实:

大模型很聪明,但它对你公司的资料一无所知。

你让它回答:

  • 公司内部规范?
  • 产品技术白皮书?
  • 项目历史文档?
  • 你的博客沉淀?

它只能开始“编”。

这时候,RAG(Retrieval-Augmented Generation)就登场了。

今天我带你从 0 开始,用 Python 搭一个自己的知识库问答系统。
不整虚的,直接实战。


一、RAG 到底是什么?一句话讲明白

RAG = 检索 + 大模型生成。

流程非常简单:

用户问题
   ↓
向量检索(从知识库找相关内容)
   ↓
把检索结果拼进 prompt
   ↓
交给大模型生成答案

也就是说:

模型负责“说话”,知识库负责“内容”。

你不给模型资料,它只能瞎猜;
你给它精准资料,它就能像专家一样回答。


二、系统整体架构长什么样?

先看一个简化版结构图:

核心组件就四块:

  1. 文档加载
  2. 文本切块
  3. 向量化(Embedding)
  4. 向量检索 + LLM 生成

我们一步步来。


三、第一步:准备文档

假设我们有一堆 Markdown / PDF / TXT 文档。

先装几个依赖:

pip install langchain faiss-cpu sentence-transformers openai

四、第二步:文档切块(Chunking)

很多人忽略这一点。

如果你把整本 PDF 一次性 embedding,
检索效果会差得离谱。

正确做法是:切块。

from langchain.text_splitter import RecursiveCharacterTextSplitter

text = open("knowledge.txt", "r", encoding="utf-8").read()

splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,
    chunk_overlap=100
)

docs = splitter.create_documents([text])

print("切块数量:", len(docs))

为什么要 overlap?

因为语义是连续的,
你不做重叠,信息会断层。


五、第三步:生成向量(Embedding)

Embedding 是 RAG 的灵魂。

我们用 sentence-transformers 举例:

from sentence_transformers import SentenceTransformer
import numpy as np

model = SentenceTransformer("all-MiniLM-L6-v2")

texts = [doc.page_content for doc in docs]
embeddings = model.encode(texts)

print("向量维度:", embeddings.shape)

此时,每个文本块都变成了一个向量。

这就是“语义表示”。


六、第四步:构建向量数据库

这里我们用 FAISS。

import faiss

dimension = embeddings.shape[1]
index = faiss.IndexFlatL2(dimension)

index.add(np.array(embeddings))

print("向量库大小:", index.ntotal)

现在你已经有了一个可搜索的知识库。


七、第五步:实现检索

当用户提问时:

query = "公司数据库怎么做备份?"

query_vec = model.encode([query])

D, I = index.search(np.array(query_vec), k=3)

for idx in I[0]:
    print("命中内容:", texts[idx])

这一步会返回最相关的 3 段文本。

注意:

RAG 的好坏,80% 在检索。

如果检索错了,后面再强的大模型都没用。


八、第六步:交给大模型生成答案

把检索到的内容拼进 prompt:

import openai

context = "\n".join([texts[i] for i in I[0]])

prompt = f"""
基于以下资料回答问题:

{context}

问题:{query}
"""

response = openai.ChatCompletion.create(
    model="gpt-4o-mini",
    messages=[{
   "role": "user", "content": prompt}]
)

print(response["choices"][0]["message"]["content"])

此时,大模型不是“猜”,
而是“基于资料回答”。

这就是 RAG 的核心价值。


九、做成一个简单问答系统

我们封装一下:

def ask_question(query):
    query_vec = model.encode([query])
    D, I = index.search(np.array(query_vec), k=3)

    context = "\n".join([texts[i] for i in I[0]])

    prompt = f"""
    基于以下资料回答问题:
    {context}
    问题:{query}
    """

    response = openai.ChatCompletion.create(
        model="gpt-4o-mini",
        messages=[{
   "role": "user", "content": prompt}]
    )

    return response["choices"][0]["message"]["content"]

你已经拥有一个基础知识库问答系统。


十、真实落地要注意什么?

说点真话。

很多人做 RAG 做着做着发现:

  • 检索不准
  • 答案乱拼
  • 重复内容多
  • 上下文不连贯

这时候你要做三件事:

1️⃣ 优化切块策略

不是固定 500 字就完事。
有时候按标题切更好。

2️⃣ 用更强的 Embedding 模型

Embedding 决定检索质量。

3️⃣ 做 rerank

可以再加一层排序模型,提升命中质量。


十一、我的一点感受

我自己做过很多 RAG 项目。

最大的误区是:

把 RAG 当成“接 API”。

其实它更像一个“搜索系统 + 提示工程”的融合体。

你需要理解:

  • 向量空间
  • 语义相似度
  • Prompt 结构
  • 数据治理

RAG 做得好,是企业级生产力工具。
做得不好,就是一个高级“拼接器”。


十二、未来怎么玩?

再往前一步,可以加:

  • 多知识库路由
  • 权限控制
  • 实时更新
  • 增量向量索引
  • Agent 自动调用

RAG 不是终点。

它是企业智能化的入口。


结尾

如果你还没做过 RAG,我建议你一定动手试一次。

当你第一次看到模型准确引用你自己的文档回答问题时——

那种感觉,就像你亲手造了一个“会读书的助理”。

目录
相关文章
|
1天前
|
缓存 前端开发 JavaScript
沃尔玛商品详情页前端性能优化实战
沃尔玛商品详情页性能优化项目,针对全球化、全渠道、多品类等业务特点,通过智能CDN路由、边缘计算(价格/库存API下沉)、分层数据加载、按类别的自适应图片优化及CLS/LCP专项治理,实现LCP↓70.8%、CLS↓82.1%、资源体积↓57.9%,转化率↑31%,订单↑38%,全面支撑Walmart+会员体验与全球业务增长。(239字)
|
4月前
|
人工智能 前端开发 数据挖掘
AI学习全景图:从大模型到RAG,从工具到变现,一条从0到1的路线
告别碎片化学习!本文系统梳理AI知识五层结构:从基础认知到商业变现,提供完整学习路径与优质资源链接。帮你构建AI知识网络,实现从工具使用到能力落地的跃迁。
3070 5
|
5月前
|
人工智能 JSON 测试技术
Dify入门实战:5分钟搭建你的第一个AI测试用例生成器
本文教你利用Dify平台,结合大模型API,5分钟内搭建一个无需编程基础的AI测试用例生成器。通过配置提示词、连接AI模型,实现自动输出覆盖正常、异常及边界场景的结构化测试用例,提升测试效率与质量,并支持集成到CI/CD流程,助力智能化测试落地。
|
2月前
|
存储 弹性计算 数据库
阿里云免费中心 ——2026 免费领云服务器、云数据库、云存储等申请指南
阿里云免费中心2026年推出160+款云产品免费试用,涵盖云服务器、数据库、存储等核心资源,支持先试后买、非预期费用可退。个人开发者与企业用户均可零成本体验上云,适用于网站搭建、应用开发、游戏加速等场景。通过实名认证的新用户可申领,试用到期后数据保留1-15天,助力平滑过渡至正式使用。
1087 5
|
5天前
|
Web App开发 前端开发 安全
豫唐工具集正式发布:重新定义前端开发工具体验
2026年2月26日,豫唐团队发布开源免费的“豫唐工具集”——轻量纯前端在线平台,含ICO生成、摸鱼神器、密码生成、项目管理计算器与数独游戏五大工具,本地运行、零数据上传,兼顾安全、效率与极简美学。
107 6
|
2月前
|
人工智能 搜索推荐 数据库
从零搭建RAG系统:原理剖析+代码实践,解锁大模型“记忆力”新姿势
RAG(检索增强生成)为大模型配备“外接大脑”,通过连接专属知识库,提升回答准确性。广泛应用于医疗、法律、客服等领域,兼具专业性与可解释性。本文详解其原理、实战步骤与优化技巧,助你快速构建个性化AI助手。
697 11
|
3月前
|
人工智能 NoSQL 前端开发
面试真题
多套AI与Java技术面试题汇总,涵盖RAG、智能体、大模型部署、分布式系统、JVM调优、数据库设计等核心内容,深入考察候选人项目经验、架构设计及技术深度,适用于中高级工程师岗位选拔。
|
2月前
|
人工智能 JSON 架构师
面试通关:整理AI智能体运营工程师真题
2026 年的春招季比往年来得更早一些。在传统的 Java、Go 后端岗位卷出天际的同时,一个新兴的岗位——AI 智能体运营工程师 (AI Agent Operations Engineer) 正在悄然崛起。 不同于简单的“提示词工程师(Prompt Engineer)”,这个岗位要求候选人既懂业务逻辑,又具备 Python 开发和架构编排能力。据猎聘大数据显示,该岗位的平均薪资已超越传统开发岗 20%。 本文整理了我在智能体来了(西南总部)参加【AI智能体运营工程师就业班】期间,由技术导师金加德讲师在内部模拟面试中归纳的 10 道高频真题。这些题目涵盖了从 LLM 原理、RAG 架构到 Fu
|
6月前
|
存储 人工智能 自然语言处理
RAG:为大语言模型注入知识的力量
RAG:为大语言模型注入知识的力量
563 100
|
2月前
|
人工智能 JSON 数据可视化
【教案生成平台】实战教程三:打造智能 PPT 生成器 (AI + PptxGenJS)
一款基于 Vue 3 + Vite 的智能教学工具,利用 AI 自动生成结构化 PPT 数据,结合可视化编辑与本地持久化,实现高效备课。支持 JSON 模板解析、动态渲染导出(pptxgenjs)与草稿自动保存,大幅提升教师工作效率。在线体验:ytecn.com/teacher
246 16