Samouczek: pierwsze kroki z interfejsem Gemini API


W tym samouczku pokazujemy, jak uzyskać dostęp do interfejsu Gemini API bezpośrednio z Aplikacja Swift z pakietem SDK Google AI Swift. Możesz używać tego pakietu SDK, jeśli nie chcesz do bezpośredniej pracy z interfejsami API typu REST lub kodem po stronie serwera (np. Python) w celu uzyskania dostępu modele Gemini w aplikacji Swift.

Z tego samouczka dowiesz się, jak:

Ponadto w tym samouczku znajdują się sekcje dotyczące zaawansowanych przypadków użycia (takich jak tokeny liczenia) oraz opcje kontrolowania generowania treści.

Wymagania wstępne

W tym samouczku zakładamy, że umiesz używać Xcode do programowania w języku Swift aplikacji.

Aby ukończyć ten samouczek, upewnij się, że Twoje środowisko programistyczne Aplikacja Swift musi spełniać te wymagania:

  • Xcode w wersji 15.0 lub nowszej
  • Aplikacja Swift musi być kierowana na system iOS 15 lub nowszy albo macOS 12 lub nowszy.

Konfigurowanie projektu

Zanim wywołasz Gemini API, musisz skonfigurować projekt Xcode, który obejmuje skonfigurowanie klucza interfejsu API, dodanie pakietu SDK do projektu Xcode i jego zainicjowaniu.

Konfigurowanie klucza interfejsu API

Aby korzystać z Gemini API, potrzebujesz klucza interfejsu API. Jeśli jeszcze nie masz konta Google, utworzyć klucz w Google AI Studio.

Uzyskiwanie klucza interfejsu API

Zabezpiecz klucz interfejsu API

Zdecydowanie zalecamy, aby nie sprawdzać klucza interfejsu API w wersji systemu sterowania. Można też zapisać go w pliku GenerativeAI-Info.plist, a następnie odczytaj klucz interfejsu API z narzędzia .plist . Umieść ten plik .plist w folderze głównym aplikacji, wykluczyć go z kontroli wersji.

Możesz też zapoznać się z przykładowa aplikacja aby dowiedzieć się, jak zapisać klucz interfejsu API w pliku .plist.

Wszystkie fragmenty kodu w tym samouczku zakładają, że masz dostęp do swojego klucza interfejsu API z tego pliku .plist zasobu na żądanie.

Dodaj pakiet SDK do projektu

Aby używać Gemini API w swojej aplikacji Swift, dodaj GoogleGenerativeAI pakiet do Twojej aplikacji:

  1. W Xcode kliknij prawym przyciskiem myszy projekt w nawigatorze projektów.

  2. W menu kontekstowym wybierz Dodaj pakiety.

  3. W oknie Dodaj pakiety wklej adres URL pakietu na pasku wyszukiwania:

    https://github.com/google/generative-ai-swift
    
  4. Kliknij Dodaj pakiet. Xcode doda teraz pakiet GoogleGenerativeAI do swojego projektu.

Zainicjuj model generatywny

Zanim będzie można wykonywać wywołania interfejsu API, musisz zainicjować model generatywny.

  1. Zaimportuj moduł GoogleGenerativeAI:

    import GoogleGenerativeAI
    
  2. Zainicjuj model generatywny:

    // 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)
    

Podczas określania modelu pamiętaj o tych kwestiach:

  • Użyj modelu dopasowanego do Twojego przypadku użycia (np. gemini-1.5-flash służy do wprowadzania danych multimodalnych). Instrukcje w tym przewodniku dla poszczególnych elementów dla każdego z nich z listą zalecanych modeli.

Wdrażanie typowych przypadków użycia

Po skonfigurowaniu projektu możesz zacząć korzystać z Gemini API, aby: implementuj różne przypadki użycia:

Generuj tekst na podstawie samego tekstu

Jeśli prompt zawiera tylko tekst, użyj modelu Gemini 1.5 lub Model Gemini 1.0 Pro z funkcją generateContent do generowania tekstu:

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)
}

Generuj tekst na podstawie danych wejściowych z tekstem i obrazem (multimodalny)

Gemini udostępnia różne modele, które obsługują dane wejściowe multimodalne (modele Gemini 1.5), dzięki czemu można wpisywać zarówno tekst, i obrazów. Zapoznaj się z wymagania dotyczące obrazów w promptach.

Jeśli prompt zawiera zarówno tekst, jak i obrazy, użyj modelu Gemini 1.5 za pomocą metody generateContent do generowania tekstowych danych wyjściowych:

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)
}

Tworzenie rozmów wieloetapowych (czat)

Za pomocą Gemini możesz prowadzić swobodne rozmowy na różnych etapach. Pakiet SDK upraszcza ten proces, zarządzając stanem rozmowy, dlatego w przeciwieństwie do dzięki generateContent nie musisz zapisywać historii rozmów siebie.

Aby utworzyć rozmowę wieloetapową (np. czat), użyj modelu Gemini 1.5 lub Gemini 1.0 Pro i zainicjuj czat, dzwoniąc pod numer startChat(). Następnie użyj sendMessage(), aby wysłać nową wiadomość dla użytkownika, która będzie też dołączać tag wiadomości oraz odpowiedź na nie.

Istnieją 2 opcje dla elementu role związane z treścią w rozmowa:

  • user: rola, która dostarcza prompty. Jest to wartość domyślna dla opcji sendMessage połączeń.

  • model: rola, która dostarcza odpowiedzi. Tej roli można używać, gdy Dzwonię pod numer startChat() w istniejącej sieci 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)
}

Używaj strumieniowania, aby przyspieszyć interakcje

Domyślnie model zwraca odpowiedź po zakończeniu całego generowania proces tworzenia konta. Możesz przyspieszyć interakcje, nie czekając do końca i używać strumieniowania do obsługi wyników częściowych.

Poniższy przykład pokazuje, jak wdrożyć strumieniowanie za pomocą Metoda generateContentStream do generowania tekstu na podstawie danych wejściowych z tekstem i obrazem .

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)

Podobne podejście możesz zastosować w przypadkach użycia samego tekstu i czatu.

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

Wdrażanie zaawansowanych przypadków użycia

Typowe przypadki użycia opisane w poprzedniej sekcji tego samouczka są pomocne znasz już interfejs Gemini API. W tej sekcji opisano niektóre przypadków użycia, które można uznać za bardziej zaawansowane.

Wywoływanie funkcji

Wywołanie funkcji ułatwia pobieranie danych wyjściowych z uporządkowanych danych modeli generatywnych. Następnie możesz użyć tych danych wyjściowych do wywołania innych interfejsów API i zwrócenia odpowiednich danych odpowiedzi dla modelu. Innymi słowy, wywołanie funkcji pomaga Łączysz modele generatywne z systemami zewnętrznymi, aby wygenerowane treści zawiera najbardziej aktualne i dokładne informacje. Więcej informacji: samouczek wywoływania funkcji.

Policz tokeny

Jeśli używasz długich promptów, warto policzyć tokeny przed wysłaniem do modelu. Poniższe przykłady pokazują, jak używać atrybutu countTokens() do różnych celów:

// 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)

Opcje kontrolowania generowania treści

Generowanie treści możesz kontrolować, konfigurując parametry modelu i za pomocą funkcji ustawieniach bezpieczeństwa.

Skonfiguruj parametry modelu

Każdy prompt wysyłany do modelu zawiera wartości parametrów, które określają, model wygeneruje odpowiedź. Model może generować różne wyniki dla: różne wartości parametrów. Więcej informacji o Parametry modelu. Konfiguracja jest przechowywana przez cały okres istnienia instancji modelu.

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
)

Korzystanie z ustawień bezpieczeństwa

W ustawieniach bezpieczeństwa możesz dostosować prawdopodobieństwo otrzymania odpowiedzi, mogą zostać uznane za szkodliwe. Domyślnie ustawienia bezpieczeństwa blokują treści zawierające medium lub wysokie prawdopodobieństwo, że treści te mogą być niebezpieczne we wszystkich wymiarach. Ucz się Dowiedz się więcej o Ustawieniach bezpieczeństwa.

Aby skonfigurować jedno ustawienie bezpieczeństwa:

// 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)
  ]
)

Możesz też skonfigurować więcej niż jedno ustawienie bezpieczeństwa:

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]
)

Co dalej?

  • Projektowanie promptów to proces tworzenia promptów, które wywołują oczekiwane działanie odpowiedzi modelowych. Tworzenie dobrze ustrukturyzowanych promptów to podstawa jest częścią zapewniania dokładnych i wysokiej jakości odpowiedzi z modelu językowego. Poznaj sprawdzone metody pisania promptów.

  • Gemini oferuje kilka wersji modelu, które można dopasować do różnych zastosowań takie jak typy danych wejściowych i złożoność, wdrożenia czatu zadania związane z językiem okien dialogowych i ograniczeniami rozmiaru. Dowiedz się więcej o dostępnych modelach Gemini.