An AI agent can verify its own annotations by looking at the page it just marked up. With GroupDocs.Annotation.Mcp the LLM in Claude, Cursor or GitHub Copilot annotates a document, asks the server to render the page as a PNG with the annotation included, and judges whether the placement is right. The server does the work locally; the prompt is one sentence:

Highlight the payment clause on page 2, then show me the page.

The step‑by‑step version with config and troubleshooting is in the documentation: วิธีทำให้เอเจนต์ AI เห็นหน้าของเอกสารที่มันทำหมายเหตุ.

Note: generate_pages_preview currently fails for PDF files on Linux, including the Docker image; see Honest limits before you build on it.

ทำไมเอเจนต์ที่ไม่สามารถมองเห็นผลลัพธ์ของตนเองจึงรายงานความสำเร็จผิดพลาด?

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

ความแตกต่างอยู่ที่ “ฉันได้เพิ่มไฮไลท์แล้ว” กับ “ไฮไลท์อยู่บนข้อกำหนดการชำระเงิน” เพียงคำกล่าวที่สองที่มีประโยชน์, และต้องอาศัยการดูหน้าเพื่อยืนยัน

เอเจนต์ทำการเรนเดอร์ภาพหน้าที่มีหมายเหตุและตรวจสอบอย่างไร?

เครื่องมือทำวงจรสั้น ๆ ดังนี้

  1. add_annotation เขียนหมายเหตุและบันทึกเป็น contract_annotated.pdf ไฟล์ต้นฉบับไม่ถูกแก้ไข
  2. generate_pages_preview เรนเดอร์หน้าของไฟล์นั้นเป็นภาพ PNG พร้อมหมายเหตุที่ฝังอยู่และส่งกลับเป็นอินไลน์ ส่ง pages เป็น 2, 1-3 หรือ 1,3,5 หากไม่ระบุจะได้หน้า 1
  3. เอเจนต์ดูภาพ หากไฮไลท์ครอบข้อความผิด update_annotation จะเปลี่ยนข้อความหรือพิกัดและขนาดโดยไม่ต้องเริ่มใหม่

การพรีวิวจะคืนบล็อกข้อความหนึ่งบรรทัดอธิบายสิ่งที่เรนเดอร์, ตามด้วยบล็อกภาพหนึ่งบล็อกต่อหน้า การเรียกจะเรนเดอร์ได้สูงสุดห้าหน้า

ตั้งค่า GROUPDOCS_MCP_OUTPUT_PATH ให้ชี้ไปยังโฟลเดอร์อื่นนอกจากโฟลเดอร์จัดเก็บก่อนทำการแก้ไขต่อเนื่องบนไฟล์ที่สร้างขึ้น หากใช้ค่าเริ่มต้น (ผลลัพธ์จะอยู่ในโฟลเดอร์จัดเก็บ) การเขียนครั้งที่สองจะล้มเหลวด้วยข้อความ being used by another process; หากใช้โฟลเดอร์ผลลัพธ์แยก add_reply, update_annotation และ remove_annotations บนไฟล์ที่สร้างขึ้นทั้งหมดจะสำเร็จ สำหรับ Docker image ให้ใส่ -e GROUPDOCS_MCP_OUTPUT_PATH=/data/output. เซสชันด้านล่างสมมติว่าตั้งค่านี้แล้ว, ดังนั้นไฟล์ที่สร้างจะอยู่ภายใต้ output/.

เอเจนต์ต้องการอะไรบ้างเพื่อให้ทำงานได้?

  • ไคลเอนต์ที่แสดงเนื้อหาภาพ Claude Desktop มีอยู่แล้ว ไคลเอนต์เทอร์มินัลอาจรายงานแค่ภาพที่กลับมา เครื่องมือทำงานเช่นเดียวกัน; ภาพอาจไม่แสดงผล
  • โมเดลที่รับภาพได้ ภาพช่วยได้เฉพาะกับโมเดลที่รับอินพุตเป็นภาพ
  • ช่วงหน้าที่เล็ก การเรนเดอร์เป็นการเรียกที่ใช้ทรัพยากรมากที่สุดบนเซิร์ฟเวอร์ ขอเฉพาะหน้าที่ต้องการ, อย่าขอไฟล์ห้าสิบหน้า

การใช้พรีวิวในกรณีอื่น ๆ มีอะไรบ้าง?

  • ค้นหาตำแหน่งก่อนทำหมายเหตุ เรนเดอร์ก่อน, ให้โมเดลอ่านหน้า, แล้ววางหมายเหตุด้วยพิกัดที่โมเดลคำนวณได้แทนการเดา
  • ตรวจสอบการรวม หลังจาก import_annotations ไปยังร่างที่รี‑ฟลอว์, พรีวิวจะแสดงว่าบันทึกที่นำเข้ายังคงอยู่ที่ตำแหน่งที่ควรหรือไม่
  • แสดงผลลัพธ์ให้ผู้ตรวจสอบในแชท โดยไม่ต้องเปิดไฟล์
  • ตรวจจับแบจประเมินผล ในโหมดประเมินผล แบจทดลองจะถูกประทับบนทุกหน้า, ทำให้มองเห็นในภาพที่เรนเดอร์

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

นี่เป็นภาพจำลองที่สร้างจากพฤติกรรมที่อธิบายของเครื่องมือ, ไม่ใช่ภาพหน้าจอที่จับไว้. สมมติว่ามีแพลตฟอร์มที่พรีวิวเรนเดอร์ไฟล์ PDF ได้, เช่น Windows พร้อม dnx.

You:   Highlight the payment clause on page 2 of contract.pdf, then show me the page.

Agent: [calls add_annotation: type=highlight, page=2, x=100, y=250,
        text="Payment clause"]
       Added highlight annotation to contract.pdf on page 2.
       [calls generate_pages_preview on output/contract_annotated.pdf, pages="2"]
       (image: page 2, rendered with the highlight)
       The highlight sits on the "Delivery" paragraph, one block above the
       payment clause. Moving it down.
       [calls get_annotations, then update_annotation: y=330]
       Updated annotation 1 in output/contract_annotated.pdf.
       (The agent passes the saved file name from each result to the next call.)

การเรนเดอร์ทำงานที่ไหนและอะไรบ้างที่ออกจากเครื่อง?

เอนจินสร้าง PNG บนเครื่องของคุณเอง ภาพนั้นจึงถูกส่งต่อไปยังผู้ให้บริการโมเดลของคุณเช่นข้อความอื่น ๆ, ดังนั้นเมื่อใช้โมเดลที่โฮสต์บนคลาวด์ พรีวิวจะส่งรูปภาพของหน้านั้นออกไป สำหรับเอกสารที่เป็นความลับ ควรใช้โมเดลที่โฮสต์ไว้ในเครื่อง

Honest limits

  • พรีวิวบน Linux generate_pages_preview ปัจจุบันล้มเหลวสำหรับไฟล์ PDF บน Linux, รวมถึง Docker image (TypeInitializationException สำหรับ Gdip: System.Drawing.Common ไม่รองรับบนแพลตฟอร์มที่ไม่ใช่ Windows); ไฟล์ Word และเอกสาร Office อื่น ๆ เรนเดอร์ได้, และบน Windows กับ dnx ทุกฟอร์แมตเรนเดอร์ได้ เครื่องมืออีกสิบตัวที่เหลือไม่มีผลกระทบ
  • โหมดประเมินผล แบจทดลองจะถูกประทับที่ด้านบนของทุกหน้าในไฟล์ที่ทำหมายเหตุและในพรีวิว ตรวจสอบ get_license_status ก่อนพึ่งพาผลลัพธ์
  • การวางตำแหน่งโดยประมาณยังคงเป็นการประมาณ พรีวิวทำให้โมเดลสังเกตเห็นหมายเหตุที่วางผิด; มันไม่ได้ทำให้พิกัดที่เดามาเป็นค่าที่แม่นยำ
  • โมเดลที่รับเฉพาะข้อความไม่สามารถตรวจสอบได้ มันยังได้รับบล็อกข้อความ, แต่ไม่สามารถบอกคุณว่าหน้านั้นเป็นอย่างไร

FAQ

เอเจนต์ AI สามารถตรวจสอบว่าความคิดเห็นตกลงบนหน้าไหนได้หรือไม่? ได้, หากโมเดลรับภาพได้ เอเจนต์จะเรนเดอร์หน้าที่มีหมายเหตุด้วย generate_pages_preview แล้วตรวจสอบภาพ, จากนั้นปรับหมายเหตุด้วย update_annotation หากจำเป็น

ฉันจะพรีวิวหน้า PDF ที่ทำหมายเหตุสำหรับเอเจนต์อย่างไร? ขอหน้าโดยระบุเลข, ตัวอย่างเช่น “Render pages 1-3 of the annotated contract so I can check the comments”. เอเจนต์จะส่ง pages เป็น 1-3 และ PNG จะกลับมาเป็นอินไลน์

ทำไมพรีวิวถึงล้มเหลวในคอนเทนเนอร์ Docker ของฉัน? สำหรับไฟล์ PDF เครื่องมือล้มเหลวบน Linux, รวมถึง Docker image, ด้วยข้อผิดพลาดการเริ่มต้นประเภท Gdip. ไฟล์ Word และเอกสาร Office อื่น ๆ เรนเดอร์ได้, และบน Windows กับ dnx ทุกฟอร์แมตเรนเดอร์ได้

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