For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
メインナビゲーション
Theme

引用の書式

モデルが信頼できる引用を生成できるようにします。

信頼できる引用があれば、読者は回答の正確さを確かめられ、回答への信頼も高まります。このガイドでは、引用可能な資料を準備し、OpenAI のモデルになじみのあるパターンを使って引用の書式を指示する方法を解説します。

概要

引用システムを構築するには、引用できる資料を決め、その内容をわかりやすく提示し、引用方法をモデルに指示します。さらに、ユーザーに表示する前に結果を検証します。

このガイドでは、モデルに直接関わる次の 5 つの要素を取り上げます。

  1. 引用単位:モデルが何を引用できるかを定義します。
  2. 資料の表現:出典となる資料を、構造が明確な形式で提示します。
  3. 引用書式:モデルが引用に使う書式を厳密に指定します。
  4. プロンプトでの指示:引用が必要な場面と正しい引用方法をモデルに伝えます。
  5. 引用の解析:後続の処理で使えるように、モデルの回答から引用を抽出します。

引用単位の選択

プロンプトを書く前に、モデルが何を引用できるかを明確に定義します。代表的な選択肢は次のとおりです。

引用単位 適した用途 欠点 例
文書 回答の出典となった文書を示せれば十分な場合 根拠となる箇所を特定しにくい 主張を裏付ける文書がどれかわかればよい場合は、従業員ハンドブック全体を引用します。
ブロック/チャンク 扱いやすさと精度を両立させたい場合 行単位では特定できない 該当する条項を含む契約書の段落や、検索で取得したチャンクを引用します。
行範囲 根拠となる記述を正確に示す必要がある場合 モデルにとって扱いが難しい ユーザーが該当箇所を正確に確認する必要がある場合は、L42-L47 のように行を指定して引用します。

引用単位を決める際は、次の点を考慮します。

  • 一貫性:何度実行しても、同じ出典には同じ ID を使います。
  • 確認のしやすさ:人が読んで前後の文脈を理解できるようにします。
  • 適切な大きさ:単独で意味が通じ、かつ根拠となる箇所を絞り込める範囲にします。

ほとんどのシステムでは、ブロック単位の引用が標準の選択肢として最適です。一般に、行単位の引用よりもモデルが扱いやすく、文書単位の引用よりもユーザーが根拠を確認しやすくなります。

引用可能な資料の表現

資料を明確に提示しなければ、モデルはその資料を引用できません。ツールから取得する場合も、プロンプトに直接組み込む場合も、次の要素を用意します。

  • 安定した出典 ID:file1 や block1 のように一貫して使える識別子
  • 読みやすい本文:読みやすく整形した出典のテキスト
  • メタデータ(任意):URL、タイムスタンプ、タイトルなどの補足情報

出典 ID とロケーターの違い:出典 ID は、モデルが生成する block1 のような安定した識別子です。ロケーターは、lines L8-L13 や Paragraph 21 のように、UI で強調表示する箇所を正確に示します。通常はモデルが出典 ID を出力し、システムがロケーターに対応する箇所を特定したり表示したりします。早い段階で両者を混在させると、書式の誤りが増えがちです。

引用書式の定義

モデルが生成する引用の書式を定義します。ルールが明確で一貫しており、モデルが毎回正しく再現しやすい書式を使います。

推奨する引用書式とマーカーを以下に示します。これらの引用マーカーは OpenAI のモデルが学習したマーカーに近いため、使用を強く推奨します。マーカーに別の値を使う場合も、引用書式全体はできるだけ同じ形にしてください。

要素 役割 推奨値
CITATION_START 引用マーカーの開始を示します。 \ue200
引用種別 引用の種類を示します。対応するすべての出典に cite を使います。 cite
CITATION_DELIMITER マーカー内のフィールドを区切ります。 \ue202
出典 ID 引用単位を識別します。turn# はターン番号を、item# は個々のファイル、ブロック、または URL を示します。 turn0file1、turn0block1、turn0url1
ロケーター(任意) 引用の対象を特定の範囲に絞ります。 L8-L13
CITATION_STOP 引用マーカーの終了を示します。 \ue201

ツールを使う場合、turnN の番号は、返された結果の件数にかかわらず、ツールを呼び出すたびに 1 つ増えます。1 回の呼び出しで得た出典は、file0、file1 などの接尾辞で区別します。1 回の回答で完結するシステムでも、すべての参照が turn0… になるのは、モデルが回答前にツールをちょうど 1 回呼び出した場合だけです。複数回呼び出すと、turn0fileX、turn1fileX のようにターン番号の異なる参照が現れることがあります。

テンプレート

{CITATION_START}<citation_family>{CITATION_DELIMITER}<source_id>{CITATION_DELIMITER}<locator>{CITATION_STOP}

例

{CITATION_START}cite{CITATION_DELIMITER}turn0file1{CITATION_DELIMITER}L8-L13{CITATION_STOP}

システムでロケーターを使わない場合は、そのフィールドを省略します。

{CITATION_START}cite{CITATION_DELIMITER}turn0file1{CITATION_STOP}

効果的な引用指示の書き方

引用の精度を最大限に保つには、モデルが慣れているパターンを使います。独自の書式やモデルになじみのない書式は処理の負担を増やし、特に次のような場合に引用の誤りを招きます。

  • 推論強度が低い場合:書式の誤りを修正するために使える推論量が少なくなります。
  • タスクが複雑な場合:推論に使える予算の大半をタスク自体の解決に費やすため、引用構文を整える余裕が少なくなります。

以下では、モデルが慣れているパターンに近い引用書式を推奨します。そのまま使うことも、システムに合わせて調整することもできます。

独自のプロンプトを書く場合は、次の点を明示します。

  • マーカーの正確な構文
  • 引用を挿入する位置
  • 引用が必要な場合と不要な場合
  • 根拠が複数ある場合の引用方法
  • 使用を禁止する書式
  • 根拠が見つからない場合の対応

引用の解析

モデルが引用を出力したら、回答のテキストから引用を抽出します。これにより、回答をユーザーに表示する前に、出典 ID から参照先を特定したり、リンクを表示したり、生のマーカーを取り除いたりできます。

以下のヘルパー関数は、アプリケーションにそのままコピーして使えます。元のテキスト内の文字オフセットを保持しながら、単一の出典を指す引用、複数の出典を指す引用、任意で指定する行範囲のロケーターを解析します。

この例が対応するロケーターは行範囲のみです。システムで別の形式のロケーターを使う場合は、コードを調整してください。

出典 ID の形式が異なる場合は、システムの形式に合わせて SOURCE_ID_RE を変更してください。

使用例

以下の例では、よく使われる 2 つの引用パターンを示します。

  • ツールで取得するコンテキスト:ツールが引用可能な資料とその ID を返します。
  • プロンプトに組み込むコンテキスト:引用可能なブロックをプロンプト内で直接提示します。

ツールで取得したコンテキストの引用書式

モデルがツールを使ってコンテキストを取得し、その内容を回答で引用する場合は、このパターンを使います。

引用単位の定義

用途に応じて、必要な精度を基準に引用単位を選びます。以下に、ツールが返す出力の例をいくつか示します。

以下の例は、ツールの出力に推奨する形式です。使用するツールはアプリケーションによって異なりますが、最も重要なのは、これらの例のように明確で安定した構造で出力を提示することです。

プロンプトでの指示

## 引用

「tool_1」が結果を返します。`tool_1` が返す各メッセージを「出典」と呼びます。各出典の参照 ID は、そのメッセージ内で最初に `turn\\d+file\\d+` の形式に一致する文字列です(例:`turn0file0`、`turn2file1`)。最初に一致する文字列が `turn0file0` なら、それが出典の参照 ID です。

引用は `tool_1` が返した出典を指します。1 件の出典を参照することも、複数の出典を参照することもできます。

出典が 1 件の場合は、必ず次の形式で引用してください。
{CITATION_START}cite{CITATION_DELIMITER}turn\d+file\d+{CITATION_STOP}

行単位の引用に対応している場合、特定の行範囲を引用するときは、必ず次の形式を使ってください。
{CITATION_START}cite{CITATION_DELIMITER}turn\d+file\d+{CITATION_DELIMITER}L\d+-L\d+{CITATION_STOP}

複数の出典を引用する場合は、根拠となる出典ごとに引用マーカーを 1 つずつ出力してください。

`turn0file0` のような参照 ID を {CITATION_START}...{CITATION_STOP} で囲まずに、そのまま回答本文に書いてはいけません。

- 引用は、その出典が裏付ける文の末尾に置いてください。文が長く、根拠を示すべき箇所が複数ある場合は、文の途中で該当箇所ごとに引用を置いてください。
- 引用は必ず句読点の後に置いてください。
- 取得した出典のうち、回答の該当箇所を直接裏付けるものだけを引用してください。
- ツールが返していない出典 ID、行範囲、ブロックのロケーターを作り出してはいけません。
- 取得した複数の出典が同じ主張の実質的な根拠となる場合は、そのすべてを引用してください。
- 取得した出典の内容が食い違う場合は、該当する出典をそれぞれ引用し、どこが食い違うのかを正確に説明してください。

出力例を示します。

The on-call handoff process is documented in the weekly support sync notes. \ue200cite\ue202turn0file0\ue202L8-L13\ue201

プロンプトに組み込んだコンテキストの引用書式

コンテキストをあらかじめ取得または準備し、プロンプトに直接組み込む場合は、このパターンを使います。

引用単位の定義

プロンプトにコンテキストを組み込む場合は、資料を区切り、各部分を安定した参照 ID を持つ明示的なタグで囲む方法が一般的です。

<BLOCK id="block1">
The service agreement states that termination for convenience requires thirty (30) days’ written notice, unless superseded by a customer-specific addendum.
In practice, renewal terms auto-extend for successive one-year periods when no written non-renewal notice is received before the deadline.
Appendix B further clarifies that pricing exceptions must be approved in writing by both Finance and the account owner.
</BLOCK>

<BLOCK id="block2">
Syllabus
</BLOCK>
...

こうすると引用単位が明確になり、モデルが参照しやすくなります。

プロンプトでの指示

## 引用

回答の根拠となるコンテキストは、引用単位ごとにプロンプト内で直接提示されます。各引用単位は、最初に現れるタグの `id` 属性の値で識別します。たとえば `<BLOCK id="block5"> ... </BLOCK>` の場合、`block5` が出典の参照 ID です。

このパターンではツールを呼び出さないため、ツールの呼び出し回数を数えるカウンターはありません。引用マーカーに `turn#` という接頭辞を付ける必要もありません。システムの他の部分に合わせて `turn0block5` のような形式の ID を使っても、この例の `block5` のような単純な ID を使ってもかまいません。どちらの場合も、引用マーカー内の ID は、プロンプトに組み込まれたコンテキストの ID と常に完全に一致させてください。

引用は、提示された引用単位を指します。1 件の出典を参照することも、複数の出典を参照することもできます。

出典が 1 件の場合は、必ず次の形式で引用してください。
{CITATION_START}cite{CITATION_DELIMITER}<block_id>{CITATION_STOP}

例:
{CITATION_START}cite{CITATION_DELIMITER}block5{CITATION_STOP}

複数の出典を引用する場合は、根拠となるブロックごとに引用マーカーを 1 つずつ出力してください。

ブロック ID を {CITATION_START}...{CITATION_STOP} で囲まずに、そのまま回答本文に書いてはいけません。

- 引用は、そのブロックが裏付ける文の末尾に置いてください。文が長く、根拠を示すべき箇所が複数ある場合は、文の途中で該当箇所ごとに引用を置いてください。
- 引用は必ず句読点の後に置いてください。
- 提示されたコンテキストに含まれるブロックだけを引用してください。
- 新しいブロック ID を作り出してはいけません。
- 提示されたコンテキストに含まれない知識や外部の情報源を引用してはいけません。
- 複数のブロックが同じ主張の実質的な根拠となる場合は、そのすべてを引用してください。
- 提示されたブロックの内容が食い違う場合は、該当するブロックをそれぞれ引用し、どこが食い違うのかを正確に説明してください。

出力例を示します。

The Court held that the District Court lacked personal jurisdiction over the petitioner. \ue200cite\ue202block5\ue201

補足:ウェブ検索など、OpenAI がホストするツールでは、本文中に引用が自動で挿入されます。ホスト型ツールを使う場合は、 ツールの概要、 ウェブ検索ガイド、 ファイル検索ガイドを参照してください。