บทแนะนำ: เริ่มต้นใช้งาน Gemini API

เริ่มต้น


บทแนะนำนี้สาธิตวิธีเข้าถึง Gemini API โดยตรงจาก แอป Swift ที่ใช้ Google AI Swift SDK คุณใช้ SDK นี้ได้หากไม่ต้องการ เพื่อทำงานกับ REST API หรือโค้ดฝั่งเซิร์ฟเวอร์ (เช่น Python) โดยตรงสำหรับการเข้าถึง โมเดล Gemini ในแอป Swift

ในบทแนะนำนี้ คุณจะได้เรียนรู้วิธีทำสิ่งต่อไปนี้

นอกจากนี้ บทแนะนำนี้ยังประกอบด้วยส่วนต่างๆ เกี่ยวกับกรณีการใช้งานขั้นสูง (เช่น โทเค็นการนับ) รวมทั้งตัวเลือกสำหรับ การควบคุมการสร้างเนื้อหา

ข้อกำหนดเบื้องต้น

บทแนะนำนี้จะถือว่าคุณคุ้นเคยกับการใช้ Xcode เพื่อพัฒนา Swift แอป

หากต้องการจบบทแนะนำนี้ โปรดตรวจสอบว่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์และ แอป Swift เป็นไปตามข้อกำหนดต่อไปนี้

  • Xcode 15.0 ขึ้นไป
  • แอป Swift ต้องกําหนดเป้าหมายเป็น iOS 15 ขึ้นไป หรือ macOS 12 ขึ้นไป

ตั้งค่าโปรเจ็กต์

ก่อนที่จะเรียกใช้ Gemini API คุณต้องตั้งค่าโปรเจ็กต์ Xcode ซึ่งรวมถึงการตั้งค่าคีย์ API, การเพิ่มแพ็กเกจ SDK ลงในโปรเจ็กต์ Xcode และเริ่มต้นโมเดล

ตั้งค่าคีย์ API

หากต้องการใช้ Gemini API คุณจะต้องมีคีย์ API หากคุณยังไม่มี สร้างคีย์ใน Google AI Studio

รับคีย์ API

รักษาคีย์ API ให้ปลอดภัย

ขอแนะนำว่าอย่าตรวจสอบคีย์ API ในเวอร์ชันของคุณ ระบบควบคุม อีกทางเลือกหนึ่งคือการจัดเก็บใน GenerativeAI-Info.plist แล้วอ่านคีย์ API จาก .plist อย่าลืมใส่ไฟล์ .plist นี้ไว้ในโฟลเดอร์รูทของแอปและ ยกเว้นการควบคุมเวอร์ชัน

คุณยังสามารถตรวจสอบ ตัวอย่างแอป เพื่อดูวิธีจัดเก็บคีย์ API ในไฟล์ .plist

ข้อมูลโค้ดทั้งหมดในบทแนะนำนี้จะถือว่าคุณกำลังเข้าถึงคีย์ API จากไฟล์ทรัพยากรแบบออนดีมานด์ .plist นี้

เพิ่มแพ็กเกจ SDK ลงในโปรเจ็กต์

หากต้องการใช้ Gemini API ในแอป Swift ของคุณเอง ให้เพิ่ม GoogleGenerativeAI แพ็กเกจไปยังแอปของคุณ

  1. ใน Xcode ให้คลิกขวาที่โปรเจ็กต์ในตัวนำทางโปรเจ็กต์

  2. เลือกเพิ่มแพ็กเกจจากเมนูตามบริบท

  3. วาง URL ของแพ็กเกจในแถบค้นหาในกล่องโต้ตอบเพิ่มแพ็กเกจ

    https://github.com/google/generative-ai-swift
    
  4. คลิกเพิ่มแพ็กเกจ Xcode จะเพิ่มแพ็กเกจ GoogleGenerativeAI แล้ว ลงในโปรเจ็กต์ของคุณ

เริ่มต้นโมเดล Generative

คุณต้องเริ่มต้นโมเดล Generative ก่อน จึงจะเรียกใช้ API ได้

  1. นำเข้าโมดูล GoogleGenerativeAI:

    import GoogleGenerativeAI
    
  2. เริ่มต้นโมเดล Generative โดยทำดังนี้

    // Access your API key from your on-demand resource .plist file
    // (see "Set up your API key" above)
    // The Gemini 1.5 models are versatile and work with most use cases
    let model = GenerativeModel(name: "gemini-1.5-flash", apiKey: APIKey.default)
    

เมื่อระบุโมเดล ให้คำนึงถึงสิ่งต่อไปนี้

  • ใช้โมเดลที่เหมาะกับ Use Case ของคุณโดยเฉพาะ (เช่น gemini-1.5-flash สำหรับการป้อนข้อมูลหลายรูปแบบ) ในคู่มือนี้ วิธีการสำหรับ โดยใช้รายการรูปแบบที่แนะนำสำหรับแต่ละกรณีการใช้งาน

ใช้ Use Case ทั่วไป

เมื่อตั้งค่าโปรเจ็กต์แล้ว คุณสามารถสำรวจโดยใช้ Gemini API เพื่อทำสิ่งต่อไปนี้ได้ ใช้กรณีการใช้งานที่แตกต่างกัน

สร้างข้อความจากการป้อนข้อมูลแบบข้อความเท่านั้น

เมื่ออินพุตพรอมต์มีเฉพาะข้อความ ให้ใช้โมเดล Gemini 1.5 หรือ โมเดล Gemini 1.0 Pro ที่มี generateContent เพื่อสร้างเอาต์พุตข้อความ:

import GoogleGenerativeAI

// The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
// Access your API key from your on-demand resource .plist file (see "Set up your API key" above)
let model = GenerativeModel(name: "gemini-1.5-flash", apiKey: APIKey.default)

let prompt = "Write a story about a magic backpack."
let response = try await model.generateContent(prompt)
if let text = response.text {
  print(text)
}

สร้างข้อความจากการป้อนข้อความและรูปภาพ (หลายรูปแบบ)

Gemini มีโมเดลต่างๆ ที่จัดการกับการป้อนข้อมูลหลายรูปแบบได้ (รุ่น Gemini 1.5) เพื่อให้คุณสามารถป้อนข้อความได้ทั้ง และรูปภาพ อย่าลืมอ่าน ข้อกำหนดเกี่ยวกับรูปภาพสำหรับพรอมต์

เมื่ออินพุตพรอมต์มีทั้งข้อความและรูปภาพ ให้ใช้โมเดล Gemini 1.5 ด้วยเมธอด generateContent เพื่อสร้างเอาต์พุตข้อความ:

import GoogleGenerativeAI

// The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
// Access your API key from your on-demand resource .plist file (see "Set up your API key" above)
let model = GenerativeModel(name: "gemini-1.5-flash", apiKey: APIKey.default)

let image1 = UIImage(...)
let image2 = UIImage(...)

let prompt = "What's different between these pictures?"

let response = try await model.generateContent(prompt, image1, image2)
if let text = response.text {
  print(text)
}

สร้างการสนทนาแบบผลัดกันเล่น (แชท)

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

หากต้องการสร้างการสนทนาแบบหลายรอบ (เช่น แชท) ให้ใช้โมเดล Gemini 1.5 หรือ Gemini 1.0 Pro และเริ่มแชทโดยโทรหา startChat() จากนั้นใช้ sendMessage() เพื่อส่งข้อความของผู้ใช้ใหม่ ซึ่งจะต่อท้ายด้วย และการตอบกลับประวัติการแชท

มี 2 ตัวเลือกที่เป็นไปได้สำหรับ role ที่เชื่อมโยงกับเนื้อหาใน การสนทนา:

  • user: บทบาทที่แสดงข้อความแจ้ง ค่านี้เป็นค่าเริ่มต้นสำหรับ sendMessage สาย

  • model: บทบาทที่ให้คำตอบ บทบาทนี้สามารถใช้ได้เมื่อ กำลังโทรหา startChat() ด้วย history ปัจจุบัน

import GoogleGenerativeAI

let config = GenerationConfig(
  maxOutputTokens: 100
)

// The Gemini 1.5 models are versatile and work with multi-turn conversations (like chat)
// Access your API key from your on-demand resource .plist file (see "Set up your API key" above)
let model = GenerativeModel(
  name: "gemini-1.5-flash",
  apiKey: APIKey.default,
  generationConfig: config
)

let history = [
  ModelContent(role: "user", parts: "Hello, I have 2 dogs in my house."),
  ModelContent(role: "model", parts: "Great to meet you. What would you like to know?"),
]

// Initialize the chat
let chat = model.startChat(history: history)
let response = try await chat.sendMessage("How many paws are in my house?")
if let text = response.text {
  print(text)
}

ใช้สตรีมมิงเพื่อการโต้ตอบที่เร็วขึ้น

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

ตัวอย่างต่อไปนี้แสดงวิธีใช้งานสตรีมมิงด้วย เมธอด generateContentStream ในการสร้างข้อความจากการป้อนข้อความและรูปภาพ ปรากฏขึ้น

import GoogleGenerativeAI

// The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
// Access your API key from your on-demand resource .plist file (see "Set up your API key" above)
let model = GenerativeModel(name: "gemini-1.5-flash", apiKey: APIKey.default)

let image1 = UIImage(named: "")!
let image2 = UIImage(named: "")!

let prompt = "What's different between these pictures?"
var fullResponse = ""
let contentStream = model.generateContentStream(prompt, image1, image2)
for try await chunk in contentStream {
  if let text = chunk.text {
    print(text)
    fullResponse += text
  }
}
print(fullResponse)

คุณสามารถใช้วิธีที่คล้ายกันสำหรับการป้อนข้อความเท่านั้นและกรณีการใช้งานแชทได้

// Use streaming with text-only input
let contentStream = model.generateContentStream(prompt)
// Use streaming with multi-turn conversations (like chat)
let responseStream = chat.sendMessageStream(message)

ใช้ Use Case ขั้นสูง

กรณีการใช้งานทั่วไปที่อธิบายไว้ในส่วนก่อนหน้าของความช่วยเหลือเกี่ยวกับบทแนะนำนี้ ที่คุณจะเริ่มคุ้นเคยกับการใช้ Gemini API ส่วนนี้อธิบายถึงบางส่วน Use Case ที่อาจถือว่าเป็น Use Case ขั้นสูงกว่า

กำลังเรียกฟังก์ชัน

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

นับโทเค็น

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

// For text-only input
let response = try await model.countTokens("Why is the sky blue?")
print(response.totalTokens)
// For text-and-image input (multi-modal)
let response = try await model.countTokens(prompt, image1, image2)
print(response.totalTokens)
// For multi-turn conversations (like chat)
let chat = model.startChat()
let history = chat.history
let message = try ModelContent(role: "user", "Why is the sky blue?")
let contents = history + [message]
let response = try await model.countTokens(contents)
print(response.totalTokens)

ตัวเลือกในการควบคุมการสร้างเนื้อหา

คุณสามารถควบคุมการสร้างเนื้อหาได้โดยกำหนดค่าพารามิเตอร์โมเดลและ การตั้งค่าความปลอดภัย

กำหนดค่าพารามิเตอร์โมเดล

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

let config = GenerationConfig(
  temperature: 0.9,
  topP: 0.1,
  topK: 16,
  maxOutputTokens: 200,
  stopSequences: ["red"]
)

// Access your API key from your on-demand resource .plist file (see "Set up your API key" above)
let model = GenerativeModel(
  // The Gemini 1.5 models are versatile and work with most use cases
  name: "gemini-1.5-flash",
  apiKey: APIKey.default,
  generationConfig: config
)

ใช้การตั้งค่าความปลอดภัย

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

วิธีตั้งค่าความปลอดภัย 1 รายการมีดังนี้

// Access your API key from your on-demand resource .plist file (see "Set up your API key" above)
let model = GenerativeModel(
  // The Gemini 1.5 models are versatile and work with most use cases
  name: "gemini-1.5-flash",
  apiKey: APIKey.default,
  safetySettings: [
    SafetySetting(harmCategory: .harassment, threshold: .blockOnlyHigh)
  ]
)

นอกจากนี้ คุณยังสามารถตั้งค่าความปลอดภัยได้มากกว่า 1 รายการ ดังนี้

let harassmentSafety = SafetySetting(harmCategory: .harassment, threshold: .blockOnlyHigh)
let hateSpeechSafety = SafetySetting(harmCategory: .hateSpeech, threshold: .blockMediumAndAbove)

// Access your API key from your on-demand resource .plist file (see "Set up your API key" above)
let model = GenerativeModel(
  // The Gemini 1.5 models are versatile and work with most use cases
  name: "gemini-1.5-flash",
  apiKey: APIKey.default,
    safetySettings: [harassmentSafety, hateSpeechSafety]
)

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

  • การออกแบบพรอมต์เป็นกระบวนการสร้างข้อความแจ้งที่จะกระตุ้นความต้องการ การตอบสนองจากโมเดลภาษา การเขียนพรอมต์แบบมีโครงสร้างที่ดีเป็นสิ่งจำเป็น ส่วนหนึ่งคือการรับรองคำตอบที่ถูกต้องและมีคุณภาพสูงจากโมเดลภาษา ดูข้อมูลเกี่ยวกับแนวทางปฏิบัติแนะนำสำหรับการเขียนพรอมต์

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