สร้างเอาต์พุตที่จัดโครงสร้างด้วย Gemini API


Gemini จะสร้างข้อความที่ไม่มีโครงสร้างโดยค่าเริ่มต้น แต่แอปพลิเคชันบางรายการต้องใช้ข้อความที่มีโครงสร้าง สําหรับกรณีการใช้งานเหล่านี้ คุณสามารถจํากัดให้ Gemini ตอบกลับด้วย JSON ซึ่งเป็นรูปแบบ Structured Data ที่เหมาะกับการประมวลผลอัตโนมัติ นอกจากนี้ คุณยังจำกัดให้โมเดลตอบกลับด้วยตัวเลือกใดตัวเลือกหนึ่งซึ่งระบุไว้ใน enum ได้ด้วย

ตัวอย่างกรณีการใช้งานที่อาจต้องใช้เอาต์พุตที่มีโครงสร้างจากโมเดลมีดังนี้

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

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

คู่มือนี้จะแสดงวิธีสร้าง JSON โดยใช้เมธอด generateContent ผ่าน SDK ที่คุณเลือก หรือใช้ REST API โดยตรง ตัวอย่างแสดงอินพุตที่เป็นข้อความเท่านั้น แต่ Gemini ยังสร้างการตอบกลับ JSON สำหรับคำขอแบบหลายรูปแบบได้ ซึ่งรวมถึงรูปภาพ วิดีโอ และเสียง

ข้อมูลเพิ่มเติมเกี่ยวกับสคีมา JSON

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

ต่อไปนี้คือการแสดงผลแบบจำลอง JSON ของฟิลด์ Schema ทั้งหมด

{
  "type": enum (Type),
  "format": string,
  "description": string,
  "nullable": boolean,
  "enum": [
    string
  ],
  "maxItems": string,
  "minItems": string,
  "properties": {
    string: {
      object (Schema)
    },
    ...
  },
  "required": [
    string
  ],
  "propertyOrdering": [
    string
  ],
  "items": {
    object (Schema)
  }
}

Type ของสคีมาต้องเป็นหนึ่งในประเภทข้อมูลของ OpenAPI เฉพาะช่องชุดย่อยเท่านั้นที่ใช้ได้กับ Type แต่ละรายการ รายการต่อไปนี้จะจับคู่ Type แต่ละรายการกับช่องที่ถูกต้องสำหรับประเภทนั้นๆ

  • string -> enum, format
  • integer -> รูปแบบ
  • number -> รูปแบบ
  • boolean
  • array -> minItems, maxItems, items
  • object -> properties, required, propertyOrdering, nullable

ต่อไปนี้คือตัวอย่างสคีมาซึ่งแสดงการผสมผสานประเภทและช่องที่ถูกต้อง

{ "type": "string", "enum": ["a", "b", "c"] }

{ "type": "string", "format": "date-time" }

{ "type": "integer", "format": "int64" }

{ "type": "number", "format": "double" }

{ "type": "boolean" }

{ "type": "array", "minItems": 3, "maxItems": 3, "items": { "type": ... } }

{ "type": "object",
  "properties": {
    "a": { "type": ... },
    "b": { "type": ... },
    "c": { "type": ... }
  },
  "nullable": true,
  "required": ["c"],
  "propertyOrdering": ["c", "b", "a"]
}

ดูเอกสารประกอบฉบับเต็มของช่องสคีมาที่ใช้ใน Gemini API ได้ที่ข้อมูลอ้างอิงสคีมา

การจัดเรียงพร็อพเพอร์ตี้

เมื่อคุณทํางานกับสคีมา JSON ใน Gemini API ลําดับของพร็อพเพอร์ตี้มีความสําคัญ โดยค่าเริ่มต้น API จะจัดเรียงพร็อพเพอร์ตี้ตามลําดับตัวอักษรและไม่รักษาลําดับที่กําหนดพร็อพเพอร์ตี้ (แม้ว่า Google Gen AI SDK อาจรักษาลําดับนี้ไว้) หากคุณระบุตัวอย่างให้กับโมเดลที่มีการกําหนดค่าสคีมาไว้ และลําดับพร็อพเพอร์ตี้ของตัวอย่างไม่สอดคล้องกับลําดับพร็อพเพอร์ตี้ของสคีมา ผลลัพธ์อาจไม่เป็นระเบียบหรือคาดเดาไม่ได้

คุณใช้ฟิลด์ propertyOrdering[] (ไม่บังคับ) เพื่อให้การเรียงลําดับพร็อพเพอร์ตี้สอดคล้องกันและคาดการณ์ได้

"propertyOrdering": ["recipe_name", "ingredients"]

propertyOrdering[] – ไม่ใช่ช่องมาตรฐานในข้อกำหนด OpenAPI – คืออาร์เรย์สตริงที่ใช้กำหนดลำดับของพร็อพเพอร์ตี้ในการตอบกลับ การระบุลําดับของพร็อพเพอร์ตี้ แล้วให้ตัวอย่างที่มีพร็อพเพอร์ตี้ตามลําดับเดียวกันอาจช่วยปรับปรุงคุณภาพของผลลัพธ์ได้