CLAUDE LABEN
VERSION — 8月10日に v2.1.227 が出ていました。新機能はなく、プラン判定と CI まわりの不具合修正が中心ですAUTO — 8月14日の既定化まで残り2日です。Pro・Max・Team で Claude Code の auto モードが既定で有効になりますCI — claude-code-action で allowed_non_write_users を指定すると GitHub ホストランナー上の Bash が全て失敗していた問題が直りましたBILLING — 期限切れトークンで開始したセッションが加入プランを取り違え、Max 利用者に使用クレジットの有効化を促していた不具合も解消していますSUNSET — 旧 Workbench と実験的プロンプトツール API の廃止は8月17日で、残り5日ですPRICE — Sonnet 5 のプロモ価格 $2/$10 per Mtok は8月31日までで、9月1日から $3/$15 per Mtok になりますVERSION — 8月10日に v2.1.227 が出ていました。新機能はなく、プラン判定と CI まわりの不具合修正が中心ですAUTO — 8月14日の既定化まで残り2日です。Pro・Max・Team で Claude Code の auto モードが既定で有効になりますCI — claude-code-action で allowed_non_write_users を指定すると GitHub ホストランナー上の Bash が全て失敗していた問題が直りましたBILLING — 期限切れトークンで開始したセッションが加入プランを取り違え、Max 利用者に使用クレジットの有効化を促していた不具合も解消していますSUNSET — 旧 Workbench と実験的プロンプトツール API の廃止は8月17日で、残り5日ですPRICE — Sonnet 5 のプロモ価格 $2/$10 per Mtok は8月31日までで、9月1日から $3/$15 per Mtok になります
記事一覧/API & SDK
API & SDK/2026-06-19上級

search_result ブロックで自前ナレッジに根拠を引かせる — Claude Citations 実装メモ

自前のRAGでClaudeが「どの記事を根拠にしたか」を見失う問題を、search_result コンテンツブロックと citations で解決する実装手順を、4サイト運用の実測値とともにまとめます。

Claude API116CitationsRAG4search_result個人開発112

プレミアム記事

自分が運営する記事群に対して「関連記事を選ぶ」「事実関係を照合する」ための社内エージェントを、Claude API で組んでいたときの話から始めます。私自身、4つの技術ブログを個人開発で回していて、日本語だけで合計600本を超える記事が手元にあります。検索でヒットした候補をプロンプトに連結し、「この主張の根拠になる記事はどれですか」と尋ねる——よくある自前RAGの形です。

最初の実装はそれなりに動いていました。ところが運用を続けるうちに、無視できない癖が見えてきます。Claude は「○○という記事に書かれています」と答えるのですが、その記事名が手元の候補に存在しないことがあるのです。連結した本文のどこを読んで判断したのかも追えません。根拠の出どころが言葉の中に溶けてしまい、後から検証できない。これは社内向けとはいえ、誠実さを欠く挙動でした。

この「どの資料の、どの部分を根拠にしたか」を構造化データとして必ず返させる仕組みが、Claude の Citations、とりわけ search_result コンテンツブロックです。本番に載せ替えて数週間運用した実装と、その過程で踏んだ落とし穴を残しておきます。

言葉で根拠を語らせると、なぜ検証できなくなるのか

自前で本文を連結して渡す方式は、Claude から見ると「ただの長い文字列」です。区切りに ## 記事A のような見出しを入れても、それは意味の境界としては伝わりますが、機械可読な参照子ではありません。結果として返ってくる根拠は「記事Aによると〜」という自然文で、これを正規表現で拾って元記事に紐付け直す後処理が必要になります。

この後処理が脆いのが問題でした。Claude が記事名を少し言い換えたり、複数記事の内容を統合して「これらの記事から」と曖昧にまとめたりすると、マッチに失敗します。私の環境では、引用の機械的な突合成功率がおよそ7割前後で頭打ちでした。残りの3割は人手で確認するしかなく、自動化の意味が半減していました。

根本原因は、参照のIDを渡していないことに尽きます。渡していない以上、返ってくるはずもありません。search_result は、まさにこの「IDを持った検索結果として資料を渡す」ためのコンテンツブロックです。

search_result コンテンツブロックの構造

search_result は、メッセージの content 配列に置ける専用ブロックです。1件の検索結果が、ソース識別子・タイトル・本文断片の配列という三点セットで表現されます。

search_result_block = {
    "type": "search_result",
    "source": "https://claudelab.net/ja/articles/api-sdk/claude-api-prompt-caching-monthly-cost-half-guide",
    "title": "プロンプトキャッシュで月額コストを半分にする実装",
    "content": [
        {"type": "text", "text": "5分TTLのキャッシュブレークポイントをsystemの末尾に置くと…"},
        {"type": "text", "text": "1時間TTLは静的な大きい前提に向きます。料金は…"},
    ],
    "citations": {"enabled": True},
}

ポイントは content が文字列ではなくテキストブロックの配列であることです。Claude はこの配列の何番目を根拠にしたかをインデックスで返すので、断片の切り方がそのまま引用の粒度になります。段落単位で分けておくと、後から「記事のこの段落」へリンクを張りやすくなります。citations.enabledtrue にしたブロックだけが引用の対象になる点も、最初に押さえておきたいところです。

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

この記事の続きを読む

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

この記事で得られること
search_result ブロックで Claude の回答に『どの記事の何文目を根拠にしたか』を構造化データとして必ず付与させる実装
手組みのコンテキスト連結から移行し、引用の取りこぼしを抑えつつ送信トークンを約40%削減した手順
citations 配列を記事リンクへ還元する UI 連携と、本番で踏んだ search_result 特有の落とし穴3点
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

API & SDK2026-07-13
画像を原寸で送るか縮小するか — Opus 4.7 の高解像度ビジョンで1枚ごとに解像度を決めるコスト設計
Opus 4.7 の高解像度ビジョンで壁紙の細部分類は上がったのに、全部を原寸で送ったら週のトークンが跳ねました。1枚ごとに解像度と使うモデルを決める preflight を設計し、精度を保ったままコストを下げた実測を残します。
API & SDK2026-07-12
APIキーに有効期限を付けると、失効は事故ではなく予定になる — 無人運用の鍵カレンダー設計
Console で APIキーに有効期限を設定できるようになりました。無人で回している夜間ジョブを止めないために、二重鍵の重ね替えとローカルの失効台帳で「予定された失効」を運用に組み込む方法をまとめます。
API & SDK2026-07-10
画像分類の信頼度を鵜呑みにしない — クラス別しきい値の較正と棄却ルーティング
全体の一致率は92%なのに特定カテゴリだけ71%——Claude Visionの自己申告confidenceを鵜呑みにせず、クラス別にしきい値を較正して低信頼の判定を人手キューへ棄却する設計を実測記録として残します。検証セットの規模、較正が静かに腐る問題、採用の判断基準まで扱います。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →