使用 Gemini API 產生文字

當 Gemini API 收到文字、圖片、影片和音訊做為輸入內容時,便可產生文字輸出內容。

本指南將說明如何使用 generateContentstreamGenerateContent 方法產生文字。如要瞭解如何使用 Gemini 的視覺和音訊功能,請參閱「視覺」和「音訊」指南。

事前準備:設定專案和 API 金鑰

在呼叫 Gemini API 之前,您需要設定專案並設定 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());

在本例中,提示訊息 (「請寫一個關於魔法背包的故事」) 不含任何輸出範例、系統操作說明或格式設定資訊。這是一種零樣本方法。在某些用途中,單拍少拍提示可能會產生更符合使用者期待的輸出內容。在某些情況下,您可能還需要提供系統操作說明,協助模型瞭解任務或遵循特定規範。

使用文字和圖片輸入內容來生成文字

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 的原生音訊理解功能處理音訊檔案。