Эмбеддинги и реранкеры Voyage AI для поиска и RAG
Введение
В прошлом ИИ в основном использовался для анализа и предложения информации; однако с появлением генеративного ИИ мы теперь можем создавать новый и уникальный контент. Звучит круто, но иногда контент может вводить в заблуждение.
Здесь на сцену выходит RAG (Retrieval Augmented Generation), оптимизирующий вывод большой языковой модели с учетом контекста запроса. Zilliz и Voyage AI объединились, чтобы упростить создание RAG-пайплайна, как мы увидим далее в статье. Voyage AI предоставляет доменно-специфичные кастомизированные модели эмбеддингов и реранкеры для поиска. В этой статье мы обсудим некоторые из них.
Создание RAG с помощью Zilliz Cloud Pipelines и Voyage Ai.png
Модели эмбеддингов и Voyage AI
Компьютеры не могут понимать информацию из данных, таких как текст или изображения. Мы используем модели эмбеддингов, чтобы дать компьютерам возможность понимать семантику, стоящую за неструктурированными данными. В этом разделе будут рассмотрены основы моделей эмбеддингов, их полезность в генеративном ИИ и почему RAG является преобладающим подходом для корпоративного генеративного ИИ.
Кратко о моделях эмбеддингов
Модели эмбеддингов — это модели глубокого обучения, которые создают векторные эмбеддинги для заданных данных. Эти модели преобразуют предоставленный текст, изображение, голос или любую форму нечисловых или даже числовых данных в компактное векторное представление. Это представление, также известное как векторный эмбеддинг, отображает информацию в числовое векторное пространство.
Кодирование неструктурированных данных в векторные эмбеддинги
Недостатки генеративного ИИ
Использование генеративного ИИ на корпоративном уровне стремительно растет благодаря его впечатляющей способности автоматизировать громоздкие задачи и получать результаты с минимальными усилиями. Несмотря на то что Gen AI заслуживает высокой оценки за помощь в различных сценариях, у него также есть недостатки. Модели GenAI, такие как ChatGPT, являются универсальными моделями, обученными на миллионах или триллионах записей данных из множества доменов. Этот факт иногда может быть проблематичным. Модели являются вероятностными и генерируют следующее слово на основе предоставленного контекста. Когда контекст ограничен или нов для модели, они начинают галлюцинировать. Именно здесь RAG проявляет себя.
RAG и как он снижает галлюцинации
Техника RAG требует использования доменно-специфичных моделей эмбеддингов для встраивания предоставленного запроса. Затем этот запрос передается в векторную базу данных, где применяется семантический поиск для извлечения похожих контекстных векторных эмбеддингов. Все релевантные документы из векторной базы данных и предоставленный запрос затем передаются модели. Модель использует дополнительную информацию и контекст из запроса, чтобы сформировать релевантные, актуальные и точные результаты. Таким образом, архитектура RAG уменьшает любые галлюцинации модели и обеспечивает более надежную и устойчивую LLM.
Архитектура RAG
Теперь, когда мы обсудили модели эмбеддингов и их роль в RAG, давайте обсудим некоторые модели эмбеддингов Voyage AI. Voyage AI предоставляет различные кастомизированные модели эмбеддингов во многих доменах для реализации эффективных и результативных методов RAG. Эти модели связаны с векторными базами данных, такими как Milvus от Zilliz, для хранения и извлечения векторных эмбеддингов, связанных со сгенерированным запросом.
Модели эмбеддингов Voyage AI
Voyage AI предоставляет множество различных эффективных и результативных предметно-ориентированных и универсальных моделей эмбеддингов. Эти модели вносят значительный вклад в поиск и RAG. Они обеспечивают более высокое качество извлечения, чем большинство моделей эмбеддингов.
Среди множества моделей эмбеддингов к лучшим относятся voyage-code-2, voyage-law-2 и voyage-large-2-instruct. Voyage AI разработала эти модели для конкретных областей кода, права, финансов и многоязычных доменов. Более того, мы можем настраивать эти модели в соответствии с нашими конкретными сценариями использования. Давайте взглянем на их новейшие модели:
- voyage-code-2: Модель, отлично разбирающаяся в предоставлении кода, связанного с запросом, с предельной точностью. На следующем рисунке показана производительность voyage-code-2 для задачи извлечения кода:
анализ производительности voyage-code-2.png
- voyage-law-2: Модель, обученная получать контекст и эмбеддинги для юридических документов. Эта модель обеспечивает лучший результат для юридических документов с длинным контекстом в разных доменах и показывает лучшие результаты на универсальных корпусах в разных доменах. Следующие рисунки демонстрируют производительность voyage-law-2:
анализ производительности voyage-law-2
Приведенный выше рисунок показывает возможности производительности моделей эмбеддингов Voyage AI, которые занимают верхние позиции по версии Massive Text Embedding Benchmark (MTEB).
Реранкеры и Voyage AI
Мы обсудили, как RAG повышает качество вывода GenAI, уменьшая галлюцинации таких моделей. Однако одна небольшая проблема все еще связана с контекстным окном моделей GenAI. Контекстное окно означает максимальный объем информации, который модель ИИ может принять в любой момент времени для обработки. Меньшее окно означает, что модель получает меньше информации; большее — что увеличиваются стоимость и время обработки.
Реранкер ранжирует извлеченные документы из векторных баз данных для получения оптимальных результатов, вычисляя их оценку релевантности относительно предоставленного запроса. Ранжирование помогает отфильтровать наиболее релевантные (информативные) документы, чтобы они поместились в контекстное окно и позволили сгенерировать наиболее точные результаты.
В то время как техники RAG извлекают векторные эмбеддинги, чтобы предоставить контекстную информацию и помочь в поиске, эти модели повторно ранжируют все эти извлеченные эмбеддинги с использованием оценки релевантности, чтобы предоставить LLM наиболее релевантные данные.
Простая архитектура реранкера
Реранкеры Voyage AI
Voyage AI разработала модель реранкера, известную как rerank-lite-1. Эта модель voyage является универсальным реранкером, оптимизированным для задержки и качества. Она имеет контекстное окно в 4000 токенов. На следующем рисунке показана производительность этой модели.
анализ производительности voyage:ranke-lite-1
Использование эмбеддингов Voyage в Zilliz Cloud Pipelines
Zilliz и Voyage AI заключили партнерство, чтобы упростить преобразование неструктурированных данных в доступные для поиска векторные эмбеддинги в Zilliz Cloud.
В этом разделе будет показано, как интегрировать Zilliz Cloud и модели эмбеддингов Voyage AI для упрощенного создания и извлечения эмбеддингов. Мы также покажем, как использовать эту интеграцию и Cohere (LLM) для создания RAG-приложения. Начнем.
Настройка Zilliz Cloud
Первый шаг — настроить Zilliz Cloud. Если у вас еще нет учетной записи Zilliz Cloud, зарегистрируйтесь бесплатно.
После первого входа в систему на экране отобразится следующая консоль.
консоль Zilliz cloud для создания кластера
- Мы создадим кластер по мере необходимости. Zilliz предоставляет бесплатный тариф для обучения, экспериментов и прототипирования, который позже можно перенести на различные производственные планы.
Creating a new Cluster in Zilliz.png
- После создания нового кластера будет отображена вся информация, необходимая для подключения.
Connection to the cluster
ID проекта можно получить в разделе Projects в верхней строке меню. Найдите целевой проект и скопируйте его ID в столбец Project ID.
Projects Dashboard for Project ID
- Теперь у нас есть все компоненты, необходимые для подключения к кластеру. Пора создать наши конвейеры. Мы будем использовать Cohere в качестве LLM для приложения RAG. Для этого мы установим
cohere.
%pip install cohere
Вот импорты, которые нам нужны для этого notebook.
import os
import requests
В приведенном ниже коде мы настроили наши CLOUD_REGION, CLUSTER_ID, API_KEY и PROJECT_ID:
CLOUD_REGION = 'gcp-us-west1'
CLUSTER_ID = 'your CLUSTER_ID'
API_KEY = 'your API_KEY'
PROJECT_ID = 'your PROJECT_ID'
Zilliz Cloud Pipelines
Zilliz Cloud Pipelines преобразуют неструктурированные данные в доступную для поиска векторную коллекцию, обрабатывая процессы создания эмбеддингов, загрузки, поиска и удаления. Zilliz Cloud предлагает три типа конвейеров:
- Конвейер загрузки: преобразует неструктурированные данные в доступные для поиска векторные эмбеддинги и сохраняет их в векторных базах данных Zilliz Cloud. Он включает различные функции для преобразования входных полей и сохранения дополнительной информации для извлечения.
Конвейер поиска: этот конвейер обеспечивает семантический поиск, преобразуя строку запроса в векторный эмбеддинг и извлекая Top-K похожих векторов вместе с соответствующим текстом и метаданными. Он допускает только один тип функции.
Конвейер удаления: удаляет указанные сущности из коллекции, допуская только один тип функции.
Конвейер загрузки
В конвейере загрузки можно указать функции для настройки его поведения на основе входных данных. В настоящее время он поддерживает четыре функции:
INDEX_DOC: принимает документ в качестве входных данных, разбивает его на фрагменты и генерирует векторный эмбеддинг для каждого фрагмента. Он сопоставляет входное поле с четырьмя выходными полями (doc_name, chunk_id, chunk_text и embedding) в коллекции.PRESERVE: сохраняет определенный пользователем ввод как дополнительное скалярное поле в коллекции, обычно используемое для метаинформации, такой как сведения об издателе и теги.INDEX_TEXT: обрабатывает тексты, преобразуя каждый текст в векторный эмбеддинг и сопоставляя входное поле (text_list) с двумя выходными полями (text и embedding).INDEX_IMAGE: обрабатывает изображения, генерируя эмбеддинг изображения, сопоставляя два входных поля (image_url и image_id) с двумя выходными полями (image_id и embedding).
В приведенном ниже фрагменте кода мы будем использовать библиотеку requests для отправки запроса в облако Zilliz. POST-запрос состоит из URL, заголовков и данных для отправки. Создадим наш заголовок:
headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": f"Bearer {API_KEY}"
}
Мы определим наши collection_name и embedding_service в приведенном ниже коде. Сервис эмбеддингов будет использовать модели Voyage AI, в частности voyage-2, которые показали исключительную производительность в задачах извлечения, технической документации и общих приложениях.
create_pipeline_url = f"https://controller.api.{CLOUD_REGION}.zillizcloud.com/v1/pipelines"
collection_name = 'Documents'
embedding_service = "voyageai/voyage-large-2"
В приведенном ниже фрагменте кода мы определим индексную функцию для нашего ingestion_pipeline:
data = {
"name": "ingestion_pipeline",
"description": "Конвейер, который генерирует текстовые эмбеддинги и сохраняет информацию о заголовках.",
"type": "INGESTION",
"projectId": PROJECT_ID,
"clusterId": CLUSTER_ID,
"collectionName": collection_name,
"functions": [
{
"name": "index_doc",
"action": "INDEX_DOC",
"language": "ENGLISH",
"embedding": embedding_service
}
]
}
response = requests.post(create_pipeline_url, headers=headers, json=data)
print(response.json())
pipelineId будет позже использоваться для загрузки данных в базу данных. После этого шага мы можем увидеть нашу коллекцию, созданную в кластере, а также наш конвейер загрузки:
ingestion_pipe_id = response.json()["data"]["pipelineId"]
print(ingestion_pipe_id)
>> pipe-cf…
Вот коллекция, созданная в облаке:
Коллекция, созданная в облаке
А наш конвейер загрузки выглядит так:
Конвейер загрузки в Zilliz Cloud
Конвейер поиска
Конвейеры поиска упрощают семантический поиск, преобразуя строку запроса в векторный эмбеддинг и извлекая Top-K ближайших соседних векторов. Конвейер поиска включает функцию SEARCH_DOC_CHUNK, которая требует указания кластера и коллекции для поиска.
Zilliz поддерживает множество функций. Здесь мы будем использовать SEARCH_DOC_CHUNK, которая принимает пользовательский запрос и возвращает релевантные фрагменты документов из базы знаний.
data = {
"projectId": PROJECT_ID,
"name": "search_pipeline",
"description": "Конвейер, который получает текст и ищет семантически похожие фрагменты документов",
"type": "SEARCH",
"functions": [
{
"name": "search_chunk_text",
"action": "SEARCH_DOC_CHUNK",
"inputField": "query_text",
"clusterId": f"{CLUSTER_ID}",
"collectionName": f"{collection_name}",
"embedding": embedding_service
}
]
}
response = requests.post(create_pipeline_url, headers=headers, json=data)
search_pipe_id = response.json()["data"]["pipelineId"]
Мы создали наши конвейеры загрузки и поиска. Пришло время вставить эту статью в наш конвейер загрузки и запустить наш конвейер поиска.
Запуск конвейера загрузки
Конвейер загрузки может принимать файлы из сервисов объектного хранилища, таких как AWS S3 или Google Cloud Storage (GCS). Поддерживаемые форматы файлов включают .txt, .pdf, .md, .html и т. д. Мы можем запустить конвейер загрузки из консоли Zilliz. Давайте сделаем это шаг за шагом.
1. Перейдите в Pipelines слева и перейдите к ingestion_pipeline, как показано ниже:
Конвейер загрузки, созданный в облаке
2. После нажатия на Run мы будем перенаправлены на следующую страницу:
Прикрепление файла в конвейере загрузки
Прикрепите текстовый файл и запустите конвейер. После успешного выполнения текстовый файл будет загружен в коллекцию. Вот предварительный просмотр данных:
Предварительный просмотр данных коллекции
Запуск конвейера поиска
RAG (генерация с дополненным извлечением) имеет два основных компонента: ретривер и LLM. Создать ретривер так же просто, как запустить конвейер поиска. Конвейер поиска принимает запрос и извлекает наиболее релевантный фрагмент из базы данных. В коде ниже функция retriever принимает query и topk (количество документов для выбора) и запускает конвейер поиска.
def retriver(question, topk):
run_pipeline_url = f"https://controller.api.{CLOUD_REGION}.zillizcloud.com/v1/pipelines/{search_pipe_id}/run"
data = {
"data": {
"query_text": question
},
"params": {
"limit": topk,
"offset": 0,
"outputFields": [
"chunk_text",
"id",
"doc_name"
],
}
}
response = requests.post(run_pipeline_url, headers=headers, json=data)
return [result['chunk_text'] for result in response.json()['data']['result']]
## RAG-приложение с использованием Cohere в качестве LLM
После получения документов мы будем использовать Cohere в качестве нашей LLM. Мы передадим полученные документы в Cohere chat API, обернув их в промпт, и зададим вопросы о них.
import cohere
co = cohere.Client(api_key="your_api_key")
def chatbot(query, topk):
chunks = retriver(query, topk)
response = co.chat(
model="command-r-plus",
message= f"Given this information: '{[chunk for chunk in chunks]}', generate a response for the following {query}"
)
return response.text
question = "I'm looking for a good model for legal retrieving tasks?" print(chatbot(question, 2))
Вот ответ чатбота:
Based on the provided information, it seems you are specifically interested in a proficient model in legal retrieving tasks. In that case, the model best suits your needs is "voyage-law-2."
## Заключение
Voyage AI предоставляет специализированные доменно-ориентированные embedding-модели и reranker’ы для продвинутого поиска. Zilliz Cloud Pipelines бесшовно интегрирует модели Voyage AI с Zilliz Cloud, делая разработку [RAG](https://zilliz.com/learn/Retrieval-Augmented-Generation) гораздо более простой и упорядоченной.
В этой статье мы обсудили популярные embedding-модели и reranker’ы Voyage AI и их интеграцию с Zilliz Cloud. Мы также продемонстрировали, как создать RAG с Voyage AI, Zilliz Cloud Pipeline и Cohere.
Для получения дополнительных сведений посмотрите запись выступления Tengyu Ma на [**Unstructured Data Meetup by Zilliz**](https://www.youtube.com/watch?v=EmoWfP-78l0\&ab_channel=Zilliz)**.**
Читать далее

The AWS Outage Was a Wake-Up Call for Vector Database Cross-Region Disaster Recovery
Zilliz Cloud Had the Answer Before the Crisis. Zilliz Cloud is the world's first vector database with native cross-region disaster recovery.

Zilliz Cloud Update: Smarter Autoscaling for Cost Savings, Stronger Compliance with Audit Logs, and More
What's new in Zilliz Cloud? Smarter autoscaling with scale-down, audit logs GA, enhanced SSO, and Milvus 2.6 in Private Preview.

Zilliz Cloud Introduces Advanced BYOC-I Solution for Ultimate Enterprise Data Sovereignty
Explore Zilliz Cloud BYOC-I, the solution that balances AI innovation with data control, enabling secure deployments in finance, healthcare, and education sectors.



