🦜️🔗LangChain : モジュール : モデル I/O – プロンプト : プロンプトテンプレート : プロンプト・パイプライン処理 / テンプレートの検証 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 08/26/2023
* 本ページは、LangChain の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
- Modules : Model I/O – Prompts : Prompt templates : Prompt pipelining
- Modules : Model I/O – Prompts : Prompt templates : Validate template
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
- 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
- sales-info@classcat.com ; Web: www.classcat.com ; ClassCatJP
🦜️🔗 LangChain : モジュール : モデル I/O – プロンプト : プロンプトテンプレート : プロンプト・パイプライン処理
プロンプト・パイプライン処理の背後にあるアイデアは、プロンプトの異なるパートを一緒に組み合わせるためにユーザフレンドリーなインターフェイスを提供することです。これを文字列プロンプトやチャットプロンプトのいずれかでこれを行なうことができます。プロンプトをこの方法で構築することはコンポーネントの簡単な再利用を可能にします。
文字列プロンプト・パイプライン
文字列プロンプトを処理するとき、各テンプレートは一緒に結合されます。各プロンプトを直接あるいは文字列を処理したりすることができます (リストの最初の要素はプロンプトである必要があります)。
from langchain.prompts import PromptTemplate
API リファレンス :
prompt = (
PromptTemplate.from_template("Tell me a joke about {topic}")
+ ", make it funny"
+ "\n\nand in {language}"
)
prompt
PromptTemplate(input_variables=['language', 'topic'], output_parser=None, partial_variables={}, template='Tell me a joke about {topic}, make it funny\n\nand in {language}', template_format='f-string', validate_template=True)
prompt.format(topic="sports", language="spanish")
'Tell me a joke about sports, make it funny\n\nand in spanish'
You can also use it in an LLMChain, just like before.
from langchain.chat_models import ChatOpenAI
from langchain.chains import LLMChain
API リファレンス :
model = ChatOpenAI()
chain = LLMChain(llm=model, prompt=prompt)
chain.run(topic="sports", language="spanish")
'¿Por qué el futbolista llevaba un paraguas al partido?\n\nPorque pronosticaban lluvia de goles.'
チャットプロンプト・パイプライン処理
チャットプロンプトはメッセージのリストで構成されます。純粋に開発者のエクスペリエンスのために、これらのプロンプトを作成する便利な方法を追加しました。このパイプラインでは、各新しい要素は最終的なプロンプトの新しいメッセージです。
from langchain.prompts import ChatPromptTemplate, HumanMessagePromptTemplate
from langchain.schema import HumanMessage, AIMessage, SystemMessage
API リファレンス :
最初に、ベース ChatPromptTemplate をシステムメッセージで初期化しましょう。それはシステム (メッセージ) で始める必要はありませんが、良い実践であることが多いです。
prompt = SystemMessage(content="You are a nice pirate")
次に他のメッセージやメッセージテンプレートとそれを組み合わせたパイプラインを簡単に作成することができます。整形する変数がないならば Message を使用し、整形する変数があれば MessageTemplate を使用します。文字列だけを使用することもできます (note: これは HumanMessagePromptTemplate として自動的に推論されます。)
new_prompt = (
prompt
+ HumanMessage(content="hi")
+ AIMessage(content="what?")
+ "{input}"
)
内部的には、これは ChatPromptTemplate クラスのインスタンスを作成しますので、前に行なったようにそれを使用することができます。
new_prompt.format_messages(input="i said hi")
[SystemMessage(content='You are a nice pirate', additional_kwargs={}), HumanMessage(content='hi', additional_kwargs={}, example=False), AIMessage(content='what?', additional_kwargs={}, example=False), HumanMessage(content='i said hi', additional_kwargs={}, example=False)]
You can also use it in an LLMChain, just like before.
from langchain.chat_models import ChatOpenAI
from langchain.chains import LLMChain
API リファレンス :
model = ChatOpenAI()
chain = LLMChain(llm=model, prompt=new_prompt)
chain.run("i said hi")
'Oh, hello! How can I assist you today?'
🦜️🔗 LangChain : モジュール : モデル I/O – プロンプト : プロンプトテンプレート : テンプレートの検証
デフォルトでは、PromptTemplate は input_variables がテンプレートで定義された変数にマッチしているかを確認することによりテンプレート文字列を検証します。validate_template を False に設定することでこの動作を無効にできます。
template = "I am learning langchain because {reason}."
prompt_template = PromptTemplate(template=template,
input_variables=["reason", "foo"]) # ValueError due to extra variables
prompt_template = PromptTemplate(template=template,
input_variables=["reason", "foo"],
validate_template=False) # No error
以上