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

Claude 가이드 #12: 검색 결과(Search Results) — AI 답변에 출처를 자동으로 붙이는 법

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

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


1. 한 줄 요약
#

내가 준 자료에서 Claude가 답을 가져올 때, “이 문장은 어디서 왔어요” 하고 출처를 자동으로 달아줍니다.


2. 무엇이고 왜 좋을까
#

도서관 사서가 답을 알려주면서 “이 책 12쪽에 나와 있어요” 하고 짚어주는 것과 같습니다.

AI에게 회사 매뉴얼이나 강의 자료를 잔뜩 던져주고 질문하면, AI는 그럴듯한 답을 줍니다. 그런데 “정말 그렇게 쓰여 있나?“를 확인하려면 우리가 다시 자료를 뒤져야 하죠. 검색 결과(Search Results) 기능은 이 번거로움을 없애줍니다. AI가 답변의 각 문장 옆에 “이건 A 문서에서, 이건 B 문서에서"라고 꼬리표를 달아주거든요.

핵심 수치 하나만 기억하세요. citations(인용) 옵션을 enabled: true 한 줄만 켜면 활성화됩니다. 추가로 결제할 것도, 복잡한 설정도 없습니다.


3. 이런 상황에서 써요
#

상황 1: 학생 — 강의 자료 여러 개를 한꺼번에 질문하기
#

이번 학기 강의 PDF가 5개나 됩니다. “중간고사 범위에서 ‘시장 실패’가 어디에 나왔지?“라고 물어보면, AI는 보통 그냥 정리해서 답을 줍니다. 검색 결과 기능을 켜두면 다릅니다. “3주차 강의 노트의 이 문단에서 가져왔습니다” 하고 출처를 정확히 짚어줘요. 시험 공부할 때 원문을 다시 확인하기가 훨씬 쉬워집니다.

상황 2: 직장인 — 회사 매뉴얼에 답하는 챗봇
#

신입사원이 자주 묻는 질문이 있죠. “휴가는 어떻게 신청하나요?”, “출장비 한도가 얼마였죠?” 인사 규정 PDF를 AI에게 미리 보여주고 챗봇처럼 답하게 할 수 있습니다. 이때 검색 결과 기능을 쓰면 답변마다 “출처: 인사 규정 12조"가 자동으로 붙어요. 직원이 “그게 진짜 규정이야?“라고 의심하지 않아도 되고, 잘못 답해도 어디서 잘못됐는지 바로 추적이 됩니다.

상황 3: 일반인 — 책 한 권 요약하면서 질문하기
#

두꺼운 자기계발서를 다 못 읽었는데, “이 책에서 ‘습관 형성에 21일이 걸린다’고 했나?“가 궁금합니다. 책의 본문을 AI에게 미리 넣어두고 자유롭게 물어볼 수 있어요. 검색 결과 기능을 켜면 AI가 “5장에서 이렇게 적혀 있습니다” 하고 그 구절까지 그대로 보여줍니다. 책 두께에 짓눌리지 않고도, 내가 궁금한 부분만 콕 짚어서 확인하는 셈이죠.


4. 가볍게 시작하기
#

💻 개발 경험 있으신가요? 아래 코드는 Python 기준 가장 짧은 예시입니다. 비개발자라면 “이런 식으로 자료에 꼬리표를 다는구나” 정도로만 봐주셔도 충분합니다. 직접 안 돌려봐도 됩니다.

import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=1024,
    messages=[{
        "role": "user",
        "content": [
            {
                "type": "search_result",
                "source": "https://company.com/manual",   # 어디서 온 자료인지
                "title": "사내 인사 규정",                  # 자료 이름
                "content": [
                    {"type": "text", "text": "연차는 입사 1년 후부터 15일이 부여됩니다."}
                ],
                "citations": {"enabled": True}  # ← 이 한 줄이 출처 인용을 켜는 스위치
            },
            {"type": "text", "text": "신입사원 연차는 며칠인가요?"}
        ]
    }]
)
print(response)

여기서 핵심은 두 가지뿐입니다. 첫째, 자료를 그냥 텍스트로 던지지 않고 search_result 라는 봉투에 담아 보낸다는 점. 둘째, citations: enabled: true 라는 스위치를 켰다는 점. 이 두 가지만 챙기면 답변에 자동으로 “출처: 사내 인사 규정"이 따라붙습니다.


5. 흔한 오해와 함정
#

⚠️ 함정 1: “그냥 자료를 붙여넣으면 안 되나요?”
#

“챗봇 입력창에 매뉴얼을 통째로 복사해서 붙여 넣고 질문하면 똑같지 않나?” 싶으실 수 있어요. 답은 비슷하게 받을 수 있지만, 출처가 자동으로 붙지 않습니다. 검색 결과 기능은 자료를 봉투에 담아 “source(출처)“와 “title(제목)“이라는 이름표를 같이 보내는 방식이라서 가능한 일입니다. 출처가 필요 없는 가벼운 대화라면 굳이 쓸 필요는 없어요.

⚠️ 함정 2: “켰는데 왜 출처가 안 나오죠?”
#

검색 결과를 여러 개 보낼 때, 일부는 켜고 일부는 꺼두면 오류가 납니다. 한 번의 대화에 보내는 자료들은 전부 켜거나 전부 꺼야 해요. 마치 “예 / 아니오"는 받지만 “어떤 건 예, 어떤 건 모르겠음"은 받지 않는 셈입니다. 자료 5개 보낸다면 5개 모두 enabled: true로 통일하세요.

⚠️ 함정 3: “긴 자료 하나를 통째로 넣었더니 출처가 뭉뚱그려져요”
#

자료 한 덩어리를 30쪽 분량 통문장으로 넣으면, 어디 한 줄만 인용해도 30쪽 전체가 “출처"로 따라붙습니다. AI는 내가 끊어놓은 단위(블록)만큼만 출처를 끊어 보여줄 수 있거든요. 매뉴얼이라면 “1장 — 휴가”, “2장 — 출장비"처럼 의미 단위로 잘라서 content 안에 여러 개로 넣어주세요. 그러면 답변에 딱 해당 부분만 출처로 표시됩니다.


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

🎯 여기까지 읽으신 분 환영합니다. 이 섹션은 좀 더 깔끔한 활용을 알고 싶은 분을 위한 보너스입니다. 본문만 읽으셔도 충분히 이해하신 거예요.

자료를 의미 단위로 끊어서 넣는 방법, 그리고 같은 자료를 자주 쓸 때 캐시(잠깐 기억해두기)까지 같이 켜는 예시입니다.

{
    "type": "search_result",
    "source": "https://company.com/manual",
    "title": "사내 인사 규정",
    "content": [
        {"type": "text", "text": "1장. 연차: 입사 1년 후 15일 부여."},      # 블록 1
        {"type": "text", "text": "2장. 출장비: 1박 기준 한도 10만 원."},     # 블록 2
        {"type": "text", "text": "3장. 재택근무: 주 2회까지 가능."}          # 블록 3
    ],
    "citations": {"enabled": True},
    "cache_control": {"type": "ephemeral"}   # 같은 자료를 또 보낼 때 캐시로 절약
}

이렇게 블록을 나눠두면 “연차 며칠?“이라는 질문에는 1장만, “출장비 한도?“에는 2장만 정확하게 출처로 잡힙니다. 두루뭉술하게 “전체 매뉴얼에서 가져왔어요"가 아니라 “1장에서 가져왔어요"로 좁혀지는 거죠. cache_control은 자매 시리즈 #(프롬프트 캐싱) 글에서 자세히 다룹니다.


7. 한 마디
#

처음 들으면 “RAG(Retrieval-Augmented Generation, 검색 증강 생성)니, 인용이니 복잡하네…” 하실 수 있어요. 그런데 결국 핵심은 enabled: true 한 줄입니다. 자료를 봉투에 담고 스위치를 켜는 것, 그게 전부예요.

혹시 막히신다면 함정 1~3 중 하나일 가능성이 큽니다. 출처가 안 나오면 스위치를 안 켰거나(함정 1), 자료마다 들쭉날쭉하게 켰거나(함정 2), 자료를 너무 큰 덩어리로 넣었거나(함정 3). 이 세 가지만 점검하면 거의 다 풀립니다.

다음 시리즈에서는 **#13 — 거절 응답 스트리밍(Streaming Refusals)**을 다룹니다. AI가 답변을 거절하는 순간을 어떻게 부드럽게 안내할지에 관한 이야기예요. 천천히, 한 편씩 같이 가요.


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

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