Automate งานเอกสารด้วย Vision AI: อ่าน PDF และใบเสร็จเข้า Workflow อัตโนมัติ

บทความนี้จะพาคุณสร้าง pipeline สำหรับอ่านเอกสารที่มีทั้งข้อความและภาพด้วย Vision AI แยกข้อมูลสำคัญ ตรวจสอบความถูกต้อง และส่งต่อเข้า Google Sheets, Slack หรือระบบหลังบ้านแบบอัตโนมัติ ทำตามได้เป็นขั้นตอนพร้อมตัวอย่างโครงสร้างข้อมูลและโค้ด

Automate งานเอกสารด้วย Vision AI: อ่าน PDF และใบเสร็จเข้า Workflow อัตโนมัติ

VisionAI, DocumentAutomation, PDF, Workflow, Multimodal

งานเอกสารอย่าง PDF ใบเสร็จ ใบกำกับภาษี หรือฟอร์มสแกน มักเป็นคอขวดของหลายทีม เพราะข้อมูลอยู่ในรูปแบบที่อ่านด้วยโปรแกรมได้ไม่สมบูรณ์ โดยเฉพาะเมื่อเอกสารมีทั้งข้อความ ตาราง ลายเซ็น หรือภาพประกอบ บทความนี้จะสอนสร้าง pipeline แบบ step-by-step สำหรับรับไฟล์เอกสาร แปลงเป็นข้อมูลที่ใช้งานต่อได้ด้วย multimodal model ตรวจสอบความถูกต้อง และส่งผลลัพธ์เข้า Google Sheets, Slack หรือระบบหลังบ้านอัตโนมัติ ก่อนเริ่มควรมีพื้นฐานเรื่อง API, JSON และการเขียนสคริปต์เบื้องต้นด้วย Python หรือ JavaScript

Step 1: ออกแบบ pipeline และกำหนดฟิลด์ที่ต้องดึงก่อน

ก่อนแตะเรื่องโมเดล ควรเริ่มจากการนิยามว่าเอกสารแต่ละประเภทต้องดึงอะไรบ้าง เพราะถ้าไม่กำหนด schema ให้ชัด ระบบจะดึงข้อมูลได้ไม่สม่ำเสมอ และตรวจสอบภายหลังได้ยาก

  • ระบุประเภทเอกสารที่ต้องรองรับ เช่น ใบเสร็จ, invoice, แบบฟอร์มสมัคร, เอกสาร KYC
  • กำหนดฟิลด์สำคัญ เช่น vendor_name, document_date, invoice_no, total_amount, tax_amount
  • ระบุ validation rule เช่น วันที่ต้องอยู่ในรูปแบบ YYYY-MM-DD, ยอดรวมต้องมากกว่าศูนย์, เลขเอกสารห้ามว่าง
  • กำหนดปลายทางของข้อมูล เช่น Google Sheets สำหรับทีมปฏิบัติการ, Slack สำหรับแจ้งเตือน, ERP หรือระบบหลังบ้านสำหรับบันทึกจริง
  • ตัวอย่าง schema ที่ควรมีตั้งแต่ต้น

    {
      "document_type": "receipt",
      "vendor_name": "ABC Store",
      "document_date": "2026-05-28",
      "invoice_no": "INV-2026-001",
      "subtotal": 1000.00,
      "tax_amount": 70.00,
      "total_amount": 1070.00,
      "currency": "THB",
      "confidence": 0.94
    }

    เหตุผลที่ต้องเริ่มจากขั้นนี้ คือโมเดลจะทำงานได้ดีขึ้นเมื่อรู้ว่าต้องตอบในโครงสร้างแบบใด และทีมพัฒนาจะเชื่อมต่อ workflow ถัดไปได้ง่ายกว่า

    Step 2: รับไฟล์เอกสารและเตรียมข้อมูลให้พร้อมสำหรับ Vision AI

    เอกสารจริงมักมาได้หลายแบบ เช่น PDF ที่เป็น text-based, PDF สแกนจากเครื่องถ่ายเอกสาร, หรือภาพจากมือถือ ดังนั้นขั้นเตรียมข้อมูลสำคัญมาก เพราะมีผลต่อความแม่นยำของการอ่าน

    แนวทางที่ควรทำมีดังนี้

  • ถ้าเป็น PDF หลายหน้า ให้แยกแต่ละหน้าออกมาก่อน
  • ถ้าเป็นไฟล์สแกน ควรปรับความคมชัด ครอปขอบ และหมุนภาพให้ตรง
  • ถ้าเอกสารมีหลายประเภท ให้ใส่ขั้นตอน classify เอกสารก่อน extract
  • เก็บ metadata เช่น ชื่อไฟล์, เวลารับเข้า, ผู้ส่ง, source system เพื่อใช้ audit ย้อนหลัง
  • ตัวอย่าง flow แบบง่าย

    Upload/Email/Drive -> Preprocess PDF/Image -> Vision AI Extract -> Validate -> Route to Sheets/Slack/Backend

    ถ้าเอกสารบางชุดมีข้อความชัดเจนอยู่แล้ว OCR อย่างเดียวอาจพอ แต่ถ้าเอกสารมีตราประทับ ตาราง หรือข้อความกระจัดกระจาย การใช้ multimodal model จะช่วยตีความบริบทของทั้งข้อความและภาพได้ดีกว่า

    Step 3: ใช้ multimodal model แยกฟิลด์สำคัญให้อยู่ในรูปแบบ JSON

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

    หลักการเขียน prompt ที่ดี

  • บอกบทบาทชัดเจนว่าเป็นระบบดึงข้อมูลเอกสาร
  • ระบุ schema ที่ต้องการให้ครบ
  • กำชับให้ตอบเป็น JSON เท่านั้น
  • ถ้าฟิลด์ไหนไม่พบ ให้คืนค่า null
  • ให้โมเดลระบุ confidence หรือเหตุผลสั้นๆ สำหรับฟิลด์ที่ไม่แน่ใจ
  • ตัวอย่าง prompt

    อ่านข้อความและภาพจากเอกสารนี้ แล้วดึงข้อมูลเป็น JSON ตาม schema ต่อไปนี้เท่านั้น:
    - document_type
    - vendor_name
    - document_date
    - invoice_no
    - subtotal
    - tax_amount
    - total_amount
    - currency
    - confidence
    
    กติกา:
    - ถ้าไม่พบค่า ให้ใช้ null
    - document_date ต้องเป็นรูปแบบ YYYY-MM-DD
    - จำนวนเงินต้องเป็นตัวเลข
    - ตอบกลับเป็น JSON อย่างเดียว

    แนวคิดสำคัญคือให้โมเดลทำหน้าที่ extract ข้อมูลเชิงโครงสร้าง ไม่ใช่สรุปเอกสารแบบทั่วไป วิธีนี้จะช่วยลดงานเขียน rule ที่ซับซ้อนสำหรับเอกสารหลายรูปแบบ

    Step 4: ตรวจสอบความถูกต้องก่อนส่งเข้า Workflow

    ต่อให้โมเดลแม่นยำ ก็ยังควรมี validation layer คั่นกลางเสมอ เพราะเอกสารการเงินและเอกสารธุรกิจมีความเสี่ยงด้านข้อมูลผิดสูง ขั้นนี้จะช่วยกันข้อมูลผิดไม่ให้ไหลเข้าระบบปลายทาง

    ตัวอย่าง rule ที่ใช้ได้จริง

  • ตรวจว่าฟิลด์บังคับ เช่น vendor_name และ total_amount ต้องไม่ว่าง
  • ตรวจรูปแบบวันที่และสกุลเงิน
  • ตรวจว่าผลรวม subtotal + tax_amount ใกล้เคียง total_amount
  • ถ้า confidence ต่ำกว่าค่าที่กำหนด เช่น 0.85 ให้ส่งเข้า human review
  • ตรวจ vendor ซ้ำกับฐานข้อมูลเดิมเพื่อกันชื่อผิดสะกด
  • ตัวอย่าง pseudo-code

    def validate(doc):
        errors = []
        if not doc.get("vendor_name"):
            errors.append("missing vendor_name")
        if not doc.get("total_amount") or doc["total_amount"] <= 0:
            errors.append("invalid total_amount")
        if doc.get("confidence", 0) < 0.85:
            errors.append("low confidence")
        return errors

    ถ้าพบข้อผิดพลาด ไม่ควรหยุดระบบทั้งหมดทันที แต่ควร route ไปยังคิวตรวจสอบ พร้อมแนบต้นฉบับและผล extraction เพื่อให้ทีมแก้ไขได้เร็ว

    Step 5: ส่งข้อมูลต่อเข้า Google Sheets, Slack และระบบหลังบ้าน

    เมื่อได้ข้อมูลที่ผ่าน validation แล้ว ขั้นสุดท้ายคือการเชื่อมต่อไปยังปลายทางที่ทีมใช้งานจริง โดยควรออกแบบให้เลือก route ตามสถานะของเอกสาร

    ตัวอย่างการใช้งาน

  • ส่งเข้า Google Sheets เพื่อให้ทีมบัญชีหรือ operation ตรวจสอบรายการประจำวัน
  • ส่งเข้า Slack เมื่อเจอเอกสารผิดปกติ เช่น ยอดเกิน threshold หรือ confidence ต่ำ
  • ส่งเข้า backend API เพื่อสร้าง record ในระบบ ERP, CRM หรือระบบอนุมัติภายใน
  • ตัวอย่าง payload ที่จะส่งต่อ

    {
      "status": "validated",
      "document_type": "receipt",
      "vendor_name": "ABC Store",
      "total_amount": 1070.00,
      "document_date": "2026-05-28",
      "source_file": "receipt_001.pdf"
    }

    ควรเก็บ log ทุกขั้น เช่น รับไฟล์เมื่อไร, ใช้โมเดลเวอร์ชันไหน, validation ผ่านหรือไม่, ส่งออกสำเร็จหรือไม่ เพื่อให้ตรวจสอบย้อนหลังและปรับปรุงระบบได้ง่าย

    Troubleshooting / Tips

  • อ่านเอกสารสแกนไม่ออก: เพิ่มขั้น preprocess เช่น denoise, rotate, crop และเพิ่มความละเอียดของภาพ
  • โมเดลตอบไม่เป็น JSON: ล็อก format ให้ชัด และมี parser ตรวจซ้ำก่อนใช้งานจริง
  • ฟิลด์บางตัวสลับตำแหน่งบ่อย: เพิ่มตัวอย่างเอกสารหลายรูปแบบใน prompt หรือแยก pipeline ตาม document type
  • ยอดเงินผิดจากความจริง: ใช้ validation ทางคณิตศาสตร์และตั้ง rule ให้ human review เมื่อค่าคลาดเคลื่อนเกิน threshold
  • เชื่อมหลายระบบแล้ว debug ยาก: ใส่ document ID กลางตั้งแต่ต้น pipeline เพื่อ trace ได้ทุกขั้น
  • สรุปแล้ว การ automate งานเอกสารด้วย Vision AI ไม่ได้มีแค่การอ่านตัวอักษร แต่คือการสร้าง pipeline ที่ครบตั้งแต่รับไฟล์ แปลงข้อมูล แยกฟิลด์ ตรวจสอบ และส่งต่ออย่างเป็นระบบ หากเริ่มจาก schema ที่ชัด มี validation ที่ดี และเชื่อม workflow ให้เหมาะกับงานจริง คุณจะลดงาน manual ได้มากและเพิ่มความเร็วในการทำงานของทีมอย่างชัดเจน จากจุดนี้สามารถต่อยอดไปสู่การทำ human-in-the-loop, dashboard ติดตามคุณภาพ extraction หรือการรองรับเอกสารหลายภาษาในระบบเดียวได้

    กลับไปยังบล็อก OVERFLOW