Gemini API是Google提供的先进AI服务,支持文本、图像等多种输入方式。以下是基础调用的代码示例和说明。
首先需要安装必要的SDK并设置API密钥:
npm install @google/generative-ai
// 初始化Gemini客户端
const { GoogleGenerativeAI } = require("@google/generative-ai");
// 使用您的API密钥
const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);
简单的文本生成调用:
async function generateText(prompt) {
// 获取模型实例
const model = genAI.getGenerativeModel({ model: "gemini-pro" });
// 生成内容
const result = await model.generateContent(prompt);
const response = await result.response;
return response.text();
}
// 使用示例
generateText("写一篇关于人工智能的文章")
.then(text => console.log(text))
.catch(error => console.error("Error:", error));
控制输出随机性 (0-1)
model.generateContent({ temperature: 0.5 })
限制响应长度
model.generateContent({ maxOutputTokens: 256 })
保持对话上下文
model.startChat({ history: [...] })
正确配置认证是使用Gemini API的关键。以下是认证流程和注意事项。
从Google AI Studio获取您的API密钥
保护您的API密钥免受泄露
使用环境变量存储密钥
限制API密钥的访问范围
设置使用配额和API限制
定期轮换API密钥
| 错误码 | 含义 | 解决方案 |
|---|---|---|
| 401 Unauthorized | 无效的API密钥 | 检查密钥是否正确,或生成新的API密钥 |
| 403 Forbidden | API访问权限不足 | 确保项目已启用Gemini API,核对IAM权限 |
| 429 Too Many Requests | 超出配额限制 | 检查配额使用情况,考虑升级计划或调整调用频率 |
Gemini API可能返回多种类型的错误,合理的错误处理可以提高应用程序的稳定性。
请求格式不正确或缺少必要参数
客户端权限不足
服务器暂时无法处理请求
请求内容违反了安全策略
响应生成超出时间限制
async function safeGenerate(prompt) {
try {
const model = genAI.getGenerativeModel({ model: "gemini-pro" });
const result = await model.generateContent(prompt);
return await result.response.text();
} catch (error) {
console.error('API调用失败:', error);
// 分类处理不同错误
if (error.response) {
// API响应错误
const { status, statusText } = error.response;
switch (status) {
case 400:
throw new Error(`请求无效: ${statusText}`);
case 401:
throw new Error('认证失败,请检查API密钥');
case 403:
throw new Error('权限不足,请核对项目权限');
case 429:
throw new Error('请求过于频繁,请稍后再试');
case 500:
throw new Error('服务器内部错误');
default:
throw new Error(`未知API错误: ${status} - ${statusText}`);
}
} else if (error.request) {
// 无响应错误
throw new Error('无法连接到API服务,请检查网络');
} else {
// 其他错误
throw new Error('未知错误: ' + error.message);
}
}
}
async function generateWithRetry(prompt, retries = 3) {
const baseDelay = 1000; // 初始延迟1秒
for (let i = 0; i < retries; i++) {
try {
return await safeGenerate(prompt);
} catch (error) {
// 仅在特定错误时重试
if (error.message.includes('请求过于频繁') ||
error.message.includes('服务器内部错误') ||
error.message.includes('无法连接到API')) {
// 指数退避
const delay = baseDelay * Math.pow(2, i) + Math.random() * 1000;
console.warn(`尝试${i + 1}/${retries}失败,${delay}ms后重试...`);
await new Promise(resolve => setTimeout(resolve, delay));
continue;
}
throw error; // 其他错误直接抛出
}
}
throw new Error(`超出最大重试次数(${retries})`);
}
遵循这些最佳实践可以显著提高您的Gemini API集成质量和性能。
使用流式响应处理大文本输出,降低内存占用和延迟
合理设置maxOutputTokens以避免生成不必要的长文本
批处理多个请求以提高吞吐量
实现本地缓存机制以减少重复API调用
对所有用户输入进行清理,防止提示注入攻击
实施速率限制防止滥用您的API集成
定期审计API使用情况和权限设置
考虑内容审核,特别是在用户生成内容中
输入您的API请求,我们将帮助诊断潜在问题
了解其他开发人员在使用Gemini API时遇到的问题及解决方案。
开发者尝试使用API生成医疗建议内容时频繁遇到内容安全限制错误(403)。
某些特定医疗术语和组合触发了Gemini的安全过滤机制,尽管内容本身无害。
电商网站的产品描述生成功能在大流量时段经常遇到429(过多请求)错误,影响用户体验。
相似的请求频繁发送给API,未利用缓存,导致快速消耗配额。