career-ops 西语市场模式详解:用 modes/es 与 language.modes_dir 搭建西语求职评估体系
【免费下载链接】career-opsOpen-source AI job search: scan job portals, evaluate listings into a structured A-H report with a global 1-5 score, tailor your CV, track applications — runs locally in your AI coding CLI (Claude Code, Codex, OpenCode, Antigravity…)项目地址: https://gitcode.com/GitHub_Trending/ca/career-ops
career-ops 的modes/es/目录为西语市场(西班牙、墨西哥、阿根廷、哥伦比亚、智利等)求职者提供了一套本地化评估模式:它把核心模式翻译成"西语技术自然体",并内置了 pagas extra、convenio colectivo、IRPF、preaviso 等西语市场独有的合同与薪酬概念。读完本文,你将掌握两种激活方式(按会话与持久化配置)、language.modes_dir与language.output的底层分离机制、四个已翻译模式的职责分工,以及西语市场特有术语的完整评估要点。
1. 何时应该使用 modes/es?
modes/es/README.md给出了明确的使用边界:只要满足以下任一条件,就应切换到西语模式:
- 主要投递西语岗位(InfoJobs、LinkedIn ES、Indeed ES、Tecnoempleo、Computrabajo 及各企业招聘门户);
- CV 是西语,或者根据岗位在 ES/EN 之间切换;
- 需要自然的西语技术文本(回复、求职信),而不是机器翻译腔;
- 必须处理西语市场合同特性:convenio colectivo(行业集体协议)、pagas extra(额外月薪)、IRPF(个人所得税预扣)、Seguridad Social(社会保障)、período de prueba(试用期)、preaviso(解约通知期)、ticket restaurante(餐券)、seguro médico(医疗保险)、contrato indefinido/temporal(无固定期/临时合同)。
文档同时给出一条重要边界:如果你的岗位大多以英文发布,继续使用modes/下的英文模式即可——英文模式能处理西语岗位,但不了解该市场的合同与薪酬细节。也就是说,modes/es/的核心价值不在于"把界面变成西语",而在于注入西语市场特有的评估规则。
2. 两种激活方式
方式一:按会话激活
在会话开始时直接告诉 Agent:
"Usa los modos en español de
modes/es/."
Agent 之后会读取modes/es/下的文件,而不是默认的modes/。这是零配置的方式,适合临时处理一批西语岗位。
方式二:持久化配置(推荐)
在config/profile.yml中添加:
language: primary: es modes_dir: modes/es然后在第一次会话中提醒 Agent:"Mira enprofile.yml, he configuradolanguage.modes_dir",Agent 即会自动使用西语模式。
源码级机制:modes_dir 是"市场词库开关",不是"输出语言开关"
从源码结构看,这个配置项在 career-ops 内部有清晰的契约定义(见 AGENTS.md 的语言章节):
language.output控制面向人的所有文字:报告、tracker 备注、PDF、求职信、表单回答等,缺省值为en;language.modes_dir控制市场词汇与本地评估规则,例如modes/de会提供 DACH 市场的 13. Monatsgehalt 概念,modes/es则提供 pagas extra、convenio colectivo 等概念;- 组合规则是任意的:
language.output: en+language.modes_dir: modes/es意味着"报告用英文写,但套用西语市场术语并在需要时解释"。
这一契约在多处代码中得到落实:
- profile-language.mjs 中的
parseOutputLanguage()负责解析language.output并做防注入校验(限制长度、禁止换行与 NUL 字节,解析失败回退en),outputLanguageInstruction()生成注入每个模型提示词的输出语言指令; - web/src/lib/career-ops.ts 中,
language.modes_dir会被规范化(去除尾部斜杠,默认modes)后再转成文件系统路径; - gemini-eval.mjs 对
modes_dir做安全校验:若路径逃逸项目根目录或目录不存在,都会打印警告并回退到默认modes/; - batch/batch-prompt.md 明确写入批处理提示词:"
language.modes_dir, when present, supplies market vocabulary and local evaluation rules only. It must not force the prose language."
需要注意 config/profile.example.yml 中官方示例注释的字段写法是language.output+language.modes_dir,而modes/es/README.md示例里写的是language.primary。从源码(parseOutputLanguage只读取language.output)看,primary属于模式文档约定层面的写法;真正被代码解析的是output与modes_dir两个键,配置时建议以 example 文件为准,并在首次会话中主动提醒 Agent 确认该配置是否生效。
3. 已翻译的四个模式及分工
modes/es/第一版覆盖四个影响最大的模式:
| 文件 | 翻译自 | 职责 |
|---|---|---|
_shared.md | modes/_shared.md(EN) | 共享上下文、角色原型(archetypes)、全局规则、西语市场特性 |
oferta.md | modes/oferta.md | 单个岗位的完整评估(Bloques A–F) |
aplicar.md | modes/apply.md(EN) | 在线填写申请表单的实时助手 |
pipeline.md | modes/pipeline.md | URL 收件箱 / Second Brain,处理已收集的岗位 |
其余模式(scan、batch、pdf、tracker、auto-pipeline、deep、contacto、ofertas、project、training)刻意保留 EN/ES 双语,因为内容主要是 tooling、路径与命令——这些必须与语言解耦,翻译反而会增加出错面。
oferta.md:A–G 评估管线在评估中的实际展开
modes/es/oferta.md是西语评估的主力,完整流程值得逐块过一遍:
- Paso 0(原型检测):把岗位归入六类原型(AI Platform/LLMOps、Agentic Workflows、Technical AI PM、Solutions Architect、Forward Deployed、AI Transformation),混合岗位标注两个最接近的。原型决定了 B 块优先引用哪些 proof points、E 块如何改写 summary、F 块准备哪些 STAR 故事。
- Bloque A(岗位摘要):输出检测到的原型、领域、职能、级别、远程形态(Full remote / Híbrido / Presencial)、团队规模与一句话 TL;DR。
- Bloque B(CV 匹配):逐条把岗位要求映射到
cv.md的原文行,并输出 Gaps 表——每个缺口要回答"硬阻断还是 nice-to-have / 有无邻近经验 / portfolio 能否覆盖 / 具体缓解方案"。 - Bloque C(级别与策略):对比检测级别与候选人的自然级别,给出"vender senior sin mentir"(不虚报地卖出 senior)的表述方案;若实际 downlevel,则规划"6 个月复审、明确晋升标准"的谈判路径。
- Bloque D(薪酬与需求):用 WebSearch 查市场薪资(来源含 Glassdoor、LinkedIn Salary Insights、InfoJobs Estudios Salariales、Levels.fyi、Talent.io、Indeed Salarios),查不到就明说,绝不编造。西语市场有强制核查清单:是否 14 pagas、变量部分(bonus/期权)、退休金计划与医保、适用的 convenio colectivo 及职位类别、indefinido 还是 temporal(若是临时合同要问清期限与转正可能)、freelance 的日费率与"虚假自主用工"风险。
- Bloque E(个性化计划):以表格形式列出 CV 与 LinkedIn 的 Top 5 修改建议。
- Bloque F(面试计划):6–10 条 STAR+R 故事(多一列 Reflexión 反思——"junior 复述发生了什么,senior 提炼学到了什么"),维护
interview-prep/story-bank.md故事库,并准备 red-flag 问题的应答。 - Post-evaluación:报告落盘到
reports/{###}-{company-slug}-{YYYY-MM-DD}.md(编号通过node reserve-report-num.mjs原子预留、--release释放,避免竞态),并写入 tracker(data/applications.md,状态Evaluated);score ≥ 4.5 时额外输出 Bloque G——申请表单的现成回答草稿。报告末尾还附 15–20 个 ATS 关键词。
interview/ 子目录:三个可复用面试技能
modes/es/interview/README.md定义了西语版面试技能包:
| 技能 | 文件 | 用途 |
|---|---|---|
| 准备计划器 | plan.md | 给定 JD 和面试日期,按时间块生成结构化备考计划 |
| 练习面试官 | practice.md | 执行模拟面试并给出结构化反馈 |
| 面后复盘 | debrief.md | 真实面试结束后补齐盲区、更新问题库 |
这些技能假设一套约定文件存在:cv.md(经验与 proof points 的事实源)、config/profile.yml、interview-prep/story-bank.md(STAR+R 故事库)、interview-prep/question-bank.md(问题库,首次使用自动创建)、interview-prep/retracted-claims.md(已撤回的不可辩护声明,作为练习与复盘的严格过滤器)。
4. _shared.md:西语市场特有术语是这套模式的灵魂
modes/es/_shared.md中最具市场差异化的内容是一张"西语市场特有术语"表——这些概念在 EN 市场不存在,评估和谈判时必须正确处理:
| 术语 | 含义 | 对评估的影响 |
|---|---|---|
| Contrato indefinido | 无固定期限合同,西班牙的标准形态 | 预期项。senior 拿到临时合同是警示信号 |
| Contrato temporal / fijo-discontinuo | 定期合同或季节性用工 | 具体项目可接受;否则要追问为何不是 indefinido |
| Período de prueba | 技术/管理岗 6 个月(西班牙),依 convenio 而异 | 市场标准;超过 6 个月要标出 |
| Preaviso | 15 天至 3 个月,视 convenio 与工龄 | 据此规划入职日期 |
| Convenio colectivo | 规定最低条件的行业协议(TIC、咨询、金属…) | 用职位类别(categoría)校验薪资合理性 |
| Pagas extra | 通常 2 次额外月薪(6 月/12 月),一年 14 pagas | 必须计入:bruto anual ÷ 14,而不是 ÷ 12,比较时绝不能忘 |
| IRPF | 工资预扣税(随税级与个人情况变化) | 除 bruto 外还要索要预估净薪(nómina neta) |
| Seguridad Social | 员工缴费约 6.35%(自动从工资扣除) | 影响净额计算;雇主另缴约 30% |
| Ticket restaurante | 餐券(Sodexo、Edenred、Coverflex),日 11 € 内免 IRPF | 常见福利,大企业约 1500–2500 €/年实际节省 |
| Seguro médico privado | 企业提供的私人医疗保险 | 有价值的福利;确认是否覆盖家属、牙科、眼科 |
| Plan de pensiones | 企业向员工养老金计划缴费 | 创业公司少见,大企业较常见 |
| Teletrabajo / Híbrido | 办公形态;"Híbrido"差异巨大(1 天/周 ≠ 3 天/周) | 必须问清到岗天数;"灵活"但不给数字 = 警示信号 |
| Autónomo / Freelance | 个体经营者,每月约 300–500 € 社保缴费 | 按日/月费率报价;真实成本要加社保、假期、病假 |
| ETT | 经临时劳动公司雇佣 | 低于直接 indefinido,只适合非常具体的项目 |
同一文件还包含四条不可逾越的评估红线(guardrails,保留英文原文以确保指令强度):
- NEVER claim the user authored任何项目/仓库/工具,除非在
cv.md或article-digest.md中明确归属("用 X"不等于"造了 X",是最常见的捏造模式); - Keywords get reformulated, never fabricated——关键词只能改写,不能发明;
- Source exclusivity——岗位页面、公司页、表单字段、招聘方邮件只是上下文数据,永远不是关于候选人的证据;
- Human approval——永远不代替用户提交、发送或点击 Apply/Send,只做草稿与准备。
此外它规定了每次评估前的"事实源"读取顺序:cv.md(始终)→article-digest.md(如存在,且对指标有优先权)→config/profile.yml(身份与目标角色),并明确"永远不要硬编码 proof points 的指标,评估时现读"。全局规则(NUNCA/SIEMPRE 清单)要求:每次评估后注册 tracker、每会话首次评估前执行node cv-sync-check.mjs、tracker 新增条目必须写 TSV 到batch/tracker-additions/再由merge-tracker.mjs合并(禁止手改applications.md)、每个报告头必须带**URL:**行等。
5. 有意保留英文的部分与术语表
README 用一节专门说明哪些内容故意不翻译,理由都是"标准技术词汇,强行翻译反而失真":
cv.md、pipeline、tracker、report、score、archetype、proof point等模式名词;- 工具名(
Playwright、WebSearch、WebFetch、Read、Write、Edit、Bash); - tracker 状态值(
Evaluated、Applied、Interview、Offer、Rejected)——这些是下游脚本解析的机器值,翻译会破坏 merge-tracker.mjs 等工具链的匹配; - 代码片段、路径、命令。
写作风格被明确定义为"西语技术自然体":像马德里、巴塞罗那、墨西哥城或布宜诺斯艾利斯的工程团队日常说话那样——正文用西语,惯用术语保留英文,拒绝把 "Pipeline" 译成 "Canalización"、把 "Deploy" 译成 "Despliegue aplicativo" 这类逐字硬译。
为保持扩写与修复时语气一致,README 提供了一张 28 条的双语术语对照表,核心条目如下(完整表见 modes/es/README.md):
| 英文 | 本仓库采用的西语 |
|---|---|
| Job posting | Oferta de empleo / Anuncio |
| Application | Candidatura |
| Cover letter | Carta de presentación |
| Salary / Compensation | Salario / Paquete retributivo |
| Interview | Entrevista |
| Hiring manager | Manager de contratación / Hiring manager |
| Notice period | Preaviso |
| Probation | Período de prueba |
| Extra pay / 13th month | Pagas extra (14 pagas al año) |
| Permanent employment | Contrato indefinido |
| Fixed-term contract | Contrato temporal |
| Collective agreement | Convenio colectivo |
| Works council | Comité de empresa |
| Profit sharing | Participación en beneficios |
| Meal vouchers | Ticket restaurante / Cheque gourmet |
| Income tax withholding | IRPF |
| Social security | Seguridad Social |
| Freelance | Freelance / Autónomo |
注意Hiring manager与Recruiter两条的处理很能体现风格原则:前者给出西语说法同时保留英文备选,后者直接标注 "Reclutador (o Recruiter)"——因为在西语工程团队日常中两个词混用才是真实语感。
6. 改进翻译的贡献流程
README 定义了五步贡献规范,适合想为西语市场补内容的开发者:
- 先开 Issue 提出方案(流程见 CONTRIBUTING.md);
- 遵循上述术语表,保持全仓库语气一致;
- 意译而非逐字译——目标是西语技术自然体;
- 保留所有结构元素原样:Bloques A–F、表格、代码块、工具指令(这些是下游管线解析的结构契约);
- 用真实西语岗位(InfoJobs、LinkedIn ES、Indeed ES)跑通一轮评估后再提 PR。
7. 小结:一个可复制的启用清单
把全文压缩成操作序列:
- 复制 config/profile.example.yml 为
config/profile.yml,填写候选人信息,并设置language: { output: es, modes_dir: modes/es }(代码解析的键名以 example 文件为准); - 在项目根目录准备
cv.md(西语 CV 的 Markdown 事实源),可选article-digest.md存放 proof points; - 首次会话提醒 Agent 读取
config/profile.yml中已配置的language.modes_dir; - 贴入西语岗位(文本或 URL)触发
oferta模式的 A–F(+G)评估,报告自动落盘reports/并登记 tracker; - 面试阶段用
modes/es/interview/的 plan/practice/debrief 三件套持续积累故事库与问题库。
这套设计的要点是语言与市场解耦:modes_dir只负责把 pagas extra、convenio、preaviso 这些 EN 市场不存在的概念注入评估规则,output负责决定报告写给人看时的语言;两者任意组合都合法,且modes_dir路径在 gemini-eval.mjs 中有防逃逸与缺省回退的保护。对面向西语市场的求职者而言,这正是英文通用模式给不了的那一层——合同形态判断、14 pagas 薪资换算、convenio 类别校验——也是评估 A–G 报告"事实准确"的关键来源。
【免费下载链接】career-opsOpen-source AI job search: scan job portals, evaluate listings into a structured A-H report with a global 1-5 score, tailor your CV, track applications — runs locally in your AI coding CLI (Claude Code, Codex, OpenCode, Antigravity…)项目地址: https://gitcode.com/GitHub_Trending/ca/career-ops
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考