Ocriva Logo

Documents

การกำหนด Schema

กำหนด JSON Schema สำหรับดึงข้อมูลแบบมีโครงสร้าง

Published: 3/31/2026

การกำหนด Schema

Schema บอก AI ว่าต้องดึงฟิลด์อะไรบ้างและแต่ละฟิลด์ควรเป็นข้อมูลประเภทใด Ocriva ใช้ไวยากรณ์ JSON Schema มาตรฐาน

โครงสร้างพื้นฐาน

ทุก Schema ควรเป็นประเภท object ระดับบนสุดพร้อม Map properties:

{
  "type": "object",
  "properties": {
    "ชื่อฟิลด์": {
      "type": "string",
      "description": "ฟิลด์นี้ประกอบด้วยอะไร"
    }
  }
}

ประเภทฟิลด์ที่รองรับ

ประเภทคำอธิบายตัวอย่างค่า
stringค่าข้อความ"INV-2567-001"
numberค่าตัวเลข (จำนวนเต็มหรือทศนิยม)1500.00
booleanค่าจริง/เท็จtrue
arrayรายการ["รายการ1", "รายการ2"]
objectObject ที่ซ้อนกัน{ "ถนน": "...", "เมือง": "..." }

ตัวอย่าง: Schema ใบกำกับภาษี

Schema ดึงข้อมูลใบกำกับภาษีแบบครอบคลุม พร้อมรายการสินค้าที่ซ้อนกัน:

{
  "type": "object",
  "properties": {
    "เลขที่ใบกำกับ": {
      "type": "string",
      "description": "เลขที่ใบกำกับภาษีที่ปรากฏบนเอกสาร เช่น INV-2567-001"
    },
    "วันที่ออกใบกำกับ": {
      "type": "string",
      "description": "วันที่ออกใบกำกับในรูปแบบ YYYY-MM-DD ปีค.ศ."
    },
    "วันที่ครบกำหนด": {
      "type": "string",
      "description": "วันที่ครบกำหนดชำระเงินในรูปแบบ YYYY-MM-DD"
    },
    "ผู้ขาย": {
      "type": "object",
      "description": "ข้อมูลผู้ขาย/ผู้ออกใบกำกับ",
      "properties": {
        "ชื่อ": { "type": "string" },
        "เลขประจำตัวผู้เสียภาษี": { "type": "string" },
        "ที่อยู่": { "type": "string" }
      }
    },
    "ผู้ซื้อ": {
      "type": "object",
      "description": "ข้อมูลผู้ซื้อ/ลูกค้า",
      "properties": {
        "ชื่อ": { "type": "string" },
        "เลขประจำตัวผู้เสียภาษี": { "type": "string" },
        "ที่อยู่": { "type": "string" }
      }
    },
    "รายการสินค้า": {
      "type": "array",
      "description": "รายการสินค้าหรือบริการทั้งหมดในใบกำกับ",
      "items": {
        "type": "object",
        "properties": {
          "รายละเอียด": { "type": "string" },
          "จำนวน": { "type": "number" },
          "ราคาต่อหน่วย": { "type": "number" },
          "จำนวนเงิน": { "type": "number" }
        }
      }
    },
    "ราคาก่อนภาษี": {
      "type": "number",
      "description": "ยอดเงินก่อนภาษีมูลค่าเพิ่ม"
    },
    "ภาษีมูลค่าเพิ่ม": {
      "type": "number",
      "description": "จำนวนเงินภาษีมูลค่าเพิ่ม (7% ในประเทศไทย)"
    },
    "ยอดรวมทั้งสิ้น": {
      "type": "number",
      "description": "ยอดรวมทั้งสิ้นรวมภาษีแล้ว"
    },
    "สกุลเงิน": {
      "type": "string",
      "description": "รหัสสกุลเงิน เช่น THB, USD"
    }
  }
}

เคล็ดลับการเขียน Schema ที่ดี

TIP

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

  • เพิ่ม description ในทุกฟิลด์ — AI อ่าน description เหล่านี้เป็นคำสั่ง ฟิลด์ วันที่ ที่มี description "วันที่ออกใบกำกับในรูปแบบ YYYY-MM-DD" จะให้ผลลัพธ์ที่สม่ำเสมอกว่าฟิลด์ที่ไม่มี description มาก
  • ใช้ snake_case สำหรับชื่อฟิลด์ภาษาอังกฤษ — ชื่อที่สม่ำเสมอช่วยป้องกันความสับสนในระบบปลายทาง
  • หลีกเลี่ยงการซ้อนลึกเกิน 3 ระดับ — การซ้อนลึกมากลดความแม่นยำของ AI

WARNING

Schema ที่ซ้อนลึกเกินไปอาจทำให้ AI ดึงข้อมูลไม่ครบ พยายามรักษาโครงสร้างไม่เกิน 3 ระดับ หากต้องการข้อมูลซับซ้อนมากให้แบ่งออกเป็นหลาย Template

  • ระบุรูปแบบใน description — สำหรับวันที่ เบอร์โทรศัพท์ และรหัสต่างๆ ให้บอก AI รูปแบบที่ต้องการ