LlamaIndex でプロンプトをカスタマイズしサポートらしい文章で回答を得る

2023.04.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コンニチハ、千葉です。

はじめに

LlamaIndex を活用することで、独自のデータを使った回答を作成できます。 ただし、デフォルトのまま利用すると応答が超シンプルになります。

Q: AWS が一番最初にリリースしたサービスは何ですか?

AWSの最初のサービスはAmazon Simple Queue Service(SQS)です。

とてもシンプルな回答です。これをカスタマイズし、サポートが回答したような文章で応答してくれるように変更します。試行錯誤することで、以下のように回答をしてくれるようになりました。

こんにちは、クラスメソッドのヘルプデスク担当です。ご質問ありがとうございます。

AWSが一番最初にリリースしたサービスは、Amazon Simple Queue Service(SQS)です。2004年11月にベータ版としてリリースされ、2006年7月に正式なサービス(GA)としてリリースされました。

不明な点がありましたら、お気軽にご連絡ください。ご質問ありがとうございました。

より自然な回答になりました。

それでは、やってみましょう!

やってみる

クエリを実行するコードです。

query.py

from llama_index import QuestionAnswerPrompt, GPTSimpleVectorIndex, SimpleDirectoryReader

index = GPTSimpleVectorIndex.load_from_disk('data/index.json')

query_str = "AWS が一番最初にリリースしたサービスは何ですか?"

file_name = 'prompto.txt'
with open(file_name, 'r', encoding='utf-8') as file:
    QA_PROMPT_TMPL = file.read()

QA_PROMPT = QuestionAnswerPrompt(QA_PROMPT_TMPL)

answer = index.query(query_str,text_qa_template=QA_PROMPT)
print(answer)

query に text_qa_template=QA_PROMPT を指定することで、プロンプトを指定できます。今回は、prompto.txt というファイルにプロンプトを記述しています。

prompto.txt

以下に、コンテキスト情報を提供します。

---------------------
{context_str}
---------------------

この情報を踏まえて、次の質問に回答してください: {query_str}
また、文章はサポートが返すような文章にしてください。

{context_str} に独自のインデックスから検索された文字列、{query_str} に index.query で指定した質問が入ります。 今回は「文章はサポートが返すような文章にしてください。」という行を追加し、サポートぽい回答を期待します。

ということで、実行して得られた回答です。

Amazon Simple Queue Service(SQS)がAWSの最初のサービスとなります。2004年11月にβ版としてリリースされ、2006年7月に正式なサービス(GA)としてリリースされました。

チョットサポートぽくなりました。さらにプロンプトをカスタマイズしてみます。

あなたはクラスメソッドのヘルプデスク担当です。

以下に、コンテキスト情報を提供します。

---------------------
{context_str}
---------------------

回答には以下を含めてください。
・最初に問い合わせへのお礼してください
・自己紹介してください
・質問内容を要約してください
・最後に不明な点がないか確認してください

この情報を踏まえて、次の質問に回答してください: {query_str}

prompto.txt

こんにちは、クラスメソッドのヘルプデスク担当です。ご質問ありがとうございます。

AWSが一番最初にリリースしたサービスは、Amazon Simple Queue Service(SQS)です。2004年11月にベータ版としてリリースされ、2006年7月に正式なサービス(GA)としてリリースされました。

不明な点がありましたら、お気軽にご連絡ください。ご質問ありがとうございました。

サポートぽい回答になりました!

まとめ

今回は、LlamaIndex で利用するプロンプトをカスタマイズしました。 独自データの利用に加えて、プロンプトをカスタマイズすることでさらに活用の幅が広がります。他にも様々なオプションがあるので試してみたいと思います。

参考

https://gpt-index.readthedocs.io/en/latest/how_to/customization/custom_prompts.html https://github.com/jerryjliu/llama_index/blob/main/examples/paul_graham_essay/TestEssay.ipynb