news 2026/5/8 17:25:22

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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:文本向量化、智能问答生成


三、环境依赖安装

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

pipinstallfastapi uvicorn langchain langchain-openai pymilvus python-dotenv

四、前置准备

1. 启动 Milvus 服务

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

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

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

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

五、完整项目代码

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

fromfastapiimportFastAPIfromfastapi.middleware.corsimportCORSMiddlewarefromlangchain_openaiimportOpenAIEmbeddings,ChatOpenAIfromlangchain_community.vectorstoresimportMilvusfromlangchain.text_splitterimportRecursiveCharacterTextSplitterfromlangchain.schemaimportDocumentfromlangchain.chainsimportRetrievalQAimportosfromdotenvimportload_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")asyncdefinit_milvus():"""服务启动初始化Milvus向量库"""globalvector_db vector_db=Milvus(embedding_function=embedding_model,connection_args={"host":MILVUS_HOST,"port":MILVUS_PORT},collection_name=COLLECTION_NAME)@app.post("/add_doc")asyncdefadd_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")asyncdefknowledge_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_contentfordocinresult["source_documents"]]return{"code":200,"question":question,"answer":result["result"],"source_context":source_list}if__name__=="__main__":importuvicorn 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高性能接口,非常适合个人项目、毕业设计、企业内部知识库开发。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 17:24:37

如何通过29个月的真实充电数据解密电动汽车电池健康状态

如何通过29个月的真实充电数据解密电动汽车电池健康状态 【免费下载链接】battery-charging-data-of-on-road-electric-vehicles This repository is transfered from the personal account of Dr. Zhognwei Deng (Michael Teng) 项目地址: https://gitcode.com/gh_mirrors/b…

作者头像 李华
网站建设 2026/5/8 17:24:01

从API调用日志审计看Taotoken如何助力企业满足合规与内控要求

从API调用日志审计看Taotoken如何助力企业满足合规与内控要求 1. 企业合规审计的核心需求 在企业级大模型应用场景中,技术管理员需要确保每一次API调用都符合内部合规要求。这包括准确记录调用时间、操作人员身份、使用的模型类型以及资源消耗情况。传统自建日志系…

作者头像 李华
网站建设 2026/5/8 17:23:45

STM32中.s文件作用

STM32的.s启动文件(如startup_stm32f10x_hd.s)是整个固件最先运行的一段程序,它为上电后的MCU搭建好执行环境,最终将指挥权交给main函数。 核心任务主要包括: 初始化堆栈指针 (SP) 和程序计数器 (PC) 建立中断向量表 调用SystemInit函数配置系统时钟 调用C库的__main函数…

作者头像 李华