Local RAG Backend
Um backend RAG local alimentado por Docker Compose, suportando vários formatos de documentos para busca.
Documentação
local-RAG-backend
Este é o backend de um sistema RAG que roda inteiramente com docker compose em ambiente local. Você pode registrar vários documentos e pesquisá-los via servidor MCP.
Recursos
- Suporte a uma ampla variedade de formatos de arquivo: Utiliza
unstructuredpara suportar diversos formatos como PDF, Office, texto, imagens e outros. - Funcionalidade de busca MCP: Reutiliza a implementação de
graphiti MCP Serverpara fornecer busca compatível com Model Context Protocol. - Recursos avançados de RAG: Utiliza
graphitipara retornar resultados de busca vetorial + busca em grafo + busca em texto completo, reordenados por relevância relacional. - Acompanhamento de mudanças nas relações ao longo do tempo: Com o recurso de episódios de
graphiti, é possível rastrear mudanças nas relações entre conceitos nos 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
Começando
1. Pré-requisitos
- Ter acesso a uma API LLM compatível com OpenAPI
- Modelos utilizados
- Modelo de embedding para busca vetorial
- Modelo LLM para busca em grafo
- Modelo LLM leve para reordenação
- É possível especificar URLs diferentes para o modelo de embedding e o modelo LLM
- Exemplo:
- Modelo de embedding:
ローカルのOllama - Modelo LLM:
OpenAI- Busca em grafo:
o4-mini - Reordenação:
gpt-4.1-nano
- Busca em grafo:
- Modelo de embedding:
- Observações:
- Ao usar um modelo LLM local com Ollama, é necessário que a resposta com formato especificado seja retornada em poucos segundos.
- O OpenRouter tende a gerar erros de limite de taxa, então recomendamos especificar diretamente a rota de destino.
- Exemplo:
- Modelos utilizados
2. Instalação
# 実行ディレクトリの作成
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 arquivo suportados
| Categoria | Formatos suportados |
|---|---|
| Texto | txt, md, rst, org |
| Web | html, xml |
| Microsoft Office | doc, docx, ppt, pptx, xls, xlsx |
| OpenDocument | odt |
| Rich Text | rtf |
| eBook | epub |
| Dados | csv, tsv |
| eml, msg, p7s | |
| Imagens | bmp, heic, jpeg, jpg, png, tiff, tif |
Estrutura de diretórios
data/input/ : 未処理ファイル
data/input_work/ : エピソード登録中(エピソードファイル保存済み)
data/input_done/ : 処理完了ファイル
data/input_chunks/ : エラー時再処理用チャンク分割ファイル
4. Busca de conhecimento
-
Conecte-se a partir de clientes MCP, como nó n8n / AI Agent ou Claude Desktop
{ "mcpServers": { "graphiti-memory": { "transport": "sse", "url": "http://localhost:8000/sse" } } }
Ferramentas MCP disponíveis
// 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",
});
Configuração
Consulte .env.example para a lista de variáveis de ambiente, descrições e valores padrão (as configurações são centralizadas neste arquivo).
# .env.example をコピーして編集
cp .env.example .env
vi .env
Problemas conhecidos
- Visualização do processamento interno da busca de conhecimento (análise de logs é possível)