ニュース
モデル
製品
keyboard_arrow_down
読者
URL を読み取ったり検索したりすると、大規模なモデルのサポートが向上します。
ベクトルモデル
世界クラスのマルチモーダル、多言語埋め込み。
並べ替え者
検索の関連性を最大化する世界クラスのニューラルレトリーバー。
ディープサーチ
最善の答えが見つかるまで、検索し、読み、推論してください。
もっと
keyboard_arrow_down
分類子
画像とテキストのゼロショットおよび少数ショットの分類。
スライサー
長いテキストをチャンクまたはトークンに分割します。

APIドキュメント
AIプログラミングアシスタントIDEまたは大規模モデル用のコードを自動生成
open_in_new


会社
keyboard_arrow_down
私たちについて
営業担当者に問い合わせる
インターンプログラム
参加しませんか
open_in_new
ロゴをダウンロード
open_in_new
利用規約


ログイン
login
Milvus Lite、Jina Embeddings、Jina Reranker の概要
Milvus と Jina AI モデルの実践
まとめ
Jina AI Models と Milvus を今すぐ使用
技術記事
6月 03, 2024

Jina AI と Milvus Lite を使用したチャット履歴 RAG の実装

Jina Embeddings と Reranker、そして軽量で導入が簡単な Milvus Lite を使用して、Python の検索アプリケーションを強化しましょう。
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 が提供する最新の軽量ベクトルデータベース Milvus Lite は、特に高品質で使いやすい検索基盤モデルと組み合わせた場合に、Python 開発者が検索アプリケーションを迅速に開発するための重要なツールとなっています。

本記事では、架空の企業の社内公開チャンネルのチャットを基に構築した Retrieval Augmented Generation (RAG) アプリケーションの例を用いて、Milvus Lite が Jina Embeddings v2 と Jina Reranker v1 をどのように統合し、従業員が組織に関する質問に正確で有用な回答を得られるようにするかを説明します。

tagMilvus Lite、Jina Embeddings、Jina Reranker の概要

Milvus Lite は、主要なベクトルデータベースである Milvus の新しい軽量バージョンで、Python ライブラリとしても提供されています。Milvus Lite は、Docker や Kubernetes にデプロイされた Milvus と同じ API を共有していますが、サーバーをセットアップすることなく、1 行の pip コマンドで簡単にインストールできます。

Milvus の Python SDK である pymilvus に Jina Embeddings v2 と Jina Reranker v1 を統合することで、Milvus Lite を含む Milvus のあらゆるデプロイメントモードで、同じ Python クライアントを使用してドキュメントを直接埋め込むことができるようになりました。Jina Embeddings と Reranker の統合の詳細については、pymilvus の ドキュメントページをご覧ください。

8k トークンのコンテキストウィンドウと多言語対応機能を備えた Jina Embeddings v2 は、テキストの幅広い意味を符号化し、正確な検索を保証します。パイプラインに Jina Reranker v1 を追加することで、より深いコンテキスト理解のために検索結果をクエリと直接クロスエンコードして、結果をさらに精緻化することができます。

tagMilvus と Jina AI モデルの実践

このチュートリアルでは、実践的なユースケースに焦点を当てます:過去の会話に基づいて、企業の Slack チャット履歴から幅広い質問に答えることです。

Flowchart detailing the Rust community's model training process, featuring steps from the "Next training step?" query through
サンプルクエリを使用した Slack データの検索プロセスフロー

例えば、上記のプロセス図のように、従業員が AI トレーニングプロセスの次のステップについて質問することができます。Jina Embeddings、Jina Reranker、Milvus を使用することで、記録された Slack メッセージから関連情報を正確に特定できます。このアプリケーションは、過去のコミュニケーションから価値ある情報へのアクセスを容易にすることで、職場の生産性を向上させることができます。

回答を生成するために、Langchain の HuggingFace 統合を通じて Mixtral 7B Instruct を使用します。モデルを使用するには、こちらの説明に従って生成できる HuggingFace アクセストークンが必要です。

Colab で、またはノートブックをダウンロードして実践できます。

Google Colab

tagデータセットについて

このチュートリアルで使用されるデータセットは GPT-4 を使用して生成され、Blueprint AI の Slack チャンネルのチャット履歴を再現することを目的としています。Blueprint は独自の基盤モデルを開発している架空の AI スタートアップです。データセットはこちらからダウンロードできます。

データは関連する Slack スレッドのコレクションを表す「チャンネル」で整理されています。各チャンネルには、10 のトピックオプションのいずれかのトピックラベルがあります:「model distribution」、「model training」、「model fine-tuning」、「ethics and bias mitigation」、「user feedback」、「sales」、「marketing」、「model onboarding」、「creative design」、「product management」。あるユーザーは「expert user」として知られています。この情報を使用して、以下で説明するようにトピックの最も専門的なユーザーを検索した結果を検証できます。

各チャンネルには、チャンネルごとに最大 100 メッセージの会話スレッドを含むチャット履歴もあります。データセットの各メッセージには以下の情報が含まれています:

  • メッセージを送信したユーザー
  • ユーザーが送信したメッセージテキスト
  • メッセージのタイムスタンプ
  • ユーザーがメッセージに添付した可能性のあるファイル名
  • メッセージ ID
  • メッセージが別のメッセージから始まったスレッド内にある場合の親メッセージ ID
Diagram showing the structure of a messaging system, detailing the relationship between 'Channel' and 'Message' entities, wit
チャットデータの構造を示す 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

環境変数に Jina AI API キーを設定します。こちらで生成できます。

import os
import getpass

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

同様に Hugging Face トークンも設定します。生成方法はこちらでご確認いただけます。Hugging Face Hub にアクセスするために READ に設定されていることを確認してください。

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

tagMilvus コレクションの作成

データをインデックスするために 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?"

クエリを埋め込み、関連するメッセージを取得します。ここでは、最も関連性の高い 5 つのメッセージを取得し、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 との統合により、職場での貴重な情報へのアクセスを容易にし、生産性を向上させることを目指しています。

tagJina AI Models と Milvus を今すぐ使用

統合された Jina Embeddings と Reranker を備えた Milvus Lite は、わずか数行のコードで使用できる完全な処理パイプラインを提供します。

皆様のユースケースについてお聞かせいただき、Jina AI Milvus エクステンションがビジネスニーズにどのように適合するかについて話し合えることを楽しみにしています。ウェブサイトまたはDiscord チャンネルからご連絡いただき、フィードバックを共有し、最新のモデルについての情報を入手してください。Milvus と Jina AI の統合に関する質問については、Milvus コミュニティにご参加ください。

カテゴリー:
技術記事
rss_feed
オフィス
location_on
カリフォルニア州サニーベール
710 Lakeway Dr、Ste 200、サニーベール、CA 94085、アメリカ合衆国
location_on
ドイツ、ベルリン(本社)
Prinzessinnenstraße 19-20、10969 ベルリン、ドイツ
location_on
中国、北京
中国北京市海淀区西街48号ビル6号5階
location_on
深セン、中国
ルーム 402、4 階、福安テクノロジービル、深セン、中国
検索ベース
読者
ベクトルモデル
並べ替え者
ディープサーチ
分類子
スライサー
APIドキュメント
Jina APIキーを取得する
レート制限
APIステータス
会社
私たちについて
営業担当者に問い合わせる
ニュース
インターンプログラム
参加しませんか
open_in_new
ロゴをダウンロード
open_in_new
条項
安全性
利用規約
プライバシー
Cookieを管理する
email
Jina AI © 2020-2025.