สร้างข้อความโดยใช้ Gemini API

Gemini API สามารถสร้างเอาต์พุตข้อความได้เมื่อมีการป้อนข้อความ รูปภาพ วิดีโอ และเสียงเป็นอินพุต

คู่มือนี้จะแสดงวิธีสร้างข้อความโดยใช้เมธอด generateContent และ streamGenerateContent หากต้องการดูข้อมูลเกี่ยวกับความสามารถในการทำงานกับภาพและเสียงของ Gemini ให้ดูคู่มือภาพและเสียง

ก่อนเริ่มต้น: ตั้งค่าโปรเจ็กต์และคีย์ API

คุณต้องตั้งค่าโปรเจ็กต์และกำหนดค่าคีย์ API ก่อนเรียกใช้ Gemini API

สร้างข้อความจากอินพุตแบบข้อความเท่านั้น

วิธีที่ง่ายที่สุดในการสร้างข้อความโดยใช้ Gemini API คือการให้อินพุตแบบข้อความเท่านั้นรายการเดียวแก่โมเดล ดังที่แสดงในตัวอย่างนี้

// 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 = "Write a story about a magic backpack.";

const result = await model.generateContent(prompt);
console.log(result.response.text());

ในกรณีนี้ พรอมต์ ("เขียนเรื่องราวเกี่ยวกับกระเป๋าเป้วิเศษ") จะไม่มีตัวอย่างเอาต์พุต วิธีการของระบบ หรือข้อมูลการจัดรูปแบบ การถ่ายภาพแบบไม่ต้องมีตัวอย่าง สําหรับ Use Case บางรายการ พรอมต์แบบคำเดียวหรือแบบไม่กี่คำอาจให้ผลลัพธ์ที่สอดคล้องกับความคาดหวังของผู้ใช้มากกว่า ในบางกรณี คุณอาจต้องระบุวิธีการของระบบเพื่อช่วยให้โมเดลเข้าใจงานหรือปฏิบัติตามหลักเกณฑ์เฉพาะ

สร้างข้อความจากอินพุตข้อความและรูปภาพ

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

// 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" });

function fileToGenerativePart(path, mimeType) {
  return {
    inlineData: {
      data: Buffer.from(fs.readFileSync(path)).toString("base64"),
      mimeType,
    },
  };
}

const prompt = "Describe how this product might be manufactured.";
// Note: The only accepted mime types are some image types, image/*.
const imagePart = fileToGenerativePart(
  `${mediaPath}/jetpack.jpg`,
  "image/jpeg",
);

const result = await model.generateContent([prompt, imagePart]);
console.log(result.response.text());

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

สร้างสตรีมข้อความ

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

ตัวอย่างต่อไปนี้แสดงวิธีใช้การสตรีมโดยใช้เมธอด streamGenerateContent เพื่อสร้างข้อความจากพรอมต์การป้อนข้อความเท่านั้น

// 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 = "Write a story about a magic backpack.";

const result = await model.generateContentStream(prompt);

// Print text as it comes in.
for await (const chunk of result.stream) {
  const chunkText = chunk.text();
  process.stdout.write(chunkText);
}

สร้างแชทแบบอินเทอร์แอกทีฟ

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

ตัวอย่างโค้ดต่อไปนี้แสดงการใช้งานแชทพื้นฐาน

// 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 chat = model.startChat({
  history: [
    {
      role: "user",
      parts: [{ text: "Hello" }],
    },
    {
      role: "model",
      parts: [{ text: "Great to meet you. What would you like to know?" }],
    },
  ],
});
let result = await chat.sendMessage("I have 2 dogs in my house.");
console.log(result.response.text());
result = await chat.sendMessage("How many paws are in my house?");
console.log(result.response.text());

เปิดใช้การสตรีมแชท

นอกจากนี้ คุณยังใช้การสตรีมกับแชทได้ด้วย ดังที่แสดงในตัวอย่างต่อไปนี้

// 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 chat = model.startChat({
  history: [
    {
      role: "user",
      parts: [{ text: "Hello" }],
    },
    {
      role: "model",
      parts: [{ text: "Great to meet you. What would you like to know?" }],
    },
  ],
});
let result = await chat.sendMessageStream("I have 2 dogs in my house.");
for await (const chunk of result.stream) {
  const chunkText = chunk.text();
  process.stdout.write(chunkText);
}
result = await chat.sendMessageStream("How many paws are in my house?");
for await (const chunk of result.stream) {
  const chunkText = chunk.text();
  process.stdout.write(chunkText);
}

กำหนดค่าการสร้างข้อความ

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

ตัวอย่างต่อไปนี้แสดงวิธีกำหนดค่าตัวเลือกต่างๆ ที่ใช้ได้

// 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",
  generationConfig: {
    candidateCount: 1,
    stopSequences: ["x"],
    maxOutputTokens: 20,
    temperature: 1.0,
  },
});

const result = await model.generateContent(
  "Tell me a story about a magic backpack.",
);
console.log(result.response.text());

candidateCount ระบุจํานวนคําตอบที่สร้างขึ้นเพื่อแสดงผล ปัจจุบันค่านี้สามารถตั้งเป็น 1 เท่านั้น หากไม่ได้ตั้งค่า ค่าเริ่มต้นจะเป็น 1

stopSequences ระบุชุดลำดับอักขระ (สูงสุด 5 ชุด) ที่จะหยุดการสร้างเอาต์พุต หากระบุไว้ API จะหยุดเมื่อพบ stop_sequence เป็นครั้งแรก ลำดับการหยุดจะไม่รวมอยู่ในคำตอบ

maxOutputTokens กำหนดจำนวนโทเค็นสูงสุดที่จะรวมไว้ในตัวเลือก

temperature จะควบคุมการสุ่มของเอาต์พุต ใช้ค่าที่สูงขึ้นสำหรับคำตอบที่สร้างสรรค์มากขึ้น และใช้ค่าที่ต่ำลงสำหรับคำตอบที่กำหนดมากขึ้น ค่าจะอยู่ในช่วง [0.0, 2.0]

นอกจากนี้ คุณยังกำหนดค่าการเรียกใช้ generateContent แต่ละรายการได้ดังนี้

const result = await model.generateContent({
  contents: [
    {
      role: 'user',
      parts: [
        {
          text: prompt,
        }
      ],
    }
  ],
  generationConfig: {
    maxOutputTokens: 1000,
    temperature: 0.1,
  },
});
console.log(result.response.text());

ค่าที่ตั้งไว้ในการเรียกแต่ละรายการจะลบล้างค่าในคอนสตรัคเตอร์ของโมเดล

ขั้นตอนถัดไป

เมื่อได้สำรวจข้อมูลเบื้องต้นเกี่ยวกับ Gemini API แล้ว คุณอาจลองทำสิ่งต่อไปนี้

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