RAG#RAG#BGE-M3#Qwen2.5#知识库
RAG 知识库完整方案:Qwen2.5 + BGE + vLLM
RAG = 检索增强生成。本文给出企业级 RAG 完整方案:Qwen2.5-7B + BGE-M3 + vLLM 部署。
盖茨·2026/7/22·18 阅读
RAG 知识库完整方案
什么是 RAG?
RAG (Retrieval-Augmented Generation) = 检索增强生成:
- 用户问题 → 向量化 → 检索相关文档
- 文档 + 问题 → LLM → 答案
相比纯 LLM:
- ✅ 可以引用最新/私有知识
- ✅ 答案可追溯(带出处)
- ✅ 减少幻觉
推荐技术栈
| 组件 | 推荐 | 备选 |
|---|---|---|
| LLM | Qwen2.5-7B-Instruct | Llama-3.1-8B |
| Embedding | BGE-M3 (中文) | BGE-large-zh |
| 推理引擎 | vLLM | Ollama |
| 向量库 | Milvus / Qdrant | pgvector |
| 框架 | LangChain / LlamaIndex | Dify / FastGPT |
完整部署(以 Qwen2.5-7B + BGE-M3 为例)
硬件:1× RTX 4060 Ti 16G(¥0.6 万)
步骤 1:部署 LLM(Ollama)
ollama serve
ollama pull qwen2.5:7b
步骤 2:部署 BGE-M3 Embedding 服务
# embed_server.py
from fastapi import FastAPI
from sentence_transformers import SentenceTransformer
import uvicorn
app = FastAPI()
model = SentenceTransformer('BAAI/bge-m3')
@app.post("/embed")
def embed(texts: list[str]):
vectors = model.encode(texts, normalize_embeddings=True)
return {"vectors": vectors.tolist()}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8001)
步骤 3:搭建 LangChain Pipeline
from langchain.llms import Ollama
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import Milvus
from langchain.chains import RetrievalQA
llm = Ollama(model="qwen2.5:7b")
embeddings = HuggingFaceEmbeddings(model_name="BAAI/bge-m3")
vector_db = Milvus(embeddings, connection_args={"host":"localhost","port":"19530"})
qa = RetrievalQA.from_chain_type(
llm=llm,
retriever=vector_db.as_retriever(search_kwargs={"k": 3}),
return_source_documents=True,
)
result = qa("模力Lab 是做什么的?")
print(result["result"])
print("来源:", [d.metadata for d in result["source_documents"]])
优化技巧
- 文档分块:每块 500-1000 字,重叠 100 字
- 检索增强:先 BM25 再向量检索(hybrid search)
- 重排序:用 BGE-reranker 重新排序 top-50 → top-3
- Prompt 模板:
根据以下资料回答问题。如资料不足,请说"我不确定"。\ \ 资料:\ {context}\ \ 问题:{question}
评估
推荐用 RAGAS 框架评估:
- Faithfulness(忠实度)
- Answer Relevance(答案相关性)
- Context Precision(检索精度)