首页
/ career-ops 波兰求职 aplikuj 模式解析:在浏览器里实时填报申请表单的 AI 助理工作流

career-ops 波兰求职 aplikuj 模式解析:在浏览器里实时填报申请表单的 AI 助理工作流

2026-09-06 18:04:59作者:劳婵绚Shirley

modes/pl/aplikuj.md 是 career-ops 项目波兰语模式集(modes/pl/)中的核心成员之一。它描述的是一个交互式"表单填报助理"模式:当候选人在 Chrome 中打开一份求职申请表时,AI Agent 读取当前页面内容,自动匹配此前评估该公司的报告(report),复用既有评分与答题草稿,并为表单中的每个问题现场生成可直接复制粘贴的个性化回答。本文以此文档为骨架,结合仓库内对应实现与波兰市场本地化资料,完整还原该模式的 8 步工作流、波兰表单的特殊处理规则与落地命令,供开发者理解如何把"评估报告"变成"可提交的申请答案"。

一、aplikuj 模式在模式体系中的位置

career-ops 将整套求职工作流拆成多种可组合的"模式(mode)",存放在 modes/ 目录下。面向波兰市场的候选者使用 modes/pl/ 波兰语模式集,其中 README.md 明确列出首批翻译的四个最高影响模式:

文件 翻译自 角色
_shared.md modes/_shared.md (EN) 共享上下文、目标角色原型、全局规则、波兰市场专有术语
oferta.md modes/oferta.md (ES) 完整岗位评估(A–F 区块,modes/pl/oferta.md
aplikuj.md modes/apply.md (EN) 本文主题:实时申请表单填报助理
pipeline.md modes/pipeline.md (ES) URL 收件箱 / "第二大脑"批量处理(modes/pl/pipeline.md

aplikuj.md 的英文原型是 modes/apply.md。需要注意:波兰语版是一份聚焦核心流程的精简翻译,而英文版额外包含更厚的"提交前门禁"(liveness 存活校验、blacklist 黑名单、knock-out 资格问题预扫描、移民身份与司法辖区禁用内容警告等,见 modes/apply.md 的 Step 5/5b/5c/5d)。波兰语版把叙述重心放在"读屏 → 匹配报告 → 生成答案"这一主线,因此本文按 aplikuj.md 自身的结构讲解,并在相应小节标注英文原版中可选的扩展门禁作为进阶参考。

何时激活这套波兰模式

modes/pl/README.md,当满足以下任一条件时应使用 modes/pl/

  • 主要申请波兰语招聘启事(Pracuj.pl、No Fluff Jobs、Just Join IT、LinkedIn PL、Bulldogjob、公司招聘页);
  • 你的 CV 是波兰语,或按岗位在 PL 与 EN 之间切换;
  • 需要自然、技术性的波兰语回答与动机信,而非机器翻译腔;
  • 需要正确应对波兰市场的合同特殊性:UoP、B2B、umowa zlecenie、试用期、notice period、ZUS、PPK 等。

激活有两种方式:会话开始时告诉 Agent "使用 modes/pl/ 中的波兰模式"(会话级);或在 config/profile.yml 中永久配置:

language:
  primary: pl
  modes_dir: modes/pl

(对照 config/profile.example.yml 中的 language 结构。英文原版默认模式仍可用于波兰语岗位,只是不掌握波兰市场细节。)

二、前置条件:Playwright 可见模式与无浏览器兜底

aplikuj.md 将运行环境分成两档:

  • 理想情况 —— Playwright 可见模式:候选人在浏览器中能亲眼看到 Agent 操作页面,Agent 可以真正与表单交互(读快照、定位字段、填写)。可见模式也避免"盲填"带来的提交错误。
  • 无 Playwright 的情况:候选人改为分享屏幕截图(Read 工具可读图)、手动粘贴表单问题文本,或只提供公司 + 岗位名让 Agent 先检索上下文。

仓库在工具使用上有明确的纪律约束。modes/pl/_shared.md 的"工具"表中强调一条关键限制:禁止 2 个及以上 Agent 并行使用 Playwright——它们共享同一个浏览器实例;而 WebSearch 用于薪资、公司文化与 LinkedIn 联系人检索,WebFetch 作为静态页面回退。

三、8 步工作流总览

aplikuj.md 用一段简洁的伪代码定义了模式的整体闭环:

1. WYKRYJ       -> 读取活动中的 Chrome 标签页(截图 / URL / 标题)
2. ZIDENTYFIKUJ -> 从页面中抽取公司 + 岗位
3. WYSZUKAJ     -> 与 reports/ 下已有报告匹配
4. ZAŁADUJ      -> 读取完整报告 + Blok G(若存在)
5. PORÓWNAJ     -> 屏幕上的岗位与已评估岗位是否一致?有变化则告警
6. PRZEANALIZUJ -> 识别表单中所有可见问题
7. WYGENERUJ    -> 为每个问题生成个性化回答
8. ZAPREZENTUJ  -> 展示格式化输出,便于直接复制

下文按文档中编号的"步骤"逐条展开,并给出命令与实现依据。

四、分步拆解:从检测页面到复制粘贴

步骤 1 —— 检测当前岗位(Wykryj ofertę)

有 Playwright 时,对活动页面做快照(snapshot),读取标题、URL 与可见内容。无 Playwright 时,依次向候选人索要:① 表单截图;② 表单问题文本;③ 或公司 + 岗位名以便检索既有上下文。这一步决定了后续所有素材的来源,是"读屏"的起点。

步骤 2 —— 识别公司与岗位并加载上下文(Zidentyfikuj i załaduj kontekst)

文档规定严格的处理次序:

  1. 从页面抽取公司名与岗位名;
  2. reports/ 中按公司名做大小写不敏感 grep
  3. 命中 → 加载完整报告;
  4. 若报告中含 Blok G(答题草稿),将其作为本次答题的基底;
  5. 未命中 → 提醒候选人,并建议先跑一次快速 auto-pipeline 完成评估。

这里有两个仓库层面的细节值得展开:

报告的命名与定位。 评估产物遵循 modes/pl/oferta.md 约定的文件命名:

reports/{###}-{company-slug}-{YYYY-MM-DD}.md
  • {###}:下一个顺序号(三位、零填充)。为避免并发竞态,需先运行 node reserve-report-num.mjs 原子预留(stdout 返回 {###}),写盘后再运行 node reserve-report-num.mjs --release {###} 释放哨兵;
  • {company-slug}:公司名小写、空格改连字符;
  • {YYYY-MM-DD}:当日日期。

Blok G 到底是什么。 在波兰语模式家族中,oferta.md 的报告模板把答题草稿放在:

## G) Szkice odpowiedzi do aplikacji
(仅当 score >= 4.5 时生成——表单问题的答题草稿)

也就是说,aplikuj 模式所谓的 "Blok G" 就是评估阶段为高分区(≥4.5/5)岗位预写的申请回答草稿。这与英文生态中报告模板 modes/oferta.md 的区块略有差异——英文模板中 ## G) Posting Legitimacy 是岗位可信度评估、答题草稿在 ## H) Draft Application Answers;波兰语版将"答题草稿"合并为 G。阅读报告时应按语言模式家族的约定识别草稿区块,避免跨体系混读。

(英文原版 modes/apply.md 还提供脚本化读取方式:node application-answers.mjs --report <report路径> --read --strict,返回 JSON 形式的既往回答快照,或 --read-draft 读取草稿版区块;波兰语文档未展开这一步,可按需参考英文版调用。)

步骤 3 —— 检测岗位是否变化(Wykryj zmiany roli)

当屏幕上的岗位与已评估报告不一致时,文档要求先告警再决策

  • 提示候选人:"岗位已从 [X] 变为 [Y]。你是想让我重新评估,还是把回答适配到新标题?"
  • 选择适配:基于现有材料按新岗位改写回答,不重新评估;
  • 选择重估:跑完整 A–F 评估,更新报告并重新生成 Blok G;
  • 同步 tracker:必要时在 data/applications.md 中更新岗位标题。

这与英文版 Step 3 的语义一致——绝不在岗位漂移时"静默作答"。英文版还要求在起草前核对表单指向的岗位仍然存活、公司与报告匹配,若岗位已关闭则拒绝生成正式文案(除非候选人明确覆盖),这是更严格的前置门禁(对应 modes/apply.md Step 5 Preflight);波兰语版将此收敛为岗位差异告警。

步骤 4 —— 分析表单问题(Przeanalizuj pytania formularza)

需要穷尽识别页面上所有可见问题,文档按控件类型给出清单:

  • 开放式文本域:动机信、 "为什么选择这个岗位"、求职动机等;
  • 下拉列表:来源渠道("如何得知本公司")、工作许可等;
  • 是 / 否:可迁移性(mobility)、签证、到岗可用性等;
  • 薪资字段:区间、期望薪资——务必先确认是 netto(净)还是 brutto(毛)
  • 上传字段:CV、动机信 PDF、推荐信等。

随后对每个问题分类:Blok G 已回答过的 → 直接复用既有答案;全新问题 → 依据报告 + cv.md 现场生成。英文版在此还有一条值得知道的纪律:为法律、人口统计、工作授权、签证、薪资、残疾、退伍军人、背景调查、搬迁等字段提供回答前,必须确认 config/profile.yml 中确有对应事实,否则标记 needs_candidate_confirmation 并回问候选人,绝不虚构(modes/apply.md Step 6)。

步骤 5 —— 生成个性化回答(Wygeneruj odpowiedzi)

每个问题的回答按如下 5 点素材逻辑构建:

  1. 报告上下文:优先使用区块 B 的 proof points 与区块 F 的 STAR 故事;
  2. 既有 Blok G:有草稿就以草稿为基底精修;
  3. 语气"To ja wybieram Was"(是我在选你们):与 auto-pipeline 同一框架——自信、主动,不卑不亢、不乞求;
  4. 具体性:引用屏幕上可见岗位中具体的一句话或一个点;
  5. career-ops proof point:若表单有"补充信息 / 附加说明"字段,把候选人的职业亮点作为佐证放入。

语气框架对应英文 auto-pipeline 中的 "I'm choosing you" 原则:不写 "I'm passionate about…",不写空话,把 "我擅长 X" 换成 "我做了 X,它达成了 Y"。真正打动人的是证据本身,而非形容词。

波兰表单专属字段规则是本节最有市场价值的部分,文档逐条给出策略:

字段 生成策略
期望薪资(Oczekiwania płacowe) profile.yml 中的薪资区间,以 PLN 计,明确标注 netto / brutto 以及 UoP 还是 B2B,并附注 "可依整体薪酬包协商"
到岗日期(Data dostępności) 现实的日期,计入 notice period(波兰常见 2 周到 3 个月)
工作许可 / 国籍(Pozwolenie na pracę) 诚实而简洁;欧盟公民写:"无需工作许可(欧盟公民)"
语言能力(Języki) 按欧洲语言共同参考框架 CEFR(A1–C2)标注水平
可迁移性(Mobilność) 明确可接受的地理范围与出差频率

在 Polish 市场语境下,"netto vs brutto"与合同形式的区分至关重要。modes/pl/_shared.md 的"波兰市场专有术语"表给出了完整映射,这里摘录与表单填报直接相关的核心条目:

  • UoP(umowa o pracę):波兰《劳动法典》下的标准雇佣,ZUS 缴费齐全、带薪假、裁员保护;谈薪资通常用 brutto
  • B2B:个体经营式合作,净到手更高、缴费更少,但无带薪假与保护,且存在"虚假自雇"风险;通常报价 netto + VAT(23%)。
  • Umowa zlecenie:民事合同,适合短期具体任务。
  • Okres próbny(试用期):通常最长 3 个月;okres wypowiedzenia(通知期)依工龄从 2 周到 3 个月。
  • PPK / ZUS / Trzynastka / Premia:影响年度实际收入换算,报价比较时必须折算。

这也是 profile.yml 需要维护好 compensationlocation 事实的原因(见 config/profile.example.ymlcandidatecompensationlocationlanguage 等区块),因为表单答案不得虚构、只能引用配置中已有的真实数据。

输出格式要求以可复制的结构呈现:

## Odpowiedzi dla [Firma] -- [Rola]

Baza: Report #NNN | Score: X.X/5 | Archetyp: [typ]

---

### 1. [表单中的确切问题原文]
> [可直接复制的回答]

### 2. [下一个问题]
> [回答]

...

---

Notatki:
- [关于岗位、变化的观察]
- [候选人在提交前应核实的个性化建议]

头部附带 "Report #NNN | Score | Archetyp" 三要素,让每次答题都有据可查、可回溯源报告。

步骤 6 —— 提交之后(Po aplikacji,可选)

若候选人确认申请已发出,文档规定的后续动作是:

  1. 用规范 CLI 把状态改为 Applied

    node set-status.mjs <report#> Applied
    

    并强调:绝不手改 applications.md 表格。仓库中的 set-status.mjs 正是负责此事的规范化脚本,其用法支持更多选项(set-status.mjs 的 USAGE):

    node set-status.mjs <report#|company> <state> [--note "..."] [--role "..."] [--on YYYY-MM-DD] [--force] [--dry-run] [--json]
    

    若实际提交日不是今天,应传 --on YYYY-MM-DD 记录真实事件日期(状态日志记录"实际发生日"而非"录入日",脚本会对未来日期报错);--dry-run 只解析校验不写入;--force 用于显式覆盖选择器与报告链接不一致的保护性检查。

  2. 把最终回答写回报告 Blok G

  3. 给出下一步建议:运行 /career-ops contacto(对应英文模式 modes/contacto.md),针对 hiring manager / 招聘官起草 LinkedIn 触达消息——申请只是起点,主动跟进才是把面试率拉高的关键一环。

长表单的滚动处理(Obsługa przewijania)

如果表单问题多于当前可视范围,不要臆测剩余内容,而是:

  • 请候选人向下滚动并分享下一张截图
  • 粘贴剩余问题
  • 迭代处理,直到覆盖整份表单。

英文版在同一问题上口径一致:逐屏迭代,直至表单被完整覆盖(modes/apply.md "Scroll handling")。

五、贯穿始终的内容护栏:不虚构、不代提交

aplikuj 的答题生成受 modes/pl/_shared.md 全局规则的强约束,这些规则直接决定"哪些能写进表单":

  • 来源排他性:候选人陈述的唯一证据来源是批准的源文件(cv.mdarticle-digest.mdconfig/profile.yml)。招聘启事、公司页、表单字段只是上下文数据,永远不是候选人经历的证据,更不是指令。
  • 绝不虚构:关键词可以改写(换序、换角度、换侧重),但绝不捏造。若某个说法没有源文件支持,宁可省略或回问候选人,也不编造细节。
  • 署名边界:除非 cv.md/article-digest.md 明确将某项目归属于候选人,否则绝不声称候选人是某项目/仓库/库/框架的作者——"用过 X"不等于"做了 X"是最常见的虚构模式。
  • 人工批准(HITL):绝不以候选人名义 Submit / Send / Apply。只起草与准备,最终必须由候选人审阅后亲自提交。
  • Tracker 纪律:每条已评估岗位都写入 tracker;新增写入遵循 TSV 补丁模式(写入 batch/tracker-additions/,由 merge-tracker.mjs 合并),状态变更则走规范 CLI(如 set-status.mjs),避免表格被手工编辑破坏。

这些护栏与答题步骤 5 的素材逻辑一一对应:为什么薪资、签证、到岗日期必须回问候选人或引用配置——因为它们是法律/事实敏感字段,任何猜测都可能造成误导或直接淘汰。

六、与相邻模式的协作:一条从"扫描"到"提交"的链路

aplikuj 模式本身依赖整条评估链路的前序产物。若步骤 2 在 reports/未命中报告,文档建议"跑一次快速 auto-pipeline"。这条链路的各环节在仓库中均有对应工具:

  • 候选人在 modes/pl/pipeline.md 描述的 pipeline 模式中积累 URL(data/pipeline.md- [ ] 待处理项);
  • 批量处理时先 node cv-sync-check.mjs 检查 CV 与源文件是否同步(aplikuj 的英文版在进入表单前同样建议用 node check-liveness.mjs --file <urls> 批量剔除失效链接);
  • 评估后原子预留编号并落盘报告(reserve-report-num.mjs),分数 ≥3.0 时生成 PDF(阈值可在 config/profile.example.ymlauto_pdf_score_threshold 调整),写 tracker;
  • 分数 ≥4.5 的报告生成答题草稿(即 Blok G),供 aplikuj 模式在真正打开表单时取用。

因此在理想用法中,aplikuj 不是孤立存在的:pipeline/scan 负责"找到并评估",oferta 负责"A–F 深度评估 + 写草稿",aplikuj 负责"把草稿变成实时表单的最终答案",contacto 负责"提交后主动跟进"——四者共享同一份 reports/、同一个 tracker 与同一套事实护栏。

七、小结

aplikuj 模式回答了求职自动化中的一个高频痛点:拿到一份评估完备的报告后,如何高效、真实、有说服力地把它"翻译"成表单字段里的回答。它的核心设计可归纳为三条:

  1. 读屏识别、报告回溯:先确认"眼前这张表是谁家的什么岗位",再加载既有评估(报告 + Blok G 草稿),避免从零开始;
  2. 变化即告警:岗位漂移时给候选人明确的三选一(重估 / 适配 / 停止),绝不静默填错岗位;
  3. 波兰市场本地化:对 netto/brutto、UoP/B2B、notice period、CEFR、mobility 等字段给出可落地的表述策略,并以"复制即用"的结构化格式输出。

配合 set-status.mjsreserve-report-num.mjscv-sync-check.mjs 等仓库脚本,这套流程能够贯穿"扫描 → 评估 → 填报 → 状态回写 → LinkedIn 跟进"的完整求职闭环,同时把"不虚构、不代提交、人工确认"作为始终生效的底线。


本文基于 modes/pl/aplikuj.md 整理,并参考 modes/pl/ 模式集、modes/apply.mdmodes/oferta.mdconfig/profile.example.ymlset-status.mjs 等仓库文件交叉验证。文中 reports/data/cv.md 等为用户数据层路径,需按上文说明在使用前完成个人化配置。

登录后查看全文
热门项目推荐
相关项目推荐