温馨提示:结合资源学习效果更加!配套代码路径:src/qa_chain.py、src/retriever.py。详见以下项目文件资源csdn平台地址微信公众号原文链接https://mp.weixin.qq.com/s/jd-A8DHyAdesJnjD-TjThQ

新手可入门,一套可运行、可配置、可二次开发的私有知识库问答系统完整源码 + 教程笔记 + 工具脚本https://download.csdn.net/download/GreenHands495/93326491

资源文件目录展示

项目名称:从零搭建一套完整的 RAG 私有知识库问答系统 ,下面我以此作为示例进行分析学习。

图片

一、为什么用框架

自己拼 OpenAI + FAISS 也能做 RAG,但LangChain / LlamaIndex框架提供了:

  • 统一的组件抽象(LLM / Embedding / VectorStore / Retriever / Document);

  • 可替换后端(换模型、换向量库只改配置);

  • 丰富的集成(上百种数据源、模型、存储)。

图片

二、LangChain 核心概念

概念

作用

本项目对应

Document

文本 + 元数据

document_loader.py
TextSplitter

切片

chunker.py
Embeddings

向量化接口

embeddings.py
VectorStore

向量存储检索

vectorstore.py(FAISS)
Retriever

召回接口

retriever.py
PromptTemplate

提示词

qa_chain.py
Runnable(LCEL)

链式编排 prompt | llm

qa_chain.py

最小示例(LCEL 链式):

图片

三、LlamaIndex 和 LangChain 对比

LlamaIndex 更「RAG 专精」:以 Index 为核心,数据摄入/索引/查询 API 极简, 适合「把一堆文档变成可问答索引」的场景;生态集成不如 LangChain 广。 本项目选 LangChain,是因为需要灵活组合「多路召回 + 重排 + 自定义 Prompt」, LangChain 的组合能力更强,也方便你顺手接入 LlamaIndex 做对比实验。两者可混用:用 LlamaIndex 建索引,把结果转成 LangChain Document 接入本管线。

四、快速上手路线

(简单示例,具体操作步骤以实战,项目文件资源csdn平台地址:

https://download.csdn.net/download/GreenHands495/93326491中的使用说明为准)

  1. 装依赖:pip install -r requirements.txt(本地 Embedding/重排见 requirements-extra.txt)。

    图片

    图片

    图片

  2. 配密钥:复制 .env.example 为 .env,填入 OPENAI_API_KEY

  3. 放文档:把资料丢进 data/docs/

    图片

  4. 建索引:python -m src.ingest

    检查配置,确定AI大模型没有问题,可以用openai或ollama本地部署方式,这里用ollama示例。

    图片

    因为我这里这里用的是本地大模型,所以用ollama部署了nomic-embed-text和qwen2.5:7b

    python -m src.ingest 的流程:

    解析文档 → 切片 → 调用 Ollama nomic-embed-text 把每个切片变成向量 → 保存索引

    第 3 步向量化需要 Ollama 服务响应,所以必须开着。

    python -m src.query 时也需要:

    用 nomic-embed-text 把你的问题向量化

    用 qwen2.5:7b 根据检索结果生成答案

    图片

    简单说:Ollama = 你的本地大脑(Embedding + LLM),关掉它等于关掉大脑,项目就跑不动了。

    检查配置没问题之后开始执行python -m src.ingest创建索引

    图片

    创建完成之后会生成向量数据库

    rag_kb.faiss   向量索引文件(FAISS格式)

    rag_kb.pkl      对应的元数据(切片内容、来源信息)

    图片

  5. 问答:python -m src.query,或 python -m src.web_ui 用界面。

    这里用图形化页面演示,执行python -m src.web_ui命令之后,浏览器进入http://127.0.0.1:7860

图片

提问问题查看系统会检索知识库并返回带来源的答案

图片

与导入的数据来源文件对比,上面截图中提问了“RAG的概念是什么?”的回答是准确的,而提问“LangChain的概念是什么?”的时候,因为知识库示例文档中没有此问题相关的记录所以无法查询到。

图片

至此,本篇已经结束,

最后

RAG 是当前大模型落地最实用的技术之一。与其反复折腾 Prompt,不如让模型"开卷考试"——把参考资料摆在面前,答案自然更准确、更可信。

希望这个项目能成为你 RAG 实战的起点,而不仅仅是终点。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐