使用 AI 代理的文档审阅工作流可以在每一轮中遵循相同的步骤:列出未完成的内容,在线程中回复,解决问题,将评论带入下一个草稿,并生成干净的副本。GroupDocs.Annotation.Mcp 服务器将每一步公开为工具,因此在 Claude、Cursor 或 GitHub Copilot 中的 LLM 可以在本地运行该轮次,而由人员批准结果:

列出 output/contract_annotated.pdf 中的批注。哪些没有回复?

带有配置和故障排除的逐步版本在文档中:如何使用 AI 代理运行文档审阅周期.

为什么审阅轮次在没有固定顺序的情况下会漂移?

审阅的一轮很少只是“添加评论”。它包括:仍未完成的事项、提出者、答案、解决方案以及供下一个受众使用的干净副本。当人们手动完成时,顺序会变化,回复会未签名,下一稿会丢失上一次的评论。

每次遵循相同顺序的代理可以消除这种差异。它还会在文档内部留下痕迹,而不是在聊天记录中,这正是审计会查看的地方。

工作流,逐步说明

每一步都有一个提示和一个工具。

  1. 查找未完成的内容。 提示:“列出 output/contract_annotated.pdf 中的批注。哪些没有回复?” 代理调用 get_annotations,该函数返回每个批注的 id、类型、消息、页码、边界框、用户和回复。未回答的评论是 replies 数组为空的,因此代理过滤它已经持有的列表。
  2. 在线程中回复。 提示:“回复 Maria 的评论,说明财务在 3 月 12 日已批准条款。以 Alex 的名义签名。” 代理调用 add_reply,传入 annotationId、comment 和 userName。名称默认是 mcp-user,因此请提供真实的名称。
  3. 解决已完成的事项。 在提示中选择一种约定并说明:回复后保留线程作为记录,使用 remove_annotations 删除批注,或使用 update_annotation 将消息前缀改为 [RESOLVED]。
  4. 将本轮带入下一个草稿。 提示:“导出已审阅副本中的批注,然后导入到 contract-v3.pdf。” 代理调用 export_annotations,该函数写入 XML 文件,然后调用 import_annotations。
  5. 交付干净的副本。 提示:“删除所有批注并给我一个供对方使用的干净副本。” 对 remove_annotations 不传 ids 参数即可清除所有批注并生成新文件。

代理决定什么,引擎执行什么?

决策或操作 代理 引擎
哪些评论需要答案 读取 get_annotations 的结果并进行过滤 返回每个批注的 id、作者和回复
回复内容是什么 根据你的指示起草回复 将回复存储在你提供的 userName 下
使用哪种解决约定 按提示中的规则执行 执行相应的编辑或删除操作
本轮是否完成 报告计数;由人工批准 将每次更改的结果保存回存储

引擎永远不会决定什么算作已解决。批注模型没有可设置的已解决标志;解决方式由你在提示中选择并命名。

人员在何处保持在循环中?

两个位置。步骤 5 之前,要求代理说明它即将删除的批注数量并等待你的确认。删除所有批注是工作流中唯一没有撤销的调用。在任何内容离开团队之前,先阅读代理草拟的回复。批注文本来自其他人,因此应将评论视为需要概括的内容,而不是让代理执行的指令。

示例会话(节选)

这是一段基于工具文档行为构建的示例说明,而非实际截图。

You:   列出 output/contract_annotated.pdf 中的批注。哪些没有回复?

Agent: [调用 get_annotations on output/contract_annotated.pdf]
       找到 4 条批注。两条没有回复:
       - id 2, page 2, Maria: "确认财务已批准付款条款。"
       - id 4, page 5, Maria: "交付日期与 Schedule B 冲突。"

You:   回复第一条,说明财务在 3 月 12 日已批准条款。
       以 Alex 的名义签名。

Agent: [调用 add_reply: annotationId=2, userName="Alex",
        comment="财务在 3 月 12 日已批准条款。"]
       已在 output/contract_annotated.pdf 中的批注 2 添加回复。
       (代理在下一次调用时使用已保存的文件名。)

如何为 Claude、Cursor 或 Copilot 运行服务器?

使用挂载了文档文件夹的 Docker 镜像运行,并指定一个与存储文件夹不同的输出文件夹:

docker run --rm -i -v $(pwd)/documents:/data \
  -e GROUPDOCS_MCP_OUTPUT_PATH=/data/output \
  ghcr.io/groupdocs-annotation/annotation-net-mcp:latest

相同的命令以及 dnx GroupDocs.Annotation.Mcp --yes 替代方案在AI 审阅落在文档中,而非聊天记录中有说明。中心页面提供了 Claude Desktop、Claude Code、带 GitHub Copilot 的 VS Code、Cursor、Windsurf 等客户端的注册信息。

诚实的限制

  • 评估模式。 未购买许可证时,试用徽章会印在每页顶部,这不适合发送给对方。在正式审阅前请检查 get_license_status。
  • 每个写入工具都会将结果保存回存储。 因此一轮会产生一系列文件。请指示代理将前一次结果的文件名向后传递,并在编辑前使用 get_annotations 重新读取该文件,因为 id 属于刚读取的文档。链式编辑前请将 GROUPDOCS_MCP_OUTPUT_PATH 设置为除存储文件夹之外的其他文件夹。使用默认设置(输出落在存储文件夹)时,第二次写入会因 being used by another process 而失败;使用单独的输出文件夹时,add_reply、update_annotation 和 remove_annotations 在生成的文件上均能成功执行。
  • 坐标会原样保留。 在重新排版的草稿中,导入的批注可能落在原始文本附近,而不是正上方。请在操作后检查位置。
  • Linux 上的预览。 generate_pages_preview 目前在 Linux 上的 PDF 文件会失败,包括 Docker 镜像(TypeInitializationException for Gdip:System.Drawing.Common 在非 Windows 平台上不受支持);Word 和其他 Office 文档可以渲染,在 Windows 上使用 dnx 时所有格式均可渲染。其余十个工具不受影响。本帖中的审阅工具并未使用预览渲染器。

常见问题

AI 能自动回复 PDF 中的评论吗? 能。代理使用 get_annotations 读取评论,并使用 add_reply 回复,后者接受批注 id、回复文本和作者名称。

评论有已解决状态吗? 没有。工具没有已解决标志,你需要自行约定,例如保留线程、删除批注或在消息前加上 [RESOLVED]。

文档修订时能保留评论吗? 能。将已审阅副本的批注导出为 XML,再导入到新草稿中。相同的两款工具可以将两个审阅者的副本合并为一个。

深入了解