Новости
Модели
Продукты
keyboard_arrow_down
Глубокий поиск
Ищите, читайте и рассуждайте, пока не найдете лучший ответ.
Читатель
Читайте URL-адреса и ищите информацию в Интернете для получения более подходящей подготовки для получения степени магистра права.
Вложения
Мультимодальные многоязычные вложения мирового класса.
Реранкер
Нейронный ретривер мирового класса для максимального повышения релевантности поиска.
Классификатор
Классификация изображений и текста по нулевому и небольшому количеству кадров.
Сегментатор
Разрежьте длинный текст на куски и выполните токенизацию.

API-документы
Автоматическая генерация кода для вашего второго пилота IDE или LLM
open_in_new


Компания
keyboard_arrow_down
О нас
Связаться с отделом продаж
Стажерская программа
Присоединяйтесь к нам
open_in_new
Скачать логотип
open_in_new
Условия использования


Авторизоваться
login
Обзор Milvus Lite, Jina Embeddings и Jina Reranker
Milvus и модели Jina AI в действии
Итоги
Используйте модели Jina AI и Milvus прямо сейчас
Технический блог
июнь 03, 2024

Реализация чата с историей на основе RAG с помощью Jina AI и Milvus Lite

Улучшите поисковые приложения на Python с помощью Jina Embeddings и Reranker, а также легковесного, простого в развертывании Milvus Lite.
Black background with vivid geometric shapes on the sides and central logos "Embeddings," "Reranker," and "Milvus."
Francesco Kruk
Saahil Ognawala
Francesco Kruk, Saahil Ognawala • 6 минуты чтения

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

В этой статье мы расскажем, как Milvus Lite интегрирует Jina Embeddings v2 и Jina Reranker v1 на примере приложения Retrieval Augmented Generation (RAG), построенного на основе чатов внутреннего публичного канала вымышленной компании, чтобы сотрудники могли получать точные и полезные ответы на вопросы, связанные с организацией.

tagОбзор Milvus Lite, Jina Embeddings и Jina Reranker

Milvus Lite — это новая облегченная версия ведущей векторной базы данных Milvus, которая теперь также предлагается как Python-библиотека. Milvus Lite использует тот же API, что и Milvus, развернутый на Docker или Kubernetes, но может быть легко установлен с помощью одной команды pip без настройки сервера.

С интеграцией Jina Embeddings v2 и Jina Reranker v1 в pymilvus, Python SDK Milvus, теперь у вас есть возможность напрямую встраивать документы, используя один и тот же Python-клиент для любого режима развертывания Milvus, включая Milvus Lite. Подробности интеграции Jina Embeddings и Reranker вы можете найти на страницах документации pymilvus.

Благодаря контекстному окну в 8 тысяч токенов и многоязычным возможностям, Jina Embeddings v2 кодирует широкую семантику текста и обеспечивает точный поиск. Добавляя Jina Reranker v1 в конвейер, вы можете дополнительно уточнить результаты, выполняя кросс-кодирование полученных результатов непосредственно с запросом для более глубокого понимания контекста.

tagMilvus и модели Jina AI в действии

Этот учебник сфокусируется на практическом примере: запросах к истории чатов компании в Slack для ответов на широкий спектр вопросов на основе прошлых разговоров.

Блок-схема, детализирующая процесс обучения модели сообщества Rust, включающий шаги от запроса "Следующий шаг обучения?"
Схема процесса запроса данных Slack на примере запроса

Например, сотрудник может спросить о следующем шаге в процессе обучения ИИ, как показано на схеме процесса выше. Используя Jina Embeddings, Jina Reranker и Milvus, мы можем точно определить релевантную информацию в сохраненных сообщениях Slack. Это приложение может повысить производительность на рабочем месте, облегчая доступ к ценной информации из прошлых коммуникаций.

Для генерации ответов мы будем использовать Mixtral 7B Instruct через интеграцию HuggingFace в Langchain. Для использования модели вам нужен токен доступа HuggingFace, который вы можете сгенерировать, как описано здесь.

Вы можете следовать примеру в Colab или скачав ноутбук.

Google Colab

tagО наборе данных

Набор данных, используемый в этом учебнике, был сгенерирован с помощью GPT-4 и предназначен для воспроизведения истории чатов каналов Slack компании Blueprint AI. Blueprint — это вымышленный AI-стартап, разрабатывающий собственные фундаментальные модели. Вы можете скачать набор данных здесь.

Данные организованы по каналам, каждый из которых представляет собой коллекцию связанных тем Slack. Каждый канал имеет тематическую метку, одну из десяти опций: распространение модели, обучение модели, тонкая настройка модели, этика и снижение предвзятости, обратная связь от пользователей, продажи, маркетинг, внедрение модели, креативный дизайн и управление продуктом. Один участник известен как "эксперт". Вы можете использовать это поле для проверки результатов поиска самого опытного пользователя по теме, что мы покажем ниже.

Каждый канал также содержит историю чата с ветками разговоров до 100 сообщений на канал. Каждое сообщение в наборе данных содержит следующую информацию:

  • Пользователь, отправивший сообщение
  • Текст сообщения, отправленный пользователем
  • Временная метка сообщения
  • Имя файла, который пользователь мог прикрепить к сообщению
  • ID сообщения
  • ID родительского сообщения, если сообщение было в ветке, начатой с другого сообщения
Диаграмма, показывающая структуру системы обмена сообщениями, детализирующая отношения между сущностями 'Канал' и 'Сообщение'
UML-диаграмма структуры данных чата.

tagНастройка окружения

Для начала установите все необходимые компоненты:

pip install -U pymilvus
pip install -U "pymilvus[model]"
pip install langchain
pip install langchain-community

Скачайте набор данных:

import os

if not os.path.exists("chat_history.json"):
    !wget https://raw.githubusercontent.com/jina-ai/workshops/main/notebooks/embeddings/milvus/chat_history.json

Установите ваш API-ключ Jina AI в переменную окружения. Вы можете сгенерировать его здесь.

import os
import getpass

os.environ["JINAAI_API_KEY"] = getpass.getpass(prompt="Jina AI API Key: ")

Сделайте то же самое для вашего токена Hugging Face. Вы можете узнать, как его сгенерировать, здесь. Убедитесь, что он установлен на READ для доступа к Hugging Face Hub.

os.environ["HUGGINGFACEHUB_API_TOKEN"] = getpass.getpass(prompt="Hugging Face Token: ")

tagСоздание коллекции Milvus

Создайте коллекцию Milvus для индексации данных:

from pymilvus import MilvusClient, DataType

# Specify a local file name as uri parameter of MilvusClient to use Milvus Lite
client = MilvusClient("milvus_jina.db")

schema = MilvusClient.create_schema(
    auto_id=True,
    enable_dynamic_field=True,
)

schema.add_field(field_name="id", datatype=DataType.INT64, description="The Primary Key", is_primary=True)
schema.add_field(field_name="embedding", datatype=DataType.FLOAT_VECTOR, description="The Embedding Vector", dim=768)

index_params = client.prepare_index_params()
index_params.add_index(field_name="embedding", metric_type="COSINE", index_type="AUTOINDEX")

client.create_collection(collection_name="milvus_jina", schema=schema, index_params=index_params)

tagПодготовка данных

Парсинг истории чата и извлечение метаданных:

import json

with open("chat_history.json", "r", encoding="utf-8") as file:
    chat_data = json.load(file)

messages = []
metadatas = []

for channel in chat_data:
  chat_history = channel["chat_history"]
  chat_topic = channel["topic"]
  chat_expert = channel["expert_user"]
  for message in chat_history:
    text = f"""{message["user"]}: {message["message"]}"""
    messages.append(text)
    meta = {
        "time_stamp": message["time_stamp"],
        "file_name": message["file_name"],
        "parent_message_nr": message["parent_message_nr"],
        "channel": chat_topic,
        "expert": True if message["user"] == chat_expert else False
    }
    metadatas.append(meta)

tagВнедрение данных чата

Создание эмбеддингов для каждого сообщения с помощью Jina Embeddings v2 для получения релевантной информации из чата:

from pymilvus.model.dense import JinaEmbeddingFunction

jina_ef = JinaEmbeddingFunction("jina-embeddings-v2-base-en")

embeddings = jina_ef.encode_documents(messages)

tagИндексация данных чата

Индексация сообщений, их эмбеддингов и соответствующих метаданных:

collection_data = [{
    "message": message,
    "embedding": embedding,
    "metadata": metadata
} for message, embedding, metadata in zip(messages, embeddings, metadatas)]

data = client.insert(
    collection_name="milvus_jina",
    data=collection_data
)

tagЗапрос к истории чата

Время задать вопрос:

query = "Who knows the most about encryption protocols in my team?"

Теперь создадим эмбеддинг запроса и получим релевантные сообщения. Здесь мы получаем пять наиболее релевантных сообщений и делаем их переранжирование с помощью Jina Reranker v1:

from pymilvus.model.reranker import JinaRerankFunction

query_vectors = jina_ef.encode_queries([query])

results = client.search(
    collection_name="milvus_jina",
    data=query_vectors,
    limit=5,
)

results = results[0]

ids = [results[i]["id"] for i in range(len(results))]

results = client.get(
    collection_name="milvus_jina",
    ids=ids,
    output_fields=["id", "message", "metadata"]
)

jina_rf = JinaRerankFunction("jina-reranker-v1-base-en")

documents = [results[i]["message"] for i in range(len(results))]
reranked_documents = jina_rf(query, documents)

reranked_messages = []
for reranked_document in reranked_documents:
  idx = reranked_document.index
  reranked_messages.append(results[idx])

Наконец, сгенерируем ответ на запрос с помощью Mixtral 7B Instruct, используя переранжированные сообщения в качестве контекста:

from langchain.prompts import PromptTemplate
from langchain_community.llms import HuggingFaceEndpoint

llm = HuggingFaceEndpoint(repo_id="mistralai/Mixtral-8x7B-Instruct-v0.1")

prompt = """<s>[INST] Context information is below.\\n
        It includes the five most relevant messages to the query, sorted based on their relevance to the query.\\n
        ---------------------\\n
        {context_str}\\\\n
        ---------------------\\n
        Given the context information and not prior knowledge,
        answer the query. Please be brief, concise, and complete.\\n
        If the context information does not contain an answer to the query,
        respond with \\"No information\\".\\n
        Query: {query_str}[/INST] </s>"""

prompt = PromptTemplate(template=prompt, input_variables=["query_str", "context_str"])

llm_chain = prompt | llm

answer = llm_chain.invoke({"query_str":query, "context_str":reranked_messages})

print(f"\n\nANSWER:\n\n{answer}")

Ответ на наш вопрос:

"На основе контекстной информации, User5 кажется наиболее осведомленным о протоколах шифрования в вашей команде. Они упоминали, что новые протоколы значительно повышают безопасность данных, особенно для облачных развертываний."

Если вы просмотрите сообщения в chat_history.json, вы сможете сами проверить, является ли User5 самым экспертным пользователем.

tagИтоги

Мы рассмотрели, как настроить Milvus Lite, внедрить данные чата с помощью Jina Embeddings v2 и улучшить результаты поиска с помощью Jina Reranker v1 на практическом примере поиска в истории чата Slack. Milvus Lite упрощает разработку приложений на Python без необходимости сложных серверных настроек. Его интеграция с Jina Embeddings и Reranker направлена на повышение продуктивности, облегчая доступ к ценной информации на рабочем месте.

tagИспользуйте модели Jina AI и Milvus прямо сейчас

Milvus Lite с интегрированными Jina Embeddings и Reranker предоставляет вам полный конвейер обработки, готовый к использованию всего в несколько строк кода.

Мы будем рады узнать о ваших вариантах использования и обсудить, как расширение Jina AI Milvus может соответствовать потребностям вашего бизнеса. Свяжитесь с нами через наш веб-сайт или наш канал Discord, чтобы поделиться отзывами и быть в курсе наших последних моделей. По вопросам интеграции Milvus и Jina AI присоединяйтесь к сообществу Milvus.

Категории:
Технический блог
rss_feed
Офисы
location_on
Саннивейл, Калифорния
710 Lakeway Dr, Ste 200, Саннивейл, Калифорния 94085, США
location_on
Берлин, Германия (штаб-квартира)
Prinzessinnenstraße 19-20, 10969 Берлин, Германия
location_on
Пекин, Китай
Уровень 5, здание 6, ул. Хайдянь Вест, д. 48, Пекин, Китай
location_on
Шэньчжэнь, Китай
402, этаж 4, здание Fu'an Technology, Шэньчжэнь, Китай
Поиск Фонда
Глубокий поиск
Читатель
Вложения
Реранкер
Классификатор
Сегментатор
API-документация
Получить API-ключ Jina
Ограничение скорости
Статус API
Компания
О нас
Связаться с отделом продаж
отдел новостей
Стажерская программа
Присоединяйтесь к нам
open_in_new
Скачать логотип
open_in_new
Условия
Безопасность
Условия использования
Конфиденциальность
Управление файлами cookie
email
Jina AI © 2020-2025.