使用 AI 代理的文件審閱工作流程可以在每一輪遵循相同的步驟:列出未解決的項目、在討論串中回覆、解決問題、將評論帶入下一個草稿,並產生乾淨的副本。GroupDocs.Annotation.Mcp 伺服器將每個步驟以工具形式公開,讓 Claude、Cursor 或 GitHub Copilot 中的 LLM 能在本機執行此輪審閱,同時由人員批准結果:
列出 output/contract_annotated.pdf 中的註釋。哪些沒有回覆?
為什麼審閱輪次會在沒有固定順序的情況下漂移?
一輪審閱很少只是「新增評論」。它包含:仍未解決的項目、提出者、答案、解決方式,以及給下一位讀者的乾淨副本。當人手操作時,順序會變化、回覆未簽名,下一個草稿也會遺失前一次的評論。
每次都遵循相同順序的代理可以消除這種變異。它同時將痕跡保留在文件內,而非聊天紀錄,這正是稽核會檢查的地方。
工作流程,逐步說明
每個步驟都有一個提示詞和一個工具。
- 找出未解決的項目。 提示:「列出 output/contract_annotated.pdf 中的註釋。哪些沒有回覆?」 代理呼叫
get_annotations,該指令會回傳每筆註釋的id、類型、訊息、頁碼、邊界框、使用者與回覆。若replies陣列為空即代表未回覆,代理會在已取得的清單中過濾出這些項目。 - 在討論串中回覆。 提示:「回覆 Maria 的評論,說明財務在 3 月 12 日已批准條款。以 Alex 簽名。」 代理呼叫
add_reply,傳入annotationId、comment與userName。若未指定使用者名稱,預設為mcp-user,因此請提供真實姓名。 - 解決已完成的項目。 選擇一套慣例並在提示中說明:保留討論串作為紀錄、使用
remove_annotations移除註釋,或以update_annotation編輯訊息並在開頭加上[RESOLVED]。 - 將此輪帶入下一個草稿。 提示:「從已審閱的副本匯出註釋,然後匯入至 contract-v3.pdf。」 代理先呼叫
export_annotations產生 XML 檔案,接著呼叫import_annotations。 - 回傳乾淨的副本。 提示:「移除所有註釋,並提供給對方的乾淨副本。」 呼叫
remove_annotations(不帶ids)即可清除所有註釋,產生新檔案。
代理決定什麼,引擎執行什麼?
| 決策或動作 | 代理 | 引擎 |
|---|---|---|
| 哪些評論需要回覆 | 讀取 get_annotations 結果並進行過濾 |
返回每個註釋的 id、作者與回覆 |
| 回覆內容 | 根據您的指示草擬 | 以您提供的 userName 儲存 |
| 適用哪種解決慣例 | 遵循您提示中的規則 | 執行所要求的編輯或移除 |
| 此輪是否完成 | 報告計數;由人員批准 | 將每項變更的結果儲存回存儲 |
引擎永遠不會自行判斷何為「已解決」。註釋模型本身沒有已解決旗標,解決方式完全由您在提示中定義。
人在迴圈中的角色是什麼?
有兩個關鍵點。於第 5 步之前,請代理先說明即將移除的註釋數量,並等待您的確認。全部移除註釋是工作流程中唯一一次無法復原的呼叫。任何資訊外流前,請先閱讀代理草擬的回覆。註釋文字來源於其他人,應將其視為需要摘要的內容,而非讓代理直接執行的指令。
範例會話(節錄)
這是一個根據工具文件化行為所構建的示意圖,並非截圖。
You: List the annotations in output/contract_annotated.pdf. Which ones have no replies?
Agent: [calls get_annotations on output/contract_annotated.pdf]
Found 4 annotations. Two have no replies:
- id 2, page 2, Maria: "Confirm the payment terms with finance."
- id 4, page 5, Maria: "Delivery date conflicts with Schedule B."
You: Reply to the first one that finance approved the terms on 12 March.
Sign it as Alex.
Agent: [calls add_reply: annotationId=2, userName="Alex",
comment="Finance approved the terms on 12 March."]
Added reply to annotation 2 in output/contract_annotated.pdf.
(The agent uses the saved file name in the next call.)
如何為 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、VS Code 搭配 GitHub Copilot、Cursor、Windsurf 以及其他客戶端的註冊資訊。
誠實的限制
- Evaluation mode(評估模式)。 若未取得授權,系統會在每頁頂部蓋上試用徽章,這不適合寄給對方。正式審閱前請先呼叫
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(包括 Docker 映像)上無法處理 PDF,會拋出TypeInitializationException(Gdip:System.Drawing.Common不支援非 Windows 平台);Word 及其他 Office 文件仍可渲染,且在 Windows 搭配dnx時所有格式皆可渲染。其餘十項工具不受影響,本篇文章所使用的審閱工具亦未使用預覽渲染器。
常見問題
AI 能自動回覆 PDF 中的評論嗎?
可以。代理會使用 get_annotations 讀取評論,然後透過 add_reply 回覆,add_reply 需要提供註釋 id、回覆文字以及作者名稱。
評論有已解決的狀態嗎?
沒有。工具本身沒有已解決旗標,您必須自行決定慣例,例如保留討論串、移除註釋或在訊息前加上 [RESOLVED]。
文件修訂時,我能保留評論嗎?
可以。從已審閱的副本匯出 XML 格式的註釋,然後匯入至新草稿。相同的兩個工具可將兩位審閱者的副本合併為一個。
深入了解
- 文件,官方操作說明:文件審閱循環的 AI 代理執行方式
- 文件中心:GroupDocs.Annotation MCP 伺服器
- 從這裡開始:AI 審閱落於文件而非聊天紀錄
- 相關文章:使用 MCP 從文件集合中提取每條評論的 3 種方法
- 相關文章:展示代理的操作結果
- 本地部署與安全模型:AI 文件處理的 3 種本地部署架構,以及將檔案保留在內部網路的方案
- 問題討論:GroupDocs Annotation 論壇
- 原始碼:GitHub 上的 GroupDocs.Annotation.Mcp