企业级RAG知识库智能问答系统实战
📅 2026/7/2 17:58:19
👁️ 阅读次数
📝 编程学习
Dify.AI企业级RAG知识库智能问答系统完整前后端集成开发代码案例
一、项目概述
本案例基于Dify.AI开源低代码大模型平台搭建企业私有RAG智能问答系统,实现文档上传、文本切片、向量入库、检索增强问答、前端交互全流程打通。无需从零开发大模型推理服务,依托Dify封装的API快速完成业务集成,适配企业内部规章、产品手册、技术文档等私有知识库场景,支持私有化部署,数据不出内网。
技术栈说明
- 后端:Python3.10 + FastAPI
- 向量库:Dify内置Chroma向量数据库
- 大模型对接:Dify API(兼容通义千问、Llama、GPT系列)
- 前端:原生JavaScript + HTML5
- 核心能力:文档解析、分段向量化、相似度检索、上下文问答、会话记忆
二、环境前置准备
- 本地部署Dify服务,完成模型接入,创建知识库与应用,获取API Key、应用ID、知识库ID;
- 安装依赖包
pipinstallfastapi uvicorn requests python-multipart- 配置Dify基础连接参数,保存环境变量避免硬编码密钥。
三、后端核心接口代码实现
3.1 配置文件 config.py
# Dify服务基础配置DIFY_BASE_URL="http://127.0.0.1:8000/v1"DIFY_API_KEY="sk-xxxxxxxxxxxxxxxxxxxx"KNOWLEDGE_ID="kb-xxxxxx"APP_ID="app-xxxxxx"3.2 主服务 main.py
importrequestsfromfastapiimportFastAPI,UploadFile,Formfromfastapi.middleware.corsimportCORSMiddlewarefromconfigimportDIFY_BASE_URL,DIFY_API_KEY,KNOWLEDGE_ID app=FastAPI(title="Dify RAG问答对接服务")# 跨域配置app.add_middleware(CORSMiddleware,allow_origins=["*"],allow_credentials=True,allow_methods=["*"],allow_headers=["*"],)# 1. 上传文档至Dify知识库@app.post("/upload_doc")asyncdefupload_doc(file:UploadFile):headers={"Authorization":f"Bearer{DIFY_API_KEY}"}file_data={"file":(file.filename,awaitfile.read())}params={"knowledge_id":KNOWLEDGE_ID,"indexing_technique":"high_quality"}res=requests.post(f"{DIFY_BASE_URL}/datasets/documents",headers=headers,files=file_data,params=params)returnres.json()# 2. RAG智能问答接口@app.post("/chat")asyncdefchat(query:str=Form(...)):headers={"Authorization":f"Bearer{DIFY_API_KEY}","Content-Type":"application/json"}payload={"inputs":{},"query":query,"response_mode":"blocking","user":"enterprise_user_001"}res=requests.post(f"{DIFY_BASE_URL}/chat-messages",headers=headers,json=payload)return{"answer":res.json().get("answer"),"reference":res.json().get("retriever_resources")}if__name__=="__main__":importuvicorn uvicorn.run("main:app",host="0.0.0.0",port=8080)四、前端交互演示代码
<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>企业知识库问答</title></head><body><h3>私有知识库问答</h3><textareaid="question"placeholder="输入你的问题"></textarea><buttononclick="sendChat()">提问</button><divid="result"></div><script>asyncfunctionsendChat(){constq=document.getElementById("question").value;constres=awaitfetch("http://127.0.0.1:8080/chat",{method:"POST",body:newURLSearchParams({query:q})});constdata=awaitres.json();document.getElementById("result").innerText="回答:"+data.answer+"\n参考文档片段:"+JSON.stringify(data.reference);}</script></body></html>五、核心业务流程说明
- 文档上传:前端上传PDF/Word/TXT文件,后端转发至Dify接口,自动完成文本清洗、分段、向量存储;
- 用户提问:请求携带问题文本调用对话接口;
- 检索增强:Dify内部执行向量相似度检索,匹配知识库相关片段,拼接至Prompt送入大模型;
- 返回结果:输出模型回答+引用文档溯源,便于校验答案真实性;
- 扩展优化:可新增会话持久化、权限校验、批量文档导入、流式输出等功能。
六、部署与调试要点
- Dify服务必须正常启动,检查端口8000开放,API密钥权限完整;
- 向量检索质量可调整切片长度、检索条数、相似度阈值;
- 生产环境需关闭跨域通配符、密钥加密存储、增加接口限流;
- 大模型响应速度不足时,可切换本地开源模型降低网络延迟。
海量精选技术文档和实战案例持续更新,敬请关注【风骏时光少年】
编程学习
技术分享
实战经验