RAG+Vllm的知识库部署检索方案

轻量级快速方案(推荐起步)

架构组件

组件 选型建议 说明
嵌入模型 BAAI/bge-large-zh-v1.5 或 Qwen3-Embedding-0.6B 中文支持好
向量数据库 Chroma(轻量)或 FAISS(高性能) 本地部署,无需额外服务
文档切分 RecursiveCharacterTextSplitter 按段落/句子智能切分

核心代码实现

python

复制代码
# 1. 知识库准备(一次性)
from langchain.document_loaders import TextLoader, DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import Chroma

# 加载控规文档
loader = DirectoryLoader("./控规文档/", glob="*.txt", loader_cls=TextLoader)
documents = loader.load()

# 智能切分(适合控规文件特点)
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=800,          # 每块800字符
    chunk_overlap=200,       # 重叠200,保留上下文
    separators=["\n\n", "\n", "。", ";", ",", " "]
)
chunks = text_splitter.split_documents(documents)

# 中文嵌入模型
embeddings = HuggingFaceEmbeddings(
    model_name="BAAI/bge-large-zh-v1.5",
    model_kwargs={"device": "cuda"}
)

# 存入向量库
vectorstore = Chroma.from_documents(chunks, embeddings, persist_directory="./chroma_db")

python

复制代码
# 2. 查询接口(每次请求)
def rag_query(user_query: str, system_prompt: str) -> str:
    # 检索相关文档片段
    retriever = vectorstore.as_retriever(search_kwargs={"k": 5})
    relevant_docs = retriever.get_relevant_documents(user_query)
    
    # 构建上下文
    context = "\n\n---\n\n".join([doc.page_content for doc in relevant_docs])
    
    # 增强后的提示词
    augmented_prompt = f"""【参考知识库内容】
{context}

【用户问题】
{user_query}

【要求】
请严格依据上述知识库内容进行回答。如果知识库中没有相关信息,请明确说明。"""

    # 调用 vLLM
    import requests
    response = requests.post(
        "http://192.168.3.215:7899/v1/chat/completions",
        headers={"Authorization": "Bearer sk-*****"},
        json={
            "model": "Qwen/Qwen3-8B",
            "messages": [
                {"role": "system", "content": system_prompt},
                {"role": "user", "content": augmented_prompt}
            ],
            "temperature": 0.0,
            "max_tokens": 8192
        }
    )
    return response.json()["choices"][0]["message"]["content"]
相关推荐
code2cat3 天前
【随笔】连续批处理:长短请求怎样在迭代之间补位
java·人工智能·后端·大语言模型·vllm
一枕槐安4873 天前
Qwen 通义千问本地部署与推理服务封装
fastapi·qwen·vllm·流式推理·openai兼容api·awq量化
mumu1574 天前
快速上手大模型推理vllm
人工智能·python·大语言模型·agent·vllm
code2cat4 天前
【随笔】vLLM前缀缓存:相同的开头怎样少算一次
人工智能·python·缓存·vllm
JAI科研9 天前
把一个 Qwen3.8的聊天模型改造成 JEV 决策模型
人工智能·语言模型·自然语言处理·chatgpt·transformer·vllm·sglang
谢白羽10 天前
从传统运维到 AI Infra: K8s 上调度 100 张 GPU踩坑笔记
运维·人工智能·缓存·kubernetes·vllm·sglang·vllm-omni
Hrain-AI11 天前
企业本地推理引擎选型实战:Ollama、vLLM 与 MLX 怎么挑
vllm
摸鱼仙人~11 天前
从 AI 应用开发到 GPU 计算软件:一份完整的 GPGPU、PyTorch、vLLM 与 AI Infra 学习路线
人工智能·pytorch·vllm
程序猿编码11 天前
不依赖 vLLM/llama.cpp:一套面向学习的 DeepSeek-R1 CUDA 推理实现
c++·学习·语言模型·llama·vllm·大模型推理
缘友一世12 天前
GLM5.3 CyberSec w4A16本地部署[10]:CUDA 图捕获与编译开关
ubuntu·vllm·glm5.3 cybersec