跳到正文
全部项目

01AI 产品 · 浏览器扩展

JobMate

AI 求职辅助 Copilot

职责
负责 Chrome MV3 Side Panel 架构、浏览器集成、草稿状态生命周期、页面上下文获取、跨页面状态处理与回归测试。
技术
Chrome MV3 · Local-first · LLM · Python
验证
2059 项测试通过

01

问题

01.1项目概览Overview

一个 Local-first 的 AI 工作流:结合简历与实时岗位 JD,生成可直接使用的求职草稿。

01.2项目背景Context

大多数 AI 求职辅助发生在独立的聊天窗口里:岗位在一个标签页,简历在另一个文件,模型又在别处。

JobMate 把助手放到岗位页面旁边,用户需要时,上下文已经就位。

01.3核心问题Problem

用通用聊天助手处理求职,需要不断切换上下文:每个岗位都要复制 JD、粘贴结果、再手动修改。

每次往返都会丢失上下文,简历也要一次次粘贴进云端聊天。

  1. Job platform
  2. Copy JD
  3. ChatGPT
  4. Copy result
  5. Back to platform
  6. Edit
JobMate 要去掉的手动循环

01.4我的职责My Role

负责 Chrome MV3 Side Panel 架构、浏览器集成、草稿状态生命周期、页面上下文获取、跨页面状态处理与回归测试。

Chrome MV3 side-panel architecture, browser integration, draft-state lifecycle, page context capture, cross-page state handling and regression testing.

02

构建

02.1解决方案Solution

一个 Chrome MV3 原生侧边栏,始终停靠在岗位页面旁。它读取当前岗位 JD,结合本地管理的简历生成求职草稿——例如给招聘方的打招呼消息。

JobMate 在浏览器工作流中生成并保存草稿,由用户查看、修改,并最终决定是否在招聘平台发送。

功能

  • 01Chrome MV3 原生侧边栏
  • 02读取当前招聘页面 JD
  • 03本地简历管理
  • 04简历 × JD 上下文组装
  • 05AI 招呼语生成
  • 06草稿生命周期管理
  • 07草稿查看与复制
  • 08页面切换状态保持
  • 09Local-first 隐私

02.2系统架构Architecture

  1. Job Page
  2. JD Reader
    Local Resume
  3. Context Assembly
  4. LLM
  5. Draft State
  6. User Review
fig. 01a — request path

侧边栏是唯一的界面入口。它在切换标签页和页面时保持存在,用户浏览其他岗位时,进行中的草稿不会丢失。

上下文由当前 JD 与本地管理的简历按请求组装,而不是作为持久化的聊天记录来维护。

01在招聘页面生成打招呼草稿
  1. Job Page

    打开招聘页面,侧边栏停靠在旁边

  2. JD + Resume本地

    读取当前岗位 JD,结合本地简历组装上下文

  3. LLM

    生成打招呼草稿

  4. Draft

    草稿已保存,切换页面也不会丢失

  5. User Review

    等待用户查看、修改,由用户决定是否发送

一次完整运行,逐步展开。

02.3关键设计决策Key Decisions

  1. 01

    用侧边栏,而不是弹出窗口Native side panel, not a popup

    弹出窗口在焦点移开时就会关闭。MV3 侧边栏始终停靠在页面旁,也就是用户实际工作的地方。

  2. 02

    默认 Local-firstLocal-first by default

    完整简历属于个人数据,保留在用户本机,而不是成为持久化的云端记录。

  3. 03

    草稿是状态,不是聊天Drafts as state, not as chat

    每份草稿都有生命周期。用户切换页面后可以回到草稿,而不必翻找聊天记录。

  4. 04

    人始终在环中Human stays in the loop

    JobMate 负责准备草稿;查看、修改和发送始终由用户在招聘平台上掌控。

03

工程

03.1工程实现Engineering

  • Python + Chrome MV3 扩展。
  • 使用 pytest 测试,ruff 做代码检查。
  • 页面切换状态处理与草稿生命周期均有测试覆盖,不只是正常路径。

03.2隐私设计Privacy

简历在本地管理,JobMate 避免将完整简历作为云端持久数据保存。

每次生成请求只从当前 JD 和本地管理的简历中组装所需的上下文,再交给模型。

03.3项目结果Results

项测试通过 · pytest
2059

完成可运行的侧边栏流程:从读取当前 JD,到生成并保存草稿、由用户在浏览器中查看。

04

笔记

04.1项目总结What I Learned

AI 产品最难的部分很少是 Prompt,而是状态:什么在页面切换后保留,什么是草稿,什么是最终结果。

隐私是架构决策,必须在写第一行存储代码之前做出,而不是事后补上。

04.2技术栈Tech Stack

  • Chrome MV3
  • Browser Extension
  • Python
  • LLM
  • Local-first
  • pytest
  • ruff