Local RAG Backend

Un backend RAG local impulsado por Docker Compose, que admite varios formatos de documentos para búsqueda.

Documentación

local-RAG-backend

Backend de un sistema RAG que se ejecuta completamente con docker compose en un entorno local. Puede registrar varios documentos y buscarlos mediante un servidor MCP.

Características

  • Compatibilidad con una amplia variedad de formatos de archivo: Utiliza unstructured para admitir formatos como PDF, Office, texto, imágenes y más.
  • Función de búsqueda MCP: Reutiliza la implementación de graphiti MCP Server para ofrecer búsqueda compatible con Model Context Protocol.
  • Funciones RAG avanzadas: Utiliza graphiti para devolver resultados de búsqueda vectorial + búsqueda en grafo + búsqueda de texto completo, rerankeados según su relación.
  • Seguimiento de cambios en relaciones temporales: Con la función de episodios de graphiti, puede rastrear cambios en las relaciones entre conceptos dentro de los documentos registrados.
graph TB
    User[システム管理者]
    AIAgent[MCP Client]

    subgraph "local-RAG-backend"
        Ingest[ドキュメント登録<br/>unstructured]
        MCPServer[ナレッジ検索<br/>MCP Server]
        Graphiti[graphiti core]
        Neo4j[Neo4j]
    end

    LLM[LLMモデル<br/>OpenAI API互換]
    Ollama[Embeddingモデル<br/>OpenAI API互換]

    User -->|コマンド実行| Ingest
    AIAgent -->|MCP Tools呼び出し| MCPServer
    Ingest --> Graphiti
    MCPServer --> Graphiti
    Graphiti -->|ドキュメント登録| Neo4j
    Graphiti -->|検索クエリ実行| Neo4j
    Graphiti ---> LLM
    Graphiti ---> Ollama

Getting Started

1. Requisitos previos

  • Disponibilidad de una API LLM compatible con OpenAPI
    • Modelos a utilizar
      • Modelo de embedding para búsqueda vectorial
      • Modelo LLM para búsqueda en grafo
      • Modelo LLM ligero para reranking
    • El modelo de embedding y el modelo LLM pueden especificarse con URLs diferentes
      • Ejemplo:
        • Modelo de embedding: ローカルのOllama
        • Modelo LLM: OpenAI
          • Búsqueda en grafo: o4-mini
          • Reranking: gpt-4.1-nano
      • Nota:
        • Si utiliza un modelo LLM local con Ollama, se requiere un rendimiento que devuelva respuestas con formato especificado en unos pocos segundos.
        • OpenRouter tiende a generar errores por límite de tasa, por lo que se recomienda especificar directamente la ruta de destino.

2. Instalación

# 実行ディレクトリの作成
mkdir -p path/to/RAG/data/input/
cd path/to/RAG/

# ファイルのダウンロード
curl -Lo docker-compose.yml https://raw.githubusercontent.com/suwa-sh/local-RAG-backend/refs/heads/main/docker-compose.yml
curl -Lo .env https://raw.githubusercontent.com/suwa-sh/local-RAG-backend/refs/heads/main/.env.example

# 環境変数設定
vi .env

# 起動
docker compose up -d

3. Registro de documentos

# ドキュメントを配置
cp -r /path/to/documents/* path/to/RAG/data/imput/

# 一括登録実行
# ※エラー終了した場合も、同じコマンドで前回失敗したファイルから再開できます。
docker compose run --rm ingest

# ログ確認
tail ./data/logs/ingest-*.log

Formatos de archivo compatibles

CategoríaFormatos compatibles
Textotxt, md, rst, org
Webhtml, xml
PDFpdf
Microsoft Officedoc, docx, ppt, pptx, xls, xlsx
OpenDocumentodt
Texto enriquecidortf
eBookepub
Datoscsv, tsv
Correo electrónicoeml, msg, p7s
Imágenesbmp, heic, jpeg, jpg, png, tiff, tif

Estructura de directorios

data/input/        : 未処理ファイル
data/input_work/   : エピソード登録中(エピソードファイル保存済み)
data/input_done/   : 処理完了ファイル
data/input_chunks/ : エラー時再処理用チャンク分割ファイル

4. Búsqueda de conocimiento

  • Conexión desde clientes MCP como n8n / AI Agent node o Claude Desktop

    {
      "mcpServers": {
        "graphiti-memory": {
          "transport": "sse",
          "url": "http://localhost:8000/sse"
        }
      }
    }
    

Herramientas MCP disponibles

// RAG用検索
const result = await mcp.call_tool("search_for_rag", {
  query: "RAGシステムについて",
  group_ids: ["default"],
});

// 事実検索
const result = await mcp.call_tool("search_memory_facts", {
  query: "RAGシステムについて",
  group_ids: ["default"],
  max_facts: 10,
});

// ノード検索
const nodes = await mcp.call_tool("search_memory_nodes", {
  query: "システム",
  group_ids: ["default"],
  max_nodes: 5,
  // entity_types: ["Preference"], // 任意: エンティティ種別で絞り込み
});

// エピソード取得
const episodes = await mcp.call_tool("get_episodes", {
  group_ids: ["default"],
  max_episodes: 10,
});

// エピソード追加
const addResult = await mcp.call_tool("add_memory", {
  name: "新しい情報",
  episode_body: "ここに内容を記述",
  group_id: "default",
  source: "text",
});

Configuración

Consulte .env.example para ver la lista de variables de entorno, sus descripciones y valores predeterminados (la configuración se gestiona de forma centralizada en este archivo).

# .env.example をコピーして編集
cp .env.example .env
vi .env

Problemas conocidos

  • Visualización del procesamiento interno de la búsqueda de conocimiento (el análisis de registros es posible)