2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

はじめての記事投稿

LlamaIndexでAzure OpenAI Serviceを利用する

Posted at

はじめに

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のデプロイ名を指定してください。
Embedding用のLLMモデルを設定する
# 各種パラメータを設定する
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を定義する
service_context = ServiceContext.from_defaults(
    llm_predictor=llm_predictor,
    embed_model=embedding_llm,
)

プロンプトを修正する

gpt-35-turboでは、systemuserassistantを定義できます。
LlamaIndexで使われているプロンプトを修正することで、回答の精度を上げられます。
2種類のプロンプトを以下のように修正してください。
※プロンプトの書き方については、プロンプトエンジニアリングガイドを参考にしています。

qa_prompt
<|im_start|>system
あなたはXXXに関する質問に回答するアシスタントです。
以下の文脈を利用して、1~2文で簡潔に回答してください。
文脈: {context_str}
<|im_end|>
<|im_start|>user
{query_str}
<|im_end|>
<|im_start|>assistant
refine_prompt
<|im_start|>system
あなたはXXXに関する質問に回答するアシスタントです。
新たな文脈を利用して、元の回答をより適切に質問に答える形に改善してください。
文脈: {context_msg}
元の回答: {existing_answer}
<|im_end|>
<|im_start|>user
{query_str}
<|im_end|>
<|im_start|>assistant

上記のプロンプトを、query_engineの宣言時の引数に加えてください。

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は頻繁にバージョンアップするので、まずは公式ドキュメントをご確認ください。
初投稿で拙い箇所もあったかもしれませんが、誰かのお役に立てれば幸いです。
ご意見ご指摘などありましたらコメントください。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?