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 类
PromptTemplate
input_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
。
使用できますChatPromptTemplate
。format_prompt
これは、書式設定された値をまたはチャット モデルへの入力として使用するかどうかに応じて、文字列またはオブジェクトPromptValue
に変換できる を返します。Message
llm
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: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
。
- の作成方法は
messageTemplate
、多くの場合、ロールに関連付ける必要があります。
役割は次のとおりです。
- AI(AIMessagePromptTemplate)、
- 人間 (HumanMessagePromptTemplate)、
- システム(SystemMessagePromptTemplate)。
最後に、ChatPromptTemplate.from_messages(xxx)
これらの役割を統合するメソッドを使用して、チャットボットが構築されます。
要約する
https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/