当以文本、图片、视频和音频的形式提供输入时,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 的基础知识,不妨尝试: