Loading...
    • 開発者ガイド
    • API リファレンス
    • MCP
    • リソース
    • リリースノート
    Search...
    ⌘K
    はじめに
    Claude の紹介クイックスタート
    モデルと料金
    モデル概要モデルの選び方Claude 4.6 の新機能移行ガイドモデルの廃止料金
    Claude で構築する
    機能概要Messages API の使用停止理由の処理プロンプトのベストプラクティス
    コンテキスト管理
    コンテキストウィンドウコンパクションコンテキスト編集
    機能
    プロンプトキャッシング拡張思考適応型思考エフォートメッセージのストリーミングバッチ処理引用多言語サポートトークンカウントエンベディングビジョンPDF サポートFiles API検索結果構造化出力
    ツール
    概要ツール使用の実装方法きめ細かいツールストリーミングBash ツールコード実行ツールプログラムによるツール呼び出しコンピュータ使用ツールテキストエディタツールWeb フェッチツールWeb 検索ツールメモリツールツール検索ツール
    Agent Skills
    概要クイックスタートベストプラクティスエンタープライズ向け SkillsAPI での Skills の使用
    Agent SDK
    概要クイックスタートTypeScript SDKTypeScript V2(プレビュー)Python SDK移行ガイド
    API での MCP
    MCP コネクタリモート MCP サーバー
    サードパーティプラットフォームの Claude
    Amazon BedrockMicrosoft FoundryVertex AI
    プロンプトエンジニアリング
    概要プロンプトジェネレータープロンプトテンプレートの使用プロンプト改善ツール明確かつ直接的に例を使う(マルチショットプロンプティング)Claude に考えさせる(CoT)XML タグを使うClaude に役割を与える(システムプロンプト)複雑なプロンプトを連鎖させる長文コンテキストのヒント拡張思考のヒント
    テストと評価
    成功基準の定義テストケースの開発評価ツールの使用レイテンシの削減
    ガードレールの強化
    ハルシネーションの削減出力の一貫性を高めるジェイルブレイクの軽減ストリーミング拒否プロンプト漏洩の防止Claude をキャラクターに保つ
    管理とモニタリング
    Admin API 概要データレジデンシーワークスペースUsage and Cost APIClaude Code Analytics APIゼロデータリテンション
    Console
    Log in
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...

    Solutions

    • AI agents
    • Code modernization
    • Coding
    • Customer support
    • Education
    • Financial services
    • Government
    • Life sciences

    Partners

    • Amazon Bedrock
    • Google Cloud's Vertex AI

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Company

    • Anthropic
    • Careers
    • Economic Futures
    • Research
    • News
    • Responsible Scaling Policy
    • Security and compliance
    • Transparency

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Help and security

    • Availability
    • Status
    • Support
    • Discord

    Terms and policies

    • Privacy policy
    • Responsible disclosure policy
    • Terms of service: Commercial
    • Terms of service: Consumer
    • Usage policy
    機能

    検索結果

    ソース帰属付きの検索結果を提供することで、RAGアプリケーションの自然な引用を実現します

    検索結果コンテンツブロックは、適切なソース帰属付きの自然な引用を可能にし、カスタムアプリケーションにウェブ検索品質の引用をもたらします。この機能は、Claudeがソースを正確に引用する必要があるRAG(検索拡張生成)アプリケーションで特に強力です。

    検索結果機能は以下のモデルで利用可能です:

    • Claude Opus 4.6 (claude-opus-4-6)
    • Claude Sonnet 4.5 (claude-sonnet-4-5-20250929)
    • Claude Opus 4.5 (claude-opus-4-5-20251101)
    • Claude Opus 4.1 (claude-opus-4-1-20250805)
    • Claude Opus 4 (claude-opus-4-20250514)
    • Claude Sonnet 4 (claude-sonnet-4-20250514)
    • Claude Sonnet 3.7 (非推奨) (claude-3-7-sonnet-20250219)
    • Claude Haiku 4.5 (claude-haiku-4-5-20251001)
    • Claude Haiku 3.5 (非推奨) (claude-3-5-haiku-20241022)

    主な利点

    • 自然な引用 - あらゆるコンテンツに対してウェブ検索と同じ引用品質を実現
    • 柔軟な統合 - 動的RAGのツール返却値として、またはプリフェッチされたデータのトップレベルコンテンツとして使用
    • 適切なソース帰属 - 各結果にソースとタイトル情報が含まれ、明確な帰属を実現
    • ドキュメントの回避策が不要 - ドキュメントベースの回避策の必要性を排除
    • 一貫した引用形式 - Claudeのウェブ検索機能の引用品質と形式に一致

    仕組み

    検索結果は2つの方法で提供できます:

    1. ツール呼び出しから - カスタムツールが検索結果を返し、動的RAGアプリケーションを実現
    2. トップレベルコンテンツとして - プリフェッチまたはキャッシュされたコンテンツのために、ユーザーメッセージに直接検索結果を提供

    どちらの場合も、Claudeは適切なソース帰属付きで検索結果からの情報を自動的に引用できます。

    検索結果スキーマ

    検索結果は以下の構造を使用します:

    {
      "type": "search_result",
      "source": "https://example.com/article",  // 必須: ソースURLまたは識別子
      "title": "Article Title",                  // 必須: 結果のタイトル
      "content": [                               // 必須: テキストブロックの配列
        {
          "type": "text",
          "text": "The actual content of the search result..."
        }
      ],
      "citations": {                             // オプション: 引用設定
        "enabled": true                          // この結果の引用を有効/無効にする
      }
    }

    必須フィールド

    フィールド型説明
    typestring"search_result" でなければなりません
    sourcestringコンテンツのソースURLまたは識別子
    titlestring検索結果の説明的なタイトル
    contentarray実際のコンテンツを含むテキストブロックの配列

    オプションフィールド

    フィールド型説明
    citationsobjectenabled ブールフィールドを持つ引用設定
    cache_controlobjectキャッシュ制御設定(例: {"type": "ephemeral"})

    content 配列の各アイテムは以下を持つテキストブロックでなければなりません:

    • type: "text" でなければなりません
    • text: 実際のテキストコンテンツ(空でない文字列)

    方法1: ツール呼び出しからの検索結果

    最も強力なユースケースは、カスタムツールから検索結果を返すことです。これにより、ツールが関連コンテンツを取得して自動引用付きで返す動的RAGアプリケーションが実現します。

    例: ナレッジベースツール

    from anthropic import Anthropic
    from anthropic.types import (
        MessageParam,
        TextBlockParam,
        SearchResultBlockParam,
        ToolResultBlockParam
    )
    
    client = Anthropic()
    
    # ナレッジベース検索ツールを定義
    knowledge_base_tool = {
        "name": "search_knowledge_base",
        "description": "Search the company knowledge base for information",
        "input_schema": {
            "type": "object",
            "properties": {
                "query": {
                    "type": "string",
                    "description": "The search query"
                }
            },
            "required": ["query"]
        }
    }
    
    # ツール呼び出しを処理する関数
    def search_knowledge_base(query):
        # ここに検索ロジックを記述
        # 正しい形式で検索結果を返す
        return [
            SearchResultBlockParam(
                type="search_result",
                source="https://docs.company.com/product-guide",
                title="Product Configuration Guide",
                content=[
                    TextBlockParam(
                        type="text",
                        text="To configure the product, navigate to Settings > Configuration. The default timeout is 30 seconds, but can be adjusted between 10-120 seconds based on your needs."
                    )
                ],
                citations={"enabled": True}
            ),
            SearchResultBlockParam(
                type="search_result",
                source="https://docs.company.com/troubleshooting",
                title="Troubleshooting Guide",
                content=[
                    TextBlockParam(
                        type="text",
                        text="If you encounter timeout errors, first check the configuration settings. Common causes include network latency and incorrect timeout values."
                    )
                ],
                citations={"enabled": True}
            )
        ]
    
    # ツール付きでメッセージを作成
    response = client.messages.create(
        model="claude-opus-4-6",  # サポートされているすべてのモデルで動作
        max_tokens=1024,
        tools=[knowledge_base_tool],
        messages=[
            MessageParam(
                role="user",
                content="How do I configure the timeout settings?"
            )
        ]
    )
    
    # Claudeがツールを呼び出した場合、検索結果を提供
    if response.content[0].type == "tool_use":
        tool_result = search_knowledge_base(response.content[0].input["query"])
        
        # ツール結果を返送
        final_response = client.messages.create(
            model="claude-opus-4-6",  # サポートされているすべてのモデルで動作
            max_tokens=1024,
            messages=[
                MessageParam(role="user", content="How do I configure the timeout settings?"),
                MessageParam(role="assistant", content=response.content),
                MessageParam(
                    role="user",
                    content=[
                        ToolResultBlockParam(
                            type="tool_result",
                            tool_use_id=response.content[0].id,
                            content=tool_result  # 検索結果をここに配置
                        )
                    ]
                )
            ]
        )

    方法2: トップレベルコンテンツとしての検索結果

    ユーザーメッセージに直接検索結果を提供することもできます。これは以下の場合に便利です:

    • 検索インフラストラクチャからのプリフェッチされたコンテンツ
    • 以前のクエリからのキャッシュされた検索結果
    • 外部検索サービスからのコンテンツ
    • テストと開発

    例: 直接検索結果

    from anthropic import Anthropic
    from anthropic.types import (
        MessageParam,
        TextBlockParam,
        SearchResultBlockParam
    )
    
    client = Anthropic()
    
    # ユーザーメッセージに直接検索結果を提供
    response = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=1024,
        messages=[
            MessageParam(
                role="user",
                content=[
                    SearchResultBlockParam(
                        type="search_result",
                        source="https://docs.company.com/api-reference",
                        title="API Reference - Authentication",
                        content=[
                            TextBlockParam(
                                type="text",
                                text="All API requests must include an API key in the Authorization header. Keys can be generated from the dashboard. Rate limits: 1000 requests per hour for standard tier, 10000 for premium."
                            )
                        ],
                        citations={"enabled": True}
                    ),
                    SearchResultBlockParam(
                        type="search_result",
                        source="https://docs.company.com/quickstart",
                        title="Getting Started Guide",
                        content=[
                            TextBlockParam(
                                type="text",
                                text="To get started: 1) Sign up for an account, 2) Generate an API key from the dashboard, 3) Install our SDK using pip install company-sdk, 4) Initialize the client with your API key."
                            )
                        ],
                        citations={"enabled": True}
                    ),
                    TextBlockParam(
                        type="text",
                        text="Based on these search results, how do I authenticate API requests and what are the rate limits?"
                    )
                ]
            )
        ]
    )
    
    print(response.model_dump_json(indent=2))

    引用付きのClaudeの応答

    検索結果がどのように提供されたかに関わらず、Claudeは検索結果からの情報を使用する際に自動的に引用を含めます:

    {
      "role": "assistant",
      "content": [
        {
          "type": "text",
          "text": "To authenticate API requests, you need to include an API key in the Authorization header",
          "citations": [
            {
              "type": "search_result_location",
              "source": "https://docs.company.com/api-reference",
              "title": "API Reference - Authentication",
              "cited_text": "All API requests must include an API key in the Authorization header",
              "search_result_index": 0,
              "start_block_index": 0,
              "end_block_index": 0
            }
          ]
        },
        {
          "type": "text",
          "text": ". You can generate API keys from your dashboard",
          "citations": [
            {
              "type": "search_result_location",
              "source": "https://docs.company.com/api-reference",
              "title": "API Reference - Authentication",
              "cited_text": "Keys can be generated from the dashboard",
              "search_result_index": 0,
              "start_block_index": 0,
              "end_block_index": 0
            }
          ]
        },
        {
          "type": "text",
          "text": ". The rate limits are 1,000 requests per hour for the standard tier and 10,000 requests per hour for the premium tier.",
          "citations": [
            {
              "type": "search_result_location",
              "source": "https://docs.company.com/api-reference",
              "title": "API Reference - Authentication",
              "cited_text": "Rate limits: 1000 requests per hour for standard tier, 10000 for premium",
              "search_result_index": 0,
              "start_block_index": 0,
              "end_block_index": 0
            }
          ]
        }
      ]
    }

    引用フィールド

    各引用には以下が含まれます:

    フィールド型説明
    typestring検索結果の引用では常に "search_result_location"
    sourcestring元の検索結果からのソース
    titlestring or null元の検索結果からのタイトル
    cited_textstring引用されている正確なテキスト
    search_result_indexinteger検索結果のインデックス(0始まり)
    start_block_indexintegerコンテンツ配列内の開始位置
    end_block_indexintegerコンテンツ配列内の終了位置

    注意: search_result_index は、検索結果がどのように提供されたか(ツール呼び出しまたはトップレベルコンテンツ)に関わらず、検索結果コンテンツブロックのインデックス(0始まり)を参照します。

    複数のコンテンツブロック

    検索結果は content 配列に複数のテキストブロックを含めることができます:

    {
      "type": "search_result",
      "source": "https://docs.company.com/api-guide",
      "title": "API Documentation",
      "content": [
        {
          "type": "text",
          "text": "Authentication: All API requests require an API key."
        },
        {
          "type": "text",
          "text": "Rate Limits: The API allows 1000 requests per hour per key."
        },
        {
          "type": "text",
          "text": "Error Handling: The API returns standard HTTP status codes."
        }
      ]
    }

    Claudeは start_block_index と end_block_index フィールドを使用して特定のブロックを引用できます。

    高度な使用法

    両方の方法の組み合わせ

    同じ会話でツールベースとトップレベルの検索結果の両方を使用できます:

    # トップレベルの検索結果を含む最初のメッセージ
    messages = [
        MessageParam(
            role="user",
            content=[
                SearchResultBlockParam(
                    type="search_result",
                    source="https://docs.company.com/overview",
                    title="Product Overview",
                    content=[
                        TextBlockParam(type="text", text="Our product helps teams collaborate...")
                    ],
                    citations={"enabled": True}
                ),
                TextBlockParam(
                    type="text",
                    text="Tell me about this product and search for pricing information"
                )
            ]
        )
    ]
    
    # Claudeが応答し、価格情報を検索するツールを呼び出す可能性があります
    # その後、さらに検索結果を含むツール結果を提供します

    他のコンテンツタイプとの組み合わせ

    両方の方法で検索結果を他のコンテンツと混在させることができます:

    # ツール結果内
    tool_result = [
        SearchResultBlockParam(
            type="search_result",
            source="https://docs.company.com/guide",
            title="User Guide",
            content=[TextBlockParam(type="text", text="Configuration details...")],
            citations={"enabled": True}
        ),
        TextBlockParam(
            type="text",
            text="Additional context: This applies to version 2.0 and later."
        )
    ]
    
    # トップレベルコンテンツ内
    user_content = [
        SearchResultBlockParam(
            type="search_result",
            source="https://research.com/paper",
            title="Research Paper",
            content=[TextBlockParam(type="text", text="Key findings...")],
            citations={"enabled": True}
        ),
        {
            "type": "image",
            "source": {"type": "url", "url": "https://example.com/chart.png"}
        },
        TextBlockParam(
            type="text",
            text="How does the chart relate to the research findings?"
        )
    ]

    キャッシュ制御

    パフォーマンス向上のためにキャッシュ制御を追加します:

    {
      "type": "search_result",
      "source": "https://docs.company.com/guide",
      "title": "User Guide",
      "content": [{"type": "text", "text": "..."}],
      "cache_control": {
        "type": "ephemeral"
      }
    }

    引用制御

    デフォルトでは、検索結果の引用は無効になっています。citations 設定を明示的に設定することで引用を有効にできます:

    {
      "type": "search_result",
      "source": "https://docs.company.com/guide",
      "title": "User Guide",
      "content": [{"type": "text", "text": "Important documentation..."}],
      "citations": {
        "enabled": true  // この結果の引用を有効にする
      }
    }

    citations.enabled が true に設定されている場合、Claudeは検索結果からの情報を使用する際に引用参照を含めます。これにより以下が可能になります:

    • カスタムRAGアプリケーションの自然な引用
    • 独自のナレッジベースとのインターフェース時のソース帰属
    • 検索結果を返すカスタムツールのウェブ検索品質の引用

    citations フィールドが省略された場合、引用はデフォルトで無効になります。

    引用はオール・オア・ナッシングです:リクエスト内のすべての検索結果で引用が有効であるか、すべてで無効であるかのいずれかでなければなりません。異なる引用設定の検索結果を混在させるとエラーになります。一部のソースの引用を無効にする必要がある場合は、そのリクエスト内のすべての検索結果で無効にする必要があります。

    ベストプラクティス

    ツールベースの検索(方法1)の場合

    • 動的コンテンツ: リアルタイム検索と動的RAGアプリケーションに使用
    • エラー処理: 検索が失敗した場合に適切なメッセージを返す
    • 結果の制限: コンテキストのオーバーフローを避けるため、最も関連性の高い結果のみを返す

    トップレベル検索(方法2)の場合

    • プリフェッチされたコンテンツ: すでに検索結果がある場合に使用
    • バッチ処理: 複数の検索結果を一度に処理するのに最適
    • テスト: 既知のコンテンツで引用動作をテストするのに最適

    一般的なベストプラクティス

    1. 結果を効果的に構造化する

      • 明確で永続的なソースURLを使用
      • 説明的なタイトルを提供
      • 長いコンテンツを論理的なテキストブロックに分割
    2. 一貫性を維持する

      • アプリケーション全体で一貫したソース形式を使用
      • タイトルがコンテンツを正確に反映していることを確認
      • フォーマットの一貫性を保つ
    3. エラーを適切に処理する

      def search_with_fallback(query):
          try:
              results = perform_search(query)
              if not results:
                  return {"type": "text", "text": "No results found."}
              return format_as_search_results(results)
          except Exception as e:
              return {"type": "text", "text": f"Search error: {str(e)}"}

    制限事項

    • 検索結果コンテンツブロックはClaude API、Amazon Bedrock、およびGoogle CloudのVertex AIで利用可能です
    • 検索結果内ではテキストコンテンツのみがサポートされています(画像やその他のメディアは不可)
    • content 配列には少なくとも1つのテキストブロックが含まれている必要があります

    Was this page helpful?

    • 方法1: ツール呼び出しからの検索結果
    • 方法2: トップレベルコンテンツとしての検索結果
    • 引用付きのClaudeの応答
    • ツールベースの検索(方法1)の場合
    • トップレベル検索(方法2)の場合