RAG无处不在
RAG Anywhere是一个分布式运行时,可以在几分钟内从任何LLM系统查询任何数字文件。它将RAG视为基础设施,而不是特定于应用程序的功能:用户、代理、桌面工具、web应用程序或远程对等体连接到受信任的RAG端点,通过签名流上传或路由内容,并通过MCP查询统一的知识平面。
在完成的形式中,RAG Anywhere充当多模式检索的控制平面、授权平面、路由平面和执行平面。它通过特定于模态的引擎摄取文档、图像、音频、视频和未来的文件类型;将MCP公开为规范代理接口;为浏览器用户体验、上传和操作端点保留HTTP;并且跨本地和远程可查询对等体联合结果,而不需要原始源材料离开拥有它的节点。
该项目在部署形式上是本地优先的,在架构上是分布式优先的。单个节点可作为完整的个人或团队RAG运行时。多个节点形成了一个可查询对等体的半可信网络,其中访问是明确的,传输是经过身份验证的,共享值来自检索系统的输出,而不是私有源语料库的无限制复制。
长期模式是:
- RAG任何文件:每个重要的数字工件都可以通过正确的模态引擎进行查询。
- 任何地方的RAG:任何受信任的代理或应用程序都可以通过MCP和签名的上传或UI流连接到RAG anywhere运行时。
- RAG一次完成:许多对等体可以参与一个路由检索结构,在整个网络中保留来源、身份验证和策略。
先决条件
- Docker桌面中启用了Docker模型运行器。请参阅Docker的官方设置文档:
快速入门
所需的预启动步骤:
mkdir -p model_assets
curl -L --fail -o model_assets/mmproj-F16.gguf \
https://hf.co/unsloth/Qwen3.5-2B-GGUF/resolve/main/mmproj-F16.gguf
docker model package \
--from hf.co/unsloth/Qwen3.5-2B-GGUF \
--mmproj "$PWD/model_assets/mmproj-F16.gguf" \
docker.io/local/qwen3.5-2b-vlm:latest然后启动应用程序:
docker compose up --build首先打包本地视觉模型,然后启动堆栈。Docker Compose构建容器并启动服务器。声明的Docker Model Runner模型由Docker在需要时提供。
Claude桌面配置
{
"mcpServers": {
"rag-anywhere": {
"type": "streamable-http",
"url": "http://localhost:8000/mcp"
}
}
}首先启动服务器 docker compose up --build.
工具
| 工具 | 说明 |
|---|---|
query | 通过已路由的知识平面检索上下文 |
create_ui_session_link | 创建指向库UI的短期签名浏览器链接 |
create_upload_link | 创建一个一次性上传URL,用于通过HTTP上传代理驱动的文件 |
query
{
"query": "what does X do?",
"mode": "mix",
"target": "auto",
"collection_ids": ["default"],
"top_k": 8
}create_ui_session_link
{ "requested_for": "alice", "ttl_seconds": 900 }create_upload_link
{
"requested_for": "alice",
"filename": "/absolute/path/to/file.pdf",
"collection_id": "default",
"ttl_seconds": 900
}检索模式: local · global · hybrid · naive · mix (默认)
目标: auto (默认)· document · video · all
建筑
Agent / App / User / Trusted Peer
│
│ MCP for query and session bootstrap
│ HTTP for browser UX, uploads, health, and operations
▼
RAG-Anywhere Runtime
│
├──────────────► Control plane
│ identity, trust, session grants, upload grants
│
├──────────────► Routing plane
│ modality routing, query federation, provenance
│
├──────────────► Local engines
│ documents, images, audio, video, future modalities
│
└──────────────► Queryable peers
trusted remote runtimes that share retrieval outputRAG Anywhere提供了一种面向RAG表面的代理:MCP。代理查询运行时,请求签名的UI链接,并请求一次性上传链接。HTTP仍然是一个可操作的和面向用户的配套表面,而不是第二个竞争的RAG API。用户打开已签名的库UI,上传内容,检查状态,并管理本地知识节点。随着时间的推移,相同的运行时形状扩展到受信任的对等体联盟,这样节点就可以在本地引擎和批准的远程对等体之间路由查询,同时保留访问策略和来源。
当前的代码库作为具有本地模态引擎和本地清单的单个Python进程运行,但架构标识更广泛:该进程是可查询对等运行时的单节点形式。它拥有摄取、索引、签名访问授权、查询路由和结果联合。默认情况下,本地存储保持对等本地。远程交互被建模为受控查询访问,而不是原始文件系统共享。
媒体路由
RAG Anywhere将文件支持视为运行时功能,而不是特殊情况:
- 文档被路由到文档图和多模式解析引擎中。
- 图像通过专用的视觉路径贡献元数据和语义。
- 音频通过本地语音识别,成为带有时间戳的知识。
- 视频通过本地视频引擎路由,该引擎融合了视觉描述、分段音频、时间戳和图形提取。
- 未来的文件类适合相同的模型:附加一个模态引擎,通过路由运行时公开它,并在结果集中保留来源。
当所需的模态路径无法生成使文件有意义可查询所需的元数据时,运行时会失败关闭。目标是不接受任何文件扩展名并假装成功;目标是使任何重要的数字工件都能真正被检索。
web UI位于 /ui 通过已签名的会话链接访问,并显示检测到的模态、选定的摄取路径以及用于每个文件的引擎。
代理上传流程
代理不会将本地文件系统路径传递给MCP,并希望服务器能够看到它们。相反:
- MCP仍然是查询和会话引导的控制界面。
create_ui_session_link为人类在循环库访问返回一个短暂的浏览器会话。create_upload_link返回一个一次性HTTP上传URL,任何支持shell的代理都可以使用该URL将字节推送到运行时。- 同样的模型也适用于远程对等体:MCP建立意图和信任,签名的HTTP流移动面向用户的会话和上传有效载荷,运行时在数据应该存在的地方进行本地摄取。
这种设计使运行时易于连接到桌面代理、web代理、本地shell和未来的远程对等体,而无需将RAG耦合到特定的客户端文件系统或UI模型。
分布模型
RAG Anywhere是围绕可查询对等体的概念构建的:
- 对等体拥有其本地文件、索引、策略和模态引擎。
- 对等体通过可信接口公开检索输出,而不是盲目导出源材料。
- 对等体可以参与半可信网络,在该网络中,访问是显式的,联合查询是策略感知的。
- 对等体可以为一个用户、一个团队或更广泛的连接运行时子网提供服务。
从长远来看,运行时与私有网格或VPN信任层兼容,如Headscale风格的WireGuard控制平面,同时仍为浏览器和上传流颁发应用层会话授权。网络信任和应用程序信任相辅相成:设备可以属于网络,但单个会话、上传和代理操作仍然会收到范围有限的短期授权。
有用的运行时命令:
docker compose up --build
docker compose logs -f
docker compose downffmpeg 和 ffprobe 在应用程序容器内需要用于本地视频摄取。 /api/health 报告这两个工具是否可用。
模型
| 角色 | 型号 | 大小 | 许可证 |
|---|---|---|---|
| LLM合成 | hf.co/unsloth/Qwen3.5-2B-GGUF | 约1.4 GB | Apache 2.0 |
| 视觉元数据 | docker.io/local/qwen3.5-2b-vlm:latest | 取决于包装好的GGUF+ mmproj | 取决于打包的来源 |
| 嵌入(远程) | hf.co/unsloth/Qwen3-Embedding-0.6B | 约400 MB | Apache 2.0 |
| 嵌入(本地) | all-MiniLM-L6-v2 通过句子转换器 | ~80 MB | Apache 2.0 |
本地嵌入(all-MiniLM-L6-v2)默认情况下在中使用 server.py任何与OpenAI兼容的端点都可以用于文本或视觉,只要它接受标准的多模式 chat/completions 请求:
地方视觉包装
使用包括Qwen GGUF权重和匹配的多模态伪影 mmproj 投影仪文件。纯文本GGUF将不接受图像输入,即使模型族是多模态的。
例子:
docker model package \
--gguf /absolute/path/to/model.gguf \
--mmproj /absolute/path/to/mmproj.gguf \
docker.io/local/qwen3.5-2b-vlm:latest
docker model list --openai打包的模型参考必须匹配 VISION_MODEL.
配置
复制 .env.example 到 .env 并为本地(非Docker)运行进行编辑。Docker Compose注入自己的值并获得优先级。
| 变量 | 默认值 | 描述 |
|---|---|---|
LLM_API_BASE | http://localhost:12434/engines/v1 | 与OpenAI兼容的API基础URL |
LLM_MODEL | hf.co/unsloth/Qwen3.5-2B-GGUF | RAG合成的LLM |
VISION_API_BASE | http://localhost:12434/engines/v1 | 与OpenAI兼容的多模式API基础URL,用于文档图像 |
VISION_MODEL | docker.io/local/qwen3.5-2b-vlm:latest | 用于图像元数据提取的视觉模型 |
VISION_API_KEY | docker-model-runner | vision客户端身份验证标头的可选覆盖 |
VISION_REQUIRED | true | 如果所需的图像元数据提取不成功,则文档摄取失败 |
EMBEDDING_MODEL | hf.co/unsloth/Qwen3-Embedding-0.6B | 远程嵌入模型(当本地嵌入活动时未使用) |
ST_MODEL | sentence-transformers/all-MiniLM-L6-v2 | 本地句子转换器嵌入模型 |
EMBEDDING_DIM | unset | 嵌入维度覆盖;当未设置时, server.py 自动检测 ST_MODEL |
OPENAI_API_KEY | docker-model-runner | 客户端库要求;模型运行程序忽略的值 |
APP_BASE_URL | http://localhost:8000 | 生成签名UI和上传链接时使用的外部基本URL |
RAG_SESSION_SECRET | change-me-for-production | HMAC密钥用于签署短期用户界面和上传授权 |
UI_SESSION_TTL_SECONDS | 900 | 已签名浏览器UI会话链接的默认TTL |
UPLOAD_LINK_TTL_SECONDS | 900 | 一次性上传链接的默认TTL |
RAG_WORKING_DIR | ~/.rag_storage | LightRAG存储其图形和矢量的位置 |
DEFAULT_COLLECTION_ID | default | 当没有提供时,分配给上传的集合 |
VIDEO_ENGINE_ENABLED | true | 启用进程内 VideoEngineAdapter |
VIDEO_SEGMENT_LENGTH | 30 | 视频分割和索引的分段长度(秒) |
AUDIO_TRANSCRIBE_MODEL | openai/whisper-small | 用于音频上传和视频片段转录的本地ASR模型 |
