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
unstructuredpara admitir formatos como PDF, Office, texto, imágenes y más. - Función de búsqueda MCP: Reutiliza la implementación de
graphiti MCP Serverpara ofrecer búsqueda compatible con Model Context Protocol. - Funciones RAG avanzadas: Utiliza
graphitipara 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
- Búsqueda en grafo:
- Modelo de embedding:
- 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.
- Ejemplo:
- Modelos a utilizar
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ía | Formatos compatibles |
|---|---|
| Texto | txt, md, rst, org |
| Web | html, xml |
| Microsoft Office | doc, docx, ppt, pptx, xls, xlsx |
| OpenDocument | odt |
| Texto enriquecido | rtf |
| eBook | epub |
| Datos | csv, tsv |
| Correo electrónico | eml, msg, p7s |
| Imágenes | bmp, 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)