プロンプトテンプレート

プロンプトテンプレートとは、通常、"プロンプト"と呼ばれるテキストを取得するために使用されるテキストで、直接的にハードコードされないことが多い。これは、プロンプトの管理には適していないため、プロンプトテンプレートが使用されています。これは、SMSやメールのコンテンツのテンプレートに似ています。

プロンプトテンプレートとは?

プロンプトテンプレートは、一般的に使用される電子メールやSMSのテンプレートと本質的には変わりません。これは、一連のテンプレートパラメーターを含む文字列テンプレートであり、テンプレートパラメーターの値を使用して、テンプレート内の対応するパラメーターを置き換えることができます。

プロンプトテンプレートには次の内容が含まれます:

  • 大規模言語モデル(LLM)へ送信される指示。
  • AIに期待される形式でのリクエストの返信を思い出させるための質問と回答の例のセット。
  • 言語モデルに送信される質問。

プロンプトテンプレートの作成

PromptTemplateクラスを使用して、簡単なプロンプトを作成できます。プロンプトテンプレートには任意の数のテンプレートパラメーターを埋め込み、その後、パラメーターの値を使用してテンプレートコンテンツをフォーマットすることができます。

from langchain.prompts import PromptTemplate

prompt_template = PromptTemplate.from_template(
    "{adjective}な{content}に関するジョークを教えて。"
)

prompt_template.format(adjective="面白い", content="鶏")

テンプレート出力結果:

'面白いな鶏に関するジョークを教えて。'

チャットメッセージのプロンプトテンプレート

チャットモデルは、チャットメッセージのリストを入力として受け取ります。これらのチャットメッセージのコンテンツは、プロンプトテンプレートを使用して管理することもできます。これらのチャットメッセージは、生の文字列とは異なり、各メッセージには「役割」が関連付けられています。

例えば、OpenAIのChat Completion APIでは、OpenAIのチャットモデルが異なるチャットメッセージのために3つのタイプの役割を定義しています:アシスタント、ヒューマン、またはシステムの役割。

  • アシスタントメッセージはAIの応答を指します。
  • ヒューマンメッセージはユーザーがAIに送信するメッセージを指します。
  • システムメッセージは通常、AIのアイデンティティを表すために使用されます。

チャットメッセージのテンプレートを作成する例:

from langchain_core.prompts import ChatPromptTemplate

chat_template = ChatPromptTemplate.from_messages(
    [
        ("system", "あなたは役に立つAIボットです。あなたの名前は{name}です。"),
        ("human", "こんにちは、元気ですか?"),
        ("ai", "元気です、ありがとう!"),
        ("human", "{user_input}"),
    ]
)

messages = chat_template.format_messages(name="ボブ", user_input="あなたの名前は何ですか?")

他のメッセージフォーマットの例:

from langchain.prompts import HumanMessagePromptTemplate
from langchain_core.messages import SystemMessage
from langchain_openai import ChatOpenAI

chat_template = ChatPromptTemplate.from_messages(
    [
        SystemMessage(
            content=(
                "テキストをより上向きに聞こえるようにユーザーのテキストを書き換える役に立つアシスタントです。"
            )
        ),
        HumanMessagePromptTemplate.from_template("{text}"),
    ]
)

messages = chat_template.format_messages(text="おいしいものを食べるのは好きではありません")
print(messages)

通常、私たちはformat_messages関数を直接使用せずに、Langchainフレームワークに自動的に処理させます。