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

引用の書式設定

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

信頼できる引用は回答への信頼を高め、読者が回答の正確さを検証するのに役立ちます。このガイドでは、OpenAI のモデルになじみのあるパターンを使って、引用可能な資料を準備し、引用の書式を適切に設定するようモデルに指示するための実践的な方法を説明します。

概要

引用システムは、いくつもの要素で構成されます。引用できる対象を決め、資料をわかりやすく提示し、引用方法をモデルに指示して、ユーザーに表示する前に結果を検証します。

このガイドでは、モデルに直接関わる次の 5 つの主要な要素を扱います。

  1. 引用可能な単位:モデルが引用してよい対象を定義します。
  2. 資料の提示方法:ソース資料をわかりやすく、構造化された形式で提示します。
  3. 引用形式:モデルが引用に使う形式を厳密に指定します。
  4. プロンプトでの指示:いつ引用するか、どうすれば正しく引用できるかをモデルに伝えます。
  5. 引用の解析:後続の処理で使えるように、モデルの回答から引用を抽出します。

引用可能な単位の選択

プロンプトを書く前に、モデルが引用できる対象を明確に定義します。一般的には、次のような選択肢があります。

引用可能な単位適した用途短所
文書回答の出典となった文書を示すだけでよい場合。引用箇所をあまり細かく特定できません。主張を裏付ける文書を示すだけでよい場合は、従業員ハンドブック全体を引用します。
ブロック/チャンクシンプルさと、引用箇所を特定する細かさのバランスを取りたい場合。行単位での正確な特定はできません。該当する条項を含む契約書の特定の段落や、取得したチャンクを引用します。
行範囲根拠となるテキストを正確に示す必要がある場合。モデルにとって難易度が高くなります。ユーザーが該当箇所を正確に確認する必要がある場合は、L42-L47 の行範囲を引用します。

適切な引用単位には、次の特性が必要です。

  • 一貫性:実行を繰り返しても、同じソースには同じ ID を使います。
  • 確認のしやすさ:人が読んで、前後の文脈を理解できること
  • 適切なサイズ:意味を理解するのに十分な大きさがあり、かつ引用箇所を正確に示せる程度に小さいこと

ほとんどのシステムでは、ブロック単位の引用を標準とするのが最適です。通常、行単位の引用よりもモデルが扱いやすく、文書単位の引用よりもユーザーにとって有用です。

引用可能な資料の提示

モデルは、明確に提示されていない資料を引用できません。ツールから取得した資料でも、直接挿入した資料でも、次の要素を備えるようにしてください。

  • 安定したソース ID:file1block1 のような一貫した識別子
  • 読みやすいテキスト:書式がわかりやすく整えられたソース資料
  • メタデータ(任意):URL、タイムスタンプ、タイトルなどの補足情報

ソース ID とロケーターの違い:ソース ID は、 block1 のようにモデルが生成する安定した識別子です。ロケーターは、 lines L8-L13Paragraph 21 のように、UI 上でハイライト表示される正確な箇所を指します。一般に、モデルはソース ID を出力し、 システム側でロケーターを解決または表示するようにします。両者を早い段階で混在させると、 書式エラーが増える傾向があります。

引用形式の定義

モデルが生成する引用の形式を定義する必要があります。明確で一貫性があり、モデルが確実に再現しやすい形式を使ってください。

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

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

ツール呼び出しでは、turnN は個々の結果ごとではなく、 ツールを呼び出すたびに 1 ずつ増えます。同じ呼び出し内のソースは、 file0file1 などの接尾辞で区別されます。 回答を 1 回だけ返すシステムでも、すべての参照が turn0... になるのは、モデルが回答前にツールをちょうど 1 回だけ呼び出した場合に限られます。 複数回呼び出した場合は、代わりに turn0fileXturn1fileX などの参照が現れることがあります。

テンプレート

{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 を返すパターン
  • プロンプトに直接挿入するコンテキスト:引用可能なブロックをプロンプト内で直接提供するパターン

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

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

引用可能な単位の定義

ユースケースで求められる精度に応じて、引用可能な単位を選んでください。以下に、想定されるツール出力の例をいくつか示します。

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

プロンプトの指示の作成

## Citations

Results are returned by "tool_1". Each message from `tool_1` is called a "source" and identified by its reference ID, which is the first occurrence of `turn\\d+file\\d+` (for example, `turn0file0` or `turn2file1`). In this example, the string `turn0file0` would be the source reference ID.

Citations are references to `tool_1` sources. Citations may be used to refer to either a single source or multiple sources.

A citation to a single source must be written as:
{CITATION_START}cite{CITATION_DELIMITER}turn\d+file\d+{CITATION_STOP}

If line-level citations are supported, a citation to a specific line range must be written as:
{CITATION_START}cite{CITATION_DELIMITER}turn\d+file\d+{CITATION_DELIMITER}L\d+-L\d+{CITATION_STOP}

Citations to multiple sources must be written by emitting multiple citation markers, one for each supporting source.

You must NOT write reference IDs like `turn0file0` verbatim in the response text without putting them between {CITATION_START}...{CITATION_STOP}.

- Place citations at the end of the supported sentence, or inline if the sentence is long and contains multiple supported clauses.
- Citations must be placed after punctuation.
- Cite only retrieved sources that directly support the cited text.
- Never invent source IDs, line ranges, or block locators that were not returned by the tool.
- If multiple retrieved sources materially support a proposition, cite all of them.
- If the retrieved sources disagree, cite the conflicting sources and describe the disagreement accurately.

出力例:

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>
...

これにより、引用可能な単位が明確になり、モデルが参照しやすくなります。

プロンプトの指示の作成

## Citations

Supporting context is provided directly in the prompt as citable units. Each citable unit is identified by the value of its `id` attribute in the first occurrence of a tag such as `<BLOCK id="block5"> ... </BLOCK>`. In this example, `block5` would be the source reference ID.

Because this pattern does not invoke tools, there is no tool turn counter to increment. That means you do not need to use a `turn#` prefix for the citation marker. You can keep IDs in a `turn0block5` style if that matches the rest of your system, or use plain IDs like `block5` as shown here. The key requirement is that the citation marker matches the injected context ID exactly and consistently.

Citations are references to these provided citable units. Citations may be used to refer to either a single source or multiple sources.

A citation to a single source must be written as:
{CITATION_START}cite{CITATION_DELIMITER}<block_id>{CITATION_STOP}

For example:
{CITATION_START}cite{CITATION_DELIMITER}block5{CITATION_STOP}

Citations to multiple sources must be written by emitting multiple citation markers, one for each supporting block.

You must NOT write block IDs verbatim in the response text without putting them between {CITATION_START}...{CITATION_STOP}.

- Place citations at the end of the supported sentence, or inline if the sentence is long and contains multiple supported clauses.
- Citations must be placed after punctuation.
- Cite only blocks that appear in the provided context.
- Never invent new block IDs.
- Never cite outside knowledge or outside authorities.
- If multiple blocks materially support a proposition, cite all of them.
- If the provided blocks conflict, cite the conflicting blocks and describe the conflict accurately.

出力例:

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

注:ウェブ検索などの OpenAI がホストするツールは、 インライン引用を自動で付与します。代わりにホスト型ツールを使用する場合は、 ツールの概要ウェブ検索ガイドファイル検索ガイドを参照してください。