CLAUDE LABEN
FORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられていますFORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられています
記事一覧/API & SDK
API & SDK/2026-04-27上級

ハルシネーションを本番で抑える: Claude API 多層防御アーキテクチャの設計図

Claude API を本番投入したときに最後まで残るのが、ハルシネーション(事実誤認)への対処です。プロンプト工夫だけでは限界がある、という結論に至った私の運用記録から、入力・推論・出力・事後検証の4層で誤回答を抑える具体的な実装パターンを共有します。

hallucination3production87claude-api81guardrailadvanced9

プレミアム記事

「ユーザーから『嘘の電話番号を案内されました』というクレームが届きました」――昨年、私が運用していた問い合わせ対応エージェントで実際に起きた事故です。プロンプトには明確に「知らない情報は推測しないでください」と書いてありました。Claude Sonnet 4.5、temperature は 0.3、ツールも複数連携した、当時としては丁寧に作ったエージェントでした。

それでもハルシネーションは起きます。本番で起きます。

この記事は「プロンプトを工夫すれば防げる」という前提を捨てたところから始まります。プロンプト・推論・出力・事後検証の4つのレイヤーで多層防御を組むと、致命的な事実誤認はどこまで抑えられるのか。実際に私が運用しているシステムで効いた7つの実装パターンを、TypeScript の動くコードと一緒に整理しました。

なぜ単一のプロンプトでは負けるのか

ハルシネーションを「Claude が嘘をつく問題」と単純化すると、対策を間違えます。私の経験では、本番で起きるハルシネーションは少なくとも3種類に分類できます。

事実捏造型: 学習データにない固有名詞・数値・URL を、それらしく作ってしまうケース。電話番号・人名・価格表などで起きやすく、ビジネスインパクトが最も大きい。

推論誤り型: 与えられた情報の解釈を間違えるケース。コンテキストには「キャンセル料は 30 日前まで無料」と書かれているのに、「いつでも無料」と回答してしまう。

指示無視型: 「JSON で返してください」と指定したのに散文で返す、「ですます調で」と書いたのに突然丁寧語を崩す。これも広い意味でハルシネーションです。

この3つは原因が異なります。事実捏造型は「知らないことを正直に認めない」問題、推論誤り型は「コンテキストを正しく読まない」問題、指示無視型は「フォーマットを守る注意力が切れる」問題です。

プロンプトの書き方だけで全部に対処しようとすると、プロンプトが肥大化し、皮肉なことに全体の精度が落ちます。私が出した結論は、層を分けて、それぞれ別の技術で対処するというものでした。

レイヤー1: 入力グラウンディングで「答える材料」を制約する

最も効くのは、Claude に「自分の知識から答えてはいけない」状況を作ることです。RAG(Retrieval-Augmented Generation)の基本ですが、グラウンディングを「強い」契約として設計するのが本番品質の鍵になります。

import Anthropic from "@anthropic-ai/sdk";
 
const client = new Anthropic();
 
interface RetrievedDoc {
  id: string;
  title: string;
  content: string;
  source_url: string;
}
 
async function answerWithGrounding(
  question: string,
  docs: RetrievedDoc[]
): Promise<string> {
  // ❌ よくある失敗例: docs を「参考にしてください」と書く
  // ✅ 本番では「これら以外を根拠にしたら違反」という強い契約にする
  const groundedSystem = `あなたは社内ナレッジボットです。
 
絶対ルール:
1. 以下の <documents> セクション内の情報のみを根拠に回答してください
2. <documents> に書かれていない事実は、たとえ一般常識でも回答に含めないでください
3. 質問に答えるための情報が不足している場合は「提供された情報からは判断できません」と答えてください
4. 推測・補完は禁止です。固有名詞・数値・日付・URL は <documents> から逐字引用してください
 
回答フォーマット: 必ず最後に "根拠ID: [doc_id1, doc_id2]" の形式で参照したドキュメントIDを列挙してください`;
 
  const docsBlock = docs
    .map((d) => `<document id="${d.id}" title="${d.title}">\n${d.content}\n</document>`)
    .join("\n\n");
 
  const response = await client.messages.create({
    model: "claude-sonnet-4-5",
    max_tokens: 1024,
    system: groundedSystem,
    messages: [
      {
        role: "user",
        content: `<documents>\n${docsBlock}\n</documents>\n\n質問: ${question}`,
      },
    ],
  });
 
  const text = response.content
    .filter((b): b is Anthropic.TextBlock => b.type === "text")
    .map((b) => b.text)
    .join("\n");
 
  return text;
}
 
// 使用例:
// const answer = await answerWithGrounding("返金ポリシーは?", retrievedDocs);
// console.log(answer);
// 期待される出力例:
// 「キャンセルは購入日から30日以内であれば全額返金されます。
//  根拠ID: [doc_42]」

ここで重要なのは「絶対ルール」を3つ以上重ねて書くことです。ルールが1つだと曖昧な状況で破られますが、3〜5個を箇条書きにすると、互いに補強し合って違反率が体感で半分以下になります。これは私が AB テストで何度か確認した結果で、Claude の応答パターンに対する非自明な事実の一つです。

なお、<documents> タグで囲むのは Anthropic 推奨のプロンプト構造です。--- のような Markdown 区切りより、XML タグの方が Claude の attention が確実にロックされる傾向があります。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
プロンプトを何度書き直しても消えなかったハルシネーションが、4層の防御を組み合わせることで顧客クレームレベルから「許容できる残余リスク」へ落ちるまでの実装手順を手に入れられる
Self-consistency check、LLM-as-judge、Citation API による出典強制、JSON Schema ガードという4つの技術を、コピー&ペーストで動くTypeScript実装と一緒に習得できる
本番投入後に必ず遭遇する「judge モデルが甘くなる」「citation が空文字を返す」といった具体的な落とし穴と、その回避策を事前に知った状態で設計に入れる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

API & SDK2026-06-25
サポートAIが本番で「自信満々に間違える」とき — 根拠の外を踏ませず、迷ったら人へ渡す運用メモ
Claude API のカスタマーサポートエージェントが、テストでは完璧でも本番で存在しない情報を断言してしまう問題への対処。検索段階で「答えない」を決める設計、根拠付き生成、誤自信率の計測、エスカレーション精度の調整までを運用視点でまとめます。
API & SDK2026-07-13
Claude API の同時実行を束ねる — シングルフライトで重複推論とキャッシュ・スタンピードを防ぐ
同一プロンプトが同時に何度も Claude へ飛ぶ重複推論を、シングルフライト(request coalescing)で束ねる設計です。プロセス内・分散環境の実装、ジッター付きリトライ、負のキャッシュまで実測付きでまとめました。
API & SDK2026-07-03
同時リクエスト数はいくつまで持つのか — Little の法則と実測メモリで決める Claude API 本番デプロイのインフラ要件
同時リクエスト数・待ち行列長・メモリはいくつに設定すべきか。Claude API 本番デプロイのインフラ要件を Little の法則と実測ハーネスで数字から導く手順を、夜間バッチで OOM を踏んだ経験をもとに整理しました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →