Token导航 LogoToken导航TokenDH.com
MCP Raganything logo
搜索检索stdio官方级别未说明来源级核验

MCP Raganything

MCP Server

基于RAGAnything和LightRAG的多模态检索增强生成服务,提供文档索引和知识库查询功能,支持REST API和MCP服务器。

工具数

7

提示词数

0

GitHub Stars

12

资源数

0
混合搜索PythonClaude文档检索Claude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

SoluDevTech

提供方

SoluDevTech

最后核验

2026/5/17 20:21

运行时

Python

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

uv run python src/main.py

详细介绍

MCP RAGAnything

建筑

                            Clients
                     (REST / MCP / Claude)
                               |
                 +-------------+-------------+
                 |          FastAPI App        |
                 +-------------+-------------+
                               |
               +---------------+---------------+
               |                               |
       Application Layer            MCP Servers (FastMCP)
       +------------------------------+       |
       | api/                         |   +---+--------+  +--+-----------+  +--+-------------+
       |   indexing_routes.py         |   | RAGAnything |  | RAGAnything |  | RAGAnything    |
       |   query_routes.py            |   | Query       |  | Files       |  | Classical      |
       |   file_routes.py             |   |  /rag/mcp   |  |  /files/mcp |  |  /classical/mcp|
       |   health_routes.py           |   +---+--------+  +--+-----------+  +--+-------------+
       |   classical_indexing_routes   |       |               |                 |
       |   classical_query_routes      |       |               |         classical_index_file
       | use_cases/                   |       |               |         classical_index_folder
       |   IndexFileUseCase           |       |               |         classical_query
       |   IndexFolderUseCase         |
       |   QueryUseCase               |
       |   ClassicalIndexFileUseCase   |
       |   ClassicalIndexFolderUseCase |
       |   ClassicalQueryUseCase       |
       |   ListFilesUseCase           |
       |   ListFoldersUseCase         |
       |   ReadFileUseCase            |
       | requests/ responses/         |
       +------------------------------+
                |         |          |
                v         v          v
     Domain Layer (ports)
     +----------------------------------------------------------+
     | RAGEnginePort  StoragePort  BM25EnginePort              |
     | DocumentReaderPort  VectorStorePort  LLMPort            |
     +----------------------------------------------------------+
              |         |          |            |      |
              v         v          v            v      v
     Infrastructure Layer (adapters)
     +----------------------------------------------------------+
      | LightRAGAdapter       MinioAdapter                        |
      | (RAGAnything/         (minio-py)                          |
      |  KreuzbergParser)                                         |
     |                                                            |
     | PostgresBM25Adapter       RRFCombiner                      |
     | (pg_textsearch)            (hybrid+ fusion)                |
     |                                                            |
     | KreuzbergAdapter          LangchainPgvectorAdapter         |
     | (kreuzberg - 91 formats) (langchain-postgres PGVector)    |
     |                                                            |
     | LangchainOpenAIAdapter                                     |
     | (langchain-openai ChatOpenAI)                             |
     +----------------------------------------------------------+
              |         |          |            |      |
              v         v          v            v      v
        PostgreSQL        MinIO       Kreuzberg    OpenAI-compatible
        (pgvector +     (object     (document     (LLM API)
         Apache AGE      storage)    extraction)
         pg_textsearch)

先决条件

  • Python 3.13+
  • Docker和Docker Compose
  • 开放路由 API密钥(或任何与OpenAI兼容的提供程序)
  • soludev-compose-apps/bricks/ 用于生产部署的堆栈(提供PostgreSQL、MinIO和此服务)

快速开始

生产从共享的组合堆栈运行 soludev-compose-apps/bricks/The docker-compose.yml 此存储库仅用于本地开发。

本地开发

# 1. Install dependencies
uv sync

# 2. Start PostgreSQL and MinIO (docker-compose.yml provides Postgres;
#    MinIO must be available separately or added to the compose file)
docker compose up -d postgres

# 3. Configure environment
cp .env.example .env
# Edit .env: set OPEN_ROUTER_API_KEY and adjust MINIO_HOST / POSTGRES_HOST

# 4. Run the server
uv run python src/main.py

API可在 http://localhost:8000.Swagger用户界面位于 http://localhost:8000/docs.

生产(soludev编写应用程序)

cd soludev-compose-apps/bricks/
docker compose up -d

这将启动所有砖服务,包括 raganything-api, postgres,以及 minio.

API 参考

基础路径: /api/v1

健康

# Health check
curl http://localhost:8000/api/v1/health

答复:

{"message": "RAG Anything API is running"}

索引

两个索引端点都接受JSON正文并在后台运行处理。文件从MinIO下载,而不是直接上传。

索引单个文件

下载由标识的文件 file_name 从配置的MinIO存储桶中,然后将其索引到RAG知识图中 working_dir.

curl -X POST http://localhost:8000/api/v1/file/index \
  -H "Content-Type: application/json" \
  -d '{
    "file_name": "project-alpha/report.pdf",
    "working_dir": "project-alpha"
  }'

答复(202 Accepted):

{"status": "accepted", "message": "File indexing started in background"}
字段类型必填描述
file_namestringyesMinIO存储桶中的对象路径
working_dirstringyesRAG工作区目录(项目隔离)

为文件夹建立索引

列出下的所有对象 working_dir 在MinIO中添加前缀,下载它们,然后对整个文件夹进行索引。

curl -X POST http://localhost:8000/api/v1/folder/index \
  -H "Content-Type: application/json" \
  -d '{
    "working_dir": "project-alpha",
    "recursive": true,
    "file_extensions": [".pdf", ".docx", ".txt"]
  }'

答复(202 Accepted):

{"status": "accepted", "message": "Folder indexing started in background"}
字段类型必填默认描述
working_dirstringyes--RAG工作区目录,也用作MinIO前缀
recursivebooleantrue递归处理子目录
file_extensionslist\[string\]null (所有文件)按扩展名筛选,例如。 [".pdf", ".docx", ".txt"]

支持的文档格式

该服务通过RAGAnything解析器自动检测和处理以下文档格式:

格式扩展名注释
PDF.pdf包括OCR支持(通过Tesseract提供英语+法语)
微软Word.docx
微软PowerPoint.pptx
微软Excel.xlsx
HTML.html, .htm
纯文本.txt, .text, .md支持UTF-8、UTF-16、ASCII;通过ReportLab转换为PDF
Quarto Markdown.qmdQuarto文件
R Markdown.Rmd, .rmdR Markdown文件
图片.png, .jpg, .jpeg, .gif, .webp, .bmp, .tiff, .tif视觉模型处理(如果启用)

注: 文件格式检测是自动的。无需配置即可指定文档类型。该服务将在索引时处理任何支持的格式。安装时,所有文档和图像格式都支持开箱即用 raganything[all].

文件浏览和读取

直接从MinIO浏览和读取文件,而无需将其编入RAG知识库。由...驱动 克罗伊茨贝格 用于文档文本提取(91种文件格式)。

列出文件

# List all files in the bucket
curl http://localhost:8000/api/v1/files/list

# List files under a specific prefix
curl "http://localhost:8000/api/v1/files/list?prefix=documents/&recursive=true"

答复(200 OK):

[
  {"object_name": "documents/report.pdf", "size": 1024, "last_modified": "2026-01-01 00:00:00+00:00"},
  {"object_name": "documents/notes.txt", "size": 512, "last_modified": "2026-01-02 00:00:00+00:00"}
]
参数类型默认值说明
prefix字符串""MinIO前缀用于筛选文件
recursive布尔值true列出子目录中的文件

上传文件

将文件直接上传到MinIO存储桶。文件存储在 {prefix}{filename}。此端点确实 索引文件--使用 POST /file/index 上传后将端点添加到RAG知识库中。

允许的文件类型: .pdf, .txt, .docx, .xlsx, .pptx, .md, .csv, .png, .jpg, .jpeg, .gif, .webp, .svg, .bmp, .html, .xml, .json, .rtf, .odt, .ods 最大文件大小: 50 MB

curl -X POST http://localhost:8000/api/v1/files/upload \
  -F "file=@report.pdf" \
  -F "prefix=documents/"

答复(201 Created):

{"object_name": "documents/report.pdf", "size": 2048, "message": "File uploaded successfully"}
字段类型必填默认描述
filefileyes--要上传的文件(多部分表单)
prefixstring""MinIO前缀(文件夹路径)。必须是相对路径

错误响应:

状态条件
413文件超过50 MB限制
422前缀无效(路径遍历/绝对)、不允许的文件类型或缺少文件

读取文件

从MinIO下载文件,使用Kreuzberg提取其文本内容,并返回结果。支持91种文件格式,包括PDF、Office文档、图像和HTML。

curl -X POST http://localhost:8000/api/v1/files/read \
  -H "Content-Type: application/json" \
  -d '{"file_path": "documents/report.pdf"}'

答复(200 OK):

{
  "content": "Extracted text from the document...",
  "metadata": {"format_type": "pdf", "mime_type": "application/pdf"},
  "tables": [{"markdown": "| Header | Value |\n|---|---|\n| A | 1 |"}]
}
字段类型描述
file_path字符串必修的。 MinIO存储桶中的文件路径(相对,无 .. 或绝对路径)

错误响应:

状态条件
404在MinIO中找不到文件
422不支持的文件格式或无效路径(路径遍历、绝对路径)

查询

查询索引知识库。RAG引擎针对给定的 working_dir 在执行查询之前。

curl -X POST http://localhost:8000/api/v1/query \
  -H "Content-Type: application/json" \
  -d '{
    "working_dir": "project-alpha",
    "query": "What are the main findings of the report?",
    "mode": "naive",
    "top_k": 10
  }'

答复(200 OK):

{
  "status": "success",
  "message": "",
  "data": {
    "entities": [],
    "relationships": [],
    "chunks": [
      {
        "reference_id": "...",
        "content": "...",
        "file_path": "...",
        "chunk_id": "..."
      }
    ],
    "references": []
  },
  "metadata": {
    "query_mode": "naive",
    "keywords": null,
    "processing_info": null
  }
}
字段类型必填默认描述
working_dirstringyes--此项目的RAG工作区目录
querystringyes--搜索查询
modestring"naive"搜索模式: naive, local, global, hybrid, hybrid+, mix, bm25, bypass

BM25查询模式

返回按PostgreSQL全文搜索排序的结果,使用 pg_textsearch每个区块均包含一个 score BM25相关性得分的字段。

curl -X POST http://localhost:8000/api/v1/query \
  -H "Content-Type: application/json" \
  -d '{
    "working_dir": "project-alpha",
    "query": "quarterly revenue growth",
    "mode": "bm25",
    "top_k": 10
  }'

答复(200 OK):

{
  "status": "success",
  "message": "",
  "data": {
    "entities": [],
    "relationships": [],
    "chunks": [
      {
        "chunk_id": "abc123",
        "content": "Quarterly revenue grew 12% year-over-year...",
        "file_path": "reports/financials-q4.pdf",
        "score": 3.456,
        "metadata": {}
      }
    ],
    "references": []
  },
  "metadata": {
    "query_mode": "bm25",
    "total_results": 10
  }
}

混合+查询模式

并行运行BM25和向量搜索,然后使用交互秩融合(RRF)合并结果。每个区块包括 bm25_rank, vector_rank,以及 combined_score 领域。

curl -X POST http://localhost:8000/api/v1/query \
  -H "Content-Type: application/json" \
  -d '{
    "working_dir": "project-alpha",
    "query": "quarterly revenue growth",
    "mode": "hybrid+",
    "top_k": 10
  }'

答复(200 OK):

{
  "status": "success",
  "message": "",
  "data": {
    "entities": [],
    "relationships": [],
    "chunks": [
      {
        "chunk_id": "abc123",
        "content": "Quarterly revenue grew 12% year-over-year...",
        "file_path": "reports/financials-q4.pdf",
        "score": 0.0328,
        "bm25_rank": 1,
        "vector_rank": 3,
        "combined_score": 0.0328,
        "metadata": {}
      }
    ],
    "references": []
  },
  "metadata": {
    "query_mode": "hybrid+",
    "total_results": 10,
    "rrf_k": 60
  }
}

combined_score 是以下各项的总和 bm25_scorevector_score,每个计算如下 1 / (k + rank)。结果按以下方式排序 combined_score 下降。出现在两个结果集中的块的综合得分将高于仅出现在一个中的块。

______________________________________________________________________

经典RAG管道

基于图的LightRAG旁边的第二个检索路径。经典RAG使用一个简单的块→ 嵌入→ 使用两种质量增强技术检索流: 多查询生成法学硕士作为裁判相关性评分。它将块存储在专用的PGVector表中(每个表一个 working_dir)并且不构建知识图。

运作原理

  1. 索引 --从MinIO下载一个文件,通过Kreuzberg提取文本(使用分块),每个块都嵌入并存储在PGVector表中。
  2. 查询 --LLM生成用户查询的N个备选短语(多查询),对每个变体进行相似性搜索,结果由 chunk_id,然后法学硕士评委以0-10的评分标准对每个块的相关性进行评分。低于相关性阈值的块被丢弃;其余的按分数排序返回。

经典索引

两个经典的索引端点都接受JSON正文并在后台运行处理。

索引单个文件(经典)

从MinIO下载文件,使用Kreuzberg分块提取文本,并将分块嵌入到范围为的PGVector表中 working_dir.

curl -X POST http://localhost:8000/api/v1/classical/file/index \
  -H "Content-Type: application/json" \
  -d '{
    "file_name": "project-alpha/report.pdf",
    "working_dir": "project-alpha",
    "chunk_size": 1000,
    "chunk_overlap": 200
  }'

答复(202 Accepted):

{"status": "accepted", "message": "File indexing started in background"}
字段类型必填默认描述
file_namestringyes--MinIO bucket中的对象路径
working_dirstringyes--RAG工作区目录(项目隔离)
chunk_size整数1000每个块的最大字符数(100-10000)
chunk_overlap整数200块之间的重叠字符(0-2000)

索引文件夹(经典)

列出下的所有对象 working_dir 在MinIO中添加前缀,下载它们,并将每个文件索引到PGVector表中。

curl -X POST http://localhost:8000/api/v1/classical/folder/index \
  -H "Content-Type: application/json" \
  -d '{
    "working_dir": "project-alpha",
    "recursive": true,
    "file_extensions": [".pdf", ".docx", ".txt"],
    "chunk_size": 1000,
    "chunk_overlap": 200
  }'

答复(202 Accepted):

{"status": "accepted", "message": "Folder indexing started in background"}
字段类型必填默认描述
working_dirstringyes--RAG工作区目录,也用作MinIO前缀
recursivebooleantrue递归处理子目录
file_extensionslist\[string\]null (所有文件)按扩展名筛选,例如。 [".pdf", ".docx", ".txt"]
chunk_size整数1000每个块的最大字符数(100-10000)
chunk_overlap整数200块之间的重叠字符(0-2000)

经典查询

查询经典的RAG管道。支持两种模式: 向量 (默认)和 混合 (通过互易秩融合的BM25+向量)。

矢量模式(默认)

LLM生成查询变体,对每个变体运行向量相似性搜索,对结果进行重复数据消除,然后用LLM判断对其进行评分和过滤。

curl -X POST http://localhost:8000/api/v1/classical/query \
  -H "Content-Type: application/json" \
  -d '{
    "working_dir": "project-alpha",
    "query": "What are the main findings of the report?",
    "top_k": 10,
    "num_variations": 3,
    "relevance_threshold": 5.0,
    "mode": "vector"
  }'

混合模式

并行运行BM25全文搜索和多查询向量搜索,使用交互排名融合(RRF)合并结果,然后用LLM判断进行评分。块包括 bm25_score, vector_score,以及 combined_score 领域。

curl -X POST http://localhost:8000/api/v1/classical/query \
  -H "Content-Type: application/json" \
  -d '{
    "working_dir": "project-alpha",
    "query": "What are the main findings of the report?",
    "mode": "hybrid"
  }'

答复(200 OK):

{
  "status": "success",
  "message": "",
  "queries": [
    "What are the main findings of the report?",
    "What key results does the report present?",
    "Summarize the primary conclusions from the report"
  ],
  "chunks": [
    {
      "chunk_id": "a1b2c3d4-...",
      "content": "The primary finding indicates that...",
      "file_path": "project-alpha/report.pdf",
      "relevance_score": 8.5,
      "metadata": {"chunk_index": 0},
      "bm25_score": 0.0164,
      "vector_score": 0.0164,
      "combined_score": 0.0328
    }
  ],
  "mode": "hybrid"
}

如果BM25不可用(BM25_ENABLED=false 或者缺少pg_textsearch扩展),混合模式将回退到向量模式并记录警告。

字段类型必填默认描述
working_dirstringyes--此项目的RAG工作区目录
querystringyes--搜索查询
top_k整数10每个查询变量检索的最大块数(1-100)
num_variations整数3LLM生成的查询变体数量(1-10)
relevance_thresholdfloat5.0最低LLM评判分数(0-10),包括一个块
modestring"vector"查询方式: vector (仅矢量)或 hybrid (BM25+矢量RRF)

LightRAG与经典RAG

AspectLightRAG(基于图形)经典RAG
存储Apache AGE知识图+pgvector仅pgvector表
索引构建实体/关系图仅限块+嵌入
查询模式naive, local, global, hybrid, hybrid+, mix, bm25, bypassvector (多查询+LLM判断), hybrid (BM25+矢量RRF)
项目隔离共享图 working_dir单独的PG表 working_dir
最适合复杂推理、关系遍历简单的文档问答、更简单的设置

______________________________________________________________________

MCP服务器

该服务公开 三台MCP服务器,全部使用流式HTTP传输:

RAGAnythingQuery-- /rag/mcp

用于搜索索引知识库的以查询为中心的工具。

工具: query_knowledge_base

参数类型默认值说明
working_dirstring必需此项目的RAG工作区目录
querystring必填搜索查询
mode字符串"hybrid"搜索模式: naive, local, global, hybrid, hybrid+, mix, bm25, bypass
top_k整数5要检索的块数

工具: query_knowledge_base_multimodal

参数类型默认值说明
working_dirstring必需此项目的RAG工作区目录
querystring必填搜索查询
multimodal_contentlist必填多模式内容项列表
mode字符串"hybrid"搜索模式
top_k整数5要检索的块数

RAGAnythingFiles-- /files/mcp

文件浏览工具,用于列出和读取MinIO存储中的文件。

工具: list_files

参数类型默认值说明
prefix字符串""MinIO前缀用于筛选文件
recursive布尔值true列出子目录中的文件

工具: read_file

参数类型默认值说明
file_pathstringrequiredMinIO bucket中的文件路径(例如。 documents/report.pdf)

从MinIO下载文件,使用Kreuzberg提取其文本内容,并返回提取的文本以及元数据和任何检测到的表。

RAGAnythings经典-- /classical/mcp

用于在没有知识图的情况下进行索引和查询的经典RAG工具。

工具: classical_index_file

参数类型默认值说明
file_namestring必需MinIO bucket中的对象路径
working_dirstring必需RAG工作区目录(项目隔离)
chunk_size整数1000每个块的最大字符数(100-10000)
chunk_overlap整数200块之间的重叠字符(0-2000)

工具: classical_index_folder

参数类型默认值说明
working_dirstringrequiredRAG工作区目录,也用作MinIO前缀
recursive布尔值true递归处理子目录
file_extensionslist\[字符串\]null (所有文件)按扩展名筛选,例如。 [".pdf", ".docx"]
chunk_size整数1000每个块的最大字符数(100-10000)
chunk_overlap整数200块之间的重叠字符(0-2000)

工具: classical_query

参数类型默认值说明
working_dirstring必需此项目的RAG工作区目录
querystring必填搜索查询
top_k整数10每个查询变量检索的最大块数
num_variations整数3LLM生成的查询变体数量(1-10)
relevance_threshold浮子5.0最低LLM评判分数(0-10),包括一个块
mode字符串"vector"查询方式: vector (仅矢量)或 hybrid (BM25+矢量RRF)

运输

所有MCP服务器都使用 可流式传输HTTP 运输独家。将MCP客户端连接到装载路径:

http://localhost:8000/rag/mcp          # RAGAnythingQuery
http://localhost:8000/files/mcp        # RAGAnythingFiles
http://localhost:8000/classical/mcp    # RAGAnythingClassical

配置

所有配置都是通过环境变量进行的,通过Pydantic Settings加载。看 .env.example 以获取完整的参考。

应用程序(AppConfig)

变量默认值描述
HOST0.0.0.0服务器绑定地址
PORT8000服务器端口
ALLOWED_ORIGINS["*"]CORS允许的来源
OUTPUT_DIRsystem temp下载文件的临时目录
UVICORN_LOG_LEVELcriticalUvicorn测井水位

数据库(DatabaseConfig)

变量默认值描述
POSTGRES_USERraganythingPostgreSQL用户
POSTGRES_PASSWORDraganythingPostgreSQL密码
POSTGRES_DATABASEraganythingPostgreSQL数据库名称
POSTGRES_HOSTlocalhostPostgreSQL主机
POSTGRES_PORT5432PostgreSQL端口

LLMLLMConfig)

变量默认值描述
OPEN_ROUTER_API_KEY--必修的。 OpenRouter API密钥
OPEN_ROUTER_API_URLhttps://openrouter.ai/api/v1OpenRouter基本URL
BASE_URL--覆盖基本URL(优先于 OPEN_ROUTER_API_URL)
CHAT_MODELopenai/gpt-4o-mini聊天完成模型
EMBEDDING_MODELtext-embedding-3-small嵌入模型
EMBEDDING_DIM1536嵌入向量维度
MAX_TOKEN_SIZE8192嵌入的最大令牌大小
VISION_MODELopenai/gpt-4o图像处理的视觉模型

抹布(RAGConfig)

变量默认值描述
RAG_STORAGE_TYPEpostgres存储后端: postgreslocal
DOCUMENT_PARSERkreuzbergLightRAG管道的文档解析器: kreuzberg (通过OpenRouter的VLM OCR), mineru,或 paddleocr
COSINE_THRESHOLD0.2向量搜索的相似性阈值(0.0-1.0)
MAX_CONCURRENT_FILES1并发文件处理限制
MAX_WORKERS3文件夹处理工人
ENABLE_IMAGE_PROCESSINGtrue在索引过程中处理图像
ENABLE_TABLE_PROCESSINGtrue索引期间处理表
ENABLE_EQUATION_PROCESSINGtrue索引过程中的过程方程

BM25(BM25Config)

变量默认值描述
BM25_ENABLEDtrue启用BM25全文搜索
BM25_TEXT_CONFIGenglishPostgreSQL文本搜索配置
BM25_RRF_K60混合搜索的RRF常数K(必须大于等于1)

BM25_ENABLEDfalse 或者pg_textsearch扩展不可用, hybrid+ 模式回退到 naive (仅矢量)和 bm25 模式返回错误。

经典RAG(ClassicalRAGConfig)

变量默认值描述
CLASSICAL_CHUNK_SIZE1000每个块的最大字符数(Kreuzberg ChunkingConfig)
CLASSICAL_CHUNK_OVERLAP200块之间的字符重叠
CLASSICAL_NUM_QUERY_VARIATIONS3LLM生成的多查询变体数量(1-10)
CLASSICAL_RELEVANCE_THRESHOLD5.0结果中包含的块的最低LLM评判分数(0-10)
CLASSICAL_TABLE_PREFIXclassical_rag_PGVectorStore表名的前缀。全名: {prefix}{sha256(working_dir)[:16]}
CLASSICAL_LLM_TEMPERATURE0.0LLM调用温度(多查询生成+法官评分)
CLASSICAL_RRF_K60混合BM25+矢量搜索的RRF常数K(必须大于等于1)

经典的RAG适配器共享相同的 OPEN_ROUTER_API_KEY, OPEN_ROUTER_API_URL/BASE_URL, CHAT_MODEL, EMBEDDING_MODEL,以及 EMBEDDING_DIM LLM配置中的设置。如果初始化失败(例如缺少API密钥),则经典端点返回 503 Service Unavailable 存在描述性错误。

MinIO(MinioConfig)

变量默认值描述
MINIO_HOSTlocalhost:9000MinIO端点(主机:端口)
MINIO_ACCESSminioadminMinIO访问密钥
MINIO_SECRETminioadminMinIO密钥
MINIO_BUCKETraganything默认存储桶名称
MINIO_SECUREfalseMinIO使用HTTPS

查询模式

模式描述
naive仅矢量搜索——快速,推荐默认
local使用知识图进行以实体为中心的搜索
global在知识图谱中以关系为中心的搜索
hybrid结合本地+全球战略
hybrid+使用互易秩融合(RRF)的并行BM25+矢量搜索。两全其美
mix知识图+矢量块组合
bm25仅限BM25全文搜索。PostgreSQL pg_textsearch
bypass无需检索即可直接进行LLM查询

发展

uv sync                          # Install all dependencies (including dev)
uv run python src/main.py        # Run the server locally
uv run pytest                    # Run tests with coverage
uv run ruff check src/           # Lint
uv run ruff format src/          # Format
uv run mypy src/                 # Type checking

Docker(本地)

docker compose up -d             # Start Postgres + API
docker compose logs -f raganything-api   # Follow API logs
docker compose down -v           # Stop and remove volumes

数据库迁移

Alembic迁移在启动时通过以下方式自动运行 db_lifespan 上下文管理器 main.py。在中跟踪迁移状态 raganything_alembic_version 表,与 composable-agents Alembic表避免冲突。

初始迁移(001_add_bm25_support)创建 chunks 桌子与a tsvector 用于全文搜索的列、GIN和BM25索引以及自动更新触发器。

生产要求

PostgreSQL服务器必须具有 pg_textsearch 扩展已安装并加载。在生产中,这需要:

  1. Dockerfile.db 构建一个自定义的PostgreSQL镜像,用于编译 pg_textsearch 来源(连同 pgvectorApache AGE).
  1. docker-compose.yml 必须配置 shared_preload_libraries=pg_textsearch 为了 bricks-db 服务。本地开发人员 docker-compose.yml 默认情况下,此存储库中包含此内容。
  1. Alembic移民 001_add_bm25_support 将失败,如果 pg_textsearch 不可用。确保数据库映像是从以下内容构建的 Dockerfile.db 并且共享库被预加载。

项目结构

src/
  main.py                           -- FastAPI app, triple MCP mounts, entry point
  config.py                         -- Pydantic Settings config classes
  dependencies.py                   -- Dependency injection wiring
  domain/
    entities/
      indexing_result.py             -- FileIndexingResult, FolderIndexingResult
    ports/
      rag_engine.py                  -- RAGEnginePort (abstract)
      storage_port.py                -- StoragePort (abstract) + FileInfo
      bm25_engine.py                 -- BM25EnginePort (abstract)
      document_reader_port.py        -- DocumentReaderPort (abstract) + DocumentContent
      vector_store_port.py          -- VectorStorePort (abstract) + SearchResult
      llm_port.py                   -- LLMPort (abstract)
  application/
    api/
      health_routes.py               -- GET /health
      indexing_routes.py              -- POST /file/index, /folder/index
      query_routes.py                 -- POST /query
      file_routes.py                  -- GET /files/list, GET /files/folders, POST /files/read
      classical_indexing_routes.py   -- POST /classical/file/index, /classical/folder/index
      classical_query_routes.py      -- POST /classical/query
      mcp_query_tools.py              -- MCP tools: query_knowledge_base, query_knowledge_base_multimodal
      mcp_file_tools.py               -- MCP tools: list_files, read_file
      mcp_classical_tools.py          -- MCP tools: classical_index_file, classical_index_folder, classical_query
    requests/
      indexing_request.py            -- IndexFileRequest, IndexFolderRequest
      classical_indexing_request.py  -- ClassicalIndexFileRequest, ClassicalIndexFolderRequest
      classical_query_request.py     -- ClassicalQueryRequest
      query_request.py                -- QueryRequest, MultimodalQueryRequest
      file_request.py                 -- ListFilesRequest, ReadFileRequest
    responses/
      query_response.py              -- QueryResponse, QueryDataResponse
      classical_query_response.py    -- ClassicalQueryResponse, ClassicalChunkResponse
      file_response.py                -- FileInfoResponse, FileContentResponse
    use_cases/
      index_file_use_case.py         -- Downloads from MinIO, indexes single file (LightRAG)
      index_folder_use_case.py       -- Downloads from MinIO, indexes folder (LightRAG)
      query_use_case.py              -- Query with bm25/hybrid+ support
      classical_index_file_use_case.py  -- Classical: download → Kreuzberg chunk → PGVector
      classical_index_folder_use_case.py -- Classical: folder batch index
      classical_query_use_case.py    -- Classical: multi-query + LLM judge + hybrid BM25
      _classical_helpers.py          -- validate_path, build_documents_from_extraction
      list_files_use_case.py          -- Lists files with metadata from MinIO
      list_folders_use_case.py        -- Lists folder prefixes from MinIO
      read_file_use_case.py           -- Reads file from MinIO, extracts content via Kreuzberg
      upload_file_use_case.py          -- Uploads file to MinIO storage
  infrastructure/
    rag/
      lightrag_adapter.py            -- LightRAGAdapter (RAGAnything/LightRAG)
      kreuzberg_raganything_parser.py -- KreuzbergRAGAnythingParser (kreuzberg, custom parser for RAGAnything)
    storage/
      minio_adapter.py               -- MinioAdapter (minio-py client)
    document_reader/
      kreuzberg_adapter.py            -- KreuzbergAdapter (kreuzberg, 91 formats)
    bm25/
      pg_textsearch_adapter.py        -- PostgresBM25Adapter (pg_textsearch, LightRAG tables)
      classical_bm25_adapter.py        -- ClassicalBM25Adapter (pg_textsearch, classical_rag_* tables)
    hybrid/
      rrf_combiner.py                 -- RRFCombiner (Reciprocal Rank Fusion)
    vector_store/
      langchain_pgvector_adapter.py -- LangchainPgvectorAdapter (langchain-postgres PGVectorStore)
    llm/
      langchain_openai_adapter.py    -- LangchainOpenAIAdapter (langchain-openai ChatOpenAI)
  alembic/
    env.py                            -- Alembic migration environment (async)
    versions/
      001_add_bm25_support.py          -- BM25 table, indexes, triggers

许可证

麻省理工学院

目录标签

目录标签

混合搜索PythonClaude文档检索多模态RAG本地部署知识图谱自然语言处理

支持客户端

Claude

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

none

运行时(runtime,运行环境)

Python

工具数量(toolCount,工具数)

7

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdionone部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP