An LLM 只能检索到摄取步骤保留下来的内容,因此 RAG 流程的第一项工作是将 Word、PDF、Excel 和电子书文件转换为干净的 Markdown。使用 GroupDocs.Markdown.Mcp,AI 代理可以在本地完成此操作,支持 Claude Desktop、Claude Code、Cursor 或任何其他 MCP 客户端,文件永远不会离开你的机器:
将此文件夹中的所有 PDF 转换为 Markdown,图片保存为文件,并包含 front matter。
一步步的配置和故障排除指南请参见文档:如何使用 AI 代理将文档转换为 RAG 用的 Markdown
为什么大多数 RAG 流程会从错误的转换步骤开始?
通常的做法是把转换当作管道处理:把文件发送给最近的解析器,接受返回的任何文本,然后把精力放在嵌入上。这颠倒了重要性的顺序。分块器会依据标题进行切分,作为单元格值流出现的表格根本无法回答任何问题,而将语料库上传到第三方解析器则会泄露你未计划的内容。当检索效果不佳时,原因可能出在流程触及的第一个文件上。
本文主张进行三项纠正:在自己的机器上完成此步骤,有目的地选择输出选项,并验证结果而不是盲目信任。
云解析器是文档摄取的合适位置吗?
对于内部语料库,通常不是。摄取是唯一会看到你拥有的每个文档的阶段:政策、价目表、事后报告。一个接收所有文档的解析服务会看到整个档案库,而不是单个文件。
GroupDocs.Markdown.Mcp 使用 MCP stdio 传输。你的 AI 客户端将服务器作为子进程启动,数据路径为:代理 → 本地服务器 → 本地文件系统。服务器没有入站端口、外部端点,也没有遥测。只有代理在回复中写入的内容会传递给模型提供商。计量授权是唯一需要出站流量的情况:它报告使用情况,永不传输文档内容,授权文件可离线使用。
使用 Docker 启动:
docker run --rm -i -v $(pwd)/documents:/data \
ghcr.io/groupdocs-markdown/markdown-net-mcp:latest
或使用 .NET 10 SDK,dnx GroupDocs.Markdown.Mcp --yes。将 GROUPDOCS_MCP_STORAGE_PATH 指向存放语料库的文件夹。
哪个 GroupDocs 服务器负责转换为 Markdown:Markdown 还是 Conversion?
两者都能生成 Markdown,但它们解决的问题不同。
| 您需要 | 使用 |
|---|---|
| 保持结构的 Markdown,能够控制图片、风格、页面选择和 front matter | GroupDocs.Markdown.Mcp(此服务器) |
| 将 Markdown 作为众多目标之一,或在同一工作流中实现 DOCX → PDF → XLSX | GroupDocs.Conversion.Mcp,支持 100 多种格式的双向转换 |
如果 Markdown 是最终目标且质量至关重要,请选择专用引擎。如果你需要在多种格式之间转换且 Markdown 只是其中之一,请选择通用转换器;其 PDF 路径已在将 PDF 转换为适用于 LLM 的 Markdown 的 3 种方法(以及本地优势)中介绍。
为什么 Markdown 是 RAG 摄取的最佳格式?
标题会被保留,表格仍然是表格,列表仍然是列表。这些正是分块器和嵌入器处理的单元。服务器通过单一工具 convert_to_markdown 能转换 DOCX、DOC、RTF、ODT、XLSX、XLS、ODS、CSV、TSV、EPUB、MOBI、TXT、CHM 等 20 多种格式。Word 系列的源文件转换最为干净,因为其结构在文件中是显式的。电子表格会转换为 Markdown 表格。
索引时有三项选项需要关注:
| 选项 | 摄取设置 | 原因 |
|---|---|---|
images |
"file",或仅保留正文时使用 "skip" |
默认的 base64 会在块中插入多兆字节的 data URI |
frontMatter |
true |
将包含标题、作者、格式和页数的 YAML 作为块元数据,这样答案可以引用文档标题而不是文件名 |
flavor |
"github"(默认)或 "commonmark" |
与读取结果的解析器保持一致 |
示例会话(节选)
You: Before converting anything: what is the license status of the markdown server?
Agent: get_license_status -> mode: licensed, engine GroupDocs.Markdown 26.3, server 26.9.0.
You: Convert every PDF in this folder to Markdown, images as files, with front matter.
Agent: convert_to_markdown (images: "file", frontMatter: true) for each PDF.
Saved one .md per document, with extracted images alongside.
You: For each converted file, give me the source page count and the Markdown length.
Agent: get_document_info for each source, then the length of each saved .md.
One 300-page file produced only 4 KB of Markdown: likely a scan.
如何在建立索引前检查语料库?
将运行视为不可信,直到你检查完为止。以下提示可以捕获大多数错误:
对每个转换后的文件,告诉我源文件的页数以及生成的 Markdown 长度。
get_document_info 会返回 fileName、fileFormat、pageCount、title、author 和 isEncrypted,且不进行转换,这样代理就可以将页数与实际生成的内容进行对比。一个 300 页的手册只生成了 4 KB 的 Markdown,说明是扫描件或被截断的运行。
扫描的 PDF 是硬性限制。它们没有文本层,而此服务器也没有 OCR 步骤;请单独处理这些文件。
诚实的限制:评估上限
没有授权时,服务器以评估模式运行,仅处理前 3 页,并在每页加上评估水印。输出仍是有效的 Markdown,但不会报告其余页面被跳过,因此以这种方式构建的索引看似完整却几乎为空。请在每次摄取运行的第一步调用 get_license_status。
FAQ
什么是 RAG 摄取的最佳格式?
Markdown 是强有力的选择,因为分块器和嵌入器能够很好地处理标题、列表和表格。使用 images: "file" 和 frontMatter: true,可以避免块中出现 base64,并保留源文件的元数据。
我可以在不上传文档的情况下将 Word 转换为 LLM 使用的 Markdown 吗?
可以。GroupDocs.Markdown.Mcp 以本地进程方式运行,通过 stdio 与代理交互,代理会从你配置的文件夹读取文件。
它能将 PDF 转换为用于向量数据库的 Markdown 吗?
它会转换具有文本层的 PDF,保留标题、列表和表格(前提是源文件支持)。扫描的 PDF 没有可转换的文本,也没有 OCR 步骤。