Graphiti: фреймворк для построения и запросов к графам знаний в реальном времени
Что такое Graphiti?
Graphiti — это фреймворк для построения и запросов к графу знаний, обладающий временной осведомлённостью, что делает его идеальным для использования в динамических средах. В отличие от традиционных методов генерации с дополненной выборкой (RAG), Graphiti может в реальном времени интегрировать пользовательские взаимодействия, структурированные и неструктурированные данные, а также внешнюю информацию, формируя граф, к которому можно делать запросы. Его преимущества заключаются в поддержке обновления данных в реальном времени, эффективном поиске и точных исторических запросах без необходимости пересчёта всего графа, что отлично подходит для разработки интерактивных приложений, учитывающих контекст.

Основные функции Graphiti
Инкрементальные обновления в реальном времени: возможность мгновенной интеграции новых фрагментов данных без пакетного пересчёта.
Двухвременная модель данных: явное отслеживание времени возникновения события и времени его получения, что обеспечивает точные запросы на определённый момент времени.
Эффективный гибридный поиск: сочетание семантических эмбеддингов, ключевых слов (BM25) и обхода графа для обеспечения запросов с низкой задержкой без зависимости от больших языковых моделей (LLM) для суммаризации.
Определение пользовательских сущностей: поддержка создания гибких онтологий и пользовательских сущностей с помощью простых моделей Pydantic.
Масштабируемость: эффективное управление большими наборами данных за счёт параллельной обработки, что подходит для корпоративных сред.
Интеграция с различными LLM: поддержка провайдеров LLM, таких как Openai, Anthropic и Groq, обеспечивающая гибкие возможности LLM-инференса и эмбеддингов.
MCP сервер: предоставляет API-сервис на базе FastAPI, поддерживающий взаимодействие с графом знаний по протоколу MCP, включая управление событиями, сущностями и обработку связей.
Причины выбрать Graphiti
Он позволяет обновлять данные в реальном времени, адаптируясь к динамически меняющимся условиям.
Поддерживает точные запросы на определённый момент времени, что удобно для отслеживания исторической информации.
Высокая скорость поиска без необходимости полагаться на сложные языковые модели.
Возможность настройки структуры данных в соответствии с конкретными потребностями.
Способность эффективно обрабатывать большие объёмы данных, что подходит для корпоративных приложений.
Установка и использование Graphiti
Установка Graphiti
Прежде всего убедитесь, что ваша система соответствует требованиям для установки, и установите необходимые зависимости:
Python: убедитесь, что в вашей системе установлен Python версии 3.10 или выше.
Neo4j: установите базу данных Neo4j версии 5.26 или выше. Для упрощения установки и управления вы можете использовать Neo4j Desktop.
API-ключ OpenAI: если вы планируете использовать OpenAI для LLM-инференса и эмбеддингов, вам понадобится действительный API-ключ OpenAI.
Для установки основной библиотеки Graphiti вы можете использовать pip или poetry:
pip install graphiti-core # 或者 poetry add graphiti-core
Инициализация Graphiti
Инициализируйте экземпляр Graphiti в вашем коде и подключитесь к базе данных Neo4j:
from graphiti_core import Graphiti
graphiti = Graphiti("bolt://localhost:7687", "neo4j", "password")Построение индексов и ограничений
Перед добавлением данных инициализируйте графовую базу данных и создайте индексы и ограничения Graphiti:
await graphiti.build_indices_and_constraints()
Добавление данных
Используйте метод add_episode для добавления данных в граф знаний. Каждый фрагмент данных называется «эпизодом» (episode):
from graphiti_core.nodes import EpisodeType
from datetime import datetime, timezone
episodes = [
"Kamala Harris is the Attorney General of California. She was previously the district attorney for San Francisco.",
"As AG, Harris was in office from January 3, 2011 – January 3, 2017"
]
for i, episode in enumerate(episodes):
await graphiti.add_episode(
name=f"Freakonomics Radio {i}",
episode_body=episode,
source=EpisodeType.text,
source_description="podcast",
reference_time=datetime.now(timezone.utc)
)Запрос данных
Используйте метод search для выполнения запросов к графу знаний, сочетая семантическое сходство и поиск по ключевым словам:
results = await graphiti.search('Who was the California Attorney General?')Пользовательские запросы
Вы можете настраивать запросы по мере необходимости, например, указав центральный узел, чтобы отдавать приоритет результатам, более близким к этому узлу:
await graphiti.search('Who was the California Attorney General?', center_node_uuid)Закрытие соединения
После завершения работы закройте соединение Graphiti:
graphiti.close()
Использование MCP-сервера
Graphiti предоставляет MCP-сервер, с которым можно взаимодействовать через FastAPI. Вы можете развернуть этот сервер и использовать протокол MCP для взаимодействия с графом знаний:
1. Клонируйте или загрузите репозиторий Graphiti.
2. Запустите MCP-сервер:
uvicorn graphiti.mcp_server.main:app --reload
3. Используйте протокол MCP в вашем AI-ассистенте для связи с сервером.
Использование Azure OpenAI
Если вы хотите использовать Azure OpenAI, вам необходимо настроить соответствующий клиент и эмбеддер:
from openai import AsyncAzureOpenAI from graphiti_core import Graphiti from graphiti_core.llm_client import OpenAIClient from graphiti_core.embedder.openai import OpenAIEmbedder, OpenAIEmbedderConfig api_key = "<your-api-key>" api_version = "<your-api-version>" azure_endpoint = "<your-azure-endpoint>" azure_openai_client = AsyncAzureOpenAI(api_key=api_key, api_version=api_version, azure_endpoint=azure_endpoint) graphiti = Graphiti( "bolt://localhost:7687", "neo4j", "password", llm_client=OpenAIClient(client=azure_openai_client), embedder=OpenAIEmbedder(config=OpenAIEmbedderConfig(embedding_model="text-embedding-3-small"), client=azure_openai_client) )
Обязательно замените значения-заполнители на ваши реальные учётные данные Azure OpenAI и укажите правильное название модели эмбеддингов.
Преимущества Graphiti
По сравнению с другими технологиями, Graphiti имеет явные преимущества в обработке динамических данных, обновлениях в реальном времени и скорости запросов.
Предоставляет серверную реализацию для удобной интеграции с другими системами.
Поддерживает множество конфигураций окружения и интеграцию с другими сервисами.
Связанные ссылки
Статья: https://arxiv.org/abs/2501.13956
Репозиторий на GitHub: https://github.com/getzep/graphiti
Помощник сценариста▸
AI Приложения
AI Новости 