Graphiti: фреймворк для построения и запросов к графам знаний в реальном времени 162

小编 ·

Graphiti: фреймворк для построения и запросов к графам знаний в реальном времени

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

Graphiti: фреймворк для построения и запросов к графам знаний в реальном времени

Что такое Graphiti?

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

Graphiti:一个用于构建和查询实时知识图谱的框架.webp

Основные функции 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