Локальный GraphRAG без GPU: гайд с Llama 3.1, Neo4j и LangChain | AiManual
AiManual Logo Ai / Manual.
28 Мар 2026 Гайд

Как запустить локальный GraphRAG без GPU: пошаговый гайд с Llama 3.1, Neo4j и LangChain

Полный пайплайн GraphRAG на локальной машине без видеокарты. Устанавливаем квантованную Llama 3.1, Neo4j и LangChain для извлечения графа знаний из документов.

Зачем мучиться с облачными API, если GraphRAG работает на ноутбуке?

GraphRAG – это следующий уровень после обычного RAG. Вместо того, чтобы искать похожие чанки текста, система строит граф знаний: вытаскивает сущности, связи между ними и контекст. Ответы становятся точнее, логика – объяснимой, а цепочки рассуждений – наглядными. Но есть проблема. Все примеры требуют либо GPT-4 Turbo за копеечку 30 рублей за запрос, либо мощную GPU с 24 ГБ памяти.

А что если я скажу, что в 2026 году можно запустить полноценный GraphRAG на процессоре от пятилетнего ноутбука? Без единого доллара в OpenAI и без грохота кулеров. Секрет в трех компонентах: квантованная Llama 3.1 8B (новая версия на март 2026), легковесная графовая база Neo4j в Docker и LangChain с его свежим LLMGraphTransformer.

Важно: Это не игрушка. На таком пайплайне уже работают внутренние аналитические системы в небольших компаниях, где документооборот – это тысячи страниц техзаданий, протоколов и отчетов. Только вместо аренды кластера на 10к в месяц – ваш ноутбук.

Что вам понадобится для локального GraphRAG

Железо и софт, которые есть у 90% разработчиков. Никакой экзотики.

  • Процессор: Любой x86_64 с поддержкой AVX2. Intel Core i5 8-го поколения или новее, AMD Ryzen 5. Да, даже на Celeron заработает, просто медленнее.
  • Оперативная память: 16 ГБ минимум. 8 ГБ будет мало, потому что модель (~5 ГБ) + Neo4j (~2 ГБ) + система.
  • Диск: 10 ГБ свободного места. В основном для Docker-образов и модели.
  • ОС: Linux (Ubuntu 22.04+), macOS (Apple Silicon или Intel), Windows 10/11 с WSL2. Гайд написан для Linux, но на других ОС шаги почти идентичны.
Инструмент Версия (актуально на 28.03.2026) Роль
Ollama 0.5.2+ Запуск локальных LLM через REST API
Llama 3.1 8B q2_K квантование Модель для извлечения сущностей и связей
Neo4j 5.21+ Графовая база для хранения знаний
LangChain 0.2.5+ Оркестрация пайплайна, LLMGraphTransformer
Docker 24.0+ Контейнер для Neo4j

1 Ставим Ollama и качаем квантованную Llama 3.1

Ollama – это самый простой способ запускать модели в 2026 году. Установка в одну строку. Квантование q2_K – это агрессивное сжатие, которое жертвует 2-3% точности, но сокращает размер модели в 4 раза. Для задачи извлечения сущностей (NER) и связей этого более чем достаточно.

# Установка Ollama (Linux/macOS)
curl -fsSL https://ollama.com/install.sh | sh

# Запускаем демона
ollama serve &

# Качаем квантованную Llama 3.1 8B. Важно: на март 2026 это самая новая стабильная версия 8B-модели от Meta.
ollama pull llama3.1:8b-q2_K

Почему q2_K, а не q4_0? Потому что на CPU скорость обработки текста линейно зависит от размера модели. q2_K (~2.9 ГБ) работает в 1.8 раза быстрее, чем q4_0 (~4.5 ГБ). Для GraphRAG, где модель будет вызываться десятки раз для каждого документа, это критично. Точности хватает с запасом.

Проверяем, что модель отвечает:

ollama run llama3.1:8b-q2_K "Привет!"

2 Поднимаем Neo4j в Docker. Не в облаке

Neo4j Community Edition – бесплатна и без ограничений на размер графа. В Docker она использует ~500 МБ RAM в простое. Забудьте про AuraDB и платные подписки, пока не упретесь в масштаб в миллионы узлов.

docker run -d \
  --name neo4j-graphrag \
  -p 7474:7474 -p 7687:7687 \
  -e NEO4J_AUTH=neo4j/password123 \
  -v neo4j_data:/data \
  neo4j:5.21

Откройте http://localhost:7474, логин neo4j, пароль password123. Вы увидите пустую базу. Это наш будущий граф знаний. Если хотите сэкономить время на настройке, можно использовать управляемый сервис Neo4j Aura, но для локального эксперимента это избыточно.

3 Готовим Python-окружение без хаоса

Используем uv – новый менеджер пакетов на Rust, который в 2026 году вытеснил pip и poetry. Он ставит зависимости в 10 раз быстрее и не ломает систему.

# Установка uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# Создаем виртуальное окружение и активируем
uv venv graphrag-env
source graphrag-env/bin/activate  # Для Windows: .\\graphrag-env\\Scripts\\activate

# Устанавливаем пакеты
uv add langchain langchain-community langchain-neo4j neo4j ollama pydantic
💡
Pydantic 2.10+ обязателен. В более ранних версиях есть конфликт с LangChain из-за валидации. Если увидите ошибку pydantic.error_wrappers.ValidationError – обновите pydantic.

4 Пишем код пайплайна. Не копипаст из документации

Весь фокус в LLMGraphTransformer – классе из LangChain, который превращает текст в граф, используя LLM. Он сам определяет схему сущностей и связей. Наша задача – правильно его настроить.

Создайте файл graphrag_pipeline.py:

import os
from langchain_community.graphs import Neo4jGraph
from langchain_community.llms import Ollama
from langchain_core.documents import Document
from langchain_experimental.graph_transformers import LLMGraphTransformer

# 1. Подключаемся к Neo4j
graph = Neo4jGraph(
    url="bolt://localhost:7687",
    username="neo4j",
    password="password123",
)

# 2. Инициализируем Ollama с Llama 3.1 8B q2_K
llm = Ollama(
    model="llama3.1:8b-q2_K",
    temperature=0.1,  # Низкая температура для консистентности
    num_ctx=4096,     # Контекстное окно модели
)

# 3. Создаем трансформер для графа
# Здесь магия: LLMGraphTransformer сам решает, какие сущности и связи извлекать
graph_transformer = LLMGraphTransformer(llm=llm)

# 4. Загружаем документ (пример)
text = """
Илон Маск основал компанию SpaceX в 2002 году. Цель SpaceX – колонизация Марса.
SpaceX разработала ракету Falcon 9 и корабль Dragon.
Илон Маск также является CEO Tesla, которая производит электромобили.
Tesla и SpaceX сотрудничают в области аккумуляторных технологий.
"""

document = Document(page_content=text)

# 5. Преобразуем документ в граф
print("Извлекаю сущности и связи... Это займет 30-60 секунд на CPU.")
graph_documents = graph_transformer.convert_to_graph_documents([document])

# 6. Записываем граф в Neo4j
graph.add_graph_documents(graph_documents)

print(f"Добавлено узлов: {len(graph_documents[0].nodes)}")
print(f"Добавлено связей: {len(graph_documents[0].relationships)}")
print("Готово! Откройте Neo4j Browser на http://localhost:7474")

Запускаем:

python graphrag_pipeline.py

Первый запуск займет 30-60 секунд. Модель будет разбивать текст, определять сущности (Person, Organization, Product) и связи (FOUNDED_BY, DEVELOPS, CEO_OF). Результат появится в Neo4j Browser.

5 Задаем вопросы графу. Настоящий RAG

Теперь граф знаний в Neo4j. Чтобы отвечать на вопросы, используем Cypher – язык запросов к графам. LangChain умеет это делать через GraphCypherQAChain.

from langchain.chains import GraphCypherQAChain
from langchain_community.graphs import Neo4jGraph
from langchain_community.llms import Ollama

# Подключаемся к графу
graph = Neo4jGraph(
    url="bolt://localhost:7687",
    username="neo4j",
    password="password123",
)

# LLM для ответов (можно ту же Llama 3.1)
llm = Ollama(model="llama3.1:8b-q2_K", temperature=0.1)

# Создаем цепочку для вопрос-ответов по графу
chain = GraphCypherQAChain.from_llm(
    llm=llm,
    graph=graph,
    verbose=True,  # Показывает сгенерированный Cypher-запрос
    allow_dangerous_requests=True  # Необходимо в последних версиях LangChain
)

# Задаем вопрос
question = "Какие компании основал Илон Маск?"
result = chain.run(question)
print(f"Вопрос: {question}")
print(f"Ответ: {result}")

Цепочка сама сгенерирует Cypher-запрос типа MATCH (p:Person {name: 'Илон Маск'})-[:FOUNDED]->(c:Company) RETURN c.name, выполнит его в Neo4j и передаст результат в LLM для формирования читаемого ответа.

Подводные камни и как их обойти. Опыт из боевых проектов

Ошибка 1: Модель медленно работает на CPU. Решение: Убедитесь, что используете квантование q2_K или q3_K_S. Никогда не используйте полную версию 8B (16 бит) – она займет 8 ГБ RAM и будет тормозить. Если нужна скорость, можно арендовать облачный GPU, например, на vast.ai, но это уже другая история.

Ошибка 2: Neo4j падает с OutOfMemory. Решение: В Docker Desktop ограничьте контейнеру память до 2 ГБ. Или вручную: docker update neo4j-graphrag --memory 2G --memory-swap 2G. Neo4j Community жадная до памяти, но для графа в 10к узлов хватит 2 ГБ.

Ошибка 3: LLMGraphTransformer извлекает мусор. Решение: Настройте схему сущностей. По умолчанию он сам определяет типы, но лучше задать явно. Передайте параметр allowed_nodes=["Person", "Organization", "Product"] и allowed_relationships=["FOUNDED", "DEVELOPS", "CEO_OF"] в конструктор LLMGraphTransformer. Это сократит время обработки и улучшит качество.

Ошибка 4: LangChain обновился, и код сломался. Решение: Фиксируйте версии. На март 2026 стабильная связка: langchain==0.2.5, langchain-community==0.2.5, langchain-experimental==0.0.65. Если тянете последние версии – будьте готовы к поломкам. LangChain ломает API каждые 3 месяца.

Что дальше? Граф знаний как основа для агентов

Вы запустили базовый пайплайн. Теперь это можно развить в полноценную систему. Например, добавить обработку PDF и Word документов через unstructured, связать граф с векторной базой (ChromaDB) для гибридного поиска или подключить агента, который будет ходить по графу и принимать решения. В одной из моих прошлых статей я подробно разбирал как собрать Agentic RAG систему полностью локально – там граф знаний стал ядром для планировщика.

Главное – теперь у вас есть работающий GraphRAG, который не зависит от облаков, API-ключей и наличия интернета. Вы можете анализировать внутренние документы, строить карты знаний по технической литературе или даже использовать это как основу для исследовательского агента. И все это на железе, которое пылилось на полке.

Следующий шаг – заменить однослойный граф на многоуровневый, где связи имеют вес и временные метки. Но это уже тема для отдельного гайда.

Подписаться на канал