Эта структура графика в реальном времени теперь позволяет переключаться с Neo4j на Кузу в одной линии

Эта структура графика в реальном времени теперь позволяет переключаться с Neo4j на Кузу в одной линии

4 июня 2025 г.

КокосоиндексТеперь предоставляет собственную поддержку Kuzu в качестве хранилища данных целевого графа. Эта интеграция оснащена высокопроизводительным стеком графов знаний с обновлениями в реальном времени.

Что такое Кузу

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

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

CocoIndex - high performance ETL framework

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

Если вы используете CocoIndex для создания своего графика знаний, вы можете использовать Kuzu в качестве хранилища данных целевого графа.

Как картировать в Кузу в кокоиндексе

Интерфейс graphDB в кокодекс стандартизирован, если вы уже используете NEO4J, вам просто нужно переключить конфигурацию на экспорт в Кузу, как показано ниже. Кокоиндекс поддерживает экспорт в Кузу через свой сервер API. Вы можете запустить сервер Kuzu API локально, работая:

KUZU_DB_DIR=$HOME/.kuzudb
KUZU_PORT=8123
docker run -d --name kuzu -p ${KUZU_PORT}:8000 -v ${KUZU_DB_DIR}:/database kuzudb/api-server:latest

В вашем потоке кокодекс вам необходимо добавить спецификацию соединения Kuzu в свой поток.

kuzu_conn_spec = cocoindex.add_auth_entry(
    "KuzuConnection",
    cocoindex.storages.KuzuConnection(
        api_server_url="http://localhost:8123",
    ),
)

Как это выглядит для создания индексационного потока с кокоиндексом + kuzu

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

relationship

Мы будем генерировать два вида отношений из документов:

  1. Отношения между предметами и объектами. Например, «Кокосочеинг поддерживает постепенную обработку»
  2. Упоминает организации в документе. Например, «Core/Basics.mdx» упоминает кокосоиндекс и постепенную обработку.

Поток индексации выглядит так для Кузу:

Код доступенздесьПолем

  1. Проглатывание документов в кокоиндекс

  2. Обработайте документы для каждого документа:

    1. Узлы документов MAP: используйте LLM для генерации сводки и сопоставьте документы с графическими узлами в Кузу.
    2. Узлы отношений карты: используйте LLM для извлечения отношений и экспорта отношений в Кузу.

Примечательно, что для того, чтобы получить готовую график знаний, требуется всего ~ 200 строк Python; включая определения класса, подсказки и конфи.

Чтобы подчеркнуть, как работает извлечение отношений, вы определите класс Python для структурированного извлечения.

@dataclasses.dataclass
class Relationship:
    """
    Describe a relationship between two entities.
    Subject and object should be Core CocoIndex concepts only, should be nouns. For example, `CocoIndex`, `Incremental Processing`, `ETL`,  `Data` etc.
    """

    subject: str
    predicate: str
    object: str

Если у вас есть предопределенный набор онтологии, вы можете пропустить извлечение сущности. Использование существующих сущностей.

Назовите преобразование в потоке, чтобы извлечь отношения из документа.

with data_scope["documents"].row() as doc:
   
    # extract relationships from document
    doc["relationships"] = doc["content"].transform(
        cocoindex.functions.ExtractByLlm(
            llm_spec=cocoindex.LlmSpec(
                # Supported LLM: https://cocoindex.io/docs/ai/llm
                api_type=cocoindex.LlmApiType.OPENAI,
                model="gpt-4o",
            ),
            output_type=list[Relationship],
            instruction=(
                "Please extract relationships from CocoIndex documents. "
                "Focus on concepts and ignore examples and code. "
            ),
        )
    )

Вы можете использовать CocoinSight, чтобы проверить каждую пару отношений.

а затем собирайте использование отношенийentity_relationshipколлекционер.

with doc["relationships"].row() as relationship:
    # relationship between two entities
    entity_relationship.collect(
        id=cocoindex.GeneratedField.UUID,
        subject=relationship["subject"],
        object=relationship["object"],
        predicate=relationship["predicate"],
    )

Кокоиндекс следует за моделью программирования данных. Вместо того, чтобы определять операции данных, такие как творения, обновления или делеции, разработчикам необходимо сосредоточиться только на преобразовании или формулах на основе исходных данных. Структура заботится о операциях данных, например, когда создавать, обновлять или удалять.

После того, как вы собрали отношения, вы можете напрямую отобразить их в Кузу, как показано ниже.

    entity_relationship.export(
        "entity_relationship",
         cocoindex.storages.Kuzu(
            connection=conn_spec,
            mapping=cocoindex.storages.Relationships(
                rel_type="RELATIONSHIP",
                source=cocoindex.storages.NodeFromFields(
                    label="Entity",
                    fields=[
                        cocoindex.storages.TargetFieldMapping(
                            source="subject", target="value"
                        ),
                    ],
                ),
                target=cocoindex.storages.NodeFromFields(
                    label="Entity",
                    fields=[
                        cocoindex.storages.TargetFieldMapping(
                            source="object", target="value"
                        ),
                    ],
                ),
            ),
        ),
        primary_key_fields=["id"],
    )

Удивительно, но, работая над этим примером Кузу, у меня был предыдущийпотокЧто я бежал на местном уровне с NEO4J. Это было мгновенно экспортировать в Кузу. Кокоиндекс основан на инкрементной обработке, и если вы уже запустили этот поток раньше и только что переключали цели, результаты промежуточного преобразования могут быть использованы повторно.

ЗапуститьKuzu Explorer- Пользовательский интерфейс с открытым исходным кодом для Kuzu, вам нужно сначала сбить сервер Kuzu API.

И тогда вы можете запустить следующую команду, чтобы запустить Kuzu Explorer:

KUZU_EXPLORER_PORT=8124
docker run -d --name kuzu-explorer -p ${KUZU_EXPLORER_PORT}:8000  -v ${KUZU_DB_DIR}:/database -e MODE=READ_ONLY  kuzudb/explorer:latest

Затем мы могли бы получить доступ к исследователю вhttp: // localhost: 8124Полем Мы могли бы запустить запрос Cypher, чтобы исследовать график.

MATCH p=()-->() RETURN p

Мы постоянно улучшаемся, и скоро появятся больше функций и примеров. Если эта статья полезна, пожалуйста, бросьте нам звезду ⭐ наGitHubЧтобы помочь нам расти.

Спасибо за чтение!


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE