Использование Yandex Managed Service for Valkey™ с модулем Search и моделей Yandex AI Studio для векторного поиска в RAG-системе
RAG (Retrieval-Augmented Generation) — это подход, при котором языковая модель для ответа на запрос пользователя использует результаты поиска в базе данных.
В руководстве приведен пример RAG-системы, которая использует Yandex Managed Service for Valkey™ для хранения данных о людях и выполнения векторного поиска по ним с помощью модуля Search. Для векторизации поискового запроса и формирования ответа используются модели Yandex AI Studio
При обработке поискового запроса компоненты системы взаимодействуют следующим образом:
- Языковая модель Yandex AI Studio получает запрос пользователя и вызывает MCP-инструмент для поиска данных.
- MCP-инструмент преобразует запрос в эмбеддинг
с помощью модели векторного представления Yandex AI Studio, а затем передает эмбеддинг в Yandex Managed Service for Valkey™. - Yandex Managed Service for Valkey™ с помощью модуля
Searchвыполняет векторный поиск и возвращает результат MCP-инструменту, который передает его языковой модели. - Языковая модель анализирует найденные данные и отвечает пользователю.
Для работы с примером необходима Unix-подобная среда, а также кластер Yandex Managed Service for Valkey™ версии 9.0 или выше.
Исходный код примера RAG-системы хранится в репозитории
Чтобы настроить RAG-систему, выполните следующие шаги:
- Подготовьте инфраструктуру.
- Подготовьте среду для тестирования.
- Подготовьте тестовые данные и загрузите их в Yandex Managed Service for Valkey™.
- Проверьте тестовые данные в Yandex Managed Service for Valkey™.
- Выполните поиск в RAG-системе.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
- Кластер Yandex Managed Service for Valkey™: использование выделенных хостам вычислительных ресурсов, объем хранилища и резервных копий (тарифы Yandex Managed Service for Valkey™).
- AI-ассистент: количество токенов в запросе и ответе (тарифы Yandex AI Studio
). Тарификация за использование ассистента начинается с момента его включения. - Публичные IP-адреса, если для хостов кластера включен публичный доступ (тарифы Yandex Virtual Private Cloud).
Подготовьте инфраструктуру
-
Создайте облачную сеть с именем
demo-network.При создании сети автоматически создаются три подсети в разных зонах доступности.
-
В сети
demo-networkсоздайте группу безопасностиvalkey-sgдля кластера Yandex Managed Service for Valkey™ и добавьте в группу правило для входящего трафика, которое разрешает подключение к кластеру через интернет:- Диапазон портов —
6380. - Протокол —
TCP. - Назначение —
Диапазон адресов. - IPv4 CIDR —
0.0.0.0/0.
- Диапазон портов —
-
Создайте кластер Yandex Managed Service for Valkey™ любой подходящей конфигурации со следующими настройками:
- Версия —
9.0или выше. - Сеть —
demo-network. - Группа безопасности —
valkey-sg. - Поддержка TLS — включена.
При создании кластера включите публичный доступ к хостам и добавьте модуль
Search.Примечание
Публичный доступ к хостам кластера нужен, если вы планируете подключаться к кластеру через интернет. Этот вариант подключения более простой, и его рекомендуется использовать для прохождения руководства. К хостам без публичного доступа тоже можно подключиться, но только с виртуальных машин Yandex Cloud, расположенных в той же облачной сети, что и кластер.
- Версия —
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации valkey-rag-search.tf
. В этом файле описаны:-
сеть;
-
кластер Yandex Managed Service for Valkey™ с публичным доступом к хостам и модулем
Search.Примечание
Публичный доступ к хостам кластера нужен, если вы планируете подключаться к кластеру через интернет. Этот вариант подключения более простой, и его рекомендуется использовать для прохождения руководства. К хостам без публичного доступа тоже можно подключиться, но только с виртуальных машин Yandex Cloud, расположенных в той же облачной сети, что и кластер.
-
-
Укажите в конфигурационном файле следующие параметры:
network_name— имя сети;sg_name— имя группы безопасности;valkey_cluster_name— имя кластера;valkey_password— пароль для подключения к кластеру.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Подготовьте среду для тестирования
-
Установите Python
версии3.11или выше. -
Создайте сервисный аккаунт
sa-aiи назначьте ему роль ai.languageModels.user для использования моделей Yandex AI Studio. -
Создайте API-ключ для сервисного аккаунта
sa-ai. -
Создайте локальную копию репозитория
SourceCraft с исходным кодом примера:git clone https://git@git.sourcecraft.dev/valkey/webinar-260624-rag-example.git -
Перейдите в каталог репозитория:
cd webinar-260624-rag-example -
Подготовьте окружение примера:
-
Установите зависимости:
make install -
Активируйте виртуальное окружение:
source .venv/bin/activate
-
-
Настройте параметры доступа к Yandex Managed Service for Valkey™ и Yandex AI Studio:
-
Создайте файл
.envна основе шаблона.env.example:cp .env.example .env -
Откройте файл
.envв текстовом редакторе, например вvim:vim .env -
Укажите в файле следующие параметры:
- YDS_API_KEY — значение API-ключа.
- YDS_FOLDER_ID — идентификатор каталога Yandex Cloud, который можно получить со списком каталогов в облаке.
- VALKEY_USERNAME —
default. - VALKEY_PASSWORD — пароль для подключения к кластеру Yandex Managed Service for Valkey™.
Пример файла:
# Yandex AI Studio credentials # Get an API key: https://yandex.cloud/en/docs/ai-studio/operations/get-api-key YDS_API_KEY=AQVN1TpRw9tkjhKtj6R0mRgmHLvMsj84******** YDS_FOLDER_ID=b1g4unjqq856******** # Valkey auth (leave empty for local unauthenticated Valkey) VALKEY_USERNAME=default VALKEY_PASSWORD=********
-
-
Настройте параметры подключения к кластеру Yandex Managed Service for Valkey™:
-
Откройте файл
config.yamlв текстовом редакторе, например вvim:vim config.yaml -
В блоке
valkeyукажите следующие параметры:-
host —
c-<идентификатор_кластера>.rw.mdb.yandexcloud.net.Идентификатор кластера можно получить со списком кластеров в каталоге.
-
port —
6380. -
db —
0. -
ssl —
true.
Пример блока
valkey:# Valkey connection settings valkey: host: "c-c9qlvmr5h2g9********.rw.mdb.yandexcloud.net" port: 6380 db: 0 # username + password read from .env: VALKEY_USERNAME, VALKEY_PASSWORD # SSL toggle for managed Valkey ssl: true -
Кроме параметров подключения к кластеру Yandex Managed Service for Valkey™, файл
config.yamlтакже содержит настройки:- моделей Yandex AI Studio;
- индекса и векторного поиска в Yandex Managed Service for Valkey™;
- MCP-сервера;
- оркестратора;
- системного промпта языковой модели;
- логирования.
Для работы примера достаточно настроить только параметры подключения к кластеру Yandex Managed Service for Valkey™. Остальные настройки можно оставить без изменений.
-
Подготовьте тестовые данные и загрузите их в Yandex Managed Service for Valkey™
В каталоге репозитория webinar-260624-rag-example выполните следующие команды:
-
Подготовьте файл
data/people.jsonс тестовыми данными:rag-demo generate -n 10Результат:
Wrote 10 people to data/people.json -
Загрузите тестовые данные в Yandex Managed Service for Valkey™:
rag-demo indexВ кластере Yandex Managed Service for Valkey™ будет создан индекс
idx_people, в который загрузятся тестовые данные.Результат:
indexed person 1: Alice Smith indexed person 2: John Doe indexed person 3: Maria Garcia indexed person 4: Wei Zhang indexed person 5: James Brown indexed person 6: Priya Patel indexed person 7: Lars Nilsson indexed person 8: Olivia Wilson indexed person 9: Hassan Ali indexed person 10: Sophie Martin Loaded 10 people into index idx_people
Проверьте тестовые данные в Yandex Managed Service for Valkey™
-
Подключитесь к базе данных кластера Yandex Managed Service for Valkey™:
С помощью утилиты valkey-cliС помощью утилиты redis-cliС помощью Yandex WebSQL-
Перейдите в директорию, куда хотите скачать дистрибутив Valkey™.
-
Скачайте нужную версию
Valkey™ и выполните сборку и установку с поддержкой TLS:wget https://github.com/valkey-io/valkey/archive/refs/tags/<версия>.tar.gz && \ tar -xzvf <версия>.tar.gz && \ cd valkey-<версия> && \ make BUILD_TLS=yes && \ sudo make install && \ sudo cp ./src/valkey-cli /usr/bin/ -
Получите SSL-сертификат:
mkdir -p ~/.redis && \ wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" \ --output-document ~/.redis/YandexInternalRootCA.crt && \ chmod 0655 ~/.redis/YandexInternalRootCA.crtСертификат будет сохранен в файле
~/.redis/YandexInternalRootCA.crt. -
Подключитесь к кластеру:
-
Для подключения к нешардированному кластеру выполните команду:
valkey-cli \ -h c-<идентификатор_кластера>.rw.mdb.yandexcloud.net \ -a <пароль> \ -p 6380 \ --tls \ --cacert ~/.redis/YandexInternalRootCA.crtИдентификатор кластера можно получить со списком кластеров в каталоге.
-
Для подключения к шардированному кластеру выполните команду:
valkey-cli \ -h <FQDN_хоста-мастера_в_нужном_шарде> \ -c \ -a <пароль> \ -p 6380 \ --tls \ --cacert ~/.redis/YandexInternalRootCA.crtО том, как получить FQDN хоста, читайте в разделе FQDN хостов Valkey™.
-
-
Установите утилиту
redis-cli:sudo apt update && sudo apt install --yes redis-tools -
Получите SSL-сертификат:
mkdir -p ~/.redis && \ wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" \ --output-document ~/.redis/YandexInternalRootCA.crt && \ chmod 0655 ~/.redis/YandexInternalRootCA.crtСертификат будет сохранен в файле
~/.redis/YandexInternalRootCA.crt. -
Подключитесь к кластеру:
-
Для подключения к нешардированному кластеру выполните команду:
redis-cli \ -h c-<идентификатор_кластера>.rw.mdb.yandexcloud.net \ -a <пароль> \ -p 6380 \ --tls \ --cacert ~/.redis/YandexInternalRootCA.crtИдентификатор кластера можно получить со списком кластеров в каталоге.
-
Для подключения к шардированному кластеру выполните команду:
redis-cli \ -h <FQDN_хоста-мастера_в_нужном_шарде> \ -c \ -a <пароль> \ -p 6380 \ --tls \ --cacert ~/.redis/YandexInternalRootCA.crtО том, как получить FQDN хоста, читайте в разделе FQDN хостов Valkey™.
-
Перед подключением включите доступ к сервису Yandex WebSQL в настройках кластера.
Чтобы подключиться к базе данных с помощью Yandex WebSQL:
- В консоли управления
перейдите в каталог, в котором находится нужный кластер. - Перейдите в сервис Yandex Managed Service for Valkey™.
- Нажмите на имя нужного кластера и выберите вкладку WebSQL.
- В правом верхнем углу страницы нажмите кнопку Перейти в WebSQL.
-
-
Получите информацию об индексе
idx_people:FT.INFO idx_peopleПроверьте значения параметров в выводе:
- num_docs —
10; - state —
ready.
- num_docs —
-
Получите список ключей в кластере:
KEYS *Результат:
1) "person:1" 2) "person:2" 3) "person:3" 4) "person:4" 5) "person:5" 6) "person:9" 7) "person:id_counter" 8) "person:6" 9) "person:7" 10) "person:8" 11) "person:10"Где
person:id_counter— служебный ключ, в котором хранится значение счетчика идентификаторов. -
Просмотрите данные по ключу
person:1:HGETALL person:1
Выполните поиск в RAG-системе
В каталоге репозитория webinar-260624-rag-example выполните следующие команды:
-
Выполните поиск по запросу
Who works with Kubernetes?:rag-demo ask "Who works with Kubernetes?"Результат:
Lars Nilsson works with Kubernetes. He is a site reliability engineer in Stockholm, Sweden, responsible for keeping large Kubernetes clusters healthy.Помимо ответа модели, в выводе отображается подробная информация о выполнении запроса. Чтобы скрыть эту информацию, в файле
config.yamlв блокеloggingукажитеconsole_level: "WARNING". После этого будет выводиться сокращенная информация о выполнении запроса и итоговый ответ модели. -
Выполните поиск по запросу
Кто увлекается бегом?:rag-demo ask "Кто увлекается бегом?"Результат:
Из найденных людей бегом увлекается **Wei Zhang** (38 лет, Токио, Япония) — он тренируется для участия в марафонах.
Удалите созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy -
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-