はじめに
LlamaIndexは、Retrieval Augmented Generation (RAG) の実装ができるフレームワークです。
On Your Data よりも安価で構築できるので、手軽に始めるのに向いていそうです。
LlamaIndexでAzure OpenAI Serviceを利用するための設定を備忘録として残しておきます。
EmbeddingモデルのAPIを設定する
Azure OpenAI Serviceを利用する場合は、Embedding用の設定を記載する必要があります。
以下のパラメータを定義して、モデルを作成してください。
参考: Azure OpenAI - LlamaIndex 🦙
-
openai.api_type
: 「azure」と指定してください。 -
openai.api_base
: Azure OpenAI ServiceのURLを指定してください。 -
openai.api_version
: APIのバージョン。執筆時点の最新は「2023-06-01-preview」。 -
openai.api_key
: OpenAI ServiceのAPIキーを指定してください。 -
model_name
: モデル名。執筆時点の最新は「text-embedding-ada-002」。 -
deployment_name
: Azure OpenAI Serviceのデプロイ名を指定してください。
# 各種パラメータを設定する
openai.api_type = "azure"
openai.api_base = "https://xxxxx.openai.azure.com"
openai.api_version = "2023-06-01-preview"
os.environ["OPENAI_API_KEY"] = "xxxxxxxxxx"
openai.api_key = os.getenv("OPENAI_API_KEY")
model_name = "text-embedding-ada-002"
deployment_name = 'xxxxxxxxxx'
# Embedding用のLLM設定を作成する
embedding_llm = LangchainEmbedding(
OpenAIEmbeddings(
model=model_name,
deployment=deployment_name,
openai_api_key=openai.api_key,
openai_api_base=openai.api_base,
openai_api_type=openai.api_type,
openai_api_version=openai.api_version,
),
embed_batch_size=1,
)
Service Contextを定義する際は、作成したモデルを引数に追加してください。
service_context = ServiceContext.from_defaults(
llm_predictor=llm_predictor,
embed_model=embedding_llm,
)
プロンプトを修正する
gpt-35-turbo
では、system
・user
・assistant
を定義できます。
LlamaIndexで使われているプロンプトを修正することで、回答の精度を上げられます。
2種類のプロンプトを以下のように修正してください。
※プロンプトの書き方については、プロンプトエンジニアリングガイドを参考にしています。
<|im_start|>system
あなたはXXXに関する質問に回答するアシスタントです。
以下の文脈を利用して、1~2文で簡潔に回答してください。
文脈: {context_str}
<|im_end|>
<|im_start|>user
{query_str}
<|im_end|>
<|im_start|>assistant
<|im_start|>system
あなたはXXXに関する質問に回答するアシスタントです。
新たな文脈を利用して、元の回答をより適切に質問に答える形に改善してください。
文脈: {context_msg}
元の回答: {existing_answer}
<|im_end|>
<|im_start|>user
{query_str}
<|im_end|>
<|im_start|>assistant
上記のプロンプトを、query_engineの宣言時の引数に加えてください。
query_engine = index.as_query_engine(
text_qa_template=QA_PROMPT,
refine_template=REFINE_PROMPT
)
Chat Markup Language(ChatML)というフォーマットを使っています。
詳細は以下のサイトなどをご確認ください。
本家 OpenAI と Azure OpenAI Service の ChatGPT API の比較
おわりに
LlamaIndexは頻繁にバージョンアップするので、まずは公式ドキュメントをご確認ください。
初投稿で拙い箇所もあったかもしれませんが、誰かのお役に立てれば幸いです。
ご意見ご指摘などありましたらコメントください。