Gemini จะสร้างข้อความที่ไม่มีโครงสร้างโดยค่าเริ่มต้น แต่แอปพลิเคชันบางรายการต้องใช้ข้อความที่มีโครงสร้าง สําหรับกรณีการใช้งานเหล่านี้ คุณสามารถจํากัดให้ Gemini ตอบกลับด้วย JSON ซึ่งเป็นรูปแบบ Structured Data ที่เหมาะกับการประมวลผลอัตโนมัติ นอกจากนี้ คุณยังจำกัดให้โมเดลตอบกลับด้วยตัวเลือกใดตัวเลือกหนึ่งซึ่งระบุไว้ใน enum ได้ด้วย
ตัวอย่างกรณีการใช้งานที่อาจต้องใช้เอาต์พุตที่มีโครงสร้างจากโมเดลมีดังนี้
- สร้างฐานข้อมูลบริษัทโดยดึงข้อมูลบริษัทจากบทความในหนังสือพิมพ์
- ดึงข้อมูลที่มาตรฐานออกจากเรซูเม่
- ดึงข้อมูลส่วนผสมจากสูตรอาหารและแสดงลิงก์ไปยังเว็บไซต์ขายของใช้ทั่วไปสำหรับส่วนผสมแต่ละอย่าง
ในพรอมต์ คุณสามารถขอให้ Gemini แสดงผลลัพธ์ในรูปแบบ JSON ได้ แต่โปรดทราบว่าเราไม่รับประกันว่าโมเดลจะแสดงผลลัพธ์เป็น JSON เท่านั้น
หากต้องการคำตอบที่แน่นอนมากขึ้น คุณสามารถส่งสคีมา JSON ที่เฉพาะเจาะจงในช่อง responseSchema
เพื่อให้ Gemini ตอบกลับด้วยโครงสร้างที่คาดไว้เสมอ ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้สคีมาในข้อมูลเพิ่มเติมเกี่ยวกับสคีมา JSON
คู่มือนี้จะแสดงวิธีสร้าง JSON โดยใช้เมธอด generateContent
ผ่าน SDK ที่คุณเลือก หรือใช้ REST API โดยตรง ตัวอย่างแสดงอินพุตที่เป็นข้อความเท่านั้น แต่ Gemini ยังสร้างการตอบกลับ JSON สำหรับคำขอแบบหลายรูปแบบได้ ซึ่งรวมถึงรูปภาพ วิดีโอ และเสียง
ก่อนเริ่มต้น: ตั้งค่าโปรเจ็กต์และคีย์ API
คุณต้องตั้งค่าโปรเจ็กต์และกำหนดค่าคีย์ API ก่อนเรียกใช้ Gemini API
ขยายเพื่อดูวิธีตั้งค่าโปรเจ็กต์และคีย์ API
รับและรักษาคีย์ API ให้ปลอดภัย
คุณต้องมีคีย์ API เพื่อเรียกใช้ Gemini API หากยังไม่มี ให้สร้างคีย์ใน Google AI Studio
เราขอแนะนำอย่างยิ่งให้คุณไม่ตรวจสอบคีย์ API ในระบบควบคุมเวอร์ชัน
คุณควรใช้ที่เก็บข้อมูลลับสำหรับคีย์ API เช่น Secret Manager ของ Google Cloud
ข้อมูลโค้ดทั้งหมดในบทแนะนำนี้ถือว่าคุณเข้าถึงคีย์ API ในฐานะค่าคงที่ส่วนกลาง
สร้าง JSON
เมื่อกำหนดค่าให้โมเดลแสดงผล JSON โมเดลจะตอบสนองต่อพรอมต์ด้วยเอาต์พุตรูปแบบ JSON
คุณควบคุมโครงสร้างของคำตอบ JSON ได้โดยระบุสคีมา การส่งสคีมาไปยังโมเดลทำได้ 2 วิธีดังนี้
- เป็นข้อความในพรอมต์
- เป็นสคีมา Structured Data ที่ระบุผ่านการกําหนดค่ารูปแบบ
ระบุสคีมาเป็นข้อความในพรอมต์
ตัวอย่างต่อไปนี้จะแจ้งให้โมเดลแสดงสูตรคุกกี้ในรูปแบบ JSON ที่เฉพาะเจาะจง
เนื่องจากโมเดลจะรับข้อกําหนดรูปแบบจากข้อความในพรอมต์ คุณจึงอาจมีความยืดหยุ่นในการแสดงข้อกําหนดได้บ้าง รูปแบบใดก็ได้ที่สมเหตุสมผลสำหรับการแสดงสคีมา JSON อาจใช้งานได้
// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModel({
model: "gemini-1.5-flash",
});
const prompt = `List a few popular cookie recipes using this JSON schema:
Recipe = {'recipeName': string}
Return: Array<Recipe>`;
const result = await model.generateContent(prompt);
console.log(result.response.text());
เอาต์พุตอาจมีลักษณะดังนี้
[{"recipeName": "Chocolate Chip Cookies"}, {"recipeName": "Oatmeal Raisin Cookies"}, {"recipeName": "Snickerdoodles"}, {"recipeName": "Sugar Cookies"}, {"recipeName": "Peanut Butter Cookies"}]
ระบุสคีมาผ่านการกําหนดค่ารูปแบบ
ตัวอย่างต่อไปนี้ทําสิ่งต่อไปนี้
- สร้างอินสแตนซ์ของโมเดลที่กําหนดค่าผ่านสคีมาเพื่อตอบกลับด้วย JSON
- แจ้งให้โมเดลแสดงสูตรคุกกี้
วิธีประกาศสคีมา JSON ที่เป็นแบบทางการมากขึ้นนี้จะช่วยให้คุณควบคุมได้แม่นยำกว่าการอาศัยเพียงข้อความในพรอมต์
// Make sure to include these imports:
// import { GoogleGenerativeAI, SchemaType } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const schema = {
description: "List of recipes",
type: SchemaType.ARRAY,
items: {
type: SchemaType.OBJECT,
properties: {
recipeName: {
type: SchemaType.STRING,
description: "Name of the recipe",
nullable: false,
},
},
required: ["recipeName"],
},
};
const model = genAI.getGenerativeModel({
model: "gemini-1.5-pro",
generationConfig: {
responseMimeType: "application/json",
responseSchema: schema,
},
});
const result = await model.generateContent(
"List a few popular cookie recipes.",
);
console.log(result.response.text());
เอาต์พุตอาจมีลักษณะดังนี้
[{"recipeName": "Chocolate Chip Cookies"}, {"recipeName": "Oatmeal Raisin Cookies"}, {"recipeName": "Snickerdoodles"}, {"recipeName": "Sugar Cookies"}, {"recipeName": "Peanut Butter Cookies"}]
ข้อมูลเพิ่มเติมเกี่ยวกับสคีมา 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, formatinteger
-> รูปแบบnumber
-> รูปแบบboolean
array
-> minItems, maxItems, itemsobject
-> 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 – คืออาร์เรย์สตริงที่ใช้กำหนดลำดับของพร็อพเพอร์ตี้ในการตอบกลับ การระบุลําดับของพร็อพเพอร์ตี้ แล้วให้ตัวอย่างที่มีพร็อพเพอร์ตี้ตามลําดับเดียวกันอาจช่วยปรับปรุงคุณภาพของผลลัพธ์ได้