プロンプトチェーンとは
プロンプトを順番に実行し、情報を受け渡すという考え方を学びます。
「プロンプトチェーンとは」はCoddyKit上の無料AI Prompt Engineeringレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Prompt Engineering学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Prompt Engineeringコースには全4レッスンが含まれています。
単一プロンプトの限界
単一のプロンプトで多くのことを実行できますが、限界もあります。複数の専門的なサブタスク、非常に長いコンテキスト、または反復的な改善を必要とする複雑なタスクは、一つのプロンプトで安定して処理できる範囲を超えることがよくあります。
単一プロンプトの限界に達した兆候は次のとおりです。
- 複数のステップからなるタスクで、モデルが手順を飛ばします
- 長いタスクの後半で品質が低下します
- 出力が長すぎて一つのコンテキストウィンドウに収まりません
- タスクの異なる部分で、異なる専門知識やトーンが必要になります
プロンプトチェーンとは
プロンプトチェーンとは、各プロンプトの出力を次のプロンプトの入力として使用する逐次実行です。一つの大きなプロンプトですべてを実行しようとするのではなく、タスクを専門的なステップに分割します。
ステップ1 → 出力 → ステップ2 → 出力 → ステップ3 → 最終結果
各ステップを個別に最適化したり、異なるモデルを使用したり、異なる制約を適用したりできます。
単純なチェーンの例
ブログ記事の執筆を考えてみましょう。一つのプロンプトを使うのではなく、三つをチェーンします。
import anthropic
client = anthropic.Anthropic(api_key='YOUR_API_KEY')
def call(prompt):
r = client.messages.create(
model='claude-opus-4-5',
max_tokens=1000,
messages=[{'role': 'user', 'content': prompt}]
)
return r.content[0].text
# Step 1: Generate outline
outline = call('Create a 5-point outline for a blog post about prompt engineering for beginners.')
# Step 2: Expand outline into draft
draft = call(f'Write a full blog post based on this outline:\n\n{outline}')
# Step 3: Edit for clarity
final = call(f'Edit this blog post for clarity and conciseness. Remove jargon:\n\n{draft}')
print(final[:500])チェーンが役立つ場面:タスクの複雑さ
チェーンは、一つのプロンプトでは高品質に処理することが難しい複雑なタスクで特に力を発揮します。複雑さを専門的なステップに分割することで、各ステップが担当する狭い範囲の処理に集中できます。
例:顧客フィードバックを大規模に分析する
- ステップ1:言及されているすべての問題を抽出する(抽出)
- ステップ2:各問題を分類する(分類)
- ステップ3:頻度と深刻度で優先順位を付ける(ランキング)
- ステップ4:経営層向けの要約を書く(統合)
各ステップでは、そのサブタスクに合わせて最適化した、焦点を絞ったプロンプトを使用します。
チェーンが役立つ場面:専門化による品質向上
専門化されたプロンプトは、それぞれのサブタスクにおいて汎用的なプロンプトを上回ります。チェーンを使えば、各段階に適したプロンプトスタイルを使用できます。
# Each step uses a prompt optimized for its role
step1_prompt_template = '''
<task>Extract all named entities from the text below. Return JSON:
{"people": [], "companies": [], "locations": []}</task>
<text>{text}</text>
'''
step2_prompt_template = '''
<task>For each company in the list below, classify it as:
startup, enterprise, government, or nonprofit.
Return JSON: [{"company": str, "type": str}]</task>
<companies>{companies}</companies>
'''
# Each prompt is simpler, more focused, and easier to debug
# than a single prompt trying to do both tasks at once.
print('Specialized prompts per step.')チェーンが役立つ場面:コンテキストウィンドウの制限
コンテキストウィンドウが大きくても(100K以上のトークン)、非常に長いドキュメントを一度に処理すると、lost-in-the-middle効果によって品質が低下します。チェーンはこの問題を解決します。
- ステップ1:各チャンクを個別に処理する → チャンクごとに要約または抽出結果を生成します
- ステップ2:チャンクの出力を結合する → 最終的な回答を統合します
このmap-reduceパターンは、長いドキュメントに対する基本的なチェーン戦略です。
def map_reduce_summarize(document, chunk_size=3000):
chunks = [document[i:i+chunk_size] for i in range(0, len(document), chunk_size)]
# Map: summarize each chunk
summaries = []
for i, chunk in enumerate(chunks):
summary = call(f'Summarize this section of a document in 3 bullet points:\n\n{chunk}')
summaries.append(summary)
# Reduce: synthesize all summaries
combined = '\n\n'.join(f'Section {i+1}:\n{s}' for i, s in enumerate(summaries))
final = call(f'Combine these section summaries into a single executive summary:\n\n{combined}')
return final同期チェーンと並列チェーン
チェーンは必ずしも線形とは限りません。互いに独立しているステップは、並列実行できます。
import concurrent.futures
def parallel_step(topics):
# Each topic can be researched in parallel — they do not depend on each other
def research_topic(topic):
return call(f'List 5 key facts about: {topic}')
with concurrent.futures.ThreadPoolExecutor() as executor:
results = list(executor.map(research_topic, topics))
# Then synthesize in a sequential step
combined = '\n\n'.join(f'{t}:\n{r}' for t, r in zip(topics, results))
synthesis = call(f'Write a comparative analysis of these topics:\n\n{combined}')
return synthesis
print('Parallel steps can reduce total latency.')チェーンとエージェント
プロンプトチェーンとAIエージェントは関連していますが、異なるものです。
- チェーン:事前に定義された決定的なフローです。ステップの順序は固定されています。テスト、デバッグ、予測が容易です
- エージェント:動的なフローです。モデルが出力に基づいて次のステップを決定します。柔軟性が高い一方で、制御とデバッグは難しくなります
ほとんどの本番ユースケースでは、まずチェーンから始めてください。エージェントを使うのは、タスクが本当にオープンエンドで、チェーンの構造を事前に決定できない場合だけにしてください。
チェーンにおけるコストの考慮事項
チェーンの各ステップは、それぞれにコストが発生する独立したAPI呼び出しです。コストを意識してチェーンを設計してください。
- 単純なステップ(抽出、分類)には、より安価で小規模なモデルを使用します
- 高い推論能力が必要なステップには、高価なモデル(GPT-4o、Claude Opus)を割り当てます
- 同一の入力に対して高価なステップを再実行しないよう、中間結果をキャッシュします
- 早期に失敗させます。次のステップに渡す前に、各ステップの出力を検証します
import anthropic
import functools
client = anthropic.Anthropic(api_key='YOUR_API_KEY')
@functools.lru_cache(maxsize=128)
def cached_call(prompt, model='claude-haiku-4-5'):
r = client.messages.create(
model=model,
max_tokens=500,
messages=[{'role': 'user', 'content': prompt}]
)
return r.content[0].text
# Cheap model for extraction, expensive for synthesis
def smart_chain(text):
entities = cached_call(f'Extract entities from: {text}', model='claude-haiku-4-5')
synthesis = cached_call(f'Analyze these entities: {entities}', model='claude-opus-4-5')
return synthesisチェーンを文書化する
適切に文書化されたチェーンは保守しやすくなります。各ステップを説明するには、次のような単純な構造を使用してください。
chain_spec = {
'name': 'Blog Post Generator',
'steps': [
{
'id': 'step_1',
'name': 'Outline Generation',
'model': 'claude-haiku-4-5',
'input': 'topic (string)',
'output': 'outline (string, 5 bullet points)',
'prompt_template': 'outline_prompt.txt'
},
{
'id': 'step_2',
'name': 'Draft Writing',
'model': 'claude-opus-4-5',
'input': 'outline from step_1',
'output': 'draft (string, ~800 words)',
'prompt_template': 'draft_prompt.txt'
},
{
'id': 'step_3',
'name': 'Editorial Polish',
'model': 'claude-haiku-4-5',
'input': 'draft from step_2',
'output': 'final post (string)',
'prompt_template': 'polish_prompt.txt'
}
]
}
print('Chain documented with step specs.')実践的なチェーン:競合分析
競合分析に使える、実践的な3ステップのチェーンは次のとおりです。
def competitive_analysis_chain(competitor_list, product_description):
# Step 1: Research each competitor (parallel)
def research(competitor):
return call(f'List key features, pricing model, and target market for: {competitor}')
with concurrent.futures.ThreadPoolExecutor() as ex:
research_results = dict(zip(competitor_list, ex.map(research, competitor_list)))
# Step 2: Compare against our product
comparison_input = '\n\n'.join(f'{k}:\n{v}' for k, v in research_results.items())
comparison = call(f'Compare these competitors against our product:\nOur product: {product_description}\n\nCompetitors:\n{comparison_input}')
# Step 3: Strategic recommendations
recommendations = call(f'Based on this competitive analysis, provide 3 strategic recommendations:\n\n{comparison}')
return recommendationsクイックチェック
単一のプロンプトよりもプロンプトチェーンに適しているのは、どのようなシナリオでしょうか。
プロンプトチェーン — 要点
プロンプトチェーンは、本番AIシステムの基盤です。
- 各出力を次のプロンプトの入力として渡す逐次実行です
- 各ステップで、その狭い範囲のサブタスクに最適化されたプロンプトを使えるため、専門化が可能になります
- map-reduceパターンによってコンテキストウィンドウの制限を解決します
- 独立したステップを並列実行して、レイテンシーを短縮できます
- 完全なエージェント型システムよりも予測しやすく、デバッグしやすくなります
- 単純なステップには安価なモデル、複雑な推論には高価なモデルを使い分けてコストを最適化します
- ステップID、入出力仕様、モデルの割り当てを含め、チェーンを必ず文書化します
AI チューターと学ぶ AI Prompt Engineering — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 53
- レッスン
- 199
よくある質問
「プロンプトチェーンとは」レッスンは無料ですか?
はい。「プロンプトチェーンとは」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Prompt Engineeringコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Prompt Engineeringコースには全4レッスンが含まれています。
「プロンプトチェーンとは」で何を学びますか?
プロンプトを順番に実行し、情報を受け渡すという考え方を学びます。 ブラウザで直接実行するハンズオンコードでAI Prompt Engineeringを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Prompt Engineeringを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Prompt Engineeringは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「プロンプトチェーンとは」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Prompt Engineeringレッスンでコードを書いて実行できますか?
はい。すべてのAI Prompt Engineeringレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- プロンプトチェーンとは
- 出力から入力へ渡すパターン
- 逐次変換チェーン
- プロンプトチェーンのエラー処理