當 Gemini API 收到文字、圖片、影片和音訊做為輸入內容時,便可產生文字輸出內容。
本指南將說明如何使用 generateContent
和 streamGenerateContent
方法產生文字。如要瞭解如何使用 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 的基本概念後,您可以嘗試以下操作: