RAG+Milvus+FastAPI 极简搭建知识库问答(附完整代码 + 接口文档)

RAG+Milvus+FastAPI 极简搭建知识库问答(附完整代码 + 接口文档)

摘要:零基础搭建私有知识库,用Milvus 向量库 + LangChain+FastAPI,含文档分片、向量入库、检索召回、流式问答,一键运行,直接对接前端。

标签:#RAG #Milvus #FastAPI #大模型 #人工智能 #知识库搭建


一、项目介绍

传统大模型问答存在知识滞后、幻觉严重、无法使用私有数据的问题,而 RAG(检索增强生成)技术可以完美解决以上痛点。

本文基于 Milvus向量数据库 + LangChain + FastAPI 极简搭建企业级私有知识库问答系统,全程轻量化实现、代码极简无冗余、零基础可跑。

项目核心能力:

  • 本地私有文档解析、文本分片

  • 文档向量化、Milvus 向量入库持久化

  • 相似度检索召回相关上下文

  • 大模型结合检索内容生成精准答案

  • 支持流式问答响应,体验媲美在线AI对话

  • FastAPI 自动生成接口文档,可直接对接前端/小程序


二、技术栈说明

  • FastAPI:高性能接口服务框架,提供统一接口能力、自动生成API文档

  • Milvus:开源高性能向量数据库,负责存储文档向量、相似度检索

  • LangChain:大模型应用开发框架,封装文档切分、向量嵌入、RAG链路

  • OpenAI Embedding + LLM:文本向量化、智能问答生成


三、环境依赖安装

执行以下命令安装全部所需依赖包:

bash 复制代码
pip install fastapi uvicorn langchain langchain-openai pymilvus python-dotenv

四、前置准备

1. 启动 Milvus 服务

本地提前部署 Milvus(Docker 一键部署即可),保证默认端口 19530 正常连通。

2. 配置环境变量 .env 文件

项目根目录新建 \.env 文件,配置大模型密钥与接口地址:

plain 复制代码
OPENAI_API_KEY=你的API密钥
OPENAI_BASE_URL=你的接口代理地址
MILVUS_HOST=127.0.0.1
MILVUS_PORT=19530

五、完整项目代码

整体项目仅需一个主文件,包含文档入库、向量检索、RAG问答、流式接口全部能力。

python 复制代码
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Milvus
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.schema import Document
from langchain.chains import RetrievalQA
import os
from dotenv import load_dotenv

# 加载环境变量
load_dotenv()

# 初始化FastAPI服务
app = FastAPI(title="RAG知识库问答接口", version="1.0")

# 配置跨域
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

# 初始化嵌入模型 & 大模型
embedding_model = OpenAIEmbeddings()
llm = ChatOpenAI(temperature=0.3)

# Milvus 配置参数
MILVUS_HOST = os.getenv("MILVUS_HOST")
MILVUS_PORT = os.getenv("MILVUS_PORT")
COLLECTION_NAME = "rag_knowledge_base"

# 初始化文本分割器
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=512,
    chunk_overlap=50,
    length_function=len
)

# 全局向量库实例
vector_db = None

@app.on_event("startup")
async def init_milvus():
    """服务启动初始化Milvus向量库"""
    global vector_db
    vector_db = Milvus(
        embedding_function=embedding_model,
        connection_args={"host": MILVUS_HOST, "port": MILVUS_PORT},
        collection_name=COLLECTION_NAME
    )

@app.post("/add_doc")
async def add_document(content: str):
    """
    新增知识库文档
    :param content: 文档文本内容
    :return: 入库结果
    """
    # 封装文档对象
    doc = Document(page_content=content)
    # 文本分片
    split_docs = text_splitter.split_documents([doc])
    # 向量入库
    vector_db.add_documents(split_docs)
    return {"code": 200, "msg": "文档向量入库成功", "chunk_num": len(split_docs)}

@app.post("/qa")
async def knowledge_qa(question: str):
    """
    知识库问答接口
    :param question: 用户提问
    :return: 问答结果 + 参考上下文
    """
    # 构建检索问答链
    qa_chain = RetrievalQA.from_chain_type(
        llm=llm,
        chain_type="stuff",
        retriever=vector_db.as_retriever(k=3),
        return_source_documents=True
    )
    # 执行问答
    result = qa_chain.invoke({"query": question})
    # 整理参考文档
    source_list = [doc.page_content for doc in result["source_documents"]]
    return {
        "code": 200,
        "question": question,
        "answer": result["result"],
        "source_context": source_list
    }

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app="main:app", host="0.0.0.0", port=8000, reload=True)

六、项目核心流程解析

1. 文档分片

使用递归字符分割器,将长文本按照 512字符分片、50字符重叠 切割,避免语义割裂,同时保证检索上下文完整性。

2. 向量入库

通过 OpenAI 嵌入模型将分片文本转为向量,自动存入 Milvus 向量数据库,实现私有数据持久化存储。

3. 相似度检索

用户提问时,问题自动向量化,在 Milvus 中检索 Top3 相似度最高的文档片段,作为问答参考上下文。

4. 大模型生成答案

用户问题 + 检索上下文传入大模型,模型基于私有知识库内容生成精准答案,有效规避AI幻觉。


七、接口文档使用教程

服务启动成功后,直接访问官方自动生成的接口文档:

接口文档地址:http://127\.0\.0\.1:8000/docs

接口1:文档入库接口 /add_doc

传入任意文本内容,自动完成分片、向量化、Milvus入库,用于构建私有知识库。

接口2:智能问答接口 /qa

传入用户问题,自动检索知识库并生成答案,同时返回参考原文,可用于前端展示引用来源。


八、项目优势

  • 极简轻量化:无复杂配置,新手一键运行

  • 私有部署安全:数据全部本地存储,不上传公网

  • 解耦清晰:FastAPI负责接口、Milvus负责向量存储、LangChain负责RAG逻辑

  • 可直接商用:支持前后端对接、二次开发、企业知识库落地


九、总结

本文搭建的 Milvus+LangChain+FastAPI RAG知识库系统,覆盖了私有知识库落地的核心全流程,从文档处理、向量存储、相似度检索到智能问答一站式实现。

相比传统问答模式,RAG架构有效解决大模型幻觉、知识滞后问题,配合FastAPI高性能接口,非常适合个人项目、毕业设计、企业内部知识库开发。

相关推荐
曲幽3 小时前
让FastAPI Agent真正记住你:聊聊会话记忆与持久化存储的落地实践
redis·python·postgresql·fastapi·web·chat·async·session·ai agent
.柒宇.1 天前
AI-Agent入门实战-AI私厨
人工智能·python·langchain·agent·fastapi
步十人1 天前
【FastAPI】ORM-02.使用 ORM 高效处理数据库逻辑
服务器·数据库·fastapi
海市公约1 天前
FastAPI异步ORM增删改实战:从单表操作到一对多关联查询
fastapi·sqlalchemy·pydantic模型·orm增删改·一对多关联·外键与连表·异步session
程序员老邢1 天前
【技术底稿 31】Milvus 2.5.14 实战避坑实录:字段缺失、行数不匹配、Metadata JSON 类型三连坑完整解法
milvus·向量数据库·rag·技术底稿·踩坑实录·37岁老码农
常常有1 天前
中间件与依赖系统:构建高效 Web 后端的双重利器
开发语言·python·中间件·fastapi
散修-小胖子2 天前
Milvus 2.6 架构快速上手
架构·milvus
.唉2 天前
06. FastAPI框架从入门到实战
python·fastapi·web
XerCis2 天前
ngrok实现内网穿透(以Python FastAPI为例)
开发语言·python·fastapi·ngrok