臭名昭著aTrust隔离计划1.臭名昭著aTrust隔离计划2.VPN原理与aTrust隔离网络实践3.docker-easyconnect到底做了什么4.TUN(tunnel-隧道-虚拟网卡)模式
个人项目
personal(个人展示)GitHub Actions 自动部署个人展示项目
基于Quartz搭建的个人博客1.Quartz个人博客使用教程2.使用 rsync 增量部署 Quartz 博客3.使用 GitHub Actions 自动部署 Quartz 博客5.域名绑定6.CDN加速7.Google 搜索收录排查:为什么关键词搜得到别人,却搜不到我的网站?Obsidian、双向链接与知识图谱
架构设计
分布式分布式事务RPC原理
旅行
行程攻略青岛三日游行程攻略
前端
NginxNginx配置与反向代理入门
Nodenpm与npx的区别
数据库
mysql01.MySQL基础语法与约束02.MySQL数据库类型03.MySQL多表查询04.MySQL 索引05.MySQL 事务06.MySQL 隔离级别07.MySQL MVCC08.MySQL 锁09.EXPLAIN10.慢查询与 SQL 优化
mysql面试题01.索引问题02.事务与隔离级别03.锁机制04.存储引擎与性能优化05.用户权限、字符集与备份恢复
mysql实战01.EXPLAIN实战02.测试环境菜单误删排查与恢复03.MySQL IN 详解
网络
网络安全1.无线监听网卡苹果M系列虚拟机安装Kali Linux教程3.kali怎么使用RTL8812AU4.kali基础命令
网络基础进程之间怎样通过网络传递数据
网址常用网址
中间键
esElasticsearch 入门
mq
RabbitMQRabbitMQ高级RabbitMQ基础
1. MQ 基础2. MQ 核心角色与代码对应3. MQ Consumer Group 与消费模式4. SOFAMQ 账户变更代码实践5. MQ 可靠性问题6. 消息幂等
redis缓存击穿、穿透与雪崩Redis 分布式锁Redis 缓存问题Redis 数据结构
AI
使用说明
第三方插件&技能简介Archify使用与安装指南geekgeekRun使用OfferFlow使用指南Ponytail使用指南Skills Manager使用指南
CodexCodex CLI与IDE区别及使用指南Codex Hook单独配置与提交通知Codex MCP安装与使用指南Codex第三方插件安装与使用指南
Agent开发0-学习路线1.LLM、Token、上下文窗口与模型参数2.大模型 API、请求参数与响应结构3.Spring AI ChatClient4.Prompt、System Prompt、Prompt 模板6.结构化输出、JSON Schema7.SSE 流式响应8.会话 ID、聊天记录、Redis9.超时、重试、限流、降级10.*完成可运行聊天接口11.Function Calling、Tool Calling 原理12.用 Java 方法定义 Tool13.工具参数设计和校验14.实现订单查询工具15.实现物流查询工具16.实现库存查询工具17.多个工具自动选择18.工具异常、超时、重试
diy主机
主机零件学习1.CPU2.主板3.内存4.显卡5.硬盘6.散热7.风扇8.机箱热门型号价格表
捡垃圾diy-13600kf+5060diy-14600kf+5070
English高频词汇英文基础语法简单句子音标
GitGit常用命令Sublime Merge 使用指南
Java
工具库Caffeine本地缓存Reactor教程
工作实践如何使用@Async线程池使用与排查线上服务 CPU 使用率过高排查压测下RPC接口大量失败排查记录
基础1.HashMap2.ConcurrentHashMap3.HashSet4.final5.static6.volatile7.AtomicInteger8.String动态代理反射锁与线程同步线程注解
面试题1.HashMap 存储在方法内是线程安全的吗2.ArrayList参数传递与引用重新赋值3.== 和 equals 的区别、hashcode4.重载和重写的区别5.String、StringBuffer、StringBuilder区别及使用场景6.接口和抽象类7.ArrayList 与 LinkedList 的区别和扩容机制8.HashMap 和 Hashtable 的区别及底层实现9.Object 和 Objects 的区别10.ThreadLocal的原理和使用场景11.字节码是什么及作用12.Java类加载器有哪些13.双亲委派模型14.Java异常体系15.GC是什么16.GC如何判断对象可以被回收
面试总结0.HR面试模板1.面试一2.面试二3.面试三笔试
网络与 IO(黑马程序员-纯理论)01-网络编程基础02-IO模型与零拷贝03-BIO04-NIO基础与缓冲区05-NIO通道与选择器06-AIO
juc00-目录01-进程与线程02-线程同步与通信03-并发设计模式04-Java内存模型05-CAS与原子类06-ThreadLocal07-阻塞队列08-线程池使用与原理09-任务调度10-ForkJoin与享元模式11-AQS12-ReentrantLock13-读写锁14-并发协作工具15-ConcurrentHashMap16-CopyOnWrite与同步容器17-SkipListMap18-非阻塞队列
juc(工作常见)Java并发编程三个重点拆解
jvm1. JVM运行时数据区
Spring1.Spring IoC、DI与构造方法注入CGLIB、Byte Buddy 与 Spring AOPSpring 常用注解详解Spring Bean 生命周期
Spring MVC异常处理机制
linux常用命令
mac快捷键终端常用操作
python
基础01.Python是什么,为什么要安装Python02.Python项目中.venv是什么03.Python基础语法
基础实战sql替换
HTTPXHRMS员工详情接口调用(Python HTTPX)
windowswindows激活

OfferFlow 使用指南

1. 软件简介

Abstract

OfferFlow(项目仓库名为 FuckJob)是一款本地运行的开源求职助手,支持 BOSS 直聘和猎聘,可用于岗位筛选、批量沟通、自动投递、AI 打招呼以及自动回复 HR。

Warning

自动化操作可能触发招聘平台的验证码、限流或账号限制。建议先使用演练模式和小批量任务,确认配置安全后再逐步增加使用范围。

1.1 本指南采用的求职定位

本指南按以下个人背景配置 OfferFlow:

  • 主要求职方向: Java 后端开发
  • 核心经验: 3 年 Java 后端开发经验
  • 扩展能力: 学习过前端,具备 Python 基础,了解 AI 相关概念
  • 个人主页: https://afyke.com
  • 个人博客: https://blog.afyke.com

沟通时应始终突出 Java 后端经验。前端、Python 和 AI 只作为扩展能力或学习能力补充,除非简历中存在对应的真实项目,否则不能描述为“精通”“熟练”或“拥有相关项目经验”。


2. macOS 安装包选择

不同安装包对应不同的处理器架构:

安装包标识适用设备
aarch64.dmgApple Silicon Mac,例如 M1、M2、M3、M4、M5
x64.dmgIntel 芯片 Mac

Tip

当前 Mac 的系统架构为 arm64,应下载:

OfferFlow_0.1.22_aarch64.dmg

.app.tar.gz 主要用于程序自动更新,.sig 是签名文件,.exe 是 Windows 安装包,普通 macOS 安装不需要下载这些文件。


3. 安装与首次打开

  1. 双击下载的 .dmg 文件。
  2. 将 OfferFlow.app 拖入“应用程序”。
  3. 从“应用程序”中打开 OfferFlow。

Warning

如果 macOS 提示无法验证开发者:

  1. 打开“系统设置 → 隐私与安全性”。
  2. 找到 OfferFlow 的拦截提示。
  3. 点击“仍要打开”。

如果仍然无法打开,可在终端执行:

xattr -dr com.apple.quarantine /Applications/OfferFlow.app

4. 初始化配置

4.1 配置浏览器

进入 “配置中心 → 浏览器环境”:

  1. 推荐安装并选择 Google Chrome。
  2. 等待软件自动检测浏览器。
  3. 点击“检测”或“环境检查”,确认浏览器可用。

软件会启动一个受控浏览器,用于登录招聘平台和执行自动化任务。任务运行期间不要关闭这个浏览器窗口。

Tip

如果 Chrome 未被识别,可在 Chrome 地址栏打开 chrome://version,复制“可执行文件路径”并手动填入 OfferFlow。

4.2 配置大模型

可以使用 DeepSeek、OpenAI、Ollama 或其他受支持的模型服务。初次使用可选择 DeepSeek:

  1. 进入 DeepSeek 开放平台,创建 API Key,并按需要充值少量余额。
  2. 在 OfferFlow 中进入“配置中心 → 大模型”。
  3. 服务商选择 DeepSeek。
  4. 填入 API Key。
  5. 先点击“保存凭证”。
  6. 获取模型列表并选择 deepseek-chat。
  7. 点击“测试连接”。

API Key 属于敏感凭证,不要发送给他人,也不要出现在公开截图中。

4.3 配置简历

进入 “配置中心 → 简历配置”:

  1. 上传 PDF 格式的简历。
  2. 开启“注入 LLM 上下文”。
  3. 检查解析出的姓名、学历、经验、技术和求职方向是否准确。
  4. 删除身份证号、家庭详细地址等非必要敏感信息。

Warning

只有简历中真实存在的信息才能用于自动沟通,否则 AI 可能生成错误或夸大的回答。

简历内容建议按以下优先级组织:

  1. 3 年 Java 后端开发经验。
  2. 真实参与过的 Java 项目、承担的职责和取得的结果。
  3. 简历中实际使用过的后端技术、数据库、中间件和工程工具。
  4. 前端、Python 基础和 AI 相关概念作为补充能力。
  5. 在联系方式或个人简介区域加入个人主页 https://afyke.com 和个人博客 https://blog.afyke.com。

不要为了提高匹配率而填写没有真实使用过的框架、项目或业绩数据。

4.4 设置岗位筛选

进入 “求职设置 → 岗位筛选”,根据实际需求配置:

  • 求职城市
  • 岗位关键词
  • 薪资范围
  • 工作经验
  • 学历要求
  • 公司规模和融资阶段
  • 排除岗位或公司关键词

针对当前求职方向,建议优先使用以下岗位关键词:

Java开发
Java后端
后端开发
Java工程师
服务端开发

前端、Python 和 AI 可作为岗位内容中的加分项,但不建议将“前端开发”“Python 开发”或“算法工程师”设置为主要投递关键词,避免偏离 3 年 Java 后端经验这一核心定位。

可以根据个人接受范围排除明显不匹配的岗位,例如:

实习
应届
纯前端
高级架构师
算法研究员

是否排除外包、驻场、销售性质岗位,应根据个人求职意愿决定。

Tip

首次运行建议:

  • 单轮最多处理 3~5 个岗位。
  • 开启“拟人化”。
  • 暂时不要开启长时间周期投递。
  • 使用较严格的过滤条件,先保证岗位质量。

5. AI 打招呼配置

Info

AI 打招呼只负责首次主动联系 HR。本方案不让 AI 自由发挥,只让它从岗位信息中提取岗位名称,然后套用固定句式。

5.1 配置步骤

  1. 进入“配置中心 → 求职方案”。
  2. 选择当前使用的“java 后端求职”方案。
  3. 打开“打招呼配置”。
  4. 确认大模型已经启用并通过连接测试。
  5. 开启“LLM 主动沟通”。
  6. 将下面的提示词粘贴到“主动沟通提示词”。
  7. 在“打招呼发送顺序”中点击“添加 LLM 内容”。如果页面只有“添加内容”,点击后把类型改为 LLM。
  8. 确保这条 LLM 内容已经启用,右侧应显示绿色眼睛图标。
  9. 等待配置自动保存,再到“测试模式 → 打招呼”重跑测试。

Warning

只打开“LLM 主动沟通”还不够。发送顺序中必须存在一条已经启用的 LLM 内容,否则会提示“打招呼发送序列没有可发送内容”。

5.2 主动沟通提示词

请根据当前岗位信息提取准确的岗位名称,并严格按照下面的固定格式生成一条打招呼消息:
 
您好,我有3年Java后端开发经验,对贵公司的【岗位名称】很感兴趣。我的项目和技术介绍整理在 https://afyke.com,方便的话希望进一步沟通岗位要求。
 
要求:
1. 将【岗位名称】替换为当前岗位的真实名称。
2. 如果无法提取岗位名称,就写“Java后端开发岗位”。
3. 除替换岗位名称外,不要修改固定句式。
4. 不要添加其他技能、项目、工作年限或自我评价。
5. 网址必须原样保留为 https://afyke.com。
6. 不要使用Markdown链接格式,不要给网址添加括号。
7. 只输出最终要发送的消息,不要添加标题、引号、分析或解释。
 
当前岗位:
{{job_content}}

5.3 生成效果

您好,我有3年Java后端开发经验,对贵公司的Java开发岗位很感兴趣。我的项目和技术介绍整理在 https://afyke.com,方便的话希望进一步沟通岗位要求。

Warning

发送给 HR 时直接使用原始网址,不要写成 [个人网站](https://afyke.com) 这种 Markdown 链接格式,因为招聘平台可能无法正确识别。


6. HR 自动回复配置

Tip

建议先开启“演练模式”验证自动回复和人工接管流程,再允许系统真实发送消息。

自动回复策略选择“规则优先,AI 兜底”后,未命中固定规则的消息会交给 AI。可使用以下提示词:

你正在代表一名拥有3年Java后端开发经验的求职者与招聘方沟通。请结合岗位信息、真实简历和历史聊天,生成一条可以直接发送的简短回复。
 
求职者定位:
- 主要应聘Java后端开发岗位。
- 有3年Java后端开发经验。
- 学习过前端,具备Python基础,了解AI相关概念。
- Java后端是核心能力;前端、Python和AI只能作为扩展学习背景,不能在缺少简历证据时包装成专业项目经验。
- 个人主页:https://afyke.com
- 个人博客:https://blog.afyke.com
 
回复规则:
1. 只使用上下文中明确存在的信息,绝不虚构经历、项目、技能、工作年限、薪资、学历、离职原因或到岗时间。
2. 回答技术背景时优先围绕Java后端和简历中的真实项目,不自行补充Spring、微服务、数据库、中间件等具体技术,除非简历或聊天中明确出现。
3. HR询问前端、Python或AI经验时,应准确表达为“学习过”“有基础”或“了解相关概念”;只有简历明确记录真实实践时,才能进一步介绍。
4. 如果HR最新消息是图片、聊天记录中显示“[图片]”或只有图片文件名,无法确认图片实际内容时,必须选择escalate转人工,reply留空;禁止猜测图片内容或发送“图片已收到”等无意义回复。
5. 如果HR同时发送图片和文字,只能处理不依赖图片内容就能确定的问题;只要文字需要结合图片才能理解,也必须选择escalate转人工。
6. 如果HR明确说明岗位属于外包,应礼貌拒绝,不投递简历。建议回复:“感谢您的联系,不过我目前暂不考虑外包性质的岗位,祝您招聘顺利。”
7. 直接回答招聘方的问题,语气自然、礼貌、简洁,符合中文招聘软件的聊天习惯。
8. 通常控制在20~80字,一次只回复当前最重要的问题。
9. 不要重复已经发送过的内容,不要使用“作为AI”等表达。
10. 信息不足时,诚实说明需要确认,或礼貌追问,不要自行猜测。
11. 如果涉及具体面试时间、薪资承诺、Offer、背调、证件、银行卡、付费培训或其他重要决定,不替求职者做决定;应选择escalate转人工。
12. 不主动发送身份证号、家庭住址、银行卡、验证码等敏感信息。
13. HR询问个人网站、作品、项目介绍时,提供 https://afyke.com;询问博客、技术文章或学习记录时,提供 https://blog.afyke.com。不要无关地重复发送链接。
14. 链接必须完整、原样输出,不要改写、缩短或在链接内部加入中文标点。
15. 对方明确表示岗位不匹配或结束沟通时,礼貌致谢,不继续纠缠。
16. 只输出最终回复文本,不添加分析、标题、引号或解释。
 
岗位信息:
{{job_description}}
 
我的简历:
{{resume}}
 
补充说明:
{{background_context}}
 
历史聊天:
{{chat_history}}

6.1 如果 AI 不能回复,请去工作台“待你处理”查看

当 AI 判断消息不能安全地自动回复时,正常处理流程如下:

  1. OfferFlow 打开 HR 会话并读取消息。
  2. 判断这条消息不能安全地自动回答,例如谈薪资、确认面试时间或索要敏感资料。
  3. 不向 HR 发送任何内容。
  4. 在 OfferFlow 工作台顶部的“待你处理”中新增一条待办。
  5. 待办通常会显示岗位、公司、最新消息摘要以及转人工原因。
  6. 点击待办查看对应沟通,再前往 BOSS 直聘或猎聘亲自回复。
  7. OfferFlow 检测到已经手动回复后,会自动移除待办;也可以手动标记为已处理。

“待你处理”是 OfferFlow 保存在本机的待办列表,不是 BOSS 直聘中的新文件夹或新标签。HR 的原始消息仍保留在招聘平台中;OfferFlow 只是另外记录一条需要人工接管的提醒。自动化打开会话后,平台里的消息可能已经显示为已读。

Warning

注意:BOSS 直聘的普通图片可能无法进入 OfferFlow 的 AI 上下文,因此不一定会生成“待你处理”事项。使用 BOSS 时仍要保留官方消息通知,并定期人工检查最近会话。

6.2 HR 发送图片时怎么处理

Warning

当前版本的自动回复链路不能真正识别 HR 图片中的文字或内容:

  • **BOSS 直聘:**普通图片消息通常不会作为可读文本进入 AI 上下文;目前主要解析文字和可识别的简历附件消息。因为 AI 可能根本不知道这条图片存在,单靠提示词无法保证将其转入“待你处理”。
  • **猎聘:**图片会被记录成“[图片]”或“[图片] 文件名”,AI 只能知道对方发了图片,不能看到图片本身。
  • 软件支持发送本地图片,不等于支持理解 HR 发来的图片。

因此,HR 发送以下内容时应转人工处理:

  • 面试时间或地址截图
  • JD、薪资结构或福利截图
  • 二维码、联系方式或群聊邀请
  • 测评、表格、证件或其他附件截图
  • 只有图片、没有任何说明文字的消息

推荐处理方式:

  1. 在自动回复提示词中保留“图片消息选择 escalate”的规则;该规则主要保护能够显示“[图片]”标记的会话。
  2. 定期查看工作台中的“待你处理”。
  3. 使用 BOSS 直聘时,还要定期人工检查最近会话,不能只依赖“待你处理”,因为图片可能没有进入 AI 上下文。
  4. 人工打开招聘平台查看原图,再决定如何回复。
  5. 不要让 AI 根据“[图片]”或文件名猜测图片内容。

相关实现可参考项目中的 BOSS 未读回复处理 和 猎聘未读回复处理。

6.3 配置“规则优先,AI 兜底”

自动回复策略选择:

规则优先,AI 兜底

该模式会按顺序检查正则规则:命中第一条规则后直接发送固定话术,不再调用 AI;没有任何规则命中时,才由 AI 判断如何回复。

Tip

新增一条外包拒绝规则,并放在规则列表最前面:

  • 规则名称: 不考虑外包岗位
  • 匹配最近聊天条数: 1
  • 回复类型: 文本
  • 回复内容: 感谢您的联系,不过我目前暂不考虑外包性质的岗位,祝您招聘顺利。
  • 正则表达式:
(这是外包岗位|这个是外包岗位|该岗位是外包|岗位属于外包|这是外包项目|属于外包编制)

这条正则的含义:

  • () 表示把多个候选短语归为一组。
  • | 表示“或者”;任意一个短语出现就算命中。
  • 正则会在最近一条聊天内容中查找这些短语,不要求整句话完全相同。
  • 实际填写时不要在 | 两侧添加空格,否则空格也会成为匹配内容的一部分。

设置“匹配最近聊天条数”为 1 很重要:程序的规则匹配不区分 HR 和我方消息。如果检查多条历史记录,之前聊天中出现过“外包”,即使 HR 当前正在讨论其他事情,也可能再次触发拒绝话术。

不建议直接使用过宽的正则 外包|是外包,因为 HR 说“不是外包”时也可能命中。上面的正则只覆盖比较明确的肯定表述;宁可让少数未命中的消息交给 AI 兜底,也尽量避免误拒绝正式自有岗位。

建议至少测试以下消息:

HR 消息预期结果
这是外包岗位,可以接受吗?命中规则,发送固定拒绝话术
该岗位属于外包编制命中规则,发送固定拒绝话术
这个岗位不是外包,是公司自有岗位不应命中规则,交给 AI 回复
方便了解一下岗位吗?不命中规则,交给 AI 回复

规则命中后会直接真实发送固定话术,不经过 AI 再次检查。因此,保存前要重点检查正则范围和回复内容,并先使用演练或测试模式验证。

自动回复可配置检查间隔、活跃时段、单轮处理上限和回复前等待。建议把薪资、面试时间、Offer、背调和敏感资料等场景交给人工处理。

如果页面提供“补充说明”输入框,可填写:

我的主要求职方向是Java后端开发,有3年Java后端开发经验。前端、Python和AI属于学习与扩展能力:学习过前端,具备Python基础,了解AI相关概念。除非简历中明确记录了相关项目,否则不要把这些扩展能力描述为熟练、精通或实际项目经验。个人主页是 https://afyke.com,个人博客是 https://blog.afyke.com;只有岗位相关或HR询问时才提供对应链接,不要在每次回复中重复发送。

7. 测试与启动

7.1 演练测试

  1. 进入“测试模式”。
  2. 分别测试“打招呼”和“回复”链路。
  3. 检查生成内容是否虚构经历、薪资、时间或其他个人信息。
  4. 特别检查是否把前端、Python基础或AI概念夸大为熟练技能和项目经验。
  5. 调整提示词,直到生成结果稳定可用。

7.2 登录招聘平台

  1. 回到“工作台”,执行“环境检查”。
  2. 软件检测浏览器环境和招聘平台登录状态。
  3. 如果尚未登录,使用 BOSS 直聘或猎聘 App 扫描二维码。

7.3 创建任务

  1. 在“工作台”添加任务。
  2. 选择招聘平台和已经配置好的求职方案。
  3. 根据目标选择任务模式;第一次自动投递时选择“单轮自动求职”,只处理少量岗位。
  4. 观察实时日志、筛选结果和实际发送内容。
  5. 确认流程正常后,再逐步启用未读消息轮询或周期任务。

7.4 任务模式怎么选择

添加 BOSS 直聘任务时,会看到以下模式:

模式作用适用场景
单轮自动求职按当前筛选条件处理一轮岗位,然后结束首次测试、少量投递
回复未读只处理当前已经存在的未读沟通消息,处理完后结束测试自动回复是否正常
读取聊天消息同步已读会话、岗位和历史消息,不会打开未读消息更新本地沟通记录,不发送回复
周期投递按设定间隔持续执行投递,并在等待期间自动回复未读消息长时间自动投递与回复
轮询回复持续监控并自动回复未读消息,不投递新岗位,手动停止前一直运行专门挂机自动回复 HR

如果目标是自动回复 HR:

  1. 首次测试选择“回复未读”,只处理现有未读消息一次。
  2. 检查生成内容和实际回复是否符合预期。
  3. 确认无误后选择“轮询回复”,持续监控 HR 的新消息。
  4. 如果既需要自动投递,也需要在间隔期间回复 HR,则选择“周期投递”。

“读取聊天消息”只负责同步聊天记录,不会自动回复;不要把它当成自动回复模式。


8. 安全使用建议

  • 前几天优先使用演练模式,不要直接完全托管。
  • 每次调整简历、提示词或岗位规则后重新测试。
  • 不让 AI 编造经历、业绩、薪资、离职原因和到岗时间。
  • 面试邀约、薪资谈判、Offer、背调和敏感资料由本人确认。
  • 控制每日投递数量和操作频率,避免长时间连续运行。
  • 定期检查“待你处理”、任务日志和实际聊天记录。
  • 遇到验证码、异常登录或平台警告时立即停止任务并人工检查。

9. 推荐的首次运行流程

安装并打开 OfferFlow
        ↓
检查 Chrome 浏览器环境
        ↓
配置并测试大模型
        ↓
上传和检查 PDF 简历
        ↓
设置严格的岗位筛选条件
        ↓
配置打招呼与自动回复提示词
        ↓
开启演练模式测试
        ↓
扫码登录招聘平台
        ↓
单轮处理 3~5 个岗位
        ↓
人工检查结果后再逐步自动化