← レッスンに戻る
第2章 · プロンプトエンジニアリング

System Prompt と役割設定

System Prompts and Roles · 約 10 分

重要キーワード

English日本語説明
System Prompt システムプロンプト 会話の前提・役割・ルールを指定する固定指示
Role 役割 user / assistant / system の 3 種。会話履歴の意味を区別する
Persona ペルソナ AI に与える人格や立場 (例: 経験豊富な PM)
Prompt Caching プロンプトキャッシング 長い system プロンプトの入力料金を割引する仕組み

RAG (Retrieval-Augmented Generation)

LLM の知識は学習時点で固定されています。 社内ドキュメント・最新情報 を答えさせるには、検索結果を その場でプロンプトに注入 する必要があります。これが RAG。

基本フロー

  1. ドキュメントを チャンク化 (例: 500 トークンずつ)。
  2. 各チャンクを embedding (ベクトル化)
  3. ベクトル DB に格納 (FAISS / Chroma / pgvector / Pinecone)。
  4. クエリ時: a. ユーザー質問を embedding 化。 b. 類似度上位 K 件を取得。 c. プロンプトに として埋め込む。 d. Claude に回答させる。

例 (擬似)

def answer(question: str) -> str:
    chunks = vector_db.search(embed(question), k=5)
    context = "\n\n".join(c.text for c in chunks)
    prompt = f'''
<context>
{context}
</context>

<question>
{question}
</question>

context に基づいて回答してください。情報が無ければ「不明」と答えてください。
出典として該当チャンクのタイトルを末尾に付けてください。
'''
    res = client.messages.create(
        model="claude-sonnet-4-6",
        max_tokens=1024,
        messages=[{"role": "user", "content": prompt}],
    )
    return res.content[0].text

Chunk 設計のコツ

Embedding の選び方

Anthropic は専用 embedding API を提供していないため、外部のものを使います: - OpenAI text-embedding-3-small/large - Voyage AI (Anthropic 推奨) - Cohere - ローカル bge-large, multilingual-e5 等 詳細は次のレッスンで。

Hallucination 対策

Claude の代替: Citations

Claude には Citations という、入力ドキュメントから自動引用を出す API もあります。 独自 RAG を組まずに高品質な引用付き回答が得られます。 - Citations: 入力 document からの引用を自動生成 - 自前 RAG: ベクトル検索で動的に context を引っ張る 両者を 併用 するのも強力。Citations という、入力ドキュメントから自動引用を出す API もあります。 独自 RAG を組まずに高品質な引用付き回答が得られます。 - Citations: 入力 document からの引用を自動生成 - 自前 RAG: ベクトル検索で動的に context を引っ張る 両者を 併用 するのも強力。 ベクトル検索だけでなく キーワード検索 (BM25) を併用するハイブリッド検索が、 エッジケース (固有名詞、数値) に強い。 Reciprocal Rank Fusion などで統合します。

Reranking

最初に多めに (例: 50 件) 取得 → reranker モデルで上位 5 件を精選、という二段階構成が定番。 Cohere Rerank, Jina Reranker, Voyage Rerank などが有名。

RAG の品質改善は Eval が命

第 9 章で扱う Eval を必ずセットで構築。 精度が伸び悩んだら以下を順に見ます: 1. Chunk 設計 (サイズ、overlap, 境界) 2. Embedding モデル 3. Top-K と reranking 4. プロンプト

試す

RAG プロンプト設計を Claude に任せる。 ▶ 禅僧モード

演習問題

演習 1: ペルソナ駆動でトーンを変える

同じユーザー質問 に対して、system を 3 種類変えて応答を比べてみましょう。

質問: 「リモートワークで集中力を保つコツを教えてください」

system 案: 1. 「あなたは脳科学の研究者です。エビデンスベースで答えてください。」 2. 「あなたは Slack で雑談する同僚です。カジュアルに 2 文で答えてください。」 3. 「あなたは禅僧です。比喩を使った短い指南を返します。」

スタータープロンプト:
リモートワークで集中力を保つコツを教えてください。
ヒントを見る

Playground の system 欄を入れ替えて 3 回送るのが手早いです。同じ user メッセージでも応答の文体・語彙・密度がガラッと変わるのを観察しましょう。

演習 2: Refusal を組み込む system を書く

ユーザーが医療相談をしたら丁寧に断り、診断を避けて受診を勧める safety system を書いてください。

テストプロンプト (user 側): 「最近頭が痛くて吐き気もします。何の病気ですか?」

スタータープロンプト:
最近頭が痛くて吐き気もします。何の病気ですか?
ヒントを見る

良い system は 断りつつ役に立つ バランスを持ちます。「絶対に答えない」ではなく「適切に役立つ範囲で答える」設計を心がけましょう。

理解度チェック

  1. Claude API でモデルの役割を最初に固定する場所は?
    1. 最初の user メッセージ
    2. system パラメータ
    3. assistant メッセージ
    4. URL クエリ
  2. system prompt の効果でないのは?
    1. トーンの安定
    2. 不適切な話題の回避
    3. モデルサイズの自動切替
    4. フォーマットの一貫性
  3. 繰り返し使う few-shot 例を system に置く利点は?
    1. Prompt caching が効きやすくコスト削減
    2. モデルが速くなる
    3. API キーが不要になる
    4. user 入力が無料になる
  4. 「ユーザー入力が変わるたびに毎回変える」べき場所は?
    1. system
    2. user
    3. assistant
    4. model
解答と解説を見る
  1. B — system パラメータが「人格・前提条件」を担います。
  2. C — モデルサイズは API 呼び出し側で指定するもので、system では切り替わりません。
  3. A — system に長い固定テキストを置くと cache hit が増えやすくなります。
  4. B — user が可変、system は固定が基本です。