A document review workflow with an AI agent can follow the same steps every round: list what is open, reply in threads, resolve, carry the comments to the next draft, and produce a clean copy. The GroupDocs.Annotation.Mcp server exposes each step as a tool, so an LLM in Claude, Cursor or GitHub Copilot can run the round locally while a person approves the outcome:

List the annotations in output/contract_annotated.pdf. Which ones have no replies?

The step‑by‑step version with config and troubleshooting is in the documentation: How to run a document review cycle with an AI agent.

ทำไมรอบการตรวจสอบจึงเบี่ยงเบนเมื่อไม่มีลำดับที่กำหนดไว้?

รอบการตรวจสอบมักไม่ใช่แค่ “เพิ่มคอมเมนต์” เพียงอย่างเดียว แต่เป็น: สิ่งที่ยังค้างอยู่, ผู้ที่ยกขึ้น, คำตอบ, การแก้ไข, และสำเนาที่สะอาดสำหรับผู้รับต่อไป เมื่อคนทำด้วยตนเอง ลำดับขั้นตอนอาจเปลี่ยนแปลง, คำตอบอาจไม่มีลายเซ็น, และร่างต่อไปอาจสูญเสียคอมเมนต์จากรอบก่อนหน้า

เอเจนต์ที่ทำตามลำดับเดียวกันทุกครั้งจะขจัดความแปรปรวนนี้ได้ อีกทั้งยังทิ้งร่องรอยไว้ภายในเอกสารแทนที่จะเป็นบันทึกการสนทนา ซึ่งเป็นที่ที่การตรวจสอบจะมองหา

ขั้นตอนการทำงาน ทีละขั้นตอน

แต่ละขั้นตอนมีพรอมต์หนึ่งและเครื่องมือหนึ่ง

  1. ค้นหาสิ่งที่ยังค้างอยู่
    พรอมต์: “List the annotations in output/contract_annotated.pdf. Which ones have no replies?” เอเจนต์เรียก get_annotations ซึ่งจะคืนข้อมูลแต่ละ annotation พร้อม id, ชนิด, ข้อความ, หน้า, กล่องขอบ, ผู้ใช้และการตอบกลับ คอมเมนต์ที่ยังไม่ได้ตอบคืออาร์เรย์ replies ว่างเปล่า ดังนั้นเอเจนต์จะกรองรายการที่มีอยู่แล้ว
  2. ตอบในเธรด
    พรอมต์: “Reply to Maria’s comment that finance approved the terms on 12 March. Sign it as Alex.” เอเจนต์เรียก add_reply พร้อม annotationId, comment และ userName ชื่อผู้ใช้โดยปริยายคือ mcp-user จึงต้องระบุชื่อจริง
  3. แก้ไขให้เสร็จ
    เลือกแนวทางและระบุในพรอมต์: ตอบและปล่อยเธรดเป็นบันทึก, ลบ annotation ด้วย remove_annotations, หรือแก้ข้อความด้วย update_annotation โดยเริ่มต้นด้วย [RESOLVED]
  4. ย้ายรอบไปยังร่างต่อไป
    พรอมต์: “Export the annotations from the reviewed copy, then import them into contract-v3.pdf.” เอเจนต์เรียก export_annotations ซึ่งเขียนไฟล์ XML แล้วตามด้วย import_annotations
  5. ส่งสำเนาที่สะอาดกลับ
    พรอมต์: “Remove all annotations and give me a clean copy for the counterparty.” remove_annotations โดยไม่มี ids จะลบทุก annotation แล้วสร้างไฟล์ใหม่

เอเจนต์ตัดสินใจอะไรและเอนจินทำอะไร?

การตัดสินใจหรือการกระทำ เอเจนต์ เอนจิน
คอมเมนต์ใดต้องการคำตอบ อ่านผลลัพธ์จาก get_annotations แล้วกรอง คืน annotation ทั้งหมดพร้อม id, ผู้เขียนและการตอบกลับ
คำตอบควรพูดอะไร ร่างตามคำสั่งของคุณ เก็บไว้ภายใต้ userName ที่คุณระบุ
แนวทางการแก้ไขใดใช้ ปฏิบัติตามกฎในพรอมต์ของคุณ ทำการแก้หรือการลบตามที่ร้องขอ
รอบเสร็จหรือยัง รายงานจำนวน; ให้คนตรวจสอบยืนยัน บันทึกผลการเปลี่ยนแปลงแต่ละอย่างกลับไปยัง storage

เอนจินจะไม่ตัดสินใจว่าอะไรถือว่า “resolved” โมเดล annotation ไม่มีฟิลด์ resolved; การแก้ไขเป็นแนวทางที่คุณกำหนดและระบุในพรอมต์

คนทำงานอยู่ในลูปที่ไหน?

สองจุด: ก่อนขั้นตอนที่ 5 ให้เอเจนต์บอกจำนวน annotation ที่กำลังจะลบและรอคำตอบจากคุณ การลบ annotation ทั้งหมดเป็นการเรียกเดียวใน workflow ที่ไม่มีการ undo ก่อนที่ข้อมูลจะออกนอกทีม ให้ตรวจสอบคำตอบที่เอเจนต์ร่างไว้ Annotation มาจากคนอื่น จึงควรถือว่าเป็นเนื้อหาที่ต้องสรุป ไม่ใช่คำสั่งให้เอเจนต์ทำตาม

ตัวอย่างเซสชัน (ย่อ)

นี่คือภาพจำลองที่สร้างจากพฤติกรรมที่ถูกบันทึกของเครื่องมือ ไม่ใช่ภาพหน้าจอที่จับไว้

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 image พร้อมโฟลเดอร์เอกสารที่เมานท์และโฟลเดอร์ output ที่ต่างจากโฟลเดอร์ storage:

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 review that lands in the document, not in the chat log. หน้า hub มีการลงทะเบียนสำหรับ Claude Desktop, Claude Code, VS Code with GitHub Copilot, Cursor, Windsurf และไคลเอนต์อื่น ๆ

ขีดจำกัดที่เป็นจริง

  • โหมดประเมินผล – หากไม่มีไลเซนส์ จะมีตราประทับ trial ปรากฏที่ด้านบนของทุกหน้า ซึ่งไม่ควรส่งให้คู่ค้า ตรวจสอบ get_license_status ก่อนทำการรีวิวอย่างเป็นทางการ
  • แต่ละเครื่องมือเขียนจะบันทึกผลลัพธ์กลับไปยัง storage – ดังนั้นรอบหนึ่งจะสร้างไฟล์หลายไฟล์ บอกเอเจนต์ให้ส่งต่อชื่อไฟล์จากผลลัพธ์ก่อนหน้าและให้อ่านไฟล์นั้นใหม่ด้วย get_annotations ก่อนแก้ไขใด ๆ เพราะ id เป็นของเอกสารที่เพิ่งอ่าน ตั้งค่า GROUPDOCS_MCP_OUTPUT_PATH ให้เป็นโฟลเดอร์ที่ไม่ใช่ storage ก่อนทำการเชื่อมต่อการแก้ไขบนไฟล์ที่สร้างขึ้น หากใช้ค่าเริ่มต้น (outputs อยู่ใน storage) การเขียนครั้งที่สองจะล้มเหลวด้วยข้อความ being used by another process; หากใช้โฟลเดอร์ output แยก add_reply, update_annotation และ remove_annotations บนไฟล์ที่ผลิตจะสำเร็จ
  • พิกัดจะคงอยู่ตามเดิม – ในร่างที่รีฟลว์ใหม่โน้ตที่นำเข้าอาจตกอยู่ใกล้ข้อความต้นฉบับ ไม่ได้อยู่บนข้อความนั้น ตรวจสอบตำแหน่งหลังการนำเข้า
  • Preview บน Linux – generate_pages_preview ปัจจุบันล้มเหลวสำหรับไฟล์ PDF บน Linux รวมถึง Docker image (TypeInitializationException สำหรับ Gdip: System.Drawing.Common ไม่รองรับบนแพลตฟอร์มที่ไม่ใช่ Windows); Word และเอกสาร Office อื่น ๆ แสดงผลได้, และบน Windows กับ dnx ทุกฟอร์แมตแสดงผลได้ เครื่องมืออื่น ๆ สิบบทที่เหลือไม่ได้รับผลกระทบ เครื่องมือรีวิวในโพสต์นี้ไม่ได้ใช้ตัวเรนเดอร์ preview

คำถามที่พบบ่อย

AI สามารถตอบคอมเมนต์ใน PDF ได้อัตโนมัติหรือไม่?
ใช่. เอเจนต์อ่านคอมเมนต์ด้วย get_annotations แล้วตอบด้วย add_reply ซึ่งรับ annotation id, ข้อความตอบและชื่อผู้เขียน

มีสถานะ “resolved” สำหรับคอมเมนต์หรือไม่?
ไม่มี. เครื่องมือไม่มีฟิลด์ resolved ดังนั้นคุณต้องกำหนดแนวทางเอง เช่น เก็บเธรดไว้, ลบ annotation, หรือใส่คำนำหน้า [RESOLVED]

ฉันสามารถเก็บคอมเมนต์ไว้เมื่อเอกสารถูกแก้ไขใหม่ได้หรือไม่?
ได้. ส่งออก annotation เป็น XML จากสำเนาที่รีวิวแล้วนำเข้าไปยังร่างใหม่ คู่เครื่องมือเดียวกันจะผสานสำเนาของผู้รีวิวสองคนเป็นหนึ่งไฟล์

ไปลึกกว่าเดิม