はじめに
以前、Cosmos DBにデータを登録 → AI Searchにベクター化したデータを登録 → On Your Dataで検索する!という流れを実装しました。
(このブログではなくQiitaに試したことは投稿)
今回は、On Your Dataを使って試していた部分をLangChainのRetrievalQAを使って同じようなことができないか試してみました。
環境
- Python v3.11.1 64bit
- Azure AI Search
- Azure Open AI
- gpt-35-turbo
- text-embedding-ada-002
インストールが必要なもの
- azure-search-documents==11.4.0b8
- azure-identity
Azure AI Searchにインデックスを作成して登録する
登録する方法はこちらの記事でまとめております。
※ベクター化のほうのインデックスフィールドの名前は「contentVector」ではなく、「content_vector」にしないと下のコードは動かないので注意
ソースコード
import os from langchain.embeddings import AzureOpenAIEmbeddings from langchain.vectorstores.azuresearch import AzureSearch from langchain.chains import RetrievalQA from langchain.chat_models import AzureChatOpenAI os.environ["AZURE_OPENAI_API_KEY"] = "" os.environ["AZURE_OPENAI_ENDPOINT"] = "" AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT_NAME = "" AZURE_OPENAI_GPT35_DEPLOYMENT_NAME = "" AZURE_SEARCH_ENDPOINT = "" AZURE_SEARCH_API_KEY_ADMIN = "" embeddings = AzureOpenAIEmbeddings( azure_deployment=AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT_NAME, ) index_name = "" vector_store = AzureSearch( azure_search_endpoint=AZURE_SEARCH_ENDPOINT, azure_search_key=AZURE_SEARCH_API_KEY_ADMIN, index_name=index_name, embedding_function=embeddings.embed_query ) # チャットモデルを定義 chat = AzureChatOpenAI( openai_api_type="azure", model_name="gpt-35-turbo", openai_api_version="2023-07-01-preview", deployment_name=AZURE_OPENAI_GPT35_DEPLOYMENT_NAME, temperature=0 ) # RetrievalQAチェーンを定義 qa_chain = RetrievalQA.from_chain_type( llm=chat, retriever=vector_store.as_retriever(), return_source_documents=True ) # QAを実行 result = qa_chain({"query": "コンテナを使うサービスを教えて。"}) print(result)
AZURE_OPENAI_API_KEYの場所
Azure Open AIのリソース > キーとエンドポイント
AZURE_OPENAI_ENDPOINTの場所
Azure Open AIのリソース > キーとエンドポイント
AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT_NAMEの場所
Azure AI Studio > デプロイ
AZURE_OPENAI_GPT35_DEPLOYMENT_NAMEの場所
Azure AI Studio > デプロイ
AZURE_SEARCH_ENDPOINTの場所
Azure AI SearchのリソースのURL
AZURE_SEARCH_API_KEY_ADMINの場所
Azure AI Searchのリソース > キー
結果