はじめに
今回はLangChainを使ってCognitive SearchにベクトルDBを構築する方法について解説していきます。前回の記事ではベクトルDBの構築方法を詳しく取り上げましたが、それはCognitive Search側がデータソースに対して定期的にスキャンを行う、いわゆるPull型の仕組みとしています。
一方、ユーザーに特定のドキュメントをベクトルDBに登録してもらうなどのユースケースでは、Push型(イベントドリブン)のアーキテクチャを採用することが考えられます。今回紹介するLangChainを利用したベクトルDBの構築は、このPush型の方法に基づいています。この方法は簡潔に実装できるため、PoC(概念実証)の段階での利用にも適しています。なお、Cognitive Searchの言語アナライザーは日本語をサポートしています。
※2023年8月22日時点で、Cognitive SearchのベクトルDBはプレビュー版である点をご留意ください。
事前準備
コードはこちらのレポジトリに置いています。
今回の記事に対応するLangChainの公式ドキュメントはこちらです。
Pythonのバージョンは3.10.6
で動作確認を行っています。ライブラリは下記の通りです。
ipykernel
python-dotenv
pypdf
langchain==0.0.268
openai==0.27.8
tiktoken==0.4.0
azure-search-documents==11.4.0b6
azure-identity==1.13.0b4
LangChainのバージョンは0.0.268
です。Cognitive SearchのSDKはazure-search-documents==11.4.0b6
のバージョンを確実に固定してください。
ベクトルインデックスの作成
最初に環境変数を定義しておきます。
AZURE_OPENAI_ENDPOINT="https://<resource-name>.openai.azure.com/"
AZURE_OPENAI_API_KEY="<api-key>"
AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT_NAME="<deploy-name>"
AZURE_SEARCH_ENDPOINT="https://<service-name>.search.windows.net"
AZURE_SEARCH_SERVICE_NAME="<service-name>"
AZURE_SEARCH_API_KEY_ADMIN="<api-key-admin>"
import os
from dotenv import load_dotenv
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores.azuresearch import AzureSearch
from langchain.text_splitter import CharacterTextSplitter
from langchain.document_loaders import PyPDFLoader
from azure.search.documents.indexes.models import (
SearchableField,
SearchField,
SearchFieldDataType,
SimpleField
)
load_dotenv()
# Azure OpenAIのエンドポイントとAPIキー
AZURE_OPENAI_ENDPOINT=os.getenv("AZURE_OPENAI_ENDPOINT")
AZURE_OPENAI_API_KEY=os.getenv("AZURE_OPENAI_API_KEY")
# Embeddingモデルのデプロイ名
AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT_NAME=os.getenv("AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT_NAME")
# Azure SearchのエンドポイントとAPIキー
AZURE_SEARCH_ENDPOINT=os.getenv("AZURE_SEARCH_ENDPOINT")
AZURE_SEARCH_SERVICE_NAME=os.getenv("AZURE_SEARCH_SERVICE_NAME")
AZURE_SEARCH_API_KEY_ADMIN=os.getenv("AZURE_SEARCH_API_KEY_ADMIN")
次にPDFを読み込んでテキストに分割します。
# PDFを読み込んで、テキストを分割する
loader = PyPDFLoader("../data/Azure OpenAI Service とは - Azure Cognitive Services _ Microsoft Learn.pdf")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
# 分割後のドキュメントを表示
for doc in docs:
print(doc.json(indent=2, ensure_ascii=False))
PyPDFLoader
でPDFを読み込み、CharacterTextSplitter
でチャンクサイズやオーバーラップを指定し、テキストを分割します。
{
"page_content": "Azure OpenAI Service とは\n[アーティクル ]•2023/05/01\nAzure OpenAI Service では、 GPT-3 、 Codex 、 Embeddings モデル シリーズなど\nOpenAI の強⼒な⾔語モデルを REST API として使⽤できます。 さらに、新しい GPT-4\nおよび ChatGPT (gpt-35-turbo) モデル シリーズがプレビューで利⽤可能になりまし\nた。 これらのモデルは、特定のタスクに合わせて簡単に調整できます。たとえば、コ\nンテンツの⽣成、まとめ、セマンティック検索、⾃然⾔語からコードへの翻訳などで\nす。 ユーザーは、 REST API 、 Python SDK 、または Azure OpenAI S tudio の Web ベース\nのインターフェイスを介してサービスにアクセスできます。\n機能 Azur e OpenAI\n使⽤できるモデル 新しい GPT-4 シリーズ ( プレビュー )\nGPT-3 ベース シリーズ\n新しい ChatGPT (gpt -35-turbo) ( プレビュー )\nCodex シリーズ\n埋め込みシリーズ\n詳細については、 モデルに関するページを参照してください。\n微調整 Ada\nBabbage\nCurie\nCushman*\nDavinci*\n* 現在は利⽤できません。 ** ⽶国東部と⻄ヨーロッパでは、現在新\n規のお客様は微調整を利⽤できません。 ⽶国ベースのトレーニング\nには、⽶国中南部をご利⽤ください\nPrice こちらで⼊⼿可能\n仮想ネットワークのサポ\nート & プライベート リン\nクのサポートはい\nマネージド ID はい、 Azure Active Directory 経由\nUI エクスペリエンス アカウントとリソースの管理には Azur e Portal、\nモデルの探索と微調整には Azur e OpenAI Ser vice S tudio\nリージョン別の提供状況 ⽶国東部\n⽶国中南部\n⻄ヨーロッパ機能の概要",
"metadata": {
"source": "../data/Azure OpenAI Service とは - Azure Cognitive Services _ Microsoft Learn.pdf",
"page": 0
}
}
{
"page_content": "機能 Azur e OpenAI\nコンテンツのフィルター\n処理プロンプトと⼊⼒候補は、⾃動システムを使ってコンテンツ ポリシ\nーに対して評価されます。 重⼤度の⾼いコンテンツはフィルターで\n除外されます。\nMicrosoft は、⼈を第⼀に考える原則に基づいて、 AI の発展に取り組んでいます。\nAzure OpenAI で使⽤できる⽣成モデルには、かなりの潜在的利益がありますが、慎重\nな設計と熟考した軽減策がない場合、そのようなモデルによって、正しくない、また\nは有害なコンテンツが⽣成される可能性があります。 Microsoft は、悪⽤や意図しない\n損害から保護するために多⼤な投資を⾏っています。たとえば、明確に定義したユー\nス ケースを⽰すことを申請者の要件とする、 責任ある AI 使⽤に関する Microsoft の原\n則を取り⼊れる、顧客をサポートするコンテンツ フィルターを構築する、オンボー\nドされた顧客に対して責任ある AI 実装のガイダンスを提供するなどです。\nAzure OpenAI にアクセスするにはどうすればよいですか ?\n⾼い需要、今後の製品の機能強化、 Microsoft の責任ある AI へのコミットメント を\n考慮し、現在、アクセスは制限されています。 現在のところ、 Microsoft と既存のパー\nトナーシップ関係があるお客様、リスクの低いユース ケース、軽減策の取り⼊れに取\nり組んでいるお客様を対象としています。\nより具体的な情報は、申請フォームに記載されています。 Azure OpenAI に対するアク\nセスを拡⼤できるよう、責任を持って取り組んでいますので、しばらくお待ちくださ\nい。\nアクセスはこちらからお申し込みください。\n[今すぐ適⽤する ]\nAzure OpenAI Service では、 OpenAI GPT-4 、 GPT-3 、 Codex 、 DALL-E モデルを使⽤し\nた⾼度な⾔語 AI を顧客に提供し、 Azure のセキュリティとエンタープライズの約束を\n実現します。 Azure OpenAI は OpenAI と共に API を共同開発し、互換性を確保し、⼀\n⽅から他⽅へのスムーズな移⾏を保証します。責任ある AI\nAzure OpenAI にアクセスするにはどうすれば\nよいですか ?\nAzure OpenAI と OpenAI の⽐較",
"metadata": {
"source": "../data/Azure OpenAI Service とは - Azure Cognitive Services _ Microsoft Learn.pdf",
"page": 1
}
}
...
次に分割したテキストをベクトル化して、Cognitive Searchのインデックスとして登録します。
# emmbeddingモデルを定義
embeddings = OpenAIEmbeddings(
openai_api_type="azure",
model='text-embedding-ada-002',
openai_api_base=AZURE_OPENAI_ENDPOINT,
openai_api_key=AZURE_OPENAI_API_KEY,
deployment=AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT_NAME)
# Cognitive Searchのインデックスを作成
fields = [
SimpleField(
name="id",
type=SearchFieldDataType.String,
key=True,
filterable=True,
),
SearchableField(
name="content",
type=SearchFieldDataType.String,
searchable=True,
analyzer_name="ja.lucene",
),
SearchField(
name="content_vector",
type=SearchFieldDataType.Collection(SearchFieldDataType.Single),
searchable=True,
vector_search_dimensions=len(embeddings.embed_query("Text")),
vector_search_configuration="default",
),
SearchableField(
name="metadata",
type=SearchFieldDataType.String,
searchable=True,
),
]
# インデックス名
index_name = "sample-index"
# ベクトルストアを作成
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,
fields=fields
)
# ベクトルDBに追加
vector_store.add_documents(documents=docs)
言語アナライザーが日本語であることanalyzer_name="ja.lucene"
を確認します。
Azure Portalから先ほど作成したインデックスを確認してみましょう。[Cognitive Search]->[リソース名]->[インデックス]->[sample-index]からインデックスが作成されていることが確認できます。
PDFLoader vs Azure Document Intelligence(旧Form Recognizer)
余談として、PDFをテキストに変換する際の精度を検証しました。今回はPythonのPDFLoaderライブラリを使用しましたが、前回はCognitive Searchの内部で利用されているAzure Document Intelligence(旧Form Recognizer)を使用しました。これら二つのツールの精度を比較してみました。
元のPDF
PythonのPDFLoader
概ねそのまま取り込めていますが、行が変わる毎に\n
が入ったり、最後から2行目でAzur e OpenAI Ser vice S tudio
のように文字が分離している箇所があります。\n
や空白を削除する前処理を加えてから、ナレッジ登録する方が良さそうです。
Azure OpenAI Service とは\n[アーティクル ]•2023/05/01\nAzure OpenAI Service では、 GPT-3 、 Codex 、 Embeddings モデル シリーズなど\nOpenAI の強⼒な⾔語モデルを REST API として使⽤できます。 さらに、新しい GPT-4\nおよび ChatGPT (gpt-35-turbo) モデル シリーズがプレビューで利⽤可能になりまし\nた。 これらのモデルは、特定のタスクに合わせて簡単に調整できます。たとえば、コ\nンテンツの⽣成、まとめ、セマンティック検索、⾃然⾔語からコードへの翻訳などで\nす。 ユーザーは、 REST API 、 Python SDK 、または Azure OpenAI S tudio の Web ベース\nのインターフェイスを介してサービスにアクセスできます。\n機能 Azur e OpenAI\n使⽤できるモデル 新しい GPT-4 シリーズ ( プレビュー )\nGPT-3 ベース シリーズ\n新しい ChatGPT (gpt -35-turbo) ( プレビュー )\nCodex シリーズ\n埋め込みシリーズ\n詳細については、 モデルに関するページを参照してください。\n微調整 Ada\nBabbage\nCurie\nCushman*\nDavinci*\n* 現在は利⽤できません。 ** ⽶国東部と⻄ヨーロッパでは、現在新\n規のお客様は微調整を利⽤できません。 ⽶国ベースのトレーニング\nには、⽶国中南部をご利⽤ください\nPrice こちらで⼊⼿可能\n仮想ネットワークのサポ\nート & プライベート リン\nクのサポートはい\nマネージド ID はい、 Azure Active Directory 経由\nUI エクスペリエンス アカウントとリソースの管理には Azur e Portal、\nモデルの探索と微調整には Azur e OpenAI Ser vice S tudio\nリージョン別の提供状況 ⽶国東部\n⽶国中南部\n⻄ヨーロッパ機能の概要
Azure Document Intelligence(旧Form Recognizer)
こちらは行が変わる部分で\n
が入ることもありませんし、単語が崩れていることもざっとみた感じ無かったです。
"Azure OpenAI Serviceとは\n[アーティクル] • 2023/05/01\nAzure OpenAI Serviceでは、GPT-3、Codex、Embeddingsモデルシリーズなど OpenAIの強力な言語モデルをREST APIとして使用できます。さらに、新しいGPT-4 およびChatGPT (gpt-35-turbo)モデルシリーズがプレビューで利用可能になりまし た。 これらのモデルは、特定のタスクに合わせて簡単に調整できます。たとえば、コ ンテンツの生成、まとめ、セマンティック検索、自然言語からコードへの翻訳などで す。ユーザーは、REST API、Python SDK、またはAzure OpenAI StudioのWebベース のインターフェイスを介してサービスにアクセスできます。\n機能の概要\n機能\nAzure OpenAI\n使用できるモデル\n新しいGPT-4シリーズ(プレビュー)\nGPT-3ベースシリーズ\n新しいChatGPT (gpt-35-turbo) (プレビュー)\nCodexシリーズ\n埋め込みシリーズ\n詳細については、モデルに関するページを参照してください。\n微調整\nAda\nBabbage\nCurie\nCushman*\nDavinci*\n*現在は利用できません。**米国東部と西ヨーロッパでは、現在新\n規のお客様は微調整を利用できません。米国ベースのトレーニング\nには、米国中南部をご利用ください\nPrice こちらで入手可能\n仮想ネットワークのサポ\nはい\nー\nト&プライベートリン\nクのサポート\nマネージドID\nはい、Azure Active Directory経由\nUIエクスペリエンス\nアカウントとリソースの管理にはAzure Portal、\nモデルの探索と微調整にはAzure OpenAI Service Studio\nリージョン別の提供状況\n米国東部\n米国中南部\n西ヨーロッパ 機能\nAzure OpenAI\nコンテンツのフィルター 処理\nプロンプトと入",
ベクトル検索
ベクトル検索を行う場合は、search_type="similarity"
を指定します。
result_docs = vector_store.similarity_search(
query="Azure OpenAIで使えるモデルを教えて",
k=3,
search_type="similarity"
)
for doc in result_docs:
print(doc.json(indent=2, ensure_ascii=False))
下記の通り、検索結果が表示されています。page=0
の内容がトップに来ていれば、想定通りの検索結果なので、OKですね。
{
"page_content": "Azure OpenAI Service とは\n[アーティクル ]•2023/05/01\nAzure OpenAI Service では、 GPT-3 、 Codex 、 Embeddings モデル シリーズなど\nOpenAI の強⼒な⾔語モデルを REST API として使⽤できます。 さらに、新しい GPT-4\nおよび ChatGPT (gpt-35-turbo) モデル シリーズがプレビューで利⽤可能になりまし\nた。 これらのモデルは、特定のタスクに合わせて簡単に調整できます。たとえば、コ\nンテンツの⽣成、まとめ、セマンティック検索、⾃然⾔語からコードへの翻訳などで\nす。 ユーザーは、 REST API 、 Python SDK 、または Azure OpenAI S tudio の Web ベース\nのインターフェイスを介してサービスにアクセスできます。\n機能 Azur e OpenAI\n使⽤できるモデル 新しい GPT-4 シリーズ ( プレビュー )\nGPT-3 ベース シリーズ\n新しい ChatGPT (gpt -35-turbo) ( プレビュー )\nCodex シリーズ\n埋め込みシリーズ\n詳細については、 モデルに関するページを参照してください。\n微調整 Ada\nBabbage\nCurie\nCushman*\nDavinci*\n* 現在は利⽤できません。 ** ⽶国東部と⻄ヨーロッパでは、現在新\n規のお客様は微調整を利⽤できません。 ⽶国ベースのトレーニング\nには、⽶国中南部をご利⽤ください\nPrice こちらで⼊⼿可能\n仮想ネットワークのサポ\nート & プライベート リン\nクのサポートはい\nマネージド ID はい、 Azure Active Directory 経由\nUI エクスペリエンス アカウントとリソースの管理には Azur e Portal、\nモデルの探索と微調整には Azur e OpenAI Ser vice S tudio\nリージョン別の提供状況 ⽶国東部\n⽶国中南部\n⻄ヨーロッパ機能の概要",
"metadata": {
"source": "../data/Azure OpenAI Service とは - Azure Cognitive Services _ Microsoft Learn.pdf",
"page": 0
}
}
{
"page_content": "Azure OpenAI を使⽤すると、顧客は OpenAI と同じモデルを実⾏しながら、 Microsoft\nAzure のセキュリティ機能を使⽤できます。 Azure OpenAI では、プライベート ネット\nワーク、リージョンの可⽤性、責任ある AI コンテンツのフィルター処理が提供されま\nす。\n⼊⼒候補エンドポイントは、 API サービスのコア コンポーネントです。 この API は、\nモデルのテキストイン、テキストアウト インターフェイスへのアクセスを提供しま\nす。 ユーザーは、英語のテキスト コマンドを含む⼊⼒ プロンプトを⼊⼒するだけで、\nモデルによってテキスト ⼊⼒候補が⽣成されます。\n単純なプロンプトと⼊⼒候補の例を次に⽰します。\nプロンプト : \"\"\" count to 5 in a for loop \"\"\"\n⼊⼒候補 : for i in range(1, 6): print(i)\nAzure OpenAI では、テキストをトークンに分割して処理します。 トークンには、単語\nまたは⽂字のチャンクのみを指定できます。 たとえば、 \"hamburger\" という単語はト\nークン \"ham\"、 \"bur\" 、 \"ger\" に分割されますが、 \"pear\" のような短くて⼀般的な単語\nは 1 つのトークンです。 多くのトークンは、 \"hello\" や \"bye\" などの空⽩で始まりま\nす。\n所与の要求で処理されるトークンの合計数は、⼊⼒、出⼒、および要求パラメーター\nの⻑さによって異なります。 処理されるトークンの量は、モデルの応答待機時間とス\nループットにも影響します。\nAzure OpenAI は、 Azure の新しい製品オファリングです。 Azure OpenAI は、他の\nAzure 製品と同じように、 Azure サブスクリプションにこのサービス⽤の リソースまた\nはインスタンスを作成 して使⽤を開始できます。 Azure のリソース管理設計 について\n詳しくご覧いただけます。主要な概念\nプロンプトと⼊⼒候補\nトークン\nリソース\nデプロイメント",
"metadata": {
"source": "../data/Azure OpenAI Service とは - Azure Cognitive Services _ Microsoft Learn.pdf",
"page": 2
}
}
{
"page_content": "機能 Azur e OpenAI\nコンテンツのフィルター\n処理プロンプトと⼊⼒候補は、⾃動システムを使ってコンテンツ ポリシ\nーに対して評価されます。 重⼤度の⾼いコンテンツはフィルターで\n除外されます。\nMicrosoft は、⼈を第⼀に考える原則に基づいて、 AI の発展に取り組んでいます。\nAzure OpenAI で使⽤できる⽣成モデルには、かなりの潜在的利益がありますが、慎重\nな設計と熟考した軽減策がない場合、そのようなモデルによって、正しくない、また\nは有害なコンテンツが⽣成される可能性があります。 Microsoft は、悪⽤や意図しない\n損害から保護するために多⼤な投資を⾏っています。たとえば、明確に定義したユー\nス ケースを⽰すことを申請者の要件とする、 責任ある AI 使⽤に関する Microsoft の原\n則を取り⼊れる、顧客をサポートするコンテンツ フィルターを構築する、オンボー\nドされた顧客に対して責任ある AI 実装のガイダンスを提供するなどです。\nAzure OpenAI にアクセスするにはどうすればよいですか ?\n⾼い需要、今後の製品の機能強化、 Microsoft の責任ある AI へのコミットメント を\n考慮し、現在、アクセスは制限されています。 現在のところ、 Microsoft と既存のパー\nトナーシップ関係があるお客様、リスクの低いユース ケース、軽減策の取り⼊れに取\nり組んでいるお客様を対象としています。\nより具体的な情報は、申請フォームに記載されています。 Azure OpenAI に対するアク\nセスを拡⼤できるよう、責任を持って取り組んでいますので、しばらくお待ちくださ\nい。\nアクセスはこちらからお申し込みください。\n[今すぐ適⽤する ]\nAzure OpenAI Service では、 OpenAI GPT-4 、 GPT-3 、 Codex 、 DALL-E モデルを使⽤し\nた⾼度な⾔語 AI を顧客に提供し、 Azure のセキュリティとエンタープライズの約束を\n実現します。 Azure OpenAI は OpenAI と共に API を共同開発し、互換性を確保し、⼀\n⽅から他⽅へのスムーズな移⾏を保証します。責任ある AI\nAzure OpenAI にアクセスするにはどうすれば\nよいですか ?\nAzure OpenAI と OpenAI の⽐較",
"metadata": {
"source": "../data/Azure OpenAI Service とは - Azure Cognitive Services _ Microsoft Learn.pdf",
"page": 1
}
}
ハイブリッド検索
ベクトル検索を行う場合は、search_type="hybrid"
を指定します。
result_docs = vector_store.similarity_search(
query="Azure OpenAIで使えるモデルを教えて",
k=3,
search_type="hybrid"
)
for doc in result_docs:
print(doc.json(indent=2, ensure_ascii=False))
ベクトル検索と比べて上位2位と3位は変わりましたが、トップに来ているのでは想定通りpage=0
なのでOKです。
{
"page_content": "Azure OpenAI Service とは\n[アーティクル ]•2023/05/01\nAzure OpenAI Service では、 GPT-3 、 Codex 、 Embeddings モデル シリーズなど\nOpenAI の強⼒な⾔語モデルを REST API として使⽤できます。 さらに、新しい GPT-4\nおよび ChatGPT (gpt-35-turbo) モデル シリーズがプレビューで利⽤可能になりまし\nた。 これらのモデルは、特定のタスクに合わせて簡単に調整できます。たとえば、コ\nンテンツの⽣成、まとめ、セマンティック検索、⾃然⾔語からコードへの翻訳などで\nす。 ユーザーは、 REST API 、 Python SDK 、または Azure OpenAI S tudio の Web ベース\nのインターフェイスを介してサービスにアクセスできます。\n機能 Azur e OpenAI\n使⽤できるモデル 新しい GPT-4 シリーズ ( プレビュー )\nGPT-3 ベース シリーズ\n新しい ChatGPT (gpt -35-turbo) ( プレビュー )\nCodex シリーズ\n埋め込みシリーズ\n詳細については、 モデルに関するページを参照してください。\n微調整 Ada\nBabbage\nCurie\nCushman*\nDavinci*\n* 現在は利⽤できません。 ** ⽶国東部と⻄ヨーロッパでは、現在新\n規のお客様は微調整を利⽤できません。 ⽶国ベースのトレーニング\nには、⽶国中南部をご利⽤ください\nPrice こちらで⼊⼿可能\n仮想ネットワークのサポ\nート & プライベート リン\nクのサポートはい\nマネージド ID はい、 Azure Active Directory 経由\nUI エクスペリエンス アカウントとリソースの管理には Azur e Portal、\nモデルの探索と微調整には Azur e OpenAI Ser vice S tudio\nリージョン別の提供状況 ⽶国東部\n⽶国中南部\n⻄ヨーロッパ機能の概要",
"metadata": {
"source": "../data/Azure OpenAI Service とは - Azure Cognitive Services _ Microsoft Learn.pdf",
"page": 0
}
}
{
"page_content": "機能 Azur e OpenAI\nコンテンツのフィルター\n処理プロンプトと⼊⼒候補は、⾃動システムを使ってコンテンツ ポリシ\nーに対して評価されます。 重⼤度の⾼いコンテンツはフィルターで\n除外されます。\nMicrosoft は、⼈を第⼀に考える原則に基づいて、 AI の発展に取り組んでいます。\nAzure OpenAI で使⽤できる⽣成モデルには、かなりの潜在的利益がありますが、慎重\nな設計と熟考した軽減策がない場合、そのようなモデルによって、正しくない、また\nは有害なコンテンツが⽣成される可能性があります。 Microsoft は、悪⽤や意図しない\n損害から保護するために多⼤な投資を⾏っています。たとえば、明確に定義したユー\nス ケースを⽰すことを申請者の要件とする、 責任ある AI 使⽤に関する Microsoft の原\n則を取り⼊れる、顧客をサポートするコンテンツ フィルターを構築する、オンボー\nドされた顧客に対して責任ある AI 実装のガイダンスを提供するなどです。\nAzure OpenAI にアクセスするにはどうすればよいですか ?\n⾼い需要、今後の製品の機能強化、 Microsoft の責任ある AI へのコミットメント を\n考慮し、現在、アクセスは制限されています。 現在のところ、 Microsoft と既存のパー\nトナーシップ関係があるお客様、リスクの低いユース ケース、軽減策の取り⼊れに取\nり組んでいるお客様を対象としています。\nより具体的な情報は、申請フォームに記載されています。 Azure OpenAI に対するアク\nセスを拡⼤できるよう、責任を持って取り組んでいますので、しばらくお待ちくださ\nい。\nアクセスはこちらからお申し込みください。\n[今すぐ適⽤する ]\nAzure OpenAI Service では、 OpenAI GPT-4 、 GPT-3 、 Codex 、 DALL-E モデルを使⽤し\nた⾼度な⾔語 AI を顧客に提供し、 Azure のセキュリティとエンタープライズの約束を\n実現します。 Azure OpenAI は OpenAI と共に API を共同開発し、互換性を確保し、⼀\n⽅から他⽅へのスムーズな移⾏を保証します。責任ある AI\nAzure OpenAI にアクセスするにはどうすれば\nよいですか ?\nAzure OpenAI と OpenAI の⽐較",
"metadata": {
"source": "../data/Azure OpenAI Service とは - Azure Cognitive Services _ Microsoft Learn.pdf",
"page": 1
}
}
{
"page_content": "Azure OpenAI を使⽤すると、顧客は OpenAI と同じモデルを実⾏しながら、 Microsoft\nAzure のセキュリティ機能を使⽤できます。 Azure OpenAI では、プライベート ネット\nワーク、リージョンの可⽤性、責任ある AI コンテンツのフィルター処理が提供されま\nす。\n⼊⼒候補エンドポイントは、 API サービスのコア コンポーネントです。 この API は、\nモデルのテキストイン、テキストアウト インターフェイスへのアクセスを提供しま\nす。 ユーザーは、英語のテキスト コマンドを含む⼊⼒ プロンプトを⼊⼒するだけで、\nモデルによってテキスト ⼊⼒候補が⽣成されます。\n単純なプロンプトと⼊⼒候補の例を次に⽰します。\nプロンプト : \"\"\" count to 5 in a for loop \"\"\"\n⼊⼒候補 : for i in range(1, 6): print(i)\nAzure OpenAI では、テキストをトークンに分割して処理します。 トークンには、単語\nまたは⽂字のチャンクのみを指定できます。 たとえば、 \"hamburger\" という単語はト\nークン \"ham\"、 \"bur\" 、 \"ger\" に分割されますが、 \"pear\" のような短くて⼀般的な単語\nは 1 つのトークンです。 多くのトークンは、 \"hello\" や \"bye\" などの空⽩で始まりま\nす。\n所与の要求で処理されるトークンの合計数は、⼊⼒、出⼒、および要求パラメーター\nの⻑さによって異なります。 処理されるトークンの量は、モデルの応答待機時間とス\nループットにも影響します。\nAzure OpenAI は、 Azure の新しい製品オファリングです。 Azure OpenAI は、他の\nAzure 製品と同じように、 Azure サブスクリプションにこのサービス⽤の リソースまた\nはインスタンスを作成 して使⽤を開始できます。 Azure のリソース管理設計 について\n詳しくご覧いただけます。主要な概念\nプロンプトと⼊⼒候補\nトークン\nリソース\nデプロイメント",
"metadata": {
"source": "../data/Azure OpenAI Service とは - Azure Cognitive Services _ Microsoft Learn.pdf",
"page": 2
}
}
スコア付き検索
スコア付き検索を行いたい場合、LangChainのsimilarity_search_with_score()
メソッドを使いたいのですが、現在実装がTBDになっています。従って、ネイティブなAzureのSDKを使う方法をご紹介します。
from azure.search.documents import SearchClient
from azure.core.credentials import AzureKeyCredential
query = "Azure OpenAIで使えるモデルを教えて"
vector = embeddings.embed_query(query)
search_client = SearchClient(
endpoint=AZURE_SEARCH_ENDPOINT,
index_name=index_name,
credential=AzureKeyCredential(AZURE_SEARCH_API_KEY_ADMIN)
)
results = search_client.search(search_text="", vector=vector, vector_fields="content_vector", top_k=3)
for result in results:
#print(json.dumps(result, indent=2, sort_keys=True))
print("###############")
print(f"ID: {result['id']}")
print(f"Score: {result['@search.score']}")
print(f"Metadata: {result['metadata']}")
print(f"Content: {result['content']}")
@search.score
に検索スコアが表示されます。
###############
ID: Nzg4NmMzN2QtMjhkNS00ZWRmLTlkODgtMjNmMTAzYTk0NWJj
Score: 0.9002142
Metadata: {"source": "../data/Azure OpenAI Service \u3068\u306f - Azure Cognitive Services _ Microsoft Learn.pdf", "page": 0}
Content: Azure OpenAI Service とは
[アーティクル ]•2023/05/01
Azure OpenAI Service では、 GPT-3 、 Codex 、 Embeddings モデル シリーズなど
OpenAI の強⼒な⾔語モデルを REST API として使⽤できます。 さらに、新しい GPT-4
および ChatGPT (gpt-35-turbo) モデル シリーズがプレビューで利⽤可能になりまし
た。 これらのモデルは、特定のタスクに合わせて簡単に調整できます。たとえば、コ
ンテンツの⽣成、まとめ、セマンティック検索、⾃然⾔語からコードへの翻訳などで
す。 ユーザーは、 REST API 、 Python SDK 、または Azure OpenAI S tudio の Web ベース
のインターフェイスを介してサービスにアクセスできます。
機能 Azur e OpenAI
使⽤できるモデル 新しい GPT-4 シリーズ ( プレビュー )
GPT-3 ベース シリーズ
新しい ChatGPT (gpt -35-turbo) ( プレビュー )
Codex シリーズ
埋め込みシリーズ
詳細については、 モデルに関するページを参照してください。
微調整 Ada
Babbage
Curie
Cushman*
Davinci*
* 現在は利⽤できません。 ** ⽶国東部と⻄ヨーロッパでは、現在新
規のお客様は微調整を利⽤できません。 ⽶国ベースのトレーニング
には、⽶国中南部をご利⽤ください
Price こちらで⼊⼿可能
仮想ネットワークのサポ
ート & プライベート リン
クのサポートはい
マネージド ID はい、 Azure Active Directory 経由
UI エクスペリエンス アカウントとリソースの管理には Azur e Portal、
モデルの探索と微調整には Azur e OpenAI Ser vice S tudio
リージョン別の提供状況 ⽶国東部
⽶国中南部
⻄ヨーロッパ機能の概要
###############
ID: YjVjNGM2YjAtZjQwZi00YWViLTk2ZjQtYTA0MTMxOTgyYjAx
Score: 0.88651544
Metadata: {"source": "../data/Azure OpenAI Service \u3068\u306f - Azure Cognitive Services _ Microsoft Learn.pdf", "page": 2}
Content: Azure OpenAI を使⽤すると、顧客は OpenAI と同じモデルを実⾏しながら、 Microsoft
Azure のセキュリティ機能を使⽤できます。 Azure OpenAI では、プライベート ネット
ワーク、リージョンの可⽤性、責任ある AI コンテンツのフィルター処理が提供されま
す。
⼊⼒候補エンドポイントは、 API サービスのコア コンポーネントです。 この API は、
モデルのテキストイン、テキストアウト インターフェイスへのアクセスを提供しま
す。 ユーザーは、英語のテキスト コマンドを含む⼊⼒ プロンプトを⼊⼒するだけで、
モデルによってテキスト ⼊⼒候補が⽣成されます。
単純なプロンプトと⼊⼒候補の例を次に⽰します。
プロンプト : """ count to 5 in a for loop """
⼊⼒候補 : for i in range(1, 6): print(i)
Azure OpenAI では、テキストをトークンに分割して処理します。 トークンには、単語
または⽂字のチャンクのみを指定できます。 たとえば、 "hamburger" という単語はト
ークン "ham"、 "bur" 、 "ger" に分割されますが、 "pear" のような短くて⼀般的な単語
は 1 つのトークンです。 多くのトークンは、 "hello" や "bye" などの空⽩で始まりま
す。
所与の要求で処理されるトークンの合計数は、⼊⼒、出⼒、および要求パラメーター
の⻑さによって異なります。 処理されるトークンの量は、モデルの応答待機時間とス
ループットにも影響します。
Azure OpenAI は、 Azure の新しい製品オファリングです。 Azure OpenAI は、他の
Azure 製品と同じように、 Azure サブスクリプションにこのサービス⽤の リソースまた
はインスタンスを作成 して使⽤を開始できます。 Azure のリソース管理設計 について
詳しくご覧いただけます。主要な概念
プロンプトと⼊⼒候補
トークン
リソース
デプロイメント
###############
ID: Yzg4YjM5ZDctYjI1MS00YmY4LWFjMmItZTY4MjMzOTU0OGZm
Score: 0.8847311
Metadata: {"source": "../data/Azure OpenAI Service \u3068\u306f - Azure Cognitive Services _ Microsoft Learn.pdf", "page": 1}
Content: 機能 Azur e OpenAI
コンテンツのフィルター
処理プロンプトと⼊⼒候補は、⾃動システムを使ってコンテンツ ポリシ
ーに対して評価されます。 重⼤度の⾼いコンテンツはフィルターで
除外されます。
Microsoft は、⼈を第⼀に考える原則に基づいて、 AI の発展に取り組んでいます。
Azure OpenAI で使⽤できる⽣成モデルには、かなりの潜在的利益がありますが、慎重
な設計と熟考した軽減策がない場合、そのようなモデルによって、正しくない、また
は有害なコンテンツが⽣成される可能性があります。 Microsoft は、悪⽤や意図しない
損害から保護するために多⼤な投資を⾏っています。たとえば、明確に定義したユー
ス ケースを⽰すことを申請者の要件とする、 責任ある AI 使⽤に関する Microsoft の原
則を取り⼊れる、顧客をサポートするコンテンツ フィルターを構築する、オンボー
ドされた顧客に対して責任ある AI 実装のガイダンスを提供するなどです。
Azure OpenAI にアクセスするにはどうすればよいですか ?
⾼い需要、今後の製品の機能強化、 Microsoft の責任ある AI へのコミットメント を
考慮し、現在、アクセスは制限されています。 現在のところ、 Microsoft と既存のパー
トナーシップ関係があるお客様、リスクの低いユース ケース、軽減策の取り⼊れに取
り組んでいるお客様を対象としています。
より具体的な情報は、申請フォームに記載されています。 Azure OpenAI に対するアク
セスを拡⼤できるよう、責任を持って取り組んでいますので、しばらくお待ちくださ
い。
アクセスはこちらからお申し込みください。
[今すぐ適⽤する ]
Azure OpenAI Service では、 OpenAI GPT-4 、 GPT-3 、 Codex 、 DALL-E モデルを使⽤し
た⾼度な⾔語 AI を顧客に提供し、 Azure のセキュリティとエンタープライズの約束を
実現します。 Azure OpenAI は OpenAI と共に API を共同開発し、互換性を確保し、⼀
⽅から他⽅へのスムーズな移⾏を保証します。責任ある AI
Azure OpenAI にアクセスするにはどうすれば
よいですか ?
Azure OpenAI と OpenAI の⽐較
インデックスの削除
念のため使ったインデックスを削除する方法も載せておきます。
from azure.search.documents.indexes import SearchIndexClient
si_client = SearchIndexClient(
endpoint=AZURE_SEARCH_ENDPOINT,
credential=AzureKeyCredential(AZURE_SEARCH_API_KEY_ADMIN)
)
si_client.delete_index(index_name)
まとめ
LangChainを使用してCognitive SearchのベクトルDBの構築方法を解説しました。LangChainを活用することで、効率的にベクトルDBを作成することができます。次回は、このベクトルDBを使ってRAGアーキテクチャの実装方法について紹介したいと思います。