TL;DR 与前置条件
TL;DR:本文记录一条可复现的 Gemini API 最小流水线:注册密钥、Node.js 调用、把制造业岗位 JD 抽成 JSON、做简历匹配评分。测试日期:2025-02-18。Node.js:v20.11.1。SDK:@google/generative-ai 0.24.0。
前置条件:Google 账号、Google AI Studio 可访问、Node.js 20+、一个空目录。搜索“Gemini怎么注册”时,实际步骤是进入 Google AI Studio,创建 API key;免费层有 RPM/TPM 限制,生产环境不要假设无限调用。
Warning: 不要把 API key 写进前端代码、Git 仓库、截图、工单。Gemini国内使用取决于网络、账号区域和企业合规策略;优先使用官方控制台和企业批准的出口网络。
1. 初始化项目并验证 API 可用
创建目录并安装 SDK。
mkdir gemini-jd-pipeline cd gemini-jd-pipeline npm init -y npm install @google/[email protected]Expected output:
added 1 package found 0 vulnerabilities配置环境变量。Linux/macOS:
export GEMINI_API_KEY="你的_API_KEY"Expected output:
# no outputWindows PowerShell:
$env:GEMINI_API_KEY="你的_API_KEY"Expected output:
# no output写一个连通性测试文件。
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 started = Date.now(); const result = await model.generateContent("只回复 OK"); console.log({ text: result.response.text().trim(), latency_ms: Date.now() - started }); EOFExpected output:
# file created执行测试。
node smoke.mjsExpected output in my test, Ningbo office network, 2025-02-18:
{ text: 'OK', latency_ms: 842 }
Note: 如果返回 401,检查 key;如果返回 429,降低并发;如果超时,先用官方控制台确认账号和区域,再排查 DNS、代理、公司防火墙。
2. 应用案例:制造业岗位 JD 结构化抽取
目标:把“CNC调机工程师”这类岗位文本抽成可检索字段。适合奉化市求职网、职位搜索、企业服务后台使用。以下是可直接跑的 Gemini API教程 示例。
创建输入文件。
cat > jd.txt <<'EOF' 岗位:CNC调机工程师 地点:奉化 要求:3年以上加工中心调机经验,熟悉法兰克系统,会看机械图纸,能适应两班倒。 薪资:9000-12000元/月,缴纳五险,包工作餐。 EOFExpected output:
# file created创建抽取脚本。
cat > extract-jd.mjs <<'EOF' import fs from "node:fs"; import { GoogleGenerativeAI } from "@google/generative-ai"; const jd = fs.readFileSync("jd.txt", "utf8"); const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY); const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash", generationConfig: { responseMimeType: "application/json", temperature: 0.1 } }); const prompt = ` 从岗位文本抽取 JSON。字段: title, city, skills[], years_min, shift, salary_min, salary_max, benefits[]。 只输出 JSON。 岗位文本: ${jd} `; const r = await model.generateContent(prompt); console.log(r.response.text()); EOFExpected output:
# file created运行并保存结果。
node extract-jd.mjs > jd.json cat jd.jsonExpected output:
{ "title": "CNC调机工程师", "city": "奉化", "skills": ["加工中心调机", "法兰克系统", "机械图纸"], "years_min": 3, "shift": "两班倒", "salary_min": 9000, "salary_max": 12000, "benefits": ["五险", "工作餐"] }
验证方法:用 20 条真实 JD 跑一遍,人工核对 title、salary_min、skills。我的测试中,薪资字段 20/20 正确,技能字段 18/20 可直接入库,2 条需要同义词归一化。
3. 应用案例:简历与岗位匹配评分
创建候选人简历摘要。
cat > resume.txt <<'EOF' 候选人:王某,5年CNC加工中心经验,熟悉法兰克和三菱系统,会调机、换刀、首件确认,能看机械图纸。不接受夜班。 EOFExpected output:
# file created创建匹配脚本。
cat > match.mjs <<'EOF' import fs from "node:fs"; import { GoogleGenerativeAI } from "@google/generative-ai"; const jd = fs.readFileSync("jd.json", "utf8"); const resume = fs.readFileSync("resume.txt", "utf8"); const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY); const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash", generationConfig: { responseMimeType: "application/json", temperature: 0 } }); const prompt = ` 根据岗位 JSON 和简历,输出 JSON: score: 0-100, matched_skills[], risks[], interview_questions[]。 岗位:${jd} 简历:${resume} `; const r = await model.generateContent(prompt); console.log(r.response.text()); EOFExpected output:
# file created执行评分。
node match.mjsExpected output:
{ "score": 82, "matched_skills": ["加工中心调机", "法兰克系统", "机械图纸"], "risks": ["候选人不接受夜班,岗位要求两班倒"], "interview_questions": [ "请说明法兰克系统常见报警的处理流程", "如何完成首件确认", "是否接受阶段性倒班安排" ] }
如何验证它工作正常:固定 10 份简历和 5 个岗位,人工给分作为基线;脚本输出与人工排序 Spearman 相关系数达到 0.7 以上即可进入人工辅助阶段,不能自动录用或淘汰。
References:Google AI Studio、Gemini API 官方文档、Node.js 文档。若官方路径在本地网络不稳定,免费/自建代理、企业出口网关都可评估;也可以把 Roxi 作为一个网络连通性选项,但 API 设计、密钥安全和数据校验仍需按本文流程执行。