← 返回知识库
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) = 检索增强生成:

  1. 用户问题 → 向量化 → 检索相关文档
  2. 文档 + 问题 → 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"]])

优化技巧

  1. 文档分块:每块 500-1000 字,重叠 100 字
  2. 检索增强:先 BM25 再向量检索(hybrid search)
  3. 重排序:用 BGE-reranker 重新排序 top-50 → top-3
  4. Prompt 模板根据以下资料回答问题。如资料不足,请说"我不确定"。\ \ 资料:\ {context}\ \ 问题:{question}

评估

推荐用 RAGAS 框架评估:

  • Faithfulness(忠实度)
  • Answer Relevance(答案相关性)
  • Context Precision(检索精度)