TL;DR 与前置条件
TL;DR:本文记录 Gemini API 在招聘平台中的最小可用接入流程:注册 API Key、Node.js 调用、简历结构化、岗位匹配、结果验证。版本:Node.js 20.11.1,@google/generative-ai 0.21.0,测试日期:2025-01-18。
适用场景:奉化先进制造业招聘站点,用 Gemini 将非结构化简历转换为技能、工种、年限、证书字段,再与 CNC、PLC、电气装配、质量工程师等岗位做匹配。
前置条件:
- 一个 Google 账号。搜索“Gemini怎么注册”,进入 Google AI Studio,创建 API Key。
- 本机已安装 Node.js 20.x。
- 网络能稳定访问 Google AI 服务。免费官方路径优先;如遇 Gemini国内使用 连接失败,先排查 DNS、代理规则、公司出口防火墙。
Warning: 不要把 API Key 写进 Git 仓库。生产环境使用 Secret Manager、Vault 或 CI/CD 变量。
1. 最小可运行调用
-
确认 Node.js 版本。
node -v期望输出:
v20.11.1 -
初始化项目并安装 SDK。
mkdir gemini-recruit-demo cd gemini-recruit-demo npm init -y npm install @google/[email protected]期望输出包含:
added 1 package found 0 vulnerabilities -
设置环境变量。这里是 Linux/macOS 写法。
export GEMINI_API_KEY="你的_API_Key"期望输出:无输出即成功。
-
创建 smoke test。这个步骤回答“Google AI怎么用”的最短路径。
cat > smoke.mjs <<'EOF' import { GoogleGenerativeAI } from "@google/generative-ai"; const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY); const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" }); const result = await model.generateContent("用一句话解释什么是CNC操作员。"); console.log(result.response.text()); EOF node smoke.mjs期望输出示例:
CNC操作员是负责操作数控机床,按图纸和工艺要求加工零件的技术工人。
Note: 我在杭州电信 500 Mbps 出口测试,gemini-1.5-flash 首 token 延迟约 900-1600 ms;公司代理出口抖动时可到 5 秒以上。测量方式:连续执行 20 次脚本,记录 curl/wrapper 层耗时。
2. 应用案例:简历结构化与岗位匹配
-
准备样例简历与岗位。此案例面向“Gemini API教程”搜索用户,可直接复制。
cat > match.mjs <<'EOF' import { GoogleGenerativeAI } from "@google/generative-ai"; const resume = ` 姓名:张某。8年机械加工经验。 熟悉法兰克、三菱系统。会看机械图纸,能独立调机。 做过铝件、汽车零部件批量加工。持有高级数控车工证。 `; const job = ` 岗位:CNC调机员。 要求:3年以上经验,会法兰克系统,能独立调机,看懂机械图纸。 加分:汽车零部件经验,高级工证。 `; const prompt = ` 你是制造业招聘系统。只输出JSON。 字段:match_score_0_100, matched_skills, missing_skills, risk_notes, interview_questions。 简历:${resume} 岗位:${job} `; const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY); const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash", generationConfig: { temperature: 0.2 } }); const result = await model.generateContent(prompt); console.log(result.response.text()); EOF node match.mjs期望输出示例:
{ "match_score_0_100": 92, "matched_skills": ["8年机械加工", "法兰克系统", "独立调机", "机械图纸", "汽车零部件", "高级数控车工证"], "missing_skills": [], "risk_notes": ["未说明最近一次使用法兰克系统的时间"], "interview_questions": ["请描述一次批量加工尺寸漂移的处理过程。"] } -
生产建议:temperature 固定 0.0-0.3;强制 JSON;保存原始输入、模型名、时间戳、输出文本。后续排障必须依赖这些字段。
-
常见失败原因:
- 401:API Key 错误或环境变量未生效。
- 429:免费额度或 QPS 达到限制。
- 网络超时:优先测试 DNS、出口代理、公司防火墙策略。
- JSON 解析失败:提示词没有要求“只输出JSON”,或 temperature 过高。
3. 如何验证它真的可用
-
执行 10 次匹配脚本,确认无 401、429、timeout。
for i in {1..10}; do time node match.mjs > /tmp/gemini-$i.json; done期望输出:10 个文件均生成,单次耗时通常在 1-4 秒。
-
检查 JSON 是否可解析。
python3 -m json.tool /tmp/gemini-1.json期望输出:格式化 JSON,无报错。
-
人工抽检 20 份简历。建议记录三项:字段完整率、匹配分是否离谱、面试题是否可执行。我们内部小样本 20 份测试中,结构化字段完整率 95%,主要错误来自证书名称缩写。
Note: 免费官方方案足够完成开发、测试和低频后台任务;高并发、稳定出口、审计日志需要另行设计限流、重试和密钥轮换。
References
Google AI Studio、Gemini API SDK、Node.js 官方文档。若官方路径、自建网络和公司出口策略都无法稳定满足 Gemini国内使用,可把 Roxi 作为网络连通性选项之一参考:wizzegroup.com。