AI 编程上下文爆满解决方案
我想把大量的pdf文字喂给像你这样的AI,但是我想用ai code工具,如claude code这样的工具,现在的问题就是这样的工具如果给它大量的文字,它的上下文一下子就爆满了,也就是如果把一个项目文件夹当做知识库,那么上下文一下子就满了,有什么好办法?
这确实是目前使用 AI 编程工具(如 Claude Code, Cursor, Windsurf 等)时最常见的一个痛点。把大量 PDF 直接当作“背景知识”扔进上下文,不仅会瞬间耗尽 Token 额度,还会导致 AI 的注意力分散,降低回答质量。
要解决这个问题,核心思路是 “从全量灌输转向按需检索”。也就是从 Long Context (长上下文) 转向 RAG (检索增强生成) 模式。
以下是几种针对不同场景的解决方案:
1. 预处理:PDF 转 Markdown(最基础但也最有效)
PDF 格式包含大量冗余的格式代码,对 Token 的消耗非常大且干扰 AI 理解。
-
做法: 不要直接喂 PDF。使用工具将 PDF 转换为干净的 Markdown 或纯文本。
-
工具推荐:
-
MinerU / Magic-PDF: 能够很好地处理复杂的 PDF 版面。
-
PyMuPDF4LLM: Python 库,能将 PDF 里的表格和文字较好地转为 Markdown。
-
效果: 同样的内容,Markdown 的 Token 消耗可能只有 PDF 的 50% 甚至更低,且 AI 理解更准确。
2. 核心方案:构建本地 RAG(检索库)
这是解决“知识库爆满”的标准工程解法。不要把整个文件夹“塞”进 AI 的脑子里,而是给 AI 一个“搜索引擎”。
- 原理:
- 把 PDF 切割成小块(Chunking)。
- 把这些小块存入向量数据库(Vector DB)。
- 当你在编写代码需要查询知识库时,工具只提取与你当前问题最相关的几段文字喂给 AI。
- 对于 Claude Code / Cursor 的具体操作:
- Cursor: 它自带
@Codebase或@Docs功能。你可以手动在 Cursor 设置里添加你的文档链接,或者让它索引本地文件夹。当你提问时,它会自动在后台做 RAG 检索,只把相关的片段放入上下文,而不是整个文件。 - Claude Code (命令行工具): 目前它更倾向于读取你显式指定的文件。你可以结合 MCP (Model Context Protocol) 来实现(见下文)。
3. 进阶方案:使用 MCP (Model Context Protocol)
既然你提到了 Claude,利用 MCP 是目前最优雅的解决方案。MCP 是 Anthropic 推出的一个标准,让 Claude 可以连接外部数据源。
- 怎么做?
- 你可以安装一个 "Filesystem MCP Server" 或 "Knowledge Base MCP Server"。
- 效果: 当你问 Claude Code “根据项目文档中的鉴权协议部分,帮我写个登录接口”时,Claude 不会把所有文档读一遍,而是会调用 MCP 工具去“搜索”文档中关于“鉴权”的段落,只读取那一部分。
- 优势: 无论你的 PDF 有多大(甚至几百兆),上下文占用始终保持在极低水平,因为它是“按需读取”。
4. “外脑”策略:双流工作法
如果你不想折腾技术配置,可以使用“外脑 + 编码器”的分离策略:
- 知识处理端 (外脑): 使用 NotebookLM (Google) 或 Kimi 等擅长长文本的工具。
- 把所有 PDF 丢给 NotebookLM。
- 提问: “帮我提取出关于 API 接口定义的 JSON 结构” 或 “总结项目中关于数据库设计的约束”。
- 编码执行端 (AI Code 工具):
- 把上一步提取出来的精简摘要或关键代码片段,复制给 Claude Code / Cursor。
总结建议
如果你是想在一个复杂的工程里长期依赖这些 PDF,我建议采用 方案 3 (MCP) 或 方案 2 (利用工具自带的索引功能)。
如果你会写 Python,我可以给你提供一个简单的脚本思路: 利用 llamaindex 快速把本地 PDF 文件夹变成一个可以被查询的接口,这样你的 AI 编程工具只需要向这个接口提问,而不用背负沉重的文档包袱。
你需要我为你展开讲讲关于 MCP 的配置,或者是那个 Python 脚本的写法吗?
主要我是想写一本教材,该教材需要大量的多本参考资料
原来你的目标是编写教材,这和写代码虽然有相似之处(都需要结构化),但对“参考资料”的依赖方式完全不同。写教材时,参考资料通常是用来“核对事实、提取概念、寻找案例”,而不是像代码库那样需要全量理解。
既然你希望利用 AI Code 工具(如 Claude Code, Cursor)的强大逻辑和生成能力,同时又要处理大量 PDF,这里有一套专门针对“写书”的工程化工作流建议:
核心思路:把“写书”当成“软件工程”来做
不要试图把几十本书一次性塞进去。你需要把教材编写过程解耦为三个步骤:大纲架构 -> 知识萃取 -> 内容生成。
方案一:利用“外挂知识库”辅助 Claude Code (最推荐技术型作者)
既然你喜欢用 AI Code 工具,说明你可能偏好 Markdown、Git 这种版本控制和纯文本的工作流。
工具组合: Claude Code (负责写) + NotebookLM / GPT-4o (负责读)
操作流程:
- 建立项目结构 (Git Repo):
在你的项目文件夹里,建立两个核心目录:
/references(存放那几十本 PDF,但不要让 AI 直接读取)/drafts(存放你正在写的 Markdown 章节)
- 第一步:确立大纲 (Skeleton)
先让 Claude Code 根据你的教学目标,生成一个极其详细的目录文件outline.md(精确到三级标题)。 - 第二步:按章节“萃取”素材 (The Extraction)
这是解决上下文爆满的关键。不要把书给 Claude Code,而是用专门擅长长文本的工具做“预处理”。
- 把你的 PDF 全部丢给 Google NotebookLM (目前免费且支持极长上下文,最适合做书本知识库)。
- Prompt 示例: “我正在写第一章《Python 基础语法》,请根据上传的参考资料,帮我整理出关于‘变量命名规则’和‘基本数据类型’的所有关键定义、易错点和经典教学案例。请输出为 Markdown 格式。”
- 第三步:投喂与生成 (Generation)
- 复制 NotebookLM 吐出来的这几千字“干货”。
- 回到 Claude Code,输入:
@context.md (刚才复制的内容) @outline.md。 - 指令: “基于提供的上下文素材,按照大纲编写第一章的内容。风格要求通俗易懂,适合中职学生阅读。”
优点: Claude Code 的上下文里永远只有“当前章节的素材”,极其纯净,生成质量最高。
方案二:本地 RAG 脚本流 (如果你愿意写一点 Python)
既然你是计算机专业老师,写个简单的 Python 脚本作为“中间件”是最高效的。我们可以写一个脚本,让 Claude Code 可以按需“查书”。
你的项目里可以包含一个 search.py:
- 预处理: 写个脚本用
PyMuPDF把/references里的 PDF 转成文本,并存入简单的向量库(如 ChromaDB,甚至简单的关键词搜索都可以)。 - 交互流:
- 你在 Claude Code 里不直接读 PDF。
- 你需要素材时,让 Claude Code 执行命令:
python search.py "数据库范式设计案例"。 - 脚本会返回相关的 5-10 个段落打印在终端里。
- Claude Code 自动读取终端输出,然后利用这些素材开始写书。
优点: 你赋予了 Claude Code 一个“图书馆管理员”,它想知道什么就去查,而不是把图书馆背在身上。
方案三:Obsidian + Smart Connections (最适合知识管理)
如果你希望有一个图形化界面来管理这本教材,而不是纯命令行。
- 工具: Obsidian (笔记软件) + Smart Connections 插件 (AI 插件)。
- 操作:
- 把 PDF 拖入 Obsidian 库。
- Smart Connections 会自动对所有 PDF 建立索引。
- 你在写某一页时,打开 AI 对话框,问:“关于‘网络拓扑结构’,参考资料里有哪些好的比喻或图解?”
- 它会列出参考书里的具体段落,你可以一键插入到正文中,然后再让 AI 润色。
总结建议
针对你要编写教材这个场景,直接用 AI Code 工具硬抗大量 PDF 是下策。
我建议的“黄金工作流”:
- 使用 NotebookLM 作为你的“超级助教”:负责阅读几十本参考书,根据你的指令,按章节吐出整理好的素材包。
- 使用 Claude Code / Cursor 作为你的“主笔编辑”:接收素材包,负责排版、润色、生成代码示例、调整语气,并管理最终的 Markdown 文件版本。
下一步:
你需要我帮你写一个简单的 Python 脚本(方案二),用来提取 PDF 指定关键词的内容吗?这样你就可以在 Claude Code 的命令行里直接调用了。

浙公网安备 33010602011771号