本案例基于Dify.AI开源低代码大模型平台搭建企业私有RAG智能问答系统,实现文档上传、文本切片、向量入库、检索增强问答、前端交互全流程打通。无需从零开发大模型推理服务,依托Dify封装的API快速完成业务集成,适配企业内部规章、产品手册、技术文档等私有知识库场景,支持私有化部署,数据不出内网。
pip install fastapi uvicorn requests python-multipart# Dify服务基础配置
DIFY_BASE_URL = "http://127.0.0.1:8000/v1"
DIFY_API_KEY = "sk-xxxxxxxxxxxxxxxxxxxx"
KNOWLEDGE_ID = "kb-xxxxxx"
APP_ID = "app-xxxxxx"import requests
from fastapi import FastAPI, UploadFile, Form
from fastapi.middleware.cors import CORSMiddleware
from config import DIFY_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")
async def upload_doc(file: UploadFile):
headers = {"Authorization": f"Bearer {DIFY_API_KEY}"}
file_data = {"file": (file.filename, await file.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)
return res.json()
# 2. RAG智能问答接口
@app.post("/chat")
async def chat(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__":
import uvicorn
uvicorn.run("main:app", host="0.0.0.0", port=8080)<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>企业知识库问答</title>
</head>
<body>
<h3>私有知识库问答</h3>
<textarea id="question" placeholder="输入你的问题"></textarea>
<button onclick="sendChat()">提问</button>
<div id="result"></div>
<script>
async function sendChat() {
const q = document.getElementById("question").value;
const res = await fetch("http://127.0.0.1:8080/chat", {
method: "POST",
body: new URLSearchParams({query: q})
});
const data = await res.json();
document.getElementById("result").innerText = "回答:" + data.answer + "\n参考文档片段:" + JSON.stringify(data.reference);
}
</script>
</body>
</html>海量精选技术文档和实战案例持续更新,敬请关注【风骏时光少年】