【日本語化】Anthropic公式のプロンプトエンジニアリングのチュートリアルに入門してみた

はじめに
本記事では、Anthropic社のチュートリアル[Anthropic 1P](https://github.com/anthropics/prompt-eng-interactive-tutorial/tree/master)をもとに、プロンプト設計のノウハウを日本語で解説します。モデル（Claudeなど）をより正確かつ意図通りに動かすために必要なテクニックを、実際の日本語プロンプト例を交えてまとめました。
APIキーの設定やモデルチューニングなどは扱わず、**「プロンプトの精度向上」に直結する具体的施策のみ**をピックアップしています。チーム内のナレッジ共有や、自身のプロンプト作成の手引きとしてお役立てください。

---

## 1. プロンプトの基本構造

まず、どんな良いプロンプトにも共通して備わっている「骨組み（テンプレート）」を押さえましょう。以下の４要素を意識的に含めることで、モデルは必須情報を正確に理解できるようになります。

1. **指示（Instruction）**

   * モデルに何をしてほしいのかを端的に伝える文。
   * 例：「次の文章を日本語に翻訳してください。」

2. **文脈・前提（Context）**

   * タスクを正しく遂行するために必要な背景情報や制約条件。
   * 例：「この文章はビジネスメールの一部です。丁寧な言い回しを維持してください。」

3. **入力データ（Input）**

   * モデルに処理させたい具体的な情報（テキストや数字など）。
   * 例：

     ```
     【翻訳元テキスト】  
     Thank you for your inquiry. We will respond within 24 hours.
     ```

4. **出力形式の指定（Output Format）**

   * モデルの回答をどんな形でほしいかを明示するルール。
   * 例：「出力は以下のように箇条書きの形式で3項目にまとめてください。」

### 1.1 日本語プロンプト例

```txt
【指示】
次のビジネスメールを英語から日本語に翻訳してください。

【文脈】
・相手は取引先担当者です  
・フォーマルな表現を使ってください

【入力】
Thank you for your inquiry. We will respond within 24 hours.

【出力形式】
・日本語訳を1文でまとめる  
・必要なら「弊社」「御社」などの敬語を補って丁寧に
```

このように「何をするか」「背景は何か」「翻訳対象の文章は何か」「結果はどんな形か」を明確に指定すると、モデルが迷わず期待どおりの出力を返してくれる確率が高まります。

---

## 2. 明確かつ端的に指示する

モデルは“余計な行間を読む”ことができないため、曖昧さを一切排除し、具体的かつシンプルな言葉で指示を伝える必要があります。以下のポイントを意識してください。

* **具体的に数・形式を指定する**

  * NG例：「要約してください」
  * OK例：「3つのポイントに絞って、各ポイントを2文以内の箇条書きで要約してください」

* **一度に複数のタスクを入れすぎない**

  * 「一行で要約して、その後に意見も書いて、そのあとに関連する統計データを探して…」といった冗長な指示は避ける。
  * まずは「要約に集中させる」を明確にする。必要なら、続きは別プロンプトで行う。

* **モデルは暗黙知を持たない**

  * 「あの資料を参考に」とだけ書いても、モデルはどれか分からない。プロンプト内に全文を貼るか、ファイル名や要点を具体的に記載する。

### 2.1 日本語プロンプト例（要約タスク）

```txt
【指示】
以下のレビューを要約し、最後に総合評価を1～5段階で点数化してください。

【入力】
<レビュー>
この商品は非常に使いやすく、デザインも気に入っています。ただバッテリーの持ちがもう少しよければ完璧でした。サポート対応は迅速で、全体的に満足しています。
</レビュー>

【出力形式】
1. 要約：20字以内  
2. 総合評価：1～5の数値  
```

上記のように「要約部分は何文字以内」「評価は何段階で」という数値や文字数制限を明確に指定すると、モデルは無駄な情報を省いて要件どおりに回答しやすくなります。

---

## 3. ロールの割り当て（Role Prompting）

モデルに「あなたは〇〇の専門家です」「△△として振る舞ってください」と明示的に役割を与えることで、回答のトーンや専門性をコントロールできます。

### 3.1 ロール指示の効果

* **専門家ロール**：

  * 例：「あなたは金融業界で10年以上の経験を持つアナリストです。以下のデータをもとに投資判断のポイントを解説してください。」
  * → 専門用語を適切に使いつつ、論理的に解説してくれる。

* **カスタマーサポートロール**：

  * 例：「あなたはカスタマーサポート担当です。お客様からの問い合わせに丁寧かつわかりやすく回答してください。」
  * → 丁寧語・敬語を用い、親切な言い回しで返答してくれる。

* **初心者向け教育者ロール**：

  * 例：「あなたはプログラミング初心者向けの講師です。Pythonの分かりにくいポイントをやさしく解説してください。」
  * → 専門知識をかみ砕いて、初心者にも分かりやすい言葉遣いで説明する。

### 3.2 日本語プロンプト例（法律相談ボット）

```txt
【ロール】
あなたは法律事務所の弁護士です。法律に詳しい口調で回答してください。

【指示】
クライアントから次のような質問が来ています。  
「転職した場合、前職の残業時間が労働契約書と異なっていたとき、どのように対処すればよいでしょうか？」

【出力形式】
・まず簡潔に回答を書く（3文程度）  
・その後、具体的な対処手順を箇条書きで５ステップ示す  
・最後に参考になる法律条文や判例があれば一言で触れる
```

このように「ロール→指示→出力形式」をセットで与えると、モデルはまるでその職業の人間になりきって回答してくれます。

---

## 4. データと指示を分離する

長文や複数のデータを扱うときは、**データ部分とモデルへの指示部分を明確に切り分ける**ことで誤解を防ぎます。AnthropicのClaudeでは、特に**XML風タグ**を使った区切りが推奨されています。

### 4.1 タグで区切る理由

* **タグを使うことで「ここが取り扱うデータ」「ここからが命令文」という区切りをモデルに見せる**ことができる。
* Claudeは訓練時にXML形式のタグに慣れているため、この方法で入力を構造化すると誤認識が減る。

### 4.2 日本語プロンプト例（長文要約）

```txt
【指示】
以下の文章を要約してください。まずは要点を抽出し、最後にまとめの段落を書いてください。

【入力】
<article>
（ここに長めのビジネスレポート全文を貼り付ける）
</article>

【出力形式】
・要点は箇条書きで3～5項目  
・最後に「まとめ」という見出しで200字以内の段落
```

上記では `<article>…</article>` でデータ部分を明示し、その後に「要約せよ」という命令を伝えています。これにより、モデルは「データ部分」と「指示部分」を混同せず、精度の高い要約を行ってくれます。

---

## 5. 出力フォーマット指定とPrefill（回答の書き出しを誘導）

回答を「どんな形式・どんな見た目」でほしいかを厳密に伝える技術を紹介します。また、Claudeの特性として「回答の冒頭を先に書かせる」手法（Prefill）も活用できます。

### 5.1 出力フォーマットの指定

* **箇条書き・番号付きリスト**や**JSON形式**など、具体的にフォーマットを指定。
* 例：「回答は以下のJSONスキーマに従ってください。キーは "title", "summary", "date" の3つです。」

#### 日本語プロンプト例（JSON出力）

````txt
【指示】
次の文章を要約し、JSON形式で出力してください。キーは "title", "summary", "tags" の3つとします。

【入力】
「新製品の発売に関するリリース文。来月から全国の家電量販店で販売を開始します…（以下省略）」

【出力形式】
```json
{
  "title": "ここに要約タイトル",
  "summary": "ここに要約本文",
  "tags": ["製品名", "発売", "家電"]
}
````

（上記スキーマに忠実に、余計なキーや改行は不要です）

````

### 5.2 Prefill（回答の書き出しをこちらで用意する）  
- Prefillとは、モデルの「アシスタント側メッセージ」を事前に一部与え、続きとして回答を書かせる手法です。  
- たとえば、JSONで回答させる際に「`{`」だけを先に出力させるよう指示しておくと、モデルはその後に続く形で `"key": "value"` の形式を保ってくれやすい。

#### 日本語プロンプト例（PrefillでJSONスタート）  
```python
# ※これは説明用の擬似コードです。Qiitaではプロンプト部分だけを引用してください。
messages = [
    {"role": "user", "content": "この文章を要約して、JSON形式で返してください。キーは \\"title\\" と \\"body\\" の2つです。"},
    {"role": "assistant", "content": "{"}  # ここまでを事前に与えて、続きとしてClaudeに書かせる
]
````

実行結果イメージ（モデルの続き出力部分）

```json
{
  "title": "要約タイトル",
  "body": "ここに要約本文が入ります"
}
```

このように\*\*回答の「冒頭部分」\*\*をこちらで置いておくことで、モデルが指定どおりのフォーマットを崩さずに続きを補完してくれます。

---

## 6. ステップバイステップ思考（Chain-of-Thought）

モデルにいきなり最終回答だけを求めるのではなく、**考え方（中間ステップ）を出力させる**ことで、論理的で正確な回答を引き出す手法です。

### 6.1 なぜステップバイステップが有効か？

* モデルは一度に複雑な推論を行うよりも、「短い単位で順番に考えさせる」ほうが正解にたどり着きやすい。
* 人間が問題を解くときも、まず根拠を整理してから結論を出すのと同じ原理です。

### 6.2 具体的な日本語プロンプト例（感情分析）

```txt
【指示】
以下のカスタマーレビューがポジティブかネガティブかを判断する前に、<positive-argument>タグ内に肯定的な事実を、<negative-argument>タグ内に否定的な事実をそれぞれ書き出してください。最後に <final-answer> タグの中で総合結論を述べてください。

【入力】
<review>
このスマートフォンはデザインが素晴らしく、カメラ性能も優れています。しかしバッテリー持ちが悪く、長時間の利用には向いていません。
</review>

【出力例（例示）】
<positive-argument>
・デザインが素晴らしい  
・カメラ性能が優れている  
</positive-argument>
<negative-argument>
・バッテリー持ちが短い  
・長時間利用に不向き  
</negative-argument>
<final-answer>
総合的にはややネガティブ（2/5）と判断します。
</final-answer>
```

* まずポジティブ・ネガティブの要素を分けて列挙し、最後にタグ付きで結論を出させます。こうすることで「理由→結論」の流れが明示され、モデルが推論過程を踏まえた回答を返しやすくなります。

---

## 7. 例示を活用したFew-Shotプロンプティング

Few-Shotとは、**プロンプト内に複数のお手本（入出力例）を示し**、モデルに「この例と同じパターンで答えてね」と学習させる手法です。特に「出力フォーマットを厳密に守らせたい」「分類タスクなどで一貫性を持たせたい」場合に有効です。

### 7.1 Few-Shotのポイント

* **例はシンプルかつ代表的に**：あまり複雑な例を何件も載せると逆にモデルが迷ってしまうので、2～5件程度にとどめるのが目安。
* **例示と同じ形式を最後に要求**：例示を示したあとに「では、次の○○を同じ形式で回答してください」と書く。

### 7.2 日本語プロンプト例（メール分類タスク）

```txt
【指示】
以下のサポートメールをカテゴリ分類してください。カテゴリは「A：仕様問い合わせ」「B：不良品報告」「C：返品・返金依頼」「D：その他」の4種類です。まずは例を示します。

【例1】
<email>
件名：ブレンダーの使い方について  
本文：新しく購入したブレンダーですが、どのように花瓶の掃除に使えますか？  
</email>
→ 出力：A

【例2】
<email>
件名：ブレンダーが動きません  
本文：昨日届いたブレンダーが全く電源が入らず困っています。交換してください。  
</email>
→ 出力：B

【入力】
<email>
件名：返金のお願い  
本文：購入から4か月経ちましたが、まだ返金が完了していません。状況を教えてください。  
</email>

【出力形式】
「カテゴリ：X」のみを一行で記載してください。
```

このように**先に2つの例を示し**、最後に「では同じ形式で新しいメールを分類してください」と依頼することで、モデルは「→ 出力：カテゴリ名」というフォーマットを踏襲しやすくなります。

---

## 8. 幻覚（Hallucination）の回避

モデルが根拠のない虚偽情報を生成しないようにするには、**プロンプト内で「事実に基づいて回答する」ことを明示**したり、**根拠を先に探させる**などの工夫が有効です。

### 8.1 「分からないときは分からない」と答えさせる

* プロンプトの冒頭に「もし情報が不足している場合は『わかりません』と返答してください」と明記する。
* 例：「事実が不明な場合は、憶測で答えず『情報が不足しているため回答できません』と記載してください。」

### 8.2 エビデンスファーストのプロンプト設計

1. **根拠となる文章を引用させる**
2. **引用の内容を踏まえて最終回答を書く**

#### 日本語プロンプト例（レポートからデータ抽出）

```txt
【指示】
以下のレポートから、2022年度の売上高を抜き出し、その数値を回答してください。  
・まず <scratchpad> タグの中に「売上高に関する文章」をそのまま引用してください。  
・次に <answer> タグの中で数値だけを報告してください。  
・もし該当箇所が見つからない場合は「該当なし」と答えてください。

【入力】
<report>
当社の2022年度の売上高は前年比15%増の1,200億円を記録しました。営業利益は…（以下省略）
</report>
```

出力イメージ

```txt
<scratchpad>
当社の2022年度の売上高は前年比15%増の1,200億円を記録しました。
</scratchpad>
<answer>
1,200億円
</answer>
```

まずスクラッチパッドで「売上高に関する文章」をそのままモデルに拾わせることで、**根拠が明確**になります。その後で数値だけを回答させるため、虚偽の数字を生成しにくくなります。

### 8.3 限定された情報源への誘導

* 「以下の文章以外は一切参照せずに答えてください」と明記する。
* 例：「本質問に回答するために、提供したドキュメント以外の情報は使用しないでください。もし回答できない場合はその旨を記載してください。」
* こうすることで、モデルが持つ事前学習情報に頼らず、**与えた内容だけで回答する**ようになります。

---

## おわりに

この記事では、Anthropic社の「Anthropic 1P」チュートリアルに沿って、プロンプト精度向上のための**実践的なノウハウ**を日本語でまとめました。以下を振り返りながら、日々のプロンプト作成に役立ててみてください。

1. **基本構造**（指示・文脈・入力・出力形式）を必ず盛り込む
2. **明確かつ端的に指示**し、曖昧さを徹底排除する
3. **ロール指定**で回答の口調や専門性をコントロールする
4. **データと指示をタグで分離**し、モデルの誤認識を防ぐ
5. **出力フォーマットの指定**と、必要であればPrefillで書き出しを誘導する
6. **ステップバイステップ思考**で推論の過程を明示し、正確性を高める
7. **Few-Shot**で例示を活用し、出力パターンを示して守らせる
8. **幻覚回避**のために「根拠を先に引用させる」「限定的情報源のみ使用」などの工夫を行う

これらを組み合わせることで、モデルが常に意図どおりに動作しやすくなり、品質の高い生成物を得やすくなります。ぜひ本記事を参考に、チーム全体でプロンプト設計の共通ルールを整備し、社内やサービスでのAI活用をより確実なものにしていってください。