Google AI Studio怎么用?从创建API密钥到调用Gemini生成结构化结果
本文从首次使用场景出发,介绍如何进入Google AI Studio、创建并管理Gemini API密钥,在测试区提交提示词并检查模型输出,同时演示如何把会议文本整理为JSON。文中还说明结构化输出、参数调试、密钥保护、额度、地区和计费等需
小睿AI导航 ARTICLE DETAIL
OpenRouter提供OpenAI兼容的调用接口,可通过同一请求结构访问不同模型。本文从服务端密钥配置开始,用JavaScript演示聊天请求和模型切换,说明参数差异、状态检查、超时与有限重试,并介
样式 7 内容详情排版
OpenRouter是第三方模型路由服务,不是各模型原厂API。它提供OpenAI兼容接口,让应用可以沿用相近的消息结构,但模型能力、供应商路由和计费仍需分别核对。统一模型接口减少的是接入代码,不会消除模型之间的差异。
登录OpenRouter后,在密钥管理页面创建API密钥,并按账户页面提示检查余额或支付设置。将密钥写入服务端环境变量OPENROUTER_API_KEY,不要放在浏览器代码、公开仓库、截图或请求日志中。网页应用应由自己的后端代发请求,同时增加用户鉴权和用量限制。
从模型页面复制两个要测试的完整模型标识,分别配置为MODEL_A和MODEL_B。不要用展示名称代替模型标识;运行前核对当前访问权限、模型状态和支持参数。
下面的示例运行在支持fetch的Node.js服务端环境。聊天接口为https://openrouter.ai/api/v1/chat/completions,鉴权使用Bearer密钥。示例不启用流式响应,便于直接检查返回状态和usage。
const key = process.env.OPENROUTER_API_KEY;
const models = [process.env.MODEL_A, process.env.MODEL_B];
if (!key || models.some(m => !m)) throw new Error('请配置密钥和两个模型标识');
async function chat(model) {
for (let attempt = 0; attempt < 2; attempt++) {
const started = Date.now();
const response = await fetch('https://openrouter.ai/api/v1/chat/completions', { method: 'POST', headers: { Authorization: `Bearer ${key}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ model, messages: [{ role: 'user', content: '用三句话说明接口超时与模型生成失败的区别。' }], max_tokens: 300 }), signal: AbortSignal.timeout(30000) });
const elapsed = Date.now() - started;
const data = await response.json().catch(() => null);
console.log({ model, status: response.status, elapsed_ms: elapsed, usage: data?.usage });
if (response.status === 429 && attempt === 0) {
const hint = response.headers.get('retry-after');
const seconds = hint === null ? NaN : Number(hint);
if (Number.isFinite(seconds) && seconds > 30) throw new Error('等待时间较长,停止自动重试');
await new Promise(resolve => setTimeout(resolve, Number.isFinite(seconds) ? Math.max(1000, seconds * 1000) : 2000 + Math.random() * 1000));
continue;
}
if (!response.ok || !data || data.error) throw new Error(`请求失败:${response.status}`);
return data;
}
}
for (const model of models) { try { const result = await chat(model); console.log(model, result.choices?.[0]?.message?.content); } catch (error) { console.error(model, error.message); } }
这段代码使用相同问题,只改变model字段,便于比较两次输出。max_tokens用于约束生成长度,但应先确认所选模型支持该参数。示例最多对429响应重试一次;超时、网络中断和其他错误不自动重试,因为请求可能已经执行,重复提交可能增加费用。
工具调用、JSON结构化输出和上下文长度都可能因模型及供应商而异。需要严格参数支持时,可核对OpenRouter的provider.require_parameters设置;即使接口接受请求,也仍要验证输出结构和工具调用结果。
每次调用记录业务请求标识、请求模型、返回模型、HTTP状态、错误类别、耗时,以及usage中的prompt_tokens和completion_tokens。示例耗时是收到响应头前的时间;生产环境还应记录读取响应体结束的总耗时。不要默认完整记录提示词,尤其是包含个人信息或业务数据时。
费用以账户活动记录和实际结算为准;若响应提供usage.cost,可保存用于关联核对。输入输出Token估算只能作为辅助,缓存、工具调用及其他计费项目可能影响结果。比较模型时固定测试题、长度限制和评价标准,同时检查正确性、格式合规、延迟与费用,不把一次输出当成稳定结论。