RAG-Anything 与 vLLM 集成指南:用 OpenAI 兼容 API 打造生产级高吞吐 RAG 推理后端

发布时间:2026/11/3 20:17:17

RAG-Anything 与 vLLM 集成指南:用 OpenAI 兼容 API 打造生产级高吞吐 RAG 推理后端 RAG-Anything 与 vLLM 集成指南用 OpenAI 兼容 API 打造生产级高吞吐 RAG 推理后端【免费下载链接】RAG-AnythingRAG-Anything: All-in-One RAG Framework项目地址: https://gitcode.com/GitHub_Trending/ra/RAG-Anything导读本文基于 RAG-Anything 官方文档 docs/vllm_integration.md 编写系统讲解如何将 vLLM支持 Continuous Batching、PagedAttention、张量并行与 AWQ/GPTQ/FP8 量化的高性能推理引擎接入 RAG-Anything 的多模态文档处理与图检索管线。阅读完本文你将掌握vLLM 服务端与 Embedding 服务的启动参数、.env环境变量的完整配置、OpenAI 兼容函数注入的源码级原理以及并发调优与常见故障排障的实战方法。为什么选择 vLLM 作为 RAG 后端RAG-Anything 的 LLM 与 Embedding 后端采用可插拔绑定Binding设计官方支持openai、ollama、lmstudio、azure_openai、lollms、vllm等类型见 env.example 中的注释。vLLM 暴露的是 OpenAI 兼容 API因此可以直接作为 RAG-Anything 在生产环境中的即插即用drop-in后端无需任何协议适配层。与 Ollama、LM Studio 相比vLLM 的核心差异如下表所示FeaturevLLMOllamaLM StudioContinuous batching✅❌❌PagedAttention✅❌❌Tensor parallelism✅❌❌Production throughput✅ HighModerateLowQuantization (AWQ/GPTQ/FP8)✅✅ (GGUF)✅ (GGUF)Multi-GPU support✅ NativeLimited❌Ease of setupModerateEasyEasyGUI❌❌✅选择 vLLM 的典型场景需要生产级吞吐、同时服务多个并发用户或在多张 GPU 上运行大模型如 70B 参数级别。Continuous Batching 让 vLLM 可以持续吸收并批量处理并发请求避免排队空转PagedAttention 通过分页式 KV Cache 管理显著降低显存浪费Tensor Parallelism 则把大模型切分到多卡上协同推理。前置条件NVIDIA GPU支持 CUDA计算能力Compute Capability≥ 7.0Python 3.9安装 vLLMpip install vllm安装 RAG-Anythingpip install raganything此外运行仓库自带的 examples/vllm_integration_example.py 还需要安装openaiPython 包示例通过AsyncOpenAI与lightrag.llm.openai模块通信以及python-dotenv。快速开始三步跑通 vLLM RAG-Anything第一步启动 vLLM 服务端Chat / Completion 模型用于实体抽取、摘要、查询回答vllm serve Qwen/Qwen2.5-72B-Instruct \ --tensor-parallel-size 4 \ --max-model-len 32768 \ --port 8000Embedding 模型建议独立进程、独立端口避免与对话推理互相抢占显存vllm serve BAAI/bge-m3 \ --task embedding \ --port 8001第二步配置环境变量在项目根目录或示例运行目录创建.env文件### vLLM Configuration LLM_BINDINGvllm LLM_MODELQwen/Qwen2.5-72B-Instruct LLM_BINDING_HOSThttp://localhost:8000/v1 LLM_BINDING_API_KEYtoken-abc123 ### Embedding via vLLM EMBEDDING_BINDINGvllm EMBEDDING_MODELBAAI/bge-m3 EMBEDDING_DIM1024 EMBEDDING_BINDING_HOSThttp://localhost:8001/v1 EMBEDDING_BINDING_API_KEYtoken-abc123仓库根目录的 env.example 同样收录了 vLLM 配置段默认注释状态并指向本文作为设置指南。第三步运行示例脚本cd examples python vllm_integration_example.py该脚本examples/vllm_integration_example.py的执行流程依次为测试 vLLM 连接列出可用模型→ 测试 Chat 补全 → 初始化 RAG-Anything → 注入演示内容并执行 hybrid 查询。全部通过后退出码为 0。环境变量全表VariableDefaultDescriptionLLM_BINDING—设为vllmLLM_MODELQwen/Qwen2.5-72B-Instruct模型名必须与 vLLM 实际服务的模型名完全一致LLM_BINDING_HOSThttp://localhost:8000/v1vLLM API base URLLLM_BINDING_API_KEYtoken-abc123API keyvLLM 默认接受任意非空字符串EMBEDDING_BINDING—设为vllmEMBEDDING_MODELBAAI/bge-m3Embedding 模型名EMBEDDING_DIM1024Embedding 向量维度bge-m3 默认 1024EMBEDDING_BINDING_HOSThttp://localhost:8001/v1Embedding 端点 URLEMBEDDING_BINDING_API_KEYtoken-abc123Embedding API key相关并发参数在 env.example 中有默认值定义MAX_ASYNC4LLM 最大并发请求数、TIMEOUT240LLM 超时秒数None为无限、MAX_TOKENS32768发送给 LLM 的实体/关系摘要最大 token 数需小于模型上下文长度。vLLM 场景下可适当调大MAX_ASYNC以充分利用其批量推理能力见下文性能调优。支持的模型配置组合Qwen 2.5RAG 场景推荐vllm serve Qwen/Qwen2.5-72B-Instruct \ --tensor-parallel-size 4 \ --max-model-len 32768Mistral / Mixtralvllm serve mistralai/Mixtral-8x7B-Instruct-v0.1 \ --tensor-parallel-size 2 \ --max-model-len 32768Llama 3.1 70Bvllm serve meta-llama/Llama-3.1-70B-Instruct \ --tensor-parallel-size 4 \ --max-model-len 8192AWQ 量化显著降低显存占用vllm serve Qwen/Qwen2.5-72B-Instruct-AWQ \ --tensor-parallel-size 2 \ --quantization awq \ --max-model-len 32768GPTQ 量化vllm serve TheBloke/Mixtral-8x7B-Instruct-v0.1-GPTQ \ --tensor-parallel-size 2 \ --quantization gptq性能调优建议张量并行Tensor Parallelism将大模型分布到多张 GPU 上--tensor-parallel-size设置为 GPU 数量# 4x A100 80GB → 可以全精度服务 72B 模型 vllm serve Qwen/Qwen2.5-72B-Instruct --tensor-parallel-size 4显存利用率若显存有富余可调高默认 0.9vllm serve ... --gpu-memory-utilization 0.95最大模型长度若不需要完整上下文可调低以节省显存# RAG 分块通常小于 4K token8192 往往已经足够 vllm serve ... --max-model-len 8192并发vLLM 自动处理批处理batching。在 RAG-Anything 一侧调大.env中的MAX_ASYNCMAX_ASYNC16 # vLLM 可高效处理并发请求投机解码Speculative DecodingvLLM ≥ 0.4使用小模型作 draft model 加速生成vllm serve Qwen/Qwen2.5-72B-Instruct \ --speculative-model Qwen/Qwen2.5-0.5B-Instruct \ --num-speculative-tokens 5 \ --tensor-parallel-size 4Embedding 方案三选一RAG 管线的向量化环节可以独立于对话模型选择后端甚至可以在同一个 RAG-Anything 实例中混合使用不同后端。方案 AvLLM Embedding Server推荐为 Embedding 运行一个专用 vLLM 实例vllm serve BAAI/bge-m3 --task embedding --port 8001方案 B继续用 Ollama 做 Embedding如果已经在运行 Ollama可以混合后端——对话走 vLLMEmbedding 走 OllamaEMBEDDING_BINDINGollama EMBEDDING_MODELbge-m3:latest EMBEDDING_BINDING_HOSThttp://localhost:11434方案 COpenAI Embeddings对话使用 vLLMEmbedding 走 OpenAI APIEMBEDDING_BINDINGopenai EMBEDDING_MODELtext-embedding-3-large EMBEDDING_DIM3072 EMBEDDING_BINDING_HOSThttps://api.openai.com/v1 EMBEDDING_BINDING_API_KEYsk-...系统架构┌──────────────────────┐ │ RAG-Anything │ │ (Document Processing│ │ Query Engine) │ └──────┬───────────────┘ │ OpenAI-compatible API ▼ ┌──────────────────────┐ ┌──────────────────────┐ │ vLLM Chat Server │ │ vLLM Embedding Server│ │ :8000/v1 │ │ :8001/v1 │ │ (Qwen-72B, etc.) │ │ (bge-m3, etc.) │ └──────────────────────┘ └──────────────────────┘ │ │ ▼ ▼ ┌──────────────────────────────────────────────┐ │ GPU Cluster │ │ PagedAttention · Continuous Batching │ │ Tensor Parallelism · Quantization │ └──────────────────────────────────────────────┘源码视角vLLM 是如何接入 RAG-Anything 的RAG-Anything 并不内置 vLLM 客户端而是依赖 OpenAI 兼容协议与 LightRAG 的 LLM/Embedding 函数注入机制。理解这一层有助于你在不修改仓库源码的前提下自由组合任意 OpenAI 兼容后端。1. LLM 函数openai_complete_if_cache在 examples/vllm_integration_example.py 中顶层 LLM 函数vllm_llm_model_func直接委托给lightrag.llm.openai.openai_complete_if_cache并将LLM_BINDING_HOST作为base_url传入。由于 vLLM 暴露 OpenAI 兼容 API该函数天然支持带缓存的补全调用cache 命中可显著降低重复抽取的推理成本。函数被设计为模块级top-level定义以保证进程内可 pickle 序列化——这是 LightRAG 在异步任务与存储系统中传递函数的关键约束。2. Embedding 函数openai_embedvllm_embedding_asyncexamples/vllm_integration_example.py调用lightrag.llm.openai.openai_embed连接 vLLM 的 Embedding 端点可位于独立端口 8001返回List[List[float]]向量列表。随后通过EmbeddingFunc(embedding_dim1024, max_token_size8192, funcvllm_embedding_async)封装为可序列化的嵌入函数bge-m3 默认维度 1024、上下文 8192。3. 注入到RAGAnything在initialize_rag中两个函数通过构造参数注入self.rag RAGAnything( configself.config, llm_model_funcvllm_llm_model_func, embedding_funcself.embedding_func_factory(), )从 raganything/raganything.py 的_ensure_lightrag_initialized实现可以看到当未预置 LightRAG 实例时llm_model_func与embedding_func是创建新LightRAG实例的必需参数缺失会直接报错返回当预置 LightRAG 时若未显式传入会自动从 LightRAG 实例继承这两个函数raganything.py。这也解释了为什么 vLLM 场景下示例采用传入函数 由 RAGAnything 内部创建 LightRAG的方式。RAGAnythingConfigraganything/config.py负责文档解析侧配置示例中通过parsermineru、parse_methodauto选择解析器并通过enable_table_processingTrue、enable_equation_processingTrue开启表格与公式的模态处理此时modal_caption_func会使用注入的llm_model_func即 vLLM 后端见 raganything.py。示例还使用了带 UUID 的全新working_dir./rag_storage_vllm/{uuid4()}以避免旧版doc_status模式冲突。4. 内容插入与查询内容插入await self.rag.insert_content_list(content_list..., file_path..., doc_id..., display_statsTrue)按 RAGAnything 约定的 content_list 格式含type: text、text、page_idx字段注入演示文本查询await self.rag.aquery(query, modehybrid | local | global)支持 LightRAG 的三种检索模式混合、局部、全局查询底层通过QueryMixinraganything/query.py封装。文档处理示例中默认注释取消注释后使用真实文件路径即可await self.rag.process_document_complete(file_path..., output_dir./output_vllm, parse_methodauto, display_statsTrue)完成解析 → 多模态处理 → 入库的完整链路。故障排查Troubleshooting连接被拒绝Connection Refused❌ Connection failed: Connection refused确认 vLLM 正在运行curl http://localhost:8000/v1/models检查端口与LLM_BINDING_HOST是否一致大模型加载可能耗时数分钟请等待模型加载完成后再发起请求显存不足Out of Memorytorch.cuda.OutOfMemoryError改用量化模型--quantization awq或gptq调小--max-model-len增大--tensor-parallel-size需要更多 GPU调低--gpu-memory-utilization模型找不到Model Not FoundModel xxx not foundLLM_MODEL必须与 vLLM 实际服务的模型名精确一致用curl http://localhost:8000/v1/models查看当前可用的模型列表首次请求慢Slow First Request属于正常现象——vLLM 首次使用时需要编译 CUDA kernel后续请求会明显变快。可将首次请求视为预热warm-up在服务正式对外前主动发一次健康请求。结语vLLM RAG-Anything 的组合在架构上非常简洁RAG-Anything 侧只依赖 OpenAI 兼容协议与函数注入vLLM 侧只需按需启动 Chat 与 Embedding 两个服务端点。通过本文的环境变量表、模型启动参数与源码级调用链你可以将任意 OpenAI 兼容的高性能推理引擎平滑接入多模态 RAG 管线并在并发、量化与多卡维度持续调优吞吐。更多细节可进一步阅读仓库中的 env.example、examples/vllm_integration_example.py 以及 docs/offline_setup.md离线部署场景。【免费下载链接】RAG-AnythingRAG-Anything: All-in-One RAG Framework项目地址: https://gitcode.com/GitHub_Trending/ra/RAG-Anything创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/31 2:37:56

一文读懂 HCCL Reduce:集合通信里的多卡归约接口

一文读懂 HCCL Reduce:集合通信里的多卡归约接口 【免费下载链接】runner-images GitHub Actions runner images 项目地址: https://gitcode.com/GitHub_Trending/ru/runner-images HcclReduce 是 HCCL 集合通信中的归约算子:多台 NPU 各持一份数…

2026/11/3 20:12:26

Vibe Coding:提升开发效率的心流编程方法论

1. 什么是Vibe Coding?第一次听到Vibe Coding这个词是在一个开发者社区,当时看到有人分享用这种方式完成了一个人月的工作量。简单来说,Vibe Coding是一种强调开发节奏和沉浸感的编程方法论,核心在于通过特定的工具链和工作流&…

2026/11/3 20:12:26

AI如何革新漏洞挖掘:从静态分析到动态fuzzing

1. 从标题拆解看AI赋能的漏洞挖掘革命"黑客已死"这个标题看似夸张,实则揭示了当前安全研究领域的范式转移。传统渗透测试中,人类黑客需要花费数周甚至数月进行逆向工程、模糊测试和代码审计,而Claude这类AI系统在两周内独立发现22个…

2026/11/3 20:12:26

Tableau Server彻底卸载指南与残留清理技巧

1. 问题背景:为什么Tableau Server卸载会不干净?Tableau Server作为企业级商业智能平台,其安装过程会深度集成到系统环境中。不同于普通桌面软件,它的卸载残留问题主要源于三个层面:服务组件复杂性:默认安装…

2026/11/3 20:12:26

Windows共享文件夹配置与安全管理全指南

1. Windows共享文件夹基础概念与场景解析在办公环境和家庭局域网中,文件共享是最基础也最频繁的需求之一。Windows系统自带的共享文件夹功能,允许不同设备间通过SMB协议实现文件互通。相比第三方传输工具,原生共享方案具有无需安装、传输稳定…

2026/11/3 20:12:26

PS手写签名提取:从抠图到光学重建的全流程指南

1. 项目概述:为什么“PS提取手写签名”是高频刚需,且远不止于抠图那么简单“PS提取手写签名”这六个字,几乎每天都在设计群、行政办公群、自由职业接单群、甚至高校教务助理的聊天记录里反复出现。它表面看是个Photoshop基础操作——把一张带…

2026/11/3 20:07:25

DDR5 JEDEC标准解读:模式寄存器与信号完整性调试

简介:JEDEC JESD79-5(2020年7月正式版)DDR5 SDRAM标准全文,面向内存芯片设计、硬件验证、固件开发、系统平台选型及高校相关课程人员,提供从协议定义到电气与封装实现的统一参考。文档共492页,系统覆盖DDR5…

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

STM32实战:基于MAX14431数字隔离器的SPI隔离通信方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

工业SPI隔离通信设计:MAX14431BAEE+与STM32L4A6RG实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

STM32+NRF24L01无线抢答器:硬件设计、通信协议与低功耗实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑