1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LangChainのPrompt Templates入門: 効率的にLLMを活用する秘訣


はじめに

「AIモデルに質問を投げかけても、毎回異なる応答が返ってくる…」
「一貫した出力を得るためのプロンプト設計が難しい…」
そんな悩みを解決するのがLangChainのPrompt Templatesです。

この記事では、以下を学びます:

  • Prompt Templatesの基礎とその必要性
  • 実際のPythonコードを使った活用方法
  • ChatPromptTemplateとの違いと応用例

また、LLMについてですがollamaの環境で行います。

image-20241209133330180.png

今回のチュートリアルの説明範囲

参考資料


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を使ったアプリケーション開発のアイデアが広がります!

参考資料

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?