PDF 批注(注释)转 AI 与 RAG:为 LLM 导出高亮
要把 PDF 批注(也叫注释)导出用于 AI 和 RAG 工作流,请把 PDF(或 XFDF/XML FDF)导入 pdfannotations.com,然后选择 AI Context Markdown——一种专为粘贴到 ChatGPT、Claude 或 Gemini 而设计的结构化格式——或 RAG JSON——一种可直接写入向量数据库的 schema 化数据。两种格式都完全在浏览器中运行,无需上传文件,并保留 LLM 或检索管线所需的全部元数据(页码、颜色、作者、日期、标签),让模型回答严格基于你的原始材料。
本指南会讲解两种导出格式、各自适用的场景,以及如何把输出接入 ChatGPT 对话、LangChain 检索管线或自建向量数据库。
为什么要让 LLM 处理 PDF 注释?
读完一份 PDF 是一回事,把高亮真正用起来又是另一回事。大多数知识工作者止步于“高亮了重点”,再也不会回头看。把注释交给 LLM 可以改变这一点:
- 综合提炼。 让 LLM 把 200 条高亮浓缩成 3 段摘要。
- 交叉比对。 问“这些高亮里哪些互相矛盾?”几秒钟就能得到答案。
- 起草内容。 把高亮作为文献综述、备忘录或邮件摘要的原始素材。
- 问答。 搭建 RAG 管线,让你用自然语言向高亮提问(“作者在第 12 页对建构效度说了什么?”)。
- 翻译与语气改写。 让 LLM 把学术性高亮改写成面向非专业读者的通俗解释。
问题在于 LLM 需要结构。把 200 条原始高亮粘到聊天框里,会得到一团无结构文本,模型很难准确引用。这就是 pdfannotations.com 提供两种专用导出格式的原因。
格式一:AI Context Markdown
AI Context Markdown 是一种专为粘贴到聊天对话而设计的结构化 Markdown 格式。其结构为 LLM 提供了明确的锚点,便于在回答时引用,从而大幅提升引用准确度并降低幻觉。
结构
# 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 管线
格式二:RAG-Ready JSON
RAG JSON 是一种用于写入向量数据库的结构化 JSON 数据。每条注释会变成一条独立记录,带有自己的文本和元数据,这样 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——高亮内容,可直接用于 embeddingmetadata——结构化对象,包含:source——源 PDF/XFDF 的文件名page——高亮所在页码type——highlight、note、underline、strikeout或freetextauthor——在 Acrobat 中创建注释的人date——注释创建的 ISO 8601 时间戳color——标记的 RGB 十六进制值tags——标签数组(颜色类别 + 任意自定义标签)note——你自己的批注文本(若有)
这种结构正是 Pinecone、Weaviate、Chroma、Qdrant、pgvector 等向量数据库期望的标准格式:一个用于 embedding 的 text 字段,加上一个用于检索时过滤的 metadata 字段。
如何把 RAG JSON 写入向量数据库
具体代码取决于你的技术栈,但模式到处都一样:
- 对每个
text字段做 embedding,使用你偏好的 embedding 模型(OpenAItext-embedding-3-small、Cohere、Voyage,或通过 sentence-transformers 加载的本地模型)。 - 把向量存入向量数据库,并将
metadata对象作为可过滤字段一并写入。 - 查询时,把用户问题做 embedding,检索 top-k 最相近的高亮,作为 context 传给 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高亮调出来”) - 你要在注释之上构建生产级问答系统或聊天机器人
- 你想把高亮与其他知识源(网页、内部文档、代码)合并到同一检索索引中
粘贴到 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 高亮,按页码结构化。请生成一个可直接粘贴到 Google Sheets 的表格,列包括:Page、Highlight、My Note、Tags。”
提升 LLM 输出质量的小技巧
- 始终要求引用页码。 由于 AI Context 格式把页码嵌在标题里,提示“为每条说法引用页码”能给模型明确锚点并降低幻觉。
- 把标签当过滤器用。 用“只考虑标记为
#limitation的高亮”来让模型聚焦于注释子集。 - 提供你自己的笔记。
### My Note字段是你的解读。如果你希望模型推理为什么你高亮了某段,明确要求它参考你的笔记。 - 大体积导出要切分。 如果你有 500+ 条高亮,把导出拆成多个文件(每个源文档一个),在不同对话里分别处理。这样每次对话更聚焦,避免上下文窗口溢出。
真实场景用例
学术文献综述
一位博士生读了 50 篇教育测量方向的论文,把每篇的高亮导出为 AI Context Markdown。他把 50 篇全部粘贴到一个 Claude 对话里,问:“在这 50 篇论文中,建构效度研究被引用最多的三个局限是什么?每个局限由哪些作者提出?”
Claude 返回带页码引用的综合分析,学生直接把它粘到论文的文献综述部分。同一位学生把同样的高亮导出为 RAG JSON,写入 Pinecone 索引,并搭建了一个 Slack 机器人,回答实验室同事“论文 X 关于 Y 说了什么?”的问题。
法律合同分析
一位律师审查一份 200 页的并购协议,把每条赔偿条款标红、每个终止触发条款标黄。他导出为 AI Context Markdown,问 ChatGPT:“列出所有金额上限低于 100 万美元的赔偿条款,附页码。”结构化格式让 ChatGPT 能准确引用页码,律师据此起草 redline。
对于持续进行的案件,同样这些高亮进入 RAG JSON 管线,写入事务所内部的 Qdrant 实例。律师助理可以问“第 7.3 节对存续期是怎么规定的?”并检索到具体高亮及其页码。
技术文档知识库
一个工程团队在迁移遗留系统时,把 30 份架构 PDF 的高亮导出为 RAG JSON。每条高亮变成 Chroma 索引中的一个向量。当新工程师问“认证流程在哪里文档化?”时,检索管线返回相关高亮、页码、源文件名以及高亮作者的笔记——而无需任何人记得答案在哪份 PDF 里。
同一个团队用 AI Context Markdown 生成周报:把这周新增的高亮粘贴给 Claude,要一份单页简报,再发到团队 Slack。
在 AI Context 和 RAG JSON 之间做选择
| 问题 | AI Context Markdown | RAG JSON |
|---|---|---|
| 一次性聊天分析? | ✅ | — |
| 生产级问答系统? | — | ✅ |
| 无需代码、无需配置? | ✅ | — |
| 跨文档检索? | — | ✅ |
| 查询时按元数据过滤? | 有限 | ✅ |
| 适配任意 LLM? | ✅ | ✅(需检索层) |
| 对聊天友好、token 高效? | ✅ | — |
| 可扩展到数千条高亮? | — | ✅ |
一个合理的经验法则:探索阶段先用 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 和 Claude 3.5 Sonnet 都支持 128K–200K tokens,大约相当于 50–100 页密集高亮。更大的集合要么拆成多个对话,要么升级到 RAG JSON 管线。
导出会保留我的批注文本吗?
会。AI Context Markdown 和 RAG JSON 都包含你的批注(便签)文本——前者在 ### My Note 字段,后者在 metadata.note 字段。
相关指南
想了解更多?请查看这些相关指南:
- PDF 转 Markdown 最佳实践 - 适用于任意 PDF 源、产出对 LLM 友好 Markdown 的干净转换模式
- 如何从 Adobe Acrobat 导出 XFDF 批注(注释) - 从 Acrobat 取出 XFDF 作为 AI 导出的输入
- 什么是 XFDF?PDF 注释 XML 格式详解 - 深入解析 XFDF 文件格式及其 XML 结构
- XFDF 转 Obsidian:把 Adobe PDF 注释转为 Markdown - 把 AI 导出与 Obsidian 知识库搭配,构建完整知识管线
- 把 PDF 高亮导出到 Obsidian:完整工作流指南 - 适用于任意 PDF 源的完整 Obsidian 工作流