Wikontic: пайплайн для графов знаний из текста с LLM в 2026 | AiManual
AiManual Logo Ai / Manual.
19 Фев 2026 Инструмент

Wikontic: когда ваш RAG перестает галлюцинировать и начинает думать связями

Практический разбор Wikontic — пайплайна для построения графов знаний из неструктурированного текста с помощью LLM. Архитектура, код, сравнение с альтернативами

Знания — это не просто текст. Это связи

К началу 2026 года проблема галлюцинаций в RAG-системах перестала быть академической. Все эти "нейросеть придумала несуществующую статью закона" или "сгенерировала фейковую цитату из внутреннего документа" — теперь это вопросы финансовых потерь и репутационных рисков. Классический RAG с векторным поиском по чанкам текста уперся в потолок.

Потому что смысл — не в словах, а в отношениях между понятиями. Когда LLM видит "Илон Маск купил Twitter в 2022 году", она должна понимать не просто последовательность токенов, а структуру: есть сущность "Илон Маск" (человек), есть сущность "Twitter" (компания), между ними отношение "приобрел", есть атрибут "дата: 2022". Это и есть граф знаний.

На 19.02.2026 Wikontic — один из немногих открытых пайплайнов, который не просто декларирует работу с графами, а показывает полный цикл: от сырого текста до готовой онтологии, которую можно засунуть в Neo4j или любой другой графовый движок.

Архитектура: четыре шага от хаоса к структуре

Wikontic не пытается быть универсальным фреймворком. Его философия проста: берешь текст, запускаешь пайплайн, получаешь граф. Всё. Под капотом работает четыре последовательных модуля, и каждый можно кастомизировать.

1 Классификация и сегментация

Первое, что делает Wikontic — пытается понять, о чем вообще текст. Это не банальное "технический/нетехнический", а определение доменной области: юриспруденция, медицина, финансы, научные статьи. Зачем? Потому что онтология для медицинских текстов и для финансовых отчетов — это разные вселенные.

Здесь обычно используют легкую модель вроде BERT- или DeBERTa-based классификаторов, обученных на доменных датасетах. На 2026 год популярны варианты на основе Qwen2.5-1.5B-Instruct или Llama-3.2-1B-Instruct для баланса скорости и точности. После классификации текст режется на смысловые сегменты — не по количеству символов, а по тематическим блокам.

💡
Если пропустить этот шаг, то в одном графе у вас окажутся "инъекция инсулина" (медицина) и "инъекция ликвидности" (финансы) как одно и то же. LLM справится с контекстом, но графовая модель сойдет с ума.

2 Извлечение сущностей и отношений

Сердце пайплайна. Здесь LLM (обычно GPT-4o-mini, Claude 3.5 Haiku или локальная Qwen2.5-32B-Instruct) получает промпт с четкой инструкцией: найди в тексте сущности определенных типов и связи между ними.

Типы сущностей не берутся с потолка — они задаются заранее подготовленной схемой (proto-ontology). Для юридических текстов это будут "Закон", "Статья", "Организация", "Физическое лицо". Для медицинских — "Заболевание", "Симптом", "Препарат", "Процедура".

Вывод модели строго структурируется в JSON. Никакого свободного текста. Только так:

{
  "entities": [
    {"id": "e1", "text": "Илон Маск", "type": "PERSON"},
    {"id": "e2", "text": "Twitter Inc.", "type": "ORGANIZATION"}
  ],
  "relations": [
    {"from": "e1", "to": "e2", "type": "ACQUIRED", "attributes": {"date": "2022"}}
  ]
}

3 Разрешение кореференции и нормализация

Самая скучная и самая важная часть. LLM извлекла сущности, но в одном абзаце "Маск", в другом — "Илон Маск", в третьем — "господин Маск". Для человека это очевидно, для графа — три разные вершины.

Wikontic использует комбинацию эмбеддингов (для семантического сходства) и правил (например, совпадение фамилий в определенном контексте) чтобы объединить ссылки на одну сущность. Параллельно происходит нормализация: "США", "Соединенные Штаты", "Америка" → "United States of America" (стандартизированная форма).

4 Построение и обогащение графа

Финальный акт. Все извлеченные и нормализованные сущности и отношения загружаются в графовую базу. Но Wikontic на этом не останавливается — он пытается "додумать" связи, которые в тексте явно не указаны, но логически следуют из контекста.

Пример: в тексте сказано "Компания А является дочерней структурой Компании Б. Компания Б входит в холдинг В". Пайплайн может вывести транзитивное отношение "Компания А принадлежит холдингу В", даже если это прямо не написано. Для этого используется малый вызов LLM с цепочкой рассуждений (Chain-of-Thought).

Чем Wikontic не является (и почему это хорошо)

Не ждите от него волшебной кнопки "сделай мне семантическую сеть". Это не универсальный инструмент, а скорее конструктор, который требует настройки под конкретную задачу. И в этом его сила.

Инструмент Фокус Где проигрывает Wikontic Где выигрывает
LangChain + Neo4j Быстрое прототипирование Глубина извлечения, нормализация Интеграция, простота старта
SPA Cy (Stanford) Лингвистический анализ Работа с доменными онтологиями Точность на общих текстах
Microsoft Guidance Structured LLM output Полный пайплайн обработки Контроль формата вывода

Главное отличие Wikontic от кустарных скриптов на LangChain — наличие полноценного этапа нормализации и разрешения кореференции. В LangChain вы можете за час настроить извлечение сущностей через LLM с Tool Calling, но объединение "Маска" и "Илона Маска" останется вашей головной болью.

Где это взять и как это есть

Официальный репозиторий Wikontic лежит на GitHub под лицензией MIT. Установка стандартная: pip install wikontic (или poetry, если вы из тех, кто ставит poetry). Документация скудная, зато есть несколько рабочих примеров в папке examples/.

Базовый сценарий использования выглядит так:

from wikontic import Pipeline
from wikontic.ontologies import LegalOntology

# Загружаем предопределенную онтологию для юр. текстов
# или создаем свою через OntologyBuilder
ontology = LegalOntology()

pipeline = Pipeline(
    ontology=ontology,
    llm_model="gpt-4o-mini",  # или путь к локальной модели
    coref_resolution="hybrid", # комбинированный метод
    graph_db="neo4j"          # поддерживает также Memgraph, Nebula
)

# Запускаем на документе
with open("contract.txt", "r") as f:
    document = f.read()

graph = pipeline.run(document)

# Теперь можно запрашивать граф
results = graph.query(
    "MATCH (c:COMPANY)-[:OWNS]->(s:SUBSIDIARY) RETURN c.name, count(s)"
)

Важный нюанс на 2026 год: если вы планируете обрабатывать тысячи документов, стоимость вызовов к GPT-4o-mini станет ощутимой. Локальные модели вроде Qwen2.5-32B-Instruct показывают сравнимую точность на задаче извлечения сущностей, но требуют GPU с 24+ GB памяти. Выбор зависит от бюджета и инфраструктуры.

Кому стоит ковыряться в этом пайплайне

  • Разработчики корпоративных RAG-систем, уставшие от галлюцинаций. Граф знаний поверх векторного поиска — это следующий логический шаг. Особенно если ваши данные — это нормативные документы, техническая документация или научные статьи, где контекст и точность критичны.
  • Аналитики в области Due Diligence или бизнес-разведки. Автоматическое построение графов связей между компаниями, людьми и событиями из новостей и отчетов.
  • Исследователи, работающие с большими корпусами текстов. Если вам нужно не просто искать по ключевым словам, а анализировать сети цитирования, тематические кластеры или эволюцию понятий во времени.

Не тратьте время на Wikontic, если:

  • Вам нужно просто просуммировать текст или ответить на простой фактологический вопрос. Классический RAG с чанкингом справится быстрее и дешевле.
  • Ваши данные — это в основном таблицы или строго структурированные JSON. Берите готовые ETL-инструменты.
  • Вы ждете plug-and-play решения без настройки. Подготовка доменной онтологии — это отдельная исследовательская задача, которая может занять недели.

Что дальше? Графы учатся обновляться

Самый интересный тренд конца 2025 - начала 2026 года — это самообновляющиеся графы знаний. Представьте: в вашу систему поступает новый документ, который противоречит существующим фактам в графе ("Компания А продала актив X", хотя в графе записано, что она им владеет).

Наивный подход — просто добавить новую связь. Но тогда граф превратится в свалку противоречий. Более продвинутые реализации (пока в основном research) используют LLM как арбитра: модель анализирует контекст, достоверность источников, временные метки и принимает решение — обновить факт, добавить версию или пометить конфликт для ручной проверки.

Wikontic пока не имеет встроенного механизма разрешения конфликтов, но его модульная архитектура позволяет подключить такой модуль. Фактически, это следующий барьер, который нужно преодолеть, чтобы графы знаний из статичного слепка информации превратились в живую, эволюционирующую систему. Как в том материале про управление контекстом в LLM, только на уровне семантических связей.

💡
Мой прогноз на 2026-2027: инструменты вроде Wikontic перестанут быть отдельными библиотеками и станут стандартными модулями в платформах для работы с LLM (вроде Haystack или LlamaIndex). Построение графа знаний из текста будет такой же базовой операцией, как сегодня — embedding текста.

Пока же Wikontic остается инструментом для тех, кто готов разбираться с онтологиями, настраивать промпты и отлаживать пайплайны. Результат того стоит: ваша RAG-система перестает быть продвинутым автодополнением и начинает напоминать что-то вроде ассистента, который действительно понимает предметную область. Не идеально, но уже на порядок лучше, чем поиск по совпадению векторов.