PDF 주석을 AI와 RAG로: LLM용 하이라이트 내보내기
PDF 주석을 AI와 RAG 워크플로로 내보내려면, pdfannotations.com 에 PDF(또는 XFDF/XML FDF)를 불러온 뒤 AI Context Markdown(ChatGPT·Claude·Gemini에 붙여 넣기 위해 설계된 구조화 포맷)이나 RAG JSON(벡터 데이터베이스에 적재할 수 있는 스키마 대응 JSON 데이터) 중 하나를 선택하세요. 두 포맷은 모두 Pro에 포함되며, 변환은 서버 업로드 없이 브라우저에서 진행됩니다. 사용 가능한 메타데이터(페이지·색상·작성자·날짜·태그)를 보존해 모델이 원본 자료를 근거로 답하도록 돕습니다.
이 가이드는 두 내보내기 포맷을 안내하고, 각각을 언제 쓸지 설명하며, 출력을 ChatGPT 대화·LangChain 검색 파이프라인·자체 벡터 데이터베이스에 연결하는 방법을 보여줍니다.
LLM에 PDF 주석을 먹이는 이유는?
PDF를 읽는 것과 하이라이트를 활용하는 것은 다릅니다. 많은 연구자·학생·문서 작업 전문가가 “중요한 부분에 하이라이트를 했다”에서 멈추고 다시 돌아보지 않습니다. 주석을 LLM에 넘기면 활용 방식이 달라집니다:
- 종합. 200개의 하이라이트를 3단 요약으로 압축해 달라고 LLM에 요청.
- 교차 참조. “이 하이라이트 중 서로 모순되는 것은?”이라 묻고 몇 초 만에 답을 받음.
- 초안 작성. 하이라이트를 문헌 리뷰·메모·이메일 요약의 원자재로 사용.
- 질문 응답. RAG 파이프라인을 구축해 하이라이트에 자연어로 질문(“12페이지에서 저자는 구성타당도에 대해 뭐라고 했지?”).
- 번역과 어조 변환. 학술적 하이라이트를 비전문가를 위한 평이한 설명으로 다시 쓰게 LLM에 요청.
문제는 LLM이 구조를 필요로 한다는 점입니다. 200개의 날것 하이라이트를 채팅창에 붙여 넣으면 구조 없는 덩어리가 돼 모델이 정확히 인용하기 어렵습니다. 그래서 pdfannotations.com 은 목적별 내보내기 포맷을 두 가지 제공합니다.
포맷 1: AI Context Markdown
AI Context Markdown 은 채팅 대화에 붙여 넣기 위해 설계된 구조화 Markdown 포맷입니다. 페이지·출처·주석을 구분하는 앵커를 제공해 모델이 원문 위치를 참조하기 쉽고, 근거 없는 답변을 줄이는 데 도움이 됩니다.
구조
# Source: research-paper.pdf
Author: Jane Doe
Pages: 32
Exported: 2026-07-22
## Page 12
### Highlight
> The most reliable predictor of long-term success is consistent practice over time.
### Context
Discussion of the role of deliberate practice in skill acquisition.
### My Note
This connects to the Ericsson framework I read last week.
### Tags
#key-concept #practice #skill-acquisition
## Page 15
### Highlight
> Sample size was limited to 30 participants, which constrains generalizability.
### Context
Limitations section.
### My Note
Flag for follow-up — need to check if a replication exists.
### Tags
#limitation #methodology
계층은 다음과 같습니다:
# Source— 소스 파일명을 표시하는 최상위 제목. 작성자·페이지 수·내보내기 날짜를 메타데이터로 표시## Page N— 주석이 있는 페이지별로 한 섹션### Highlight— PDF에서 하이라이트한 원문### Context— 하이라이트가 문서 내 어디에 나오는지(섹션, 단락 위치)를 한 줄로 서술### My Note— 그 하이라이트에 붙인 당신의 코멘트나 메모### Tags— 색상 카테고리와 당신이 부여한 임의의 태그
이 구조가 중요한 이유는 LLM에 다음을 제공하기 때문입니다:
- 앵커. 각 하이라이트는
### Highlight제목으로 감싸져 모델이 인용할 수 있습니다(“12페이지의 하이라이트에 따르면……”). - 출처. 페이지 번호와 소스 파일명 덕분에 모델은 주장이 무엇인지뿐 아니라 어디서 왔는지도 알려줄 수 있습니다.
- 당신의 해석.
### My Note필드는 당신 자신의 주석이라, 모델은 이를 통해 하이라이트의 어떤 점이 중요했는지 이해할 수 있습니다. - 필터 가능한 태그. 태그 덕분에 “
#limitation태그가 붙은 하이라이트만 요약해”라고 요청하면 집중된 답을 얻을 수 있습니다.
AI Context Markdown 사용법
- pdfannotations.com 에서 AI Context 포맷으로 주석을 내보냅니다.
- 생성된
.md파일을 텍스트 편집기로 열고 내용을 복사합니다. - ChatGPT·Claude·Gemini 의 새 채팅에 붙여 넣습니다.
- 앞에 프롬프트를 추가합니다: “다음은 한 논문에서 가져온 하이라이트를 페이지별로 구조화한 것입니다. 주요 주장을 세 문장으로 요약한 뒤,
#key-concept태그를 붙인 하이라이트 세 개를 나열하세요.”
이 포맷은 순수 Markdown이라 모든 모델이 동일하게 처리합니다. 특수 플러그인도, API 호출도, 벡터 데이터베이스도 필요 없습니다.
AI Context Markdown 을 써야 할 때
- 단일 문서의 하이라이트에 대해 LLM과 일회성 대화를 원할 때
- 모델에게 특정 페이지와 태그를 인용하게 만들고 싶을 때
- 탐색적 분석 중이며 프롬프트를 반복해 다듬고 싶을 때
- 벡터 데이터베이스나 embedding 파이프라인을 구축하고 싶지 않을 때
포맷 2: RAG-Ready JSON
RAG JSON 은 벡터 데이터베이스 적재를 위해 설계된 구조화 JSON 데이터입니다. 각 주석은 자체 텍스트와 메타데이터를 가진 개별 레코드가 돼, embedding 파이프라인이 문서 전체를 한 덩어리로 다루지 않고 개별 하이라이트를 청크·embedding·검색할 수 있습니다.
구조
[
{
"text": "The most reliable predictor of long-term success is consistent practice over time.",
"metadata": {
"source": "research-paper.pdf",
"page": 12,
"type": "highlight",
"author": "Jane Doe",
"date": "2026-07-20T12:00:00Z",
"color": "#FFEB3B",
"tags": ["key-concept", "practice", "skill-acquisition"],
"note": "This connects to the Ericsson framework I read last week."
}
},
{
"text": "Sample size was limited to 30 participants, which constrains generalizability.",
"metadata": {
"source": "research-paper.pdf",
"page": 15,
"type": "highlight",
"author": "Jane Doe",
"date": "2026-07-20T12:10:00Z",
"color": "#F44336",
"tags": ["limitation", "methodology"],
"note": "Flag for follow-up — need to check if a replication exists."
}
}
]
각 레코드는 두 필드를 가집니다:
text— embedding 대상 하이라이트 본문metadata— 구조화 객체. 내용은:source— 소스 PDF/XFDF의 파일명page— 하이라이트가 있는 페이지 번호type—highlight·note·underline·strikeout·freetextauthor— Acrobat 에서 주석을 만든 사람date— 주석 생성의 ISO 8601 타임스탬프color— 마크업의 RGB 16진수 값tags— 태그 배열(색상 카테고리 + 임의의 커스텀 태그)note— 당신 자신의 코멘트 본문(있으면)
이 구조는 Pinecone·Weaviate·Chroma·Qdrant·pgvector 같은 벡터 데이터베이스가 기대하는 표준 포맷입니다. embedding 용 text 필드, 검색 시 필터용 metadata 필드.
RAG JSON 을 벡터 데이터베이스에 적재하는 방법
정확한 코드는 스택에 따라 다르지만, 패턴은 어디나 같습니다:
- 각
text필드를 embedding (OpenAItext-embedding-3-small, Cohere, Voyage, 또는 sentence-transformers 로 로컬 모델 등 선호하는 embedding 모델 사용). - embedding 을 벡터 데이터베이스에 저장.
metadata객체를 필터 가능 필드로 함께 저장. - 질의 시, 사용자의 질문을 embedding 하고 top-k 의 인접 하이라이트를 검색해 LLM 에 컨텍스트로 전달.
다음은 Python 으로 OpenAI 클라이언트와 일반 벡터 스토어를 쓴 최소 예입니다:
import json
import openai
client = openai.OpenAI()
with open("annotations_rag.json") as f:
records = json.load(f)
vectors = []
for record in records:
embedding = client.embeddings.create(
input=record["text"],
model="text-embedding-3-small"
).data[0].embedding
vectors.append({
"id": f"{record['metadata']['source']}-p{record['metadata']['page']}-{record['metadata']['type']}",
"values": embedding,
"metadata": record["metadata"],
"text": record["text"]
})
# Upsert `vectors` into your vector store of choice
# (Pinecone, Weaviate, Chroma, Qdrant, pgvector, etc.)
적재가 끝나면 자연어로 질문하고, 그 질문에 답하는 구체적 하이라이트를 검색할 수 있습니다. 모든 결과에 완전한 출처(소스·페이지·작성자·색상·태그)가 붙습니다.
RAG JSON 을 써야 할 때
- 문서가 많고 한 번에 모두 횡단 검색하고 싶을 때
- 메타데이터로 하이라이트를 검색하고 싶을 때(“Jane Doe 의 논문에서
#limitation인 것만 보여줘”) - 주석 위에 프로덕션급 Q&A 시스템이나 챗봇을 구축할 때
- 하이라이트를 다른 지식 소스(웹페이지·사내 문서·코드)와 단일 검색 인덱스로 합치고 싶을 때
ChatGPT·Claude·Gemini 에 붙여 넣기
벡터 데이터베이스 구축 없이 임시 분석을 하려면, AI Context Markdown 이 가장 빠른 길입니다. 주요 모델별 사용법을 소개합니다.
ChatGPT
- ChatGPT 에서 새 대화를 시작합니다(긴 컨텍스트용으로 GPT-4o 이상 권장).
- AI Context Markdown 내용을 첫 메시지로 붙여 넣습니다.
- 프롬프트를 추가합니다: “다음은 한 논문의 하이라이트를 페이지별로 구조화한 것입니다. 주요 주장을 요약한 뒤,
#key-concept태그를 붙인 하이라이트 세 개를 페이지 번호와 함께 나열하세요.”
ChatGPT 는 Markdown 을 네이티브로 처리해 ### Highlight 제목과 > 인용 블록이 올바르게 렌더링되며, 모델이 페이지를 정확히 인용할 수 있습니다.
Claude
Claude(특히 Claude 3.5 Sonnet 과 Claude 4)는 긴 문서의 구조적 추론에 특히 강합니다. AI Context Markdown 을 붙여 넣고 종합을 요청하세요:
“다음은 페이지별로 구조화한 논문의 하이라이트입니다. 가장 강한 주장 세 개와 가장 약한 주장 세 개를, 각각 페이지 번호를 인용해 찾아주세요.”
Claude 의 더 큰 컨텍스트 윈도우(200K tokens) 덕분에 한 대화에 여러 논문의 하이라이트를 붙여 넣을 수 있습니다.
Gemini
Gemini 은 Markdown 을 잘 다루고 Google Workspace 와 연동되어, LLM 의 출력을 Google Doc 이나 Sheet 으로 보내고 싶을 때 좋은 선택입니다. AI Context Markdown 을 붙여 넣고 다음처럼 프롬프트합니다:
“다음은 PDF 하이라이트를 페이지별로 구조화한 것입니다. Page·Highlight·My Note·Tags 열을 가진, Google Sheets 에 붙여 넣을 수 있는 표를 만들어주세요.”
LLM 출력을 개선하는 팁
- 항상 페이지 인용을 요구하세요. AI Context 포맷은 제목에 페이지 번호를 심어두므로, “각 주장에 페이지 번호를 인용해”라고 요청하면 모델에 명확한 앵커가 생겨 환각이 줄어듭니다.
- 태그를 필터로 쓰세요. “
#limitation태그가 붙은 하이라이트만 고려해”로 주석의 부분 집합에 집중시킵니다. - 자신의 노트도 제공하세요.
### My Note필드는 당신의 해석입니다. 모델이 왜 하이라이트했는지를 추론하게 하려면, 노트를 고려하라고 명시하세요. - 큰 내보내기는 분할하세요. 500개 이상의 하이라이트가 있으면, 내보내기를 여러 파일(소스 문서별 하나)로 나눠 각각 다른 대화에서 처리하세요. 각 대화가 집중도를 유지하고 컨텍스트 윈도우가 넘치는 것을 막습니다.
실제 사용 사례
학술 문헌 리뷰
교육 측정 분야 논문 50편을 읽는 박사과정 학생이 각각의 하이라이트를 AI Context Markdown 으로 내보냅니다. 50편 모두를 단일 Claude 대화에 붙여 넣고 묻습니다: “이 50편 논문 전체에서, 구성타당도 연구의 한계로 가장 많이 인용되는 세 가지는 무엇이며, 각각을 어떤 저자가 제기했나요?”
Claude 가 페이지 인용과 함께 종합을 반환하면, 학생은 이를 학위논문의 문헌 리뷰 절에 바로 붙여 넣습니다. 같은 학생은 같은 하이라이트를 RAG JSON 으로 내보내 Pinecone 인덱스에 적재하고, 연구실 동료의 “논문 X 가 Y 에 대해 뭐라고 했지?” 질문에 답하는 Slack 봇을 만듭니다.
법률 계약 분석
200페이지짜리 합병 계약서를 검토하는 변호사가 모든 보상 조항을 빨강, 모든 종료 트리거를 노랑으로 하이라이트합니다. AI Context Markdown 으로 내보내 ChatGPT 에게 “상한이 100만 달러 미만인 보상 조항을 모두 페이지 번호와 함께 나열해”라고 요청합니다. 구조화 포맷 덕에 ChatGPT 가 페이지를 정확히 인용할 수 있고, 변호사는 이를 redline 초안 작성에 사용합니다.
진행 중인 사건에서는 같은 하이라이트를 RAG JSON 파이프라인으로 보내 사내 Qdrant 인스턴스에 적재합니다. 파리리걸이 “제7.3절은 존속 기간에 대해 뭐라고 하나요?”라고 물으면 해당 하이라이트와 페이지 번호를 검색할 수 있습니다.
기술 문서 지식 베이스
레거시 시스템을 마이그레이션하는 엔지니어링 팀이 30개의 아키텍처 PDF 에서 하이라이트를 RAG JSON 으로 내보냅니다. 각 하이라이트는 Chroma 인덱스의 한 벡터가 됩니다. 새 엔지니어가 “인증 흐름은 어디에 문서화돼 있나요?”라고 묻으면, 검색 파이프라인이 해당 하이라이트를 페이지 번호·소스 파일명·원 하이라이트 작성자의 노트와 함께 반환합니다. 누구도 답이 어느 PDF 에 있는지 기억할 필요가 없습니다.
같은 팀은 AI Context Markdown 으로 주간 요약을 만듭니다. 그 주의 새 하이라이트를 Claude 에 붙여 넣고 1페이지 브리프를 요청해 팀 Slack 에 보냅니다.
AI Context 와 RAG JSON 중 선택하기
| 질문 | AI Context Markdown | RAG JSON |
|---|---|---|
| 일회성 채팅 분석? | ✅ | — |
| 프로덕션 Q&A 시스템? | — | ✅ |
| 코드도 설정도 없이? | ✅ | — |
| 문서 횡단 검색? | — | ✅ |
| 질의 시 메타데이터 필터? | 제한적 | ✅ |
| 임의의 LLM 에서 동작? | ✅ | ✅ (검색 레이어와 함께) |
| 채팅에 토큰 효율적? | ✅ | — |
| 수천 건의 하이라이트로 확장? | — | ✅ |
합리적인 경험칙: 탐색에는 AI Context Markdown 으로 시작하고, 스케일이 필요해지면 RAG JSON 으로 옮기세요. 대부분의 사용자는 채팅 기반 워크플로로 시작해 실제로 어떤 질문을 던지는지 발견한 뒤, 질문이 반복적이 되면 RAG 파이프라인을 구축합니다.
AI 내보내기에서 브라우저 로컬 처리가 중요한 이유
LLM 제공자는 기본적으로 대화를 기록합니다. 기밀 연구·법률 계약·독점 문서를 ChatGPT 에 붙여 넣으면, 그 내용이 보존되어 모델 학습에 쓰일 수 있습니다(계정 등급과 설정에 따라 다름). 주석 자체가 문서에서 가장 민감한 부분입니다. 어떤 구절을 중요하게 봤는지, 무엇에 동의하지 않았는지, 무엇을 후속으로 표시했는지 드러냅니다.
브라우저 로컬 처리 워크플로는 이 우려를 완전히 없애지는 않습니다(하이라이트를 LLM 에 붙여 넣는 일은 남습니다). 다만 다음과 같은 통제를 유지할 수 있습니다:
- 변환 단계가 로컬에서 일어납니다. 주석 추출 중 PDF 나 XFDF 가 서버에 업로드되지 않습니다.
- 붙여 넣을 내용을 통제합니다. AI Context Markdown 을 보내기 전에 검토하고 민감한 부분을 가릴 수 있습니다.
- RAG JSON 파이프라인은 당신 것입니다. 셀프 호스트 벡터 데이터베이스(Qdrant·Chroma·pgvector)에 적재하면 데이터가 인프라를 떠나지 않습니다.
변환 자체는 pdfannotations.com 이 브라우저에서만 실행합니다. 페이지가 로드된 뒤 인터넷을 끊어도 내보내기는 계속 동작합니다.
자주 묻는 질문
AI Context Markdown 과 일반 Markdown 의 차이는?
AI Context Markdown 은 특정 제목 계층(# Source → ## Page → ### Highlight / ### Context / ### My Note / ### Tags)을 써서 LLM 에 명시적인 인용 앵커를 줍니다. 일반 Markdown 내보내기는 더 평평하고, 노트 앱에서 사람이 읽기에 최적화되어 LLM 섭취용은 아닙니다.
벡터 데이터베이스 없이 RAG JSON 을 쓸 수 있나요?
네. 단, 검색 이점은 잃습니다. RAG JSON 을 Python 스크립트로 불러와 메타데이터로 레코드를 필터(예: page == 12)하고, 일치하는 하이라이트만 LLM 에 건네면 됩니다. 간단한 RAG 파이프라인이지만 작은 주석 집합에는 충분합니다.
RAG JSON 에는 어떤 embedding 모델을 써야 하나요?
영어 하이라이트라면 OpenAI 의 text-embedding-3-small 이 좋은 기본값입니다. 저렴·빠르고 대부분의 검색 작업에 충분히 정확합니다. 다언어 콘텐츠에는 Cohere 의 embed-multilingual-v3 나 로컬 sentence-transformers 모델을 고려하세요. 영역 특화 어휘가 있는 법률·기술 콘텐츠에는 Voyage AI 의 voyage-law-2 나 voyage-code-2 가 범용 모델보다 더 나을 때가 많습니다.
단일 LLM 대화에 몇 개의 하이라이트까지 붙여 넣을 수 있나요?
모델의 컨텍스트 윈도우에 따라 다릅니다. GPT-4o 는 128K, Claude 3.5 Sonnet 은 200K 토큰을 지원하며, 실제 처리 가능한 분량은 주석 밀도에 따라 달라집니다. 더 큰 집합은 대화를 나누거나 RAG JSON 파이프라인으로 옮기세요.
내보낼 때 코멘트 본문도 보존되나요?
네. AI Context Markdown 과 RAG JSON 모두 코멘트(메모) 본문을 포함합니다. 전자는 ### My Note 필드, 후자는 metadata.note 필드입니다.
관련 가이드
더 알고 싶나요? 관련 가이드를 확인해 보세요:
- PDF 주석을 Markdown 으로 내보내기 - 표준 주석이 있는 대부분의 PDF 에서 LLM 친화적인 Markdown 을 만드는 변환 패턴
- Adobe Acrobat 에서 XFDF 주석을 내보내는 방법 - AI 내보내기 입력으로 Acrobat 에서 XFDF 꺼내기
- XFDF 란? PDF 주석 XML 포맷 해설 - XFDF 파일 포맷과 그 XML 구조를 깊이 파고들기
- XFDF 를 Obsidian 으로: Adobe PDF 주석을 Markdown 로 변환 - AI 내보내기와 Obsidian 볼트를 결합해 완전한 지식 파이프라인 구축
- PDF 하이라이트를 Obsidian 으로 내보내기: 완전 워크플로 가이드 - 표준 주석이 있는 대부분의 PDF 소스에 대한 Obsidian 워크플로