본문으로 건너뛰기
CodeBerry
  1. Claude 가이드/
#claude-guide · [Claude 가이드]

Claude 가이드 #9: Citations — AI 답변에 자동으로 출처 달기

Claude 가이드 - 이 글은 시리즈의 일부입니다.
부분 : 이 글

이 글은 Claude API 공식 문서의 Citations 페이지를 정리한 글입니다. 원문: https://platform.claude.com/docs/en/build-with-claude/citations 마지막 확인: 2026-05-19


1. 한 줄 요약
#

Claude가 답변할 때마다 “이 말은 어느 자료 몇 페이지에서 가져왔어요"라고 자동으로 꼬리표를 달아주는 기능입니다.


2. 무엇이고 왜 좋을까
#

서점에서 책을 사면 끝에 색인이 있죠. “사과 — 32쪽, 사과나무 — 105쪽” 하는 그 페이지 번호. Citations는 AI가 자기 답변에 알아서 색인을 달아주는 기능입니다. 답변 한 줄 한 줄에 “이건 ○○자료 ○쪽” 식의 출처가 자동으로 따라붙어요.

왜 좋을까요? AI는 가끔 그럴듯하지만 사실은 자료에 없는 말을 만들어내기도 합니다. 흔히 **환각(hallucination)**이라고 부르는 현상이에요. Citations를 켜두면 답변 문장마다 출처가 명시되니까, 출처가 없는 문장은 곧바로 의심해볼 수 있습니다. Anthropic 평가에 따르면 직접 시키는 방식보다 관련 있는 인용을 더 잘 찾아오는 것으로 나타났고, 인용된 문장 자체(cited_text)는 출력 토큰으로 계산되지 않아 비용도 절약됩니다.


3. 이런 상황에서 써요
#

상황 1: 학생 — 강의 PDF에서 답을 찾을 때
#

기말고사가 코앞인데, 교수님이 올려주신 강의 PDF가 300쪽이에요. Claude에게 “이 자료에서 ‘확증 편향’이 뭐라고 설명하나요?“라고 물어보면, 그냥 답만 주는 게 아니라 “47쪽: 확증 편향이란 자기 믿음에 맞는 정보만 받아들이는 경향이다” 같이 출처를 함께 보여줍니다. 시험 정답을 따로 펼쳐서 확인할 필요 없이, 페이지로 바로 가서 맞는지 확인하면 끝이에요.

상황 2: 직장인 — 회사 매뉴얼·정책에 질문할 때
#

회사 인사 정책 문서가 100쪽이 넘어요. 신입사원이 “출산 휴가는 며칠인가요?“라고 물어보면, AI가 “60일입니다"라고만 답하면 좀 불안하죠. 출처가 있다면 이야기가 달라집니다. Claude는 **“인사 규정 23쪽 — 출산 휴가는 90일이며, 그중 60일은 유급이다”**처럼 회사 공식 문서 어디에서 가져왔는지 짚어줍니다. 답을 그대로 메일에 인용해도 부담이 적어지고, 잘못된 정보로 직원에게 안내할 위험도 크게 줄어들어요.

상황 3: 일반인 — 두꺼운 책 한 권을 정리할 때
#

전자책으로 산 자기계발서 한 권을 정리하고 싶어요. 그냥 “요약해줘"라고 하면 어디서 나온 얘기인지 알 수 없는 일반론이 나오기 쉽습니다. 책 본문을 함께 주고 Citations를 켜두면, “스트레스 해소법으로 저자가 추천하는 세 가지는 → 본문 4장에서 ①산책, ②종이에 적기, ③잠 충분히 자기로 정리되어 있습니다” 식으로 본문 어디를 보고 한 말인지 함께 와요. 나중에 그 부분만 다시 펼쳐 읽기에도 좋습니다.


4. 가볍게 시작하기
#

💻 개발 경험이 있으신가요? 아래는 Python 기준 가장 짧은 예시입니다. 비개발자라면 “아, 이렇게 짧은 한 줄로 켜는 거구나” 정도로 보고 넘어가셔도 좋습니다.

import anthropic
client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=1024,
    messages=[{
        "role": "user",
        "content": [
            {
                "type": "document",
                "source": {
                    "type": "text",
                    "media_type": "text/plain",
                    "data": "잔디는 초록색입니다. 하늘은 파란색입니다.",
                },
                "title": "예시 문서",
                "citations": {"enabled": True},  # ← 이 한 줄이 출처 기능
            },
            {"type": "text", "text": "잔디와 하늘은 무슨 색인가요?"},
        ],
    }],
)
print(response)

핵심은 자료를 document라는 블록에 담아 보내고, 그 안에 "citations": {"enabled": True} 한 줄을 넣는 것입니다. 그러면 답변이 여러 조각으로 나뉘어 돌아와요. 어떤 조각은 그냥 문장이고, 어떤 조각에는 cited_text(인용된 원문), document_title(어느 자료인지), 위치 정보(글자 위치/페이지 번호)가 함께 붙어 있습니다. 우리는 이걸 화면에 보기 좋게 풀어주기만 하면 끝이에요.


5. 흔한 오해와 함정
#

⚠️ 함정 1: “켜기만 하면 무조건 정확하겠죠?”
#

Citations는 “AI가 자료 어디를 보고 한 말인지” 알려주는 기능이지, **“그 말이 옳은지”**를 판정하는 기능이 아닙니다. 즉, 자료 자체가 틀렸거나 오래된 정보라면 출처는 정확해도 답은 틀릴 수 있어요. 출처는 의심을 줄여주는 도구이지, 진실 검증기는 아니라는 점을 꼭 기억해주세요.

⚠️ 함정 2: “어, 그런데 왜 출처가 안 보이지?”
#

자료 일부에만 Citations를 켜고 일부는 끄면 동작하지 않습니다. 공식 문서에 따르면 한 번의 요청 안에서는 모든 자료에 켜거나, 모두 끄거나 둘 중 하나여야 해요. 또 하나, 스캔본 PDF(글자가 아닌 이미지로 된 PDF)는 본문 글자를 뽑아내지 못해 출처를 달 수 없습니다. 가능하면 글자가 살아 있는 PDF나 텍스트 파일을 쓰는 게 안전합니다.

⚠️ 함정 3: “JSON으로 깔끔하게 받고 싶은데 안 되네요?”
#

Citations는 구조화 출력(Structured Outputs) 기능과 함께 쓸 수 없습니다. 둘 다 켜면 오류가 나요. Citations는 답변 사이사이에 출처 조각을 끼워 넣는 방식이라, JSON 같은 엄격한 형식과 충돌하기 때문입니다. “출처를 받을지, 깔끔한 JSON을 받을지” 둘 중 하나를 골라야 합니다. 보통은 출처 쪽이 훨씬 도움이 돼요.


6. 한 단계 더 (관심 있는 분만)
#

🎯 여기까지 오신 분 환영합니다. 이 섹션은 좀 더 깊이 알고 싶으신 분을 위한 보너스입니다. 본문만 읽으셔도 충분합니다.

자료가 길어지면(예: 회사 매뉴얼 100쪽) 매번 전체를 다시 보내기 부담스럽죠. 이때는 #1 가이드에서 다뤘던 프롬프트 캐싱과 함께 쓰는 게 좋습니다. 자료 블록 안에 cache_control만 추가하면, 같은 자료는 잠깐 기억해두고 다음 질문부터는 훨씬 빠르고 싸게 처리됩니다.

response = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=1024,
    messages=[{
        "role": "user",
        "content": [
            {
                "type": "document",
                "source": {
                    "type": "text",
                    "media_type": "text/plain",
                    "data": "(여기에 긴 매뉴얼 본문)",
                },
                "citations": {"enabled": True},          # 출처 켜기
                "cache_control": {"type": "ephemeral"},  # 잠깐 기억해두기
            },
            {"type": "text", "text": "출산 휴가 정책이 어떻게 되나요?"},
        ],
    }],
)

또 하나 알아두면 좋은 점은 자료 종류에 따라 출처 단위가 다르다는 것입니다.

자료 종류 출처가 가리키는 단위 어디에 좋을까
일반 텍스트 문장 단위 (글자 위치) 짧은 자료, 산문
PDF 문장 단위 (페이지 번호) 보고서, 책
Custom content 내가 정한 덩어리 회의록, 표, 항목별 자료

회의록처럼 “발언자 한 명당 한 덩어리"로 인용받고 싶다면 Custom content 방식이 잘 맞습니다.


7. 한 마디
#

Citations는 “AI 답변을 어디까지 믿어야 할까?” 하는 막연한 불안을 한 줄 옵션으로 줄여주는 기능입니다. 처음엔 설정값이 좀 복잡해 보여도, 사실은 자료에 "citations": {"enabled": True} 한 줄 추가하는 것뿐이에요. 출처가 안 보이거나 오류가 난다면 함정 1~3 중 하나일 가능성이 큽니다 — 자료를 일부에만 켰는지, 스캔본 PDF인지, 구조화 출력과 같이 켰는지 점검해보세요.

다음 가이드에서는 Streaming — 답변을 한 글자씩 흘려보내며 받기를 다룰 예정입니다. ChatGPT처럼 글자가 또르륵 흘러나오는 그 효과, 어떻게 만드는지 천천히 풀어드릴게요.


Claude API 공식 문서를 한국어로 풀어쓴 시리즈입니다. 원문 정확성이 가장 우선, 의역과 친근함은 그 위에서.

— 키스 드림

성경재
작성자
성경재
홈랩, 셀프호스팅, AI/ML, 데이터 분석에 관심이 많습니다.
Claude 가이드 - 이 글은 시리즈의 일부입니다.
부분 : 이 글