Skip to main content

引用

引用は、アシスタントの応答内の該当箇所を、それを裏付けるソースにリンクします。 セッションを作成または再開するときにenableCitationsを有効にしてから、assistant.message イベントのcitations ペイロードを読み取り、脚注、ソース リスト、またはインライン リンクをレンダリングします。

警告

引用文献は試験的です。 オプション名、イベント ペイロード、プロバイダー カバレッジは、将来のリリースで変更される可能性があります。

引用文献のしくみ

引用は、SDK ではなくモデル プロバイダーによって生成されます。 フローには、次の 3 つの部分があります。

  1. アプリケーションは、ドキュメントの添付ファイルやソース コンテンツを含むツールの結果など、引用可能な資料を提供します。
  2. ランタイムは、enableCitations がオンのとき、そのマテリアルをワイヤ上で引用可能としてマークします。 Anthropicモデルの場合、添付ファイルは引用文献が有効になっているdocumentブロックとして送信されます。
  3. モデルは引用メタデータを返し、ランタイムは最終的なassistant.message イベントでプロバイダーに依存しないcitations オブジェクトに正規化します。

プロバイダーのサポートは制限されています。 各ソースレコードの provider フィールドには、引用の出典元が記録されます:

プロバイダーの値意味
anthropicAnthropic (クロード) モデル応答によって生成された引用
openaiOpenAI モデル応答によって生成された引用
clientツール出力からランタイムによって合成された引用

メモ

enableCitationsを有効にしても、応答に引用文献が含まれるとは限りません。 モデルは、応答が引用可能なソース マテリアルに接地されている場合にのみ、それらを出力します。 citations フィールドは常に省略可能として扱います。

セッションで引用を有効にする

セッション作成のオプションを設定し、再起動後に引用を行う場合は、再開時にもう一度設定します。

コード言語 navigation

TypeScript
const session = await client.createSession({
    onPermissionRequest: approveAll,
    enableCitations: true,
});

const resumed = await client.resumeSession(session.sessionId, {
    onPermissionRequest: approveAll,
    enableCitations: true,
});

アシスタント メッセージから引用文献を読む

引用文献は、assistant.message_deltaイベントではなく、最終的なassistant.messageイベントに到着します。 ソース マーカーをレンダリングする前に、最後のメッセージを待ちます。

コード言語 navigation

TypeScript
session.on((event) => {
    if (event.type !== "assistant.message" || !event.data.citations) {
        return;
    }

    const { sources, spans } = event.data.citations;
    const sourceById = new Map(sources.map((source) => [source.id, source]));

    for (const span of spans) {
        const quoted = event.data.content.slice(span.startIndex, span.endIndex);
        for (const reference of span.references) {
            const source = sourceById.get(reference.sourceId);
            const label = source?.title ?? source?.url ?? source?.path ?? source?.id;
            console.log(`"${quoted}" — ${label}`);
        }
    }
});

引用ペイロードリファレンス

citations オブジェクトは重複除去されたソースを参照するスパンから分離するため、5 回引用されたソースがsourcesに 1 回表示されます。

タイプフィールドDescription
Citationssources引用スパンで参照される、重複が除去されたソースのセット
Citationsspans根拠ソースで注釈された生成テキストの範囲
CitationSourceid
CitationReference.sourceId によって参照される安定したターンスコープ識別子
CitationSourceprovider引用文献を作成したシステム: anthropicopenai、または client
CitationSourcetitle?ソースの人間が判読できるタイトル
CitationSourceurl?ソースの URL (Web リソースの場合)
CitationSourcepath?ソースがファイルの場合、エージェント ワークスペース のルートを基準としたファイル パス
CitationSpanstartIndex最終メッセージ コンテンツ内の開始オフセット (UTF-16 コード単位、ゼロベース、含む)
CitationSpanendIndex最終的なメッセージ コンテンツの終了オフセット (UTF-16 コード単位、0 から始まる、排他的)
CitationSpanreferencesこのスパンをサポートするソース
CitationReferencesourceIdこの参照が指す CitationSource の識別子
CitationReferencecitedText?スパンをサポートするソースからの正確なテキスト (モデルが提供する場合)
CitationReferencelocation?スパンをサポートするソース内の場所
CitationReferenceproviderMetadata?プロバイダーネイティブの関連付けデータ(不透明に渡される)

ヒント

スパン オフセットは、最終的な content 文字列に対して UTF-16 コード単位で測定されます。 TypeScript、Java、および.NET文字列は既に UTF-16 であるため、直接スライスできます。 Python文字列は Unicode コード ポイントによってインデックスが作成され、Go 文字列と Rust 文字列は UTF-8 であるため、上記の例のように、スライスする前にコンテンツを UTF-16 コード 単位に変換します。

引用場所

CitationReference.location は、 typeでキー指定された判別共用体です。

場所のタイプフィールド使用
char
startIndexendIndexソース テキスト内の文字範囲
page
startPageendPageページ分割されたドキュメント内のページ範囲
block
startBlockendBlock構造化ドキュメント内のコンテンツ ブロック範囲

引用可能なソースを提供する

引用文献には、モデルが属性付けできるソース マテリアルが必要です。 これを提供するには、2 つの方法があります。

メッセージにドキュメントを添付する

引用が有効になっていて、セッションでAnthropicプロバイダーが使用されている場合、添付ファイルは引用がオンになっているdocument ブロックとして送信されるため、モデルはそれらの一節を引用できます。

await session.sendAndWait({
    prompt: "Summarize the attached PDF and cite the passages you used.",
    attachments: [
        {
            type: "blob",
            data: pdfBase64,
            displayName: "quarterly-report.pdf",
            mimeType: "application/pdf",
        },
    ],
});

file では、attachment API と blobおよび attachment shapes について説明しています。

ツールから引用可能なソースを返す

ツールの結果には、実験的な citableSources 配列が含まれます。 各エントリは、モデルが引用できる content と、 id とオプションの titleurl、および pathを提供します。 これらのソースはツールの結果と共に保持されるため、セッションの再開後も存続し、そこから構築された引用文献には client プロバイダーでタグ付けされます。

Limitations

  • 引用文献はすべての SDK で試験的であり、互換性の保証の対象ではありません。
  • カバレッジはモデル プロバイダーによって異なります。 引用サポートなしでプロバイダー用に構成されたセッションは、 citations ペイロードを出力しません。
  • 引用は最終的な assistant.message イベントにのみ存在するため、ストリーミング コンシューマーは中間応答をレンダリングできません。
  • パブリックコードとIP重複に関する引用は、この領域の一部ではありません。

詳細については、次を参照してください。