以前の記事では、Milvus ベクトル データベースと LlamaIndex を使用して基本的なチャット ロボットを構築する方法を紹介しました「データ サイエンスに向けたチャット | パーソナル データ ナレッジ ベースを使用して RAG チャット ロボットを構築するには?」》《本の前章に引き続き、LlamaIndex を使用してチャットボットを構築するにはどうすればよいですか? 》。
この記事では引き続き LlamaIndex を使用し、前の 2 つの記事に基づいてコードを変更して結果への参照を追加します。TruEra は、 RAG 評価ブログの 1 つで結果の基準 (Groundness) を紹介しました。興味のある友人は、リンクをクリックして表示できます。
準備ステップ
まず、llama-index 、python-dotenv 、pymilvus 、 および をインストールします。openai
! pip install llama-index python-dotenv openai pymilvus
次に、OpenAI と Zilliz Cloud (フルマネージドの Milvus ベクトル データベース) をセットアップし、load_dotenv関数を使用して.envファイルに保存されている環境変数を取得します。次に、環境変数を渡し、osを使用して変数値を取得します。LLMとしてOpenAI、Zilliz Cloud (https://zilliz.com.cn/cloud)を使用しています。ベクトルデータベースとして。この例では、Zilliz Cloud と Collection を使用してデータの永続性を実現します。
import osfrom dotenv import load_dotenv
import openai
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")
zilliz_uri = os.getenv("ZILLIZ_URI")
zilliz_token = os.getenv("ZILLIZ_TOKEN")
パラメータの設定
次に、RAG チャットボットのパラメータを定義します。埋め込みモデル、Milvus ベクトル データベース、LlamaIndex データ入力の 3 つのパラメーターを設定する必要があります。
まず、埋め込みモデルを設定します。この例では、前の記事で使用した HuggingFace MiniLM L12 モデルを 使用してデータをキャプチャし、それを Embedding ベクトルに変換します。同時に、LlamaIndex を介してHuggingFaceEmbeddingモジュールを使用してこれらのデータをロードできます。
from llama_index.embeddings import HuggingFaceEmbedding
embed_model = HuggingFaceEmbedding(model_name="sentence-transformers/all-MiniLM-L12-v2")
次に、ベクトル データベースをセットアップします。Zilliz Cloud はフルマネージドの Milvus サービスを提供できるため、Mil vusVector Storeモジュールを使用して Zilliz Cloud に接続できます。このプロセスでは、URI、トークンを指定し、コレクション名、類似性タイプ、およびテキスト キーを定義する必要があります。
以前に、環境変数を通じて Zilliz Cloud URI とトークンを取得し、コレクション名、類似性タイプ、およびテキスト キーは前の記事の設定に従いました。
from llama_index.vector_stores import MilvusVectorStore
vdb = MilvusVectorStore(
uri = zilliz_uri,
token = zilliz_token,
collection_name = "tds_articles",
similarity_metric = "L2",
text_key="paragraph"
)
最後に、LlamaIndex データ抽象化を統合します。必要な 2 つのネイティブ コンポーネントは、サービス コンテキストとベクター ストア インデックスです。サービス コンテキストは、事前定義されたサービスを渡すために使用され、ベクター ストア インデックスは、ベクター データベースから LlamaIndex "インデックス" を作成するために使用されます。この例では、サービス コンテキストを使用して埋め込みモデルを渡し、既存の Milvus ベクトル データベースと作成されたサービス コンテキストを使用してベクトル インデックスを作成します。
from llama_index import VectorStoreIndex, ServiceContext
service_context = ServiceContext.from_defaults(embed_model=embed_model)
vector_index = VectorStoreIndex.from_vector_store(vector_store=vdb, service_context=service_context)
チャットボットの回答に引用符を追加する
引用と帰属により RAG アプリケーションをさらに最適化でき、引用と注釈を通じて、回答のデータ ソースを理解し、回答の正確さを評価できます。
LlamaIndex は、そのCitationQueryEngineモジュールを通じて参照を実装する便利な方法を提供しており、非常に簡単に始めることができます。from_args を使用し、ベクトル インデックスを渡すことで、参照クエリ エンジンを作成できます。テキストはベクトルインデックスで事前に定義されているため、このフィールドなので、他に何も追加する必要はありません。
from llama_index.query_engine import CitationQueryEngine
query_engine = CitationQueryEngine.from_args(
vector_index
)
クエリ エンジンを設定したら、クエリ質問の送信を開始できます。たとえば、チャットボットに「大規模言語モデルとは何ですか?」と質問しました。この質問に対する答えは、Towards Data Science データセットから得られるはずです。
res = query_engine.query("What is a large language model?")
from pprint import pprint
pprint(res)
次の図は回答の例です。回答には回答とソーステキストが含まれており、回答の正しさは出典に基づいて判断できます。
要約する
この記事では、引用と注釈の方法を使用して、ロボットの回答の信頼性を高めています。RAG に共通する 2 つの問題は、引用と注釈によって解決されると言えます。引用と注釈を通じて、データの出所を知ることができます。同時に、データ ソースに基づいて、取得された応答がどの程度正確であるかを評価することもできます。さらに、この記事では LlamaIndex と Zilliz Cloud も使用しました。LlamaIndex はソースを取得するためのエンジンを簡単に作成するのに役立ち、Zilliz Cloud はデータの永続性を簡単に実現するのに役立ちます。
この記事の著者
この記事は WeChat 公開アカウント - ZILLIZ (Zilliztech) から共有されたものです。
侵害がある場合は、削除について [email protected] までご連絡ください。
この記事は「OSC ソース作成計画」に参加していますので、読んでいる方もぜひ参加し、共有してください。