For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
기본 탐색 메뉴
Theme

인용 형식

모델이 출처를 정확하게 인용하도록 하세요.

출처를 정확하게 인용하면 독자가 응답의 정확성을 직접 확인하고 내용을 신뢰할 수 있습니다. 이 가이드에서는 인용할 자료를 준비하는 방법과 OpenAI 모델에 익숙한 형식으로 출처를 인용하도록 지시하는 방법을 설명합니다.

개요

인용 시스템을 구성하려면 먼저 인용할 수 있는 자료를 정하고 모델에 그 자료를 명확하게 제시해야 합니다. 그런 다음 모델에 인용 방법을 알려 주고, 사용자에게 응답을 표시하기 전에 결과를 검증합니다.

이 가이드에서는 모델과 직접 관련된 다섯 가지 핵심 요소를 다룹니다.

  1. 인용 단위: 모델이 인용할 수 있는 단위를 정합니다.
  2. 자료 표현: 출처 자료를 명확하고 구조화된 형식으로 제시합니다.
  3. 인용 형식: 모델이 사용할 인용 형식을 정확히 지정합니다.
  4. 프롬프트 지침: 언제, 어떻게 출처를 인용해야 하는지 모델에 알려 줍니다.
  5. 인용 파싱: 후속 처리에 사용할 인용을 모델 응답에서 추출합니다.

인용 단위 선택하기

프롬프트를 작성하기 전에 모델이 어떤 단위로 자료를 인용할 수 있는지 명확히 정하세요. 일반적으로 다음과 같은 단위를 사용합니다.

인용 단위 적합한 상황 단점 예시
문서 답변의 출처가 어느 문서인지만 보여 주면 됩니다. 정확한 위치를 알기 어렵습니다. 어떤 문서가 주장의 근거인지 밝히는 것으로 충분하다면 직원 핸드북 전체를 인용합니다.
블록 / 청크 단순성과 정밀성의 균형이 중요합니다. 줄 단위로 위치를 특정할 수는 없습니다. 해당 조항이 포함된 계약서의 특정 단락이나 검색된 청크를 인용합니다.
줄 범위 근거가 되는 구절을 정확히 보여 줘야 합니다. 모델이 처리하기가 더 어렵습니다. 사용자가 정확한 구절을 확인해야 한다면 L42-L47에 해당하는 줄을 인용합니다.

인용 단위는 다음 조건을 충족하는 것이 좋습니다.

  • 일관성: 여러 번 실행해도 같은 출처에는 같은 ID가 유지되어야 합니다.
  • 확인 용이성: 사람이 내용을 읽고 앞뒤 맥락을 파악할 수 있어야 합니다.
  • 적절한 크기: 내용을 이해할 만큼 충분히 크면서도 근거를 정확히 짚을 만큼 작아야 합니다.

대부분의 시스템에서는 블록 단위 인용을 기본으로 사용하는 것이 좋습니다. 일반적으로 모델은 줄 단위보다 블록 단위로 인용하기가 쉽고, 사용자는 문서 전체를 인용할 때보다 근거를 찾기가 쉽습니다.

인용할 자료 표현하기

자료를 명확하게 제시하지 않으면 모델이 인용할 수 없습니다. 도구가 반환한 자료든 프롬프트에 직접 삽입한 자료든 다음 요소를 갖추도록 하세요.

  • 안정적인 출처 ID: file1이나 block1처럼 일관되게 사용하는 식별자입니다.
  • 읽기 쉬운 텍스트: 출처 자료를 읽기 쉬운 형식으로 정리합니다.
  • 메타데이터(선택 사항): URL, 타임스탬프, 제목 등 자료의 맥락을 알려 주는 정보입니다.

출처 ID와 위치 정보: 출처 ID는 모델이 생성하는 block1과 같은 안정적인 식별자입니다. 위치 정보는 UI에서 강조 표시할 정확한 부분을 가리킵니다. 예를 들면 lines L8-L13 또는 Paragraph 21입니다. 일반적으로 모델은 출처 ID를 출력하고, 시스템은 이 ID로 인용 위치를 찾거나 해당 부분을 화면에 표시합니다. 너무 이른 단계에서 둘을 혼용하면 형식 오류가 늘어나기 쉽습니다.

인용 형식 정의하기

모델이 생성할 인용 형식을 정하세요. 모델이 매번 정확하게 재현할 수 있도록 명시적이고 일관된 형식을 사용하세요.

아래 표는 권장 인용 형식과 마커를 보여 줍니다. 모델이 학습한 마커와 매우 유사하므로 이 마커들을 사용하는 것을 적극 권장합니다. 다른 마커 값을 선택하더라도 전체 인용 형식은 최대한 비슷하게 유지하세요.

구성 요소 역할 권장값
CITATION_START 인용 마커의 시작을 나타냅니다. \ue200
인용 유형 인용의 종류를 식별합니다. 지원되는 모든 출처에 cite를 사용하세요. cite
CITATION_DELIMITER 마커 안의 필드를 구분합니다. \ue202
출처 ID 인용한 단위를 식별합니다. turn#은 턴 번호이고 item#은 특정 파일, 블록 또는 URL을 가리킵니다. turn0file1, turn0block1, turn0url1
위치 정보(선택 사항) 인용 범위를 특정 구간으로 좁힙니다. L8-L13
CITATION_STOP 인용 마커의 끝을 나타냅니다. \ue201

도구를 호출하면 turnN의 번호는 개별 결과 수와 관계없이 호출 한 번당 1씩 증가합니다. 한 번의 호출에서 반환된 출처는 file0, file1 등의 접미사로 구분합니다. 응답을 하나만 생성하는 시스템에서도 모든 참조가 turn0… 형식이 되는 것은 모델이 답변하기 전에 도구를 정확히 한 번 호출한 경우뿐입니다. 여러 번 호출하면 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를 수정하세요.

예시

아래 예시는 일반적으로 쓰이는 두 가지 인용 방식을 보여 줍니다.

  • 도구로 검색한 컨텍스트: 도구가 인용할 자료와 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가 호스팅하는 도구는 본문에 인용을 자동으로 표시합니다. 호스팅 도구를 사용하려면 도구 개요, 웹 검색 가이드, 파일 검색 가이드를 참고하세요.