🦜️🔗LangChain : モジュール : モデル I/O – プロンプト : プロンプトテンプレート (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 08/21/2023
* 本ページは、LangChain の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
- 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
- sales-info@classcat.com ; Web: www.classcat.com ; ClassCatJP
🦜️🔗 LangChain : モジュール : モデル I/O
言語モデルアプリケーションの中核的な要素は … モデルです。LangChain は任意の言語モデルとのインターフェイスの役割を果たすビルディングブロックを与えます。
🦜️🔗 LangChain : モジュール : モデル I/O – プロンプト
言語モデルに対するプロンプトは、モデルのレスポンスを誘導する、ユーザにより提供されるインストラクションや入力のセットで、コンテキストを理解し、質問応答、センテンスの補完や会話への参加のような、関連性のある一貫した言語ベースの出力を生成するのに役立ちます。
LangChain はプロンプトを構築して操作するのに役立つ幾つかのクラスと関数を提供しています :
- プロンプト・テンプレート : パラメータ化されたモデル入力
- サンプル・セレクタ : プロンプトに含めるサンプルを動的に選択します。
プロンプト・テンプレート
プロンプト・テンプレートは言語モデルに対するプロンプトを生成するための事前定義されたレシピです。
テンプレートはインストラクション、幾つかのショットサンプル、与えられたタスクに適した特定のコンテキストと質問を含む場合があります。
LangChain はプロンプトテンプレートを作成して操作するツールを提供します。
LangChain はモデル不可知なテンプレートを作成して様々な言語モデルに対して既存のテンプレートを再利用することを簡単にするように努めています。
通常、言語モデルはプロンプトが文字列化そうでないならチャットメッセージのリストであることを想定します。
プロンプト・テンプレート
PromptTemplate を使用して文字列プロンプト用のテンプレートを作成します。
デフォルトでは、PromptTemplate はテンプレート化のために Python の str.format シンタクスを使用します ; けれども他のテンプレート化シンタクスも利用可能です (e.g., jinja2)。
from langchain import PromptTemplate
prompt_template = PromptTemplate.from_template(
"Tell me a {adjective} joke about {content}."
)
prompt_template.format(adjective="funny", content="chickens")
"Tell me a funny joke about chickens."
テンプレートは、変数がない場合も含めて、任意の数の変数をサポートします :
from langchain import PromptTemplate
prompt_template = PromptTemplate.from_template(
"Tell me a joke"
)
prompt_template.format()
追加の検証のためには、input_variables を明示的に指定します。これらの変数はインスタンス化の間にテンプレート文字列にある変数と比較され、不一致があれば例外を上げます、例えば :
from langchain import PromptTemplate
invalid_prompt = PromptTemplate(
input_variables=["adjective"],
template="Tell me a {adjective} joke about {content}."
)
プロンプトを望む任意の方法で整形するカスタム・プロンプトテンプレートを作成することができます。For more information, see Custom Prompt Templates.
チャット・プロンプトテンプレート
チャットモデル へのプロンプトはチャットメッセージのリストです。
各チャットメッセージはコンテンツとロールと呼ばれる追加パラメータに関連付けされます。例えば、OpenAI チャット補完 API では、チャットメッセージは AI アシスタント、人間またはシステムロールと関連付けれます。
このようなチャット・プロンプトテンプレートを作成します :
from langchain.prompts import ChatPromptTemplate
template = ChatPromptTemplate.from_messages([
("system", "You are a helpful AI bot. Your name is {name}."),
("human", "Hello, how are you doing?"),
("ai", "I'm doing well, thanks!"),
("human", "{user_input}"),
])
messages = template.format_messages(
name="Bob",
user_input="What is your name?"
)
ChatPromptTemplate.from_messages は様々なメッセージ表現を受け入れます。
例えば、上記で使用された 2-タプルの表現 (type, content) の使用に加えて、MessagePromptTemplate や BaseMessage のインスタンスを渡すことができるでしょう。
from langchain.prompts import ChatPromptTemplate
from langchain.prompts.chat import SystemMessage, HumanMessagePromptTemplate
template = ChatPromptTemplate.from_messages(
[
SystemMessage(
content=(
"You are a helpful assistant that re-writes the user's text to "
"sound more upbeat."
)
),
HumanMessagePromptTemplate.from_template("{text}"),
]
)
from langchain.chat_models import ChatOpenAI
llm = ChatOpenAI()
llm(template.format_messages(text='i dont like eating tasty things.'))
AIMessage(content='I absolutely adore indulging in delicious treats!', additional_kwargs={}, example=False)
This provides you with a lot of flexibility in how you construct your chat prompts.
以上