Samouczek: pierwsze kroki z interfejsem Gemini API


Ten samouczek pokazuje, jak uzyskać dostęp do interfejsu Gemini API w środowisku Node.js za pomocą pakietu SDK Google AI JavaScript.

Z tego samouczka dowiesz się, jak:

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

Wymagania wstępne

W tym samouczku zakładamy, że umiesz tworzyć aplikacje Node.js.

Aby ukończyć ten samouczek, upewnij się, że Twoje środowisko programistyczne spełnia wymagania następujące wymagania:

  • Node.js w wersji 18 lub nowszej
  • npm

Konfigurowanie projektu

Zanim wywołasz Gemini API, musisz skonfigurować projekt, który obejmuje skonfigurować klucz interfejsu API, zainstalować pakiet SDK i zainicjować model.

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. Zamiast tego użyj magazynu obiektów tajnych dla klucza interfejsu API.

Wszystkie fragmenty kodu w tym samouczku zakładają, że używasz klucza interfejsu API jako zmienną środowiskową.

Zainstaluj pakiet SDK

Aby używać interfejsu Gemini API we własnej aplikacji, musisz zainstalować Pakiet GoogleGenerativeAI dla Node.js:

npm install @google/generative-ai

Zainicjuj model generatywny

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

const { GoogleGenerativeAI } = require("@google/generative-ai");

// Access your API key as an environment variable (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

// ...

// The Gemini 1.5 models are versatile and work with most use cases
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash"});

// ...

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:

W sekcji zaawansowanych przypadków użycia znajdziesz informacje o interfejsie Gemini API i umieszczania.

Generuj tekst na podstawie samego tekstu

Jeśli prompt zawiera tylko tekst, użyj modelu Gemini 1.5 z funkcją generateContent, aby wygenerować tekst:

const { GoogleGenerativeAI } = require("@google/generative-ai");

// Access your API key as an environment variable (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

async function run() {
  // The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
  const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash"});

  const prompt = "Write a story about a magic backpack."

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

run();

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

Gemini 1.5 Flash i 1.5 Pro obsługują multimodalne wprowadzanie danych, dzięki czemu można w nim 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 modeli Gemini 1.5 z metodę generateContent do generowania tekstowych danych wyjściowych:

const { GoogleGenerativeAI } = require("@google/generative-ai");
const fs = require("fs");

// Access your API key as an environment variable (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

// Converts local file information to a GoogleGenerativeAI.Part object.
function fileToGenerativePart(path, mimeType) {
  return {
    inlineData: {
      data: Buffer.from(fs.readFileSync(path)).toString("base64"),
      mimeType
    },
  };
}

async function run() {
  // The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
  const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });

  const prompt = "What's different between these pictures?";

  const imageParts = [
    fileToGenerativePart("image1.png", "image/png"),
    fileToGenerativePart("image2.jpeg", "image/jpeg"),
  ];

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

run();

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.

const { GoogleGenerativeAI } = require("@google/generative-ai");

// Access your API key as an environment variable (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

async function run() {
  // The Gemini 1.5 models are versatile and work with multi-turn conversations (like chat)
  const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash"});

  const chat = model.startChat({
    history: [
      {
        role: "user",
        parts: [{ text: "Hello, I have 2 dogs in my house." }],
      },
      {
        role: "model",
        parts: [{ text: "Great to meet you. What would you like to know?" }],
      },
    ],
    generationConfig: {
      maxOutputTokens: 100,
    },
  });

  const msg = "How many paws are in my house?";

  const result = await chat.sendMessage(msg);
  const response = await result.response;
  const text = response.text();
  console.log(text);
}

run();

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 .

//...

const result = await model.generateContentStream([prompt, ...imageParts]);

let text = '';
for await (const chunk of result.stream) {
  const chunkText = chunk.text();
  console.log(chunkText);
  text += chunkText;
}

//...

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

// Use streaming with text-only input
const result = await model.generateContentStream(prompt);

Aby dowiedzieć się, jak utworzyć instancję, zobacz przykład czatu powyżej. chat.

// Use streaming with multi-turn conversations (like chat)
const result = await chat.sendMessageStream(msg);

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.

Korzystanie z wektorów dystrybucyjnych

Umieszczanie to technika używana do przedstawiania informacji. jako listę liczb zmiennoprzecinkowych w tablicy. Dzięki Gemini możesz zaprezentować tekstu (słów, zdań i bloków tekstu) w postaci wektorowej, dzięki czemu łatwiej będzie porównać reprezentacje właściwościowe. Na przykład 2 teksty o tym samym identyfikatorze tematyka lub nastawienie powinny mieć podobne wektory dystrybucyjne, zidentyfikowanych za pomocą technik porównań matematycznych, takich jak podobieństwo cosinusowe.

Użyj modelu embedding-001 z metodą embedContent (lub batchEmbedContent), aby wygenerować wektory dystrybucyjne. Przykład poniżej generuje wektor dystrybucyjny dla pojedynczego ciągu znaków:

const { GoogleGenerativeAI } = require("@google/generative-ai");

// Access your API key as an environment variable (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

async function run() {
  // For embeddings, use the embedding-001 model
  const model = genAI.getGenerativeModel({ model: "embedding-001"});

  const text = "The quick brown fox jumps over the lazy dog."

  const result = await model.embedContent(text);
  const embedding = result.embedding;
  console.log(embedding.values);
}

run();

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
const { totalTokens } = await model.countTokens(prompt);
// For text-and-image input (multimodal)
const { totalTokens } = await model.countTokens([prompt, ...imageParts]);
// For multi-turn conversations (like chat)
const history = await chat.getHistory();
const msgContent = { role: "user", parts: [{ text: msg }] };
const contents = [...history, msgContent];
const { totalTokens } = await model.countTokens({ contents });

Opcje kontrolowania generowania treści

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

Pamiętaj, że przekazanie do żądania modelu generationConfig lub safetySettings (np. generateContent) całkowicie zastąpi obiekt konfiguracji o tej samej nazwie przekazanym w getGenerativeModel.

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.

const generationConfig = {
  stopSequences: ["red"],
  maxOutputTokens: 200,
  temperature: 0.9,
  topP: 0.1,
  topK: 16,
};

// The Gemini 1.5 models are versatile and work with most use cases
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash",  generationConfig });

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:

import { HarmBlockThreshold, HarmCategory } from "@google/generative-ai";

// ...

const safetySettings = [
  {
    category: HarmCategory.HARM_CATEGORY_HARASSMENT,
    threshold: HarmBlockThreshold.BLOCK_ONLY_HIGH,
  },
];

// The Gemini 1.5 models are versatile and work with most use cases
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash", safetySettings });

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

const safetySettings = [
  {
    category: HarmCategory.HARM_CATEGORY_HARASSMENT,
    threshold: HarmBlockThreshold.BLOCK_ONLY_HIGH,
  },
  {
    category: HarmCategory.HARM_CATEGORY_HATE_SPEECH,
    threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
  },
];

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.