本地运行的中文求职 Agent:从真实来源找岗,到按已确认简历事实制作投递包,再到实际投递后的原帖面经问答。用户始终自己在招聘网站提交申请;OfferGuide 不代替点击投递。
需要 Node.js 22.19+。简历渲染还需要 Typst 和 Poppler(pdftoppm);主简历须是可提取文字的 PDF。
npm install
cp .env.example .env
# 在 .env 中填写 OFFERGUIDE_LLM_API_KEY 和 TAVILY_API_KEY
npm run web打开 http://127.0.0.1:8000。首次使用:在主对话输入找岗意图;接受的岗位显示在“岗位推荐”;选中岗位后,在首页“我的主简历”上传 PDF、审核提取文本并明确确认候选人事实;随后可生成岗位简历、预览 PDF。实际在外部投递后,点击“确认已提交”冻结当前 PDF 和 JD,再从投后页研究真实面经、手工记录已发生的回复/笔试/面试/结果与面试安排;误记进展可追加纠正,历史不被改写。页面只展示已通过领域校验、落库的结果,未接受的 Agent 草稿不进入结果页。
主简历事实填写为 JSON 数组,每条需有 kind、canonical、surfaceForms 和 provenance。例子只是格式示意,不能当作用户真实经历:
[{"kind":"organization","canonical":"你的真实机构名称","surfaceForms":[],"provenance":{"source":"master_semantic","locator":"第 3 行"}}]kind 可为 organization、school、role、date_range、credential、metric。填写和确认是用户动作;系统不会自动认可从 PDF 猜出的事实。不要把格式例子提交为真实资料。
新版 Web 只监听 127.0.0.1,默认端口 8000(可设 OFFERGUIDE_WEB_PORT)。TypeScript 正式数据库存于 .offerguide/store-ts.db,可用 OFFERGUIDE_TS_DB 指定其他新路径。旧版 Python 默认库 .offerguide/store.db 不会被新版自动打开或改写;旧库来自测试时期,已决定不迁移,新版从空库开始。
OFFERGUIDE_LLM_API_KEY 注入 Pi 内置 DeepSeek provider,默认模型 deepseek-v4-flash;可用 OFFERGUIDE_LLM_MODEL 覆盖内置模型 ID。TAVILY_API_KEY 用于公开职位和面经搜索。缺失搜索配置时不会伪造搜索结果;缺失模型 key 时 Agent 操作会明确失败。新版不提供旧 Python 扩展的登录态抓取通道。
可选的 extension/ 只从本机读取已保存的投递话术,供你手动复制;不注入招聘网页、不抓取登录态内容。启用前用 openssl rand -hex 32 生成令牌,填入 .env 的 OFFERGUIDE_EXTENSION_TOKEN,并在扩展弹窗临时输入同一令牌。扩展固定连接 127.0.0.1:8000,不持久化令牌。
npm test
npm run typecheck
npm run depcheckdomain/、services/、store/、sources/、resume/ 是无需会话可测的领域能力;agent/ 是唯一引入 Pi 底座的适配层;web/ 负责本地 HTTP、服务端页面及调用 Agent 的薄编排。设计基线见 重构规范,阶段实况见 进度记录。