Как покрыть доменную область с помощью Graphiti?
У данного фреймворка есть три основных сущности:
1. Episodes: узлы графа, которые пользователь подаёт извне.
2. Entities: порождаемые узлы, создаваемые LLM при добавлении эпизода.
3. Edges: рёбра между узлами.
Также Graphiti позволяет создавать кастомные Entity и Edge.
При этом количество кастомных сущностей может быть не более 10, а кастомных эпизодов в Graphiti не предусмотрено.
Попробуйте найди область знаний, которую можно покрыть десятком кастомных типов сущностей. Это не так-то просто – я пробовал.
Как быть?
На самом деле, 10 кастомных сущностей/связей – это то количество, которое Graphiti с помощью LLM может создать на базе одного эпизода.
Почему бы не заводить кастомные эпизоды на уровне приложения? А отличаться они будут набором сущностей (Entity&Edges), которые мы передаём в качестве порождаемых при отправке эпизода.
Создаём каталог сущностей, через Pydantic задаём их поля. А потом соотносим их с нужными типами эпизодов.
Таким образом мы решаем следующие проблемы:
1. Покрытие домена детерменированными понятными узлами и связями.
2. Понятное разделение между типами событий, которые отправляет приложение.
3. Анализ информации при извлечении из графа становится проще. Без расплывчатых «Entity», которые могут скрывать в себе всё, что угодно.
Само собой, я не агитирую создавать сущности ради сущностей. Но существуют кейсы, когда их нужно больше десятка. Как быть в таком случае – я описал выше.
p.s.: тут не так давно neo4j обновили интерфейс своего дашборда. И сняли ограничение на 300 узлов в отображаемом графе. Поэтому теперь можно делать скриншоты с 1000+ узлов в интерфейсе. В медиа поста граф, в котором около 20 кастомных Entity.

Добавить комментарий