Generowanie tekstu za pomocą interfejsu Gemini API

Interfejs Gemini API może generować tekstowe dane wyjściowe, gdy jako dane wejściowe podasz tekst, obrazy, filmy i dźwięk.

Z tego przewodnika dowiesz się, jak wygenerować tekst za pomocą metod generateContent i streamGenerateContent. Więcej informacji o możliwościach Gemini w zakresie przetwarzania obrazu i dźwięku znajdziesz w instrukcjach dotyczących obrazudźwięku.

Zanim zaczniesz: skonfiguruj projekt i klucz interfejsu API

Zanim wywołasz interfejs Gemini API, musisz skonfigurować projekt i klucz interfejsu API.

Generowanie tekstu na podstawie danych wejściowych zawierających tylko tekst

Najprostszym sposobem generowania tekstu za pomocą interfejsu Gemini API jest przekazanie modelowi pojedynczego tekstu wejściowego, jak w tym przykładzie:

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

W tym przypadku prompt („Napisz historię o magicznym plecaku”) nie zawiera żadnych przykładów danych wyjściowych, instrukcji systemowych ani informacji o formatowaniu. To podejście zero-shot. W niektórych przypadkach prompty jednorazowe lub few-shot mogą przynieść wyniki bardziej zgodne z oczekiwaniami użytkownika. W niektórych przypadkach warto też podać instrukcje systemu, aby pomóc modelowi zrozumieć zadanie lub przestrzegać określonych wytycznych.

Generowanie tekstu na podstawie danych wejściowych zawierających tekst i obrazy

Interfejs Gemini API obsługuje dane multimodalne, które łączą tekst z plikami multimedialnymi. Poniższy przykład pokazuje, jak wygenerować tekst na podstawie tekstu i obrazu:

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

Podobnie jak w przypadku promptów tekstowych, prompty multimodalne mogą wykorzystywać różne podejścia i ulepszenia. W zależności od wyniku uzyskanego w tym przykładzie możesz dodać do promptu instrukcje lub bardziej szczegółowo opisać czynności. Więcej informacji znajdziesz w artykule Strategie dotyczące wyświetlania promptów.

Generowanie strumienia tekstu

Domyślnie model zwraca odpowiedź po zakończeniu całego procesu generowania tekstu. Możesz przyspieszyć interakcje, nie czekając na cały wynik, i strumieniowo obsługujesz częściowe wyniki.

Poniższy przykład pokazuje, jak zaimplementować strumieniowanie za pomocą metody streamGenerateContent do generowania tekstu z promptu tekstowego.

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

Tworzenie interaktywnego czatu

Za pomocą interfejsu Gemini API możesz tworzyć interaktywne czaty dla użytkowników. Funkcja czatu w interfejsie API umożliwia zebranie wielu rund pytań i odpowiedzi, dzięki czemu użytkownicy mogą stopniowo szukać odpowiedzi lub uzyskać pomoc w rozwiązaniu wieloczęściowych problemów. Ta funkcja jest idealna do aplikacji, które wymagają ciągłej komunikacji, takich jak czatboty, interaktywne programy nauczania czy asystenci obsługi klienta.

Ten przykładowy kod pokazuje podstawową implementację czatu:

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

Włączanie strumieniowego przesyłania czatu

Możesz też prowadzić transmisję strumieniową z czatem, jak w tym przykładzie:

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

Konfigurowanie generowania tekstu

Każdy prompt wysyłany do modelu zawiera parametry, które określają, jak model wygeneruje odpowiedzi. Parametry te możesz skonfigurować za pomocą GenerationConfig. Jeśli nie skonfigurujesz parametrów, model użyje opcji domyślnych, które mogą się różnić w zależności od modelu.

Z przykładu poniżej dowiesz się, jak skonfigurować kilka dostępnych opcji.

// 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 określa liczbę wygenerowanych odpowiedzi do zwrócenia. Obecnie wartość ta może być ustawiona tylko na 1. Jeśli nie jest ustawiona, przyjmuje domyślnie wartość 1.

stopSequences określa zbiór sekwencji znaków (do 5), które powodują zatrzymanie generowania danych wyjściowych. Jeśli zostanie podany, interfejs API zatrzyma się przy pierwszym wystąpieniu stop_sequence. Sekwencja zatrzymania nie będzie częścią odpowiedzi.

maxOutputTokens określa maksymalną liczbę tokenów, które mają być uwzględnione w kandydacie.

temperature określa losowość wyników. Wyższe wartości odpowiadają większej liczbie odpowiedzi kreacji, a niższe – bardziej deterministyczne. Wartości mogą się mieścić w zakresie [0,0, 2,0].

Możesz też skonfigurować poszczególne wywołania generateContent:

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

Wartości ustawione w przypadku poszczególnych wywołań zastępują wartości w konstruktorze modelu.

Co dalej?

Teraz, gdy znasz już podstawy interfejsu Gemini API, możesz spróbować:

  • Interpretacja obrazu: dowiedz się, jak używać natywnej interpretacji obrazu w Gemini do przetwarzania obrazów i filmów.
  • Instrukcje systemowe: instrukcje systemowe pozwalają kierować działaniem modelu na podstawie konkretnych potrzeb i przypadków użycia.
  • Rozumienie mowy: dowiedz się, jak używać natywnej funkcji Gemini do przetwarzania plików audio.