臭名昭著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激活

GeekGeekRun 使用教程

一、先理解三个容易混淆的功能

GeekGeekRun 中的“自动开聊”“开场白”和“已读不回自动复聊”是三套不同的逻辑。

1. 自动开聊

自动开聊主要负责:

  1. 根据职位来源和筛选条件寻找岗位。
  2. 打开职位详情。
  3. 检查城市、薪资、工作经验、职位名称、职位描述和 BOSS 活跃度等条件。
  4. 对符合条件的岗位点击 BOSS 直聘的“立即沟通”。

它本质上是自动筛选岗位并建立聊天,不等于让 AI 持续代替求职者和招聘者对话。

2. 新开聊时发送内容

点击“立即沟通”并建立新会话后,可以选择发送:

  • 固定内容:每个新会话发送相同的开场白。
  • 大语言模型生成的内容:根据简历和开场白提示词生成首句。

新会话还没有真实聊天历史,因此即使选择大语言模型,主要依据仍然是简历和开场白提示词。不要假设模型一定能获得完整职位 JD。

3. 已读不回自动复聊

这个功能会检查已经建立的会话。当招聘者已读但没有回复,并且满足跟进时间、跟进间隔等条件时,再自动发送一条消息。

复聊内容可以选择:

  • 发送“盼回复”表情。
  • 由大语言模型根据简历和当前会话最近若干条消息生成。

因此,真正会使用“聊天上下文”的主要是已读不回自动复聊,而不是自动筛选和点击“立即沟通”的过程。

二、当前配置检查结果

本机配置目录:

~/.geekgeekrun/config/

当前主要配置如下:

配置项当前状态说明
职位来源期望职位、推荐职位、搜索职位均已开启自动开聊来源正常
搜索关键词Java、全栈、AI搜索范围较宽
新开聊消息来源固定内容首次开聊不会由 AI 生成
复聊消息来源大语言模型结合聊天上下文AI 只在复聊阶段介入
最近消息数量8 条适合作为初始值
只复聊期望职位已开启会受“期望职位类型正则”影响
期望职位类型正则仅匹配 Java可能漏掉全栈和 AI 岗位

另外还发现以下问题:

  1. 简历中的“工作年限”字段被错误填写成了姓名,应改成真实年限,例如“2 年”。
  2. 当前固定开场白包含裸 IP 形式的个人网站地址。它容易显得像广告或不安全链接,建议改成正常域名,或暂时不要在第一句话里发送链接。
  3. 工作经历中的工作描述、业绩字段大部分为空。AI 生成内容时可能只能从项目描述中拼接信息。
  4. 当前复聊提示词要求每次必须包含“一个技能和一个量化成果”,约束过强,容易造成生硬表达或错误拼接。

三、推荐的整体配置

建议先使用相对稳妥的组合:

场景推荐配置
自动筛选岗位开启自动开聊,严格配置职位过滤条件
第一次打招呼先使用简短固定话术,确认筛选准确后再尝试 AI
招聘者正常回复人工回复
招聘者已读不回使用 AI 自动复聊
AI 读取最近消息数量先设为 8 条,长对话可调整为 12 条
模型不可用时回退为“盼回复”表情,避免发送异常文本

自动化工具可能触发 BOSS 直聘的风控。建议控制每天的开聊数量和运行频率,不要长时间连续高频运行。

四、配置自动开聊

1. 登录 BOSS 直聘

在 GeekGeekRun 中使用“BOSS 登录助手”完成登录。程序需要使用本地登录凭据模拟浏览器操作。

不要把 Cookie、登录凭据或 boss-cookies.json 发送给其他人。

2. 配置职位来源

可以启用以下来源:

  • 期望职位:来自 BOSS 直聘中设置的求职期望。
  • 推荐职位:BOSS 直聘推荐列表。
  • 搜索职位:根据自定义关键词搜索。

建议初次使用只开启一个来源,例如“搜索职位”,确认筛选准确后再逐步增加来源。

目前的搜索关键词是 Java、全栈、AI。如果目标主要是 Java 后端,建议缩小为:

Java后端
Java开发
后端开发

“AI”关键词范围很大,容易匹配算法、产品、运营等无关岗位。需要搜索 AI 应用开发时,可以改成:

AI应用开发
Java AI
大模型应用开发
RAG开发

3. 配置职位类型正则

当前正则只匹配 Java:

\bJava\b

如果确实需要 Java、后端、全栈和 AI 应用相关岗位,可以改成:

Java|后端|全栈|AI|人工智能|大模型|RAG

不要为了增加投递数量写成过于宽泛的表达式,否则自动开聊会产生大量不相关会话。

4. 配置职位描述正则

职位描述正则用于检查 JD 是否包含需要的技术关键词。可以使用:

Java|Spring Boot|Spring Cloud|MyBatis|MySQL|Redis|RabbitMQ|消息队列|MQ|Elasticsearch|Docker|K8s|Kubernetes|微服务

需要注意职位名称、职位类型、职位描述之间的匹配逻辑。如果配置为“全部满足”,条件会非常严格;如果配置为“任一满足”,投递范围会扩大。首次运行时应观察自动开聊记录,再决定是否放宽。

5. 配置城市、薪资和工作经验

根据真实求职条件设置:

  • 期望城市。
  • 最低和最高薪资。
  • 工作经验范围。
  • 不满足条件时的处理策略。

建议先使用“本次运行跳过”或“本地标记不合适”,确认规则没有误伤后,再考虑让程序直接在 BOSS 直聘上标记不合适。

五、配置新开聊时的第一句话

进入“已读不回自动复聊”页面,找到“新开聊时发送内容”。

方案一:固定内容,推荐先使用

优点是稳定、不会编造经历,也不会因为上下文缺失而答非所问。

推荐话术:

您好,我对贵公司的岗位很感兴趣,我主要从事 Java 后端及微服务开发,如岗位匹配,希望能进一步沟通,期待您的回复。

不建议第一句话就发送 IP 地址、过长的项目介绍或多条链接。

方案二:大语言模型生成

将“新开聊时发送内容”改为“大语言模型结合上下文生成”,然后编辑“开场白提示词模板”。

推荐模板:

请根据我的真实简历生成一句求职开场白。
 
要求:
1. 以“您好”开头。
2. 表达对当前岗位的应聘意向。
3. 只使用简历中明确存在的技能和经历,不得编造。
4. 如果无法获得当前职位的完整信息,不得猜测职位要求。
5. 不发送网址、IP 地址、联系方式或简历之外的信息。
6. 内容自然、谦逊,控制在30至60字。
7. 只返回JSON,不要解释:
{"response":"需要发送的开场白"}

六、修复 AI 聊天上下文不正确

1. 修正简历字段

进入简历编辑页面,重点检查:

  • 姓名。
  • 工作年限。
  • 期望职位。
  • 个人优势。
  • 工作经历。
  • 项目经历。
  • 真实量化成果。

“工作年限”应填写类似:

2年

不要填写姓名、职位名称或一整段个人介绍。

2. 补充真实且可复用的项目成果

AI 更适合读取结构清楚的描述。例如:

负责消息中心查询性能优化,通过 Elasticsearch 重构搜索链路,将典型查询耗时从约20秒降低至1至2秒。
负责基础码表微服务开发,通过 Redis 缓存热点数据,支撑百万级日调用量并降低数据库压力。

不要为了让 AI 有内容可写而补充无法证明的数据。

3. 调整最近消息数量

当前设置为最近 8 条消息,适合作为初始配置。

  • 对话很短:保留 8 条。
  • 对话持续时间较长:可增加到 12 条。
  • 不建议无脑设到最大值,历史消息越多不代表回复越准确,反而可能让模型关注旧话题。

这里的“最近消息”应当来自当前招聘者的会话。如果生成内容明显引用其他招聘者、其他公司或完全无关的岗位信息,应立即停止自动复聊并保留运行记录,这更像是程序取数异常,而不是提示词问题。

4. 替换复聊提示词

推荐使用以下模板:

你是求职沟通助手。请根据我的真实简历和当前招聘者会话的最近消息,生成一句自然、简短的跟进回复。
 
要求:
1. 优先理解并回应招聘者最后一条消息,不得答非所问。
2. 只使用简历中真实存在的技能、经历和成果,不得编造。
3. 不得把招聘者的话、职位要求或其他人的经历当成我的个人经历。
4. 如果聊天信息不足,只发送礼貌、通用的跟进表达。
5. 不重复当前会话中已经发送过的内容。
6. 不主动发送网址、IP地址或与当前岗位无关的项目经历。
7. 控制在20至50字,避免夸张表达和感叹号。
8. 只返回JSON,不要解释:
{"response":"需要发送的内容"}

这套提示词不再强制每条消息都包含量化成果。只有对话确实需要介绍能力时,模型才引用简历中的技能和成果。

5. 使用模拟功能测试

正式运行前,进入“已读不回自动复聊提醒过程模拟”,至少测试以下场景:

  1. 招聘者没有回复。
  2. 招聘者询问工作年限。
  3. 招聘者询问某项技术是否熟悉。
  4. 招聘者发送面试邀请。
  5. 招聘者明确表示岗位不合适。

重点检查:

  • 有没有编造工作年限。
  • 有没有把 JD 内容当成个人经历。
  • 有没有引用无关项目。
  • 有没有在对方拒绝后继续追问。
  • JSON 格式能否被程序正常解析。

七、推荐运行流程

第一次使用时建议按以下顺序操作:

  1. 备份 ~/.geekgeekrun/config/ 目录。
  2. 修正简历中的工作年限和空白字段。
  3. 缩小搜索关键词范围。
  4. 调整职位类型和职位描述正则。
  5. 使用固定开场白运行少量岗位。
  6. 检查“自动开聊记录”中的岗位是否准确。
  7. 在模拟页面测试 AI 复聊。
  8. 确认回复没有编造或串上下文后,再开启自动复聊。
  9. 逐步增加职位来源和运行数量。

不要一开始就同时开启所有职位来源、大范围关键词和长时间自动复聊,否则出现问题时很难判断是哪项配置导致的。

八、常见问题

1. 为什么只完成投递,没有继续自动聊天?

因为自动开聊只负责筛选岗位并点击“立即沟通”。AI 复聊是另一个功能,需要单独配置和启动。

2. 为什么第一句话一直相同?

因为“新开聊时发送内容”当前选择的是“固定内容”。需要 AI 生成时,应切换为大语言模型选项并配置开场白提示词。

3. 为什么 AI 回复与当前问题无关?

依次检查:

  1. 简历字段是否填错。
  2. 是否真的读取了当前会话最近消息。
  3. 最近消息数量是否过多或过少。
  4. 提示词是否强制模型每次都介绍技能和项目。
  5. 大语言模型配置是否可用。

4. 为什么全栈或 AI 岗位没有被复聊?

当前开启了“只复聊期望职位”,但期望职位类型正则只匹配 Java。需要扩充正则,或者关闭这项限制。

5. 为什么 AI 会强行提到项目成果?

因为原复聊提示词要求每次都必须包含核心技能和量化成果。删除这条强制要求,改成“只有在对话需要时才引用”。

九、配置文件位置

主要配置文件:

~/.geekgeekrun/config/boss.json
~/.geekgeekrun/config/llm.json
~/.geekgeekrun/config/resumes.json

提示词模板:

~/.geekgeekrun/storage/auto-reminder-open-message-template.md
~/.geekgeekrun/storage/auto-reminder-resume-system-message-template.md

登录凭据:

~/.geekgeekrun/storage/boss-cookies.json
~/.geekgeekrun/storage/boss-local-storage.json

不建议直接编辑 JSON 配置文件,应优先通过 GeekGeekRun 界面修改。编辑错误可能导致程序无法读取配置。

十、参考资料

GeekGeekRun 通过模拟网页操作实现自动开聊,BOSS 直聘页面改版、A/B 测试或账号风控都可能导致程序行为变化。遇到重复刷新、无法点击、会话跳转异常或明显串上下文时,应先停止任务,再检查运行记录和项目 Issue。