【LangChain】プロンプト之プロンプトテンプレート

LangChain 学習ドキュメント


プロンプト

プログラミング モデルへの新しいアプローチは、ヒント ( prompts) を使用することです。
promptsモデルへの入力を指します。通常、この入力は複数のコンポーネントで構成されます。LangChain は、構築と使用をprompts容易にする複数のクラスと関数を提供します。

  • プロンプト テンプレート: パラメーター化されたモデル入力
  • サンプルセレクター: プロンプトに含めるサンプルを動的に選択します

プロンプト翻訳: プロンプト

プロンプトテンプレート

言語モデルはテキストを入力として受け取ります。そのテキストは、しばしば と呼ばれますprompt

多くの場合、これは単なるハードコードされた文字列ではなく、テンプレート、いくつかの例、およびユーザー入力の組み合わせです
LangChain は、構築と使用をprompts容易にする複数のクラスと関数を提供します。

プロンプトテンプレートとは何ですか? (プロンプトテンプレートとは何ですか?)

prompt templateプロンプトを生成する反復可能な方法を指します。これには、エンド ユーザーから一連のパラメーターを受け入れ、プロンプトを生成するテキスト文字列 (「テンプレート」) が含まれています。

プロンプト テンプレートには次のものが含まれます。

  • 言語モデルの説明、
  • 言語モデルがより良い応答を生成するのに役立つ、いくつかのショット例のセット。
  • 言語モデルについての質問です。

これは最も単純な例です。

from langchain import PromptTemplate


template = """\
您是新公司的命名顾问。
生产{product}的公司起什么好名字?
"""

prompt = PromptTemplate.from_template(template)
prompt.format(product="彩色袜子")

結果:

您是新公司的命名顾问。
一家生产彩色袜子的公司起什么名字好呢?

プロンプトテンプレートを作成する

PromptTemplateこのクラスを使用して、単純なハードコーディングされたプロンプトを作成できます。プロンプト テンプレートは、任意の数の入力変数を受け取ることができ、プロンプトを生成するようにフォーマットすることができます。

from langchain import PromptTemplate

# 没有输入变量的示例提示
no_input_prompt = PromptTemplate(input_variables=[], template="给我讲个笑话。")
no_input_prompt.format()
# -> "给我讲个笑话。"

# 带有一个输入变量的示例提示
one_input_prompt = PromptTemplate(input_variables=["adjective"], template="给我讲一个{adjective}笑话。")
one_input_prompt.format(adjective="有趣")
# -> "给我讲一个有趣的笑话。"

# 具有多个输入变量的示例提示
multiple_input_prompt = PromptTemplate(
    input_variables=["adjective", "content"], 
    template="给我讲一个关于{content}的{adjective}笑话。"
)
multiple_input_prompt.format(adjective="funny", content="chickens")
# -> "给我讲一个关于鸡的有趣笑话。"

手動で指定したくない場合は、メソッド作成をinput_variables使用することもできますlangchain は、渡されたテンプレートに基づいて自動的に推論されますfrom_template 类PromptTemplateinput_variables

template = "给我讲一个关于{content}的{adjective}笑话。"

prompt_template = PromptTemplate.from_template(template)
prompt_template.input_variables
# -> ['adjective', 'content']
prompt_template.format(adjective="funny", content="chickens")
# -> 给我讲一个关于鸡的有趣笑话。

カスタム プロンプト テンプレートを作成して、任意の方法でプロンプトをフォーマットできます。詳細については、「プロンプト テンプレートのカスタマイズ」を参照してください。

チャットプロンプトテンプレート

チャット モデルは入力としてチャット メッセージのリストを受け取ります。このリストはプロンプト( prompt) と呼ばれることがよくあります。LLMこれらのチャット メッセージは、各メッセージがロールに関連付けられているため、(モデルに渡す) 元の文字列とは異なります。

たとえば、チャット完了 API ではOpenAIチャットメッセージをAI、人类或系统ロールに関連付けることができます。このモデルは、システム チャット メッセージの指示により厳密に従います。

LangChainプロンプトを簡単に作成して使用できるように、さまざまなプロンプト テンプレートが提供されています。PromptTemplate基礎となるチャット モデルの可能性を最大限に活用するために、チャットモデルをクエリする場合は、代わりにこれらのチャット関連のプロンプト テンプレートを使用することをお勧めします。

from langchain.prompts import (
    ChatPromptTemplate,
    PromptTemplate,
    SystemMessagePromptTemplate,
    AIMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)

ロールに関連付けられたメッセージ テンプレートを作成するには、 を使用しますMessagePromptTemplate

便宜上、from_templateメソッドはテンプレート上に公開されています。このテンプレートを使用すると、次のようになります。

template="您是将 {input_language} 翻译成 {output_language} 的得力助手。"
# 创建角色:系统的模板
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_template="{text}"
# 创建角色:人类的模板
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)

より直接的に構築したい場合はMessagePromptTemplate、外部で作成しPromptTemplateて渡すこともできます。次に例を示します。

# 创建一个常规的模板
prompt=PromptTemplate(
    template="您是将 {input_language} 翻译成 {output_language} 的得力助手。",
    input_variables=["input_language", "output_language"],
)
# 再创建一个角色:系统 的模板
system_message_prompt_2 = SystemMessagePromptTemplate(prompt=prompt)
# 判断和之前创建的是否一样
assert system_message_prompt == system_message_prompt_2

MessagePromptTemplateその後、1 つ以上の からビルドできますChatPromptTemplate

使用できますChatPromptTemplateformat_promptこれは、書式設定された値をまたはチャット モデルへの入力として使用するかどうかに応じて、文字列またはオブジェクトPromptValueに変換できる を返します。Messagellm

chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])

# 从格式化消息中获取聊天完成信息
chat_prompt.format_prompt(input_language="English", output_language="French", text="I love programming.").to_messages()

結果:

    [SystemMessage(content='You are a helpful assistant that translates English to French.', additional_kwargs={
    
    }),
     HumanMessage(content='I love programming.', additional_kwargs={
    
    })]

要約する

この記事では主に次のことについて説明します。

  1. テンプレートプロンプトを作成する方法:

方法 1:PromptTemplate(input_variables=[], template="Tell me a joke.")

方法 2: template = "Tell me a {adjective} joke about {content}." prompt_template = PromptTemplate.from_template(template)、これを記述する必要はありませんinput_variables

  1. の作成方法はmessageTemplate、多くの場合、ロールに関連付ける必要があります。

役割は次のとおりです。

  • AI(AIMessagePromptTemplate)、
  • 人間 (HumanMessagePromptTemplate)、
  • システム(SystemMessagePromptTemplate)。

最後に、ChatPromptTemplate.from_messages(xxx)これらの役割を統合するメソッドを使用して、チャットボットが構築されます。

要約する

https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/

おすすめ

転載: blog.csdn.net/u013066244/article/details/132075131