LangChainのPrompt Templates入門: 効率的にLLMを活用する秘訣
はじめに
「AIモデルに質問を投げかけても、毎回異なる応答が返ってくる…」
「一貫した出力を得るためのプロンプト設計が難しい…」
そんな悩みを解決するのがLangChainのPrompt Templatesです。
この記事では、以下を学びます:
- Prompt Templatesの基礎とその必要性
- 実際のPythonコードを使った活用方法
- ChatPromptTemplateとの違いと応用例
また、LLMについてですがollamaの環境で行います。
今回のチュートリアルの説明範囲
参考資料
1. Prompt Templatesとは?
Prompt Templatesは、LLMに渡す入力をテンプレート化する仕組みです。以下のような場面で役立ちます:
- 柔軟性: 同じテンプレートに異なる入力を与えるだけで使い回せる。
- 一貫性: プロンプト設計を統一し、出力の質を安定化。
- 効率化: 短いコードで強力なプロンプトを作成可能。
ユースケース例
- カスタマーサポートでの動的な応答生成
- 商品説明やレコメンデーションの自動生成
- データ分析の自動化(例: 質問応答システム)
2. 基本的なPrompt Templatesの使い方
以下は、ユーザー名を使ったシンプルな例です。
from langchain.prompts import PromptTemplate
# Prompt Templateの作成
prompt = PromptTemplate(
input_variables=["name"],
template="こんにちは、{name}さん!今日はどんなお手伝いができますか?"
)
# テンプレートに値を挿入
formatted_prompt = prompt.format(name="太郎")
print(formatted_prompt)
出力例
こんにちは、太郎さん!今日はどんなお手伝いができますか?
これをLLMと組み合わせると、柔軟でパワフルなプロンプトを生成できます。
from langchain.llms import OpenAI
llm = OpenAI(model="gpt-3.5-turbo")
response = llm(formatted_prompt)
print(response)
3. ChatPromptTemplateの使い方
チャット形式のプロンプトを扱いたい場合は、ChatPromptTemplateを使います。このテンプレートでは、複数のロール(system, human, assistant)を持つことができます。
使用例: チャット形式のプロンプト
from langchain.prompts.chat import ChatPromptTemplate
chat_prompt = ChatPromptTemplate.from_messages([
("system", "あなたは歴史の専門家です。"),
("human", "ピラミッドについて教えてください。")
])
formatted_prompt = chat_prompt.format_messages()
print(formatted_prompt)
出力例
[SystemMessage(content='あなたは歴史の専門家です。', additional_kwargs={}, response_metadata={}), HumanMessage(content='ピラミッドについて教えてください。', additional_kwargs={}, response_metadata={})]
このように、複雑な対話構造も簡単に構築できます。
4. PromptTemplate vs ChatPromptTemplate
特徴 | PromptTemplate | ChatPromptTemplate |
---|---|---|
主な用途 | 単純な質問応答や命令生成 | 対話型アプリケーション |
ロールの有無 | ロールは不要 |
system , human , assistant ロールが必要 |
ユースケース | 簡易タスクや一括処理 | チャットボットや複雑な対話型アプリ |
なぜChatPromptTemplateにロールがあるのか?
ChatPromptTemplateは、モデルが文脈を理解しやすくするために設計されています。特に、以下のような場面で有効です:
- system: モデルの振る舞いを設定(例: 優しい口調や専門的な回答)。
- human: ユーザーの質問や命令を指定。
- assistant: モデルが出力する応答を定義。
5. 応用例: 実践的な使い方
最後に、実際のプロジェクトでどのように活用できるかを示します。
商品説明生成
from langchain.prompts import PromptTemplate
from langchain_ollama.llms import OllamaLLM
# MODEL
model = OllamaLLM(model="llama3.2")
# Prompt Templateの作成
prompt = PromptTemplate(
input_variables=["product_name", "features"],
template="商品名: {product_name}\n特徴: {features}\nこの商品のセールスポイントを教えてください。"
)
# テンプレートに値を挿入
formatted_prompt = prompt.format(
product_name="AIノートPC",
features="高性能バッテリー、軽量設計、タッチスクリーン対応"
)
response = model.invoke(formatted_prompt)
print(response)
出力例
このAIノートPCのセールスポイントは以下の点にわたっています。
1. **高性能バッテリー**:このノートPCには、長時間使用可能な高-performance バッテリーが搭載されています。ユーザーは長い thời gianを無制限で使用できるようになります。
2. **軽量設計**:ノートPCの全体的な重量は軽いことになるため、長時間持ち運ぶことができ、手荷物やバッグに収まるので便利です。
3. **タッチスクリーン対応**:このAIノートPCにはタッチスクリーンが搭載されています。これにより、ユーザーは多くのアプリケーションの操作をタブレット-like の体験できるようになります。
これらの特徴は、一般的なノートPCよりも優れたperformanceとmobilityを提供します。
質問応答システム
from langchain.prompts.chat import ChatPromptTemplate
from langchain_ollama.llms import OllamaLLM
# MODEL
model = OllamaLLM(model="llama3.2")
chat_prompt = ChatPromptTemplate.from_messages([
("system", "あなたはカスタマーサポート担当です。"),
("human", "{user_query}")
])
formatted_prompt = chat_prompt.format_messages(user_query="返品したい場合の手続きを教えてください。")
response = model.invoke(formatted_prompt)
print(response)
出力例
お客様は product を返品したいと思っており、ご案内します。
まず、返品の理由と商品の状態(新品か改造など)に関する確認が必要です。返品の理由は、以下の場合に適用されます。
- 商品が破損や傷害しています。
- 商品に問題があるかつ修理が不可能です。
- 商品が正確なものではないか、商品の説明書きと差別があります。
また、商品は新品であるか、改造したものか確認する必要があります。改造された商品を返品することはできません。
その後、返品の手続きを実行してください。以下の手順でお願いします。
1. returns form を印刷またはダウンロードし、必要な情報を入力します。
2. product のパッケージ内のカートリーチューム(カウチカバー)やラベルからパズルを解いて商品のコードを入力します。
3. カウチカバーのシールを剥がって、商品の本体にシールを貼ります。
4. returns form と商品の本体に必要な情報を記載し、送信します。
この手続きは必ず実行することで、返品の受付を受けることができます。ただし、返品の場合、商品が正確なものであるか、改造されたものではないか確認する必要があります。
返品の場合、商品が正確で、無傷であることを確認してください。改造した商品や破損した商品を返品すると、返金額が減少します。
また、返品に伴う費用は、以下のようなものがあります。
- Returns form の印刷コスト
- 実際に送信されるコスト
必要な情報を記載して、お客様のご質問にお答えするまで、ご協力ください。
6. 次のステップ
Prompt Templatesを使いこなせたら、次は以下を試してみてください:
- 出力パーサー: LLMの応答をJSON形式などの構造化データに変換。
- 複数のチェーンの連結: LangChainのチェーン機能を使って複雑なタスクを自動化。
LangChainを使ったアプリケーション開発のアイデアが広がります!
参考資料