Dgraph 24.0.0-alpha теперь доступен на Github и DockerHub
Dgraph v24.0.0-alpha теперь доступен сообществу, чтобы опробовать поддержку векторного типа данных, который обеспечивает семантический поиск.
Dgraph добавляет поддержку векторов для объединения данных графа с встраиваниями, улучшая приложения на основе графов и открывая новые возможности искусственного интеллекта. Сценарии использования основных графов, такие как обнаружение мошенничества, рекомендации и управление основными данными, могут быть дополнены векторами и внедрениями. Graph+Vector также является ключевым методом, используемым для уменьшения галлюцинаций в приложениях с искусственным интеллектом.
Этот выпуск также включает некоторые улучшения производительности и исправления ошибок обслуживания для повышения стабильности ядра базы данных.
Ключевые моменты релиза включают в себя
- Поддержка собственного векторного типа на уровне DQL.
- Расширьте Liveloader для работы с векторным типом (Bulkloader будет доступен в общедоступной версии)
- PR, предоставленные сообществом:
- #9030: Добавить поддержку польского языка
<add links to the PRs>
- #9047: Уменьшить выделение памяти x.ParsedKey с 72 до 56 байт.
- Исправления Dgraph/Badger:
- #9007: Исправлена взаимоблокировка, возникающая из-за тайм-аута.
- #2018: Уменьшение потребления ресурсов при пустой транзакции записи
- Обновление до Golang v1.22 — улучшения производительности и мониторинга
- Обновленный клиент Golang.
- Количество исправлений CVE
Мы работаем над кандидатом на выпуск общедоступной версии и ожидаем, что он выйдет в мае. Dgraph v24 GA также будет включать поддержку GraphQL для векторного типа данных и семантического поиска, новый подход к кэшированию, который повысит производительность всех приложений, а также ряд замечаний сообщества и исправлений обслуживания.
Обратите внимание, что эта (альфа-версия) недоступна в Dgraph Cloud, но общедоступная версия будет выпущена как для локальной версии, так и для Dgraph Cloud. Двоичные файлы выпуска и примечания к выпуску теперь доступны на GitHub. Образы Docker для dgraph/dgraph и dgraph/standalone доступны на DockerHub.
Ниже показан простой пример использования векторных вложений и запросов поиска по сходству. Дополнительные примеры будут опубликованы в блогах и документации в ближайшие недели. В этом примере рассказывается об использовании Racel для обновления схемы, мутаций и запросов, но вы можете использовать любой подход.
Настройка и установка dgraph и ratel
- Получите док-контейнер Dgraph для альфа-версии v24.
docker pull dgraph/standalone:v24.0.0-alpha2
- Запустите докер-контейнер, сохраняющий данные на вашем локальном компьютере.
mkdir ~/dgraph
docker run -d --name dgraph-v24alpha2 -p "8080:8080" -p "9080:9080" -v ~/dgraph:/dgraph dgraph/standalone:standalone:v24.0.0-alpha2`
- Затем получите и запустите инструментratel
docker pull dgraph/ratel
docker run -d --name ratel -p "8000:8000" dgraph/ratel:latest
Ratel теперь будет работать на локальном хосте: 8000
.
Добавьте схему, данные и тестовые запросы
Определите схему DQL. Вы можете установить это на вкладке схемы Racel, используя опцию массового редактирования.
<Issue.description>: string.
<Issue.vector_embedding>: float32vector @index(hnsw(metric:"cosine")) .
type <Issue> {
Issue.description
Issue.vector_embedding
}
Обратите внимание, что используется новый тип float32vector
с новым типом индекса hnsw. HNSW
может использовать метрику расстояния косинуса, евклида или скалярного произведения. Здесь мы используем косинусное сходство, которое отлично работает, если ваши векторы не нормализованы.
На этом этапе база данных будет принимать и индексировать векторы с плавающей запятой.
Вставьте некоторые данные, содержащие короткие встраивания только для тестирования, используя эту мутацию DQL.
Вы можете вставить это в Ratel как мутацию или использовать Curl
, pydgraph
или что-то подобное:
{
"set":
[
{
"dgraph.type": "Issue",
"Issue.vector_embedding": "[1, 0]",
"Issue.description":"Intermittent timeouts. Logs show no such host error."
},
{ "dgraph.type": "Issue",
"Issue.vector_embedding": "[0.866025, 0.5]",
"Issue.description":"Bug when user adds record with blank surName. Field is required so should be checked in web page."
},
{
"dgraph.type": "Issue",
"Issue.vector_embedding": "[0.5, 0.866025]",`
"Issue.description":"Delays on responses every 30 minutes with high network latency in backplane"
},
{
"dgraph.type": "Issue",
"Issue.vector_embedding": "[0, 1]",
"Issue.description":"vSlow queries intermittently. The host is not found according to logs."
},
{ "dgraph.type": "Issue",
"Issue.vector_embedding": "[-0.5, 0.866025]",
"Issue.description":"Some timeouts. It seems to be a DNS host lookup issue. Seeing No Such Host message."
},
{
"dgraph.type": "Issue",
"Issue.vector_embedding": "[-0.866025, 0.5]",
"Issue.description":"Host and DNS issues are causing timeouts in the User Details web page"
}
]
}
Простой запрос, который находит похожие вопросы
Вы готовы выполнять запросы на сходство, чтобы находить Проблемы на основе семантического сходства с новым описанием Проблемы! Для простоты мы не вычисляем большие векторы из LLM. Приведенные выше вложения просто представляют четыре понятия, которые находятся в четырех векторных измерениях: которые соответственно:
- Медлительность или задержки
- Ведение журнала или сообщений
- Сети
- Графические интерфейсы или веб-страницы**
Вариант использования и запрос
Допустим, возникла новая проблема, и вы хотите использовать текстовое описание, чтобы найти другие похожие проблемы, с которыми вы сталкивались в прошлом. Используйте запрос сходства ниже.
Если новым описанием проблемы является «Медленный ответ и задержка в моей сети!», мы представляем эту новую проблему как вектор [0,9, 0,8, 0, 0]
. Первый параметр «медлительность» является высоким, поскольку в описании упоминаются как «медленная реакция», так и «задержка». «Журналы» упоминаются один раз, поэтому установите второй размер равным 0,8. Ни сети, ни графические интерфейсы не упоминаются, поэтому оставьте для них значение 0. Обратите внимание, что первый параметр в Like_to
— это имя поля DQL, второй параметр — это количество возвращаемых результатов, а третий параметр — это вектор для поиска.
query slownessWithLogs() {
simVec(func: similar_to(Issue.vector_embedding, 3, "[0.9, 0.8, 0, 0]"))
{
uid
Issue.description
}
}
Если вы хотите отправлять данные с использованием параметров, перепишите это как
query test($vec: float32vector) {
simVec(func: similar_to(Issue.vector_embedding, 3, $vec))
{
uid
Issue.description
}
}
И сделайте запрос (опять же с помощью Racel) с переменной с именем «vec
», установленной в значение JSON float[]
:
vec: [0.9, 0.8, 0, 0]
Альтернатива скручиванию
Наконец, для тех, кто не предпочитает использовать Ratel, вы можете выполнить все эти шаги с помощью инструментов HTTP
, таких как Curl
:
curl --location 'http://localhost:8080/query' \
--header 'Content-Type: application/json' \
--data '{
"query": "query test($vec: float32vector) { simVec(func: similar_to(Issue.vector_embedding, 3, $vec)) { uid Issue.description } }",
"variables":{"$vec":"[1,0,0,0]"}
}'
Заключение
В этом комплексном примере показано, как можно вставлять данные с векторными вложениями, соответствующими схеме, которая задает векторный индекс на основе косинусного сходства, и выполнять семантический поиск проблем с помощью новой функции like_to()
в Dgraph.