完善岗位详情、周期投递时段与拟人化投递节奏 - #26
Merged
NingNing0111 merged 8 commits intoAug 20, 2026
Merged
Conversation
岗位描述的清洗与结构化收敛到 src-tauri/src/job_description.rs 一处。 抓下来的 JD 混着反爬注入的样式代码、噪声词和页面控件文本,原先前端自己洗 一遍、写入侧再洗一遍,喂给模型的却还是原文。现在只留一份实现两个出口: clean_text 供 prompt 与关键词匹配,parse 经 job_description_view 命令供前端。 - 岗位分析、自动回复、打招呼、语义复核、岗位过滤全部改用清洗后的正文 - 删掉前端 src/lib/job-detail.ts 与写入侧的 sanitize_boss_job_detail, 原文原样落库,页面改版时重新解析即可,不必重抓 - 详情弹窗新增「岗位详情」页签,按语义给小节配色,附工作地址与招聘者 沟通记录原先整段挤在左侧,根因是招聘者 uid 只挂在岗位卡片消息上,分页 拉不到就把整个会话判成对方发来。改为跨会话记住我方 uid 反推,存量受影响 的会话重新同步一次即可自愈。UI 一并补上头像、日期分隔与平台回执样式。 过滤规则的匹配文本随之变化:反爬类名与粘连技能标签不再参与命中判断。
定时能力: - 每日投递时段支持多段,能空出午休(09-12 / 14-18),用 24 小时格子拖选 - 可设「跑满 N 小时自动结束」,提交任务时换算成绝对时刻 - 时段外暂停投递但继续回复未读,到点自动恢复 - 老配置的 window_start_minute/window_end_minute 自动并入多段列表, 缺这条迁移会静默把用户的夜间时段重置成 09:00-18:00 修「一直在投递、回复轮不上」,三条独立成因: - 一轮投递没有上界,关键词稍宽就能跑几小时,等待期根本轮不到。 加 RoundBudget(最多 N 条 / M 分钟 / 连续失败 5 次熔断),只对周期投递默认生效 - 等待期短于轮询间隔时一次都不回复,改成进入空闲期先回一轮再睡 - 回复耗时不计入周期,把间隔撑成「间隔 + N×回复耗时」,改用绝对 deadline 计时 另外:单轮投递失败不再直接终止长驻任务(连续 3 轮才终止), sync_chat_history 挪进空闲期内不再额外占用周期预算 界面: - 启动弹窗改成紧凑列表,周期参数收进右侧抽屉,主弹窗只留一行摘要 - 配置中心「岗位筛选」新增周期投递块,存每次启动的初值
…-sequence # Conflicts: # src/view/job-data/index.tsx
平台风控看的不是单次动作像不像人,而是长期模式:每条投递都隔 4 秒、每轮都 正好 30 条,单看每一步都合法,连起来是一条没有呼吸的直线。 刻意不新开一套节奏参数,而是给既有的「单轮上限 / 投递间隔 / 岗位间停顿」蒙上 一层扰动:用户设的 30 条仍是那个量级,但今天可能 26 条、明天 33 条,中途还会 停下来歇几分钟。配置上只多了一个开关和轻度/标准/谨慎三档。 人格种子存在配置里长期不变,每天再由「种子 + 日期」派生出当天的具体策略, 于是同一天内手速与休息习惯自洽,跨天自动换一套,不同用户之间也各不相同。 全程确定性推导,可单测。 - humanize.rs:人格派生与参数塑形,纯函数 - human_pace.rs:微休息、走神、随机跳过,可被停止请求秒级打断 - human_input.rs:贝塞尔鼠标轨迹、逐字符打字、分段滚动,走 CDP Input 事件; 取不到坐标或 CDP 拒绝时一律回退到原有写法,绝不因此让投递失败 随机跳过必须发生在点开卡片之前:BOSS 会给点开过的卡片打 is-seen,放在之后 跳过等于把岗位永久放弃,而本意只是「这次先不投」。已加测试钉住这个顺序。 顺带修复保存配置不回读后端规整结果的问题。人格种子由后端生成,而前端一直把 提交的那份当已保存快照,种子于是每保存一次就换一个,稳定随机直接失效;夹取类 字段同样存在显示漂移。save_app_config 改为返回落盘后的配置。
未填完的服务不再被拒绝保存:模型名要拉列表才知道,拉列表得先存好密钥 和地址,密钥又跟这份配置一起落盘——三者互为前提,新建的备用服务永远 填不完。校验放宽为「可以存」,能不能用改由 service_is_usable 判断, llm_active / llm_chain 据此把未填完的服务挡在调用之外。 前端 isLlmActive 同步收紧,并删掉 App 里拦截自动保存的 hasIncompleteLlmDraft。 list_llm_models_for 改为接受界面上的草稿参数,密钥仍按 entry_id 从凭据库读。 模型输入框的 onOpenChange 自动拉取一并删除:下拉在输入时反复开合, 每次都会打一次网络。改为只由「获取模型」按钮触发。
每档原本有图标、标题、描述、产出说明、右侧徽标五个元素,徽标和产出说明 都在重复描述已经讲过的事。压到两个:档位名加一句话(含产出代价), 标准档缀一个推荐标记。底部的人格种子说明并入开关副标题, describePersona 随之删除。 行高从两行塌成一行后原间距显挤,选项间距和内边距相应放松。
分析时机、回复策略、拟人化是同一套卡片样式各写了一遍,三份重复的 className,改动时漏掉一处就会出现深浅不一的选中态。抽成共享组件后 三处统一:标签与描述同排、选中态一致、推荐用小标记而不是写进标签。 描述统一精简到一行,长文案由 flex-wrap 自动折行,不必为长短各拆一种布局。
This was referenced Aug 20, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
变更内容
背景与影响
拟人化针对的是长期模式而非单次动作:每条投递都隔 4 秒、每轮正好 30 条,单看每步都合法,连起来是一条没有呼吸的直线。开启后后端按当日人格种子给既有的「单轮上限 / 投递间隔 / 停顿」蒙一层扰动,用户设定的量级不变。
大模型配置此前存在死锁:模型名要拉列表才知道,拉列表得先存好密钥和地址,密钥又跟这份配置一起落盘——三者互为前提,新建的备用服务永远填不完。改法是把校验放宽为「可以存」,能不能用交给
service_is_usable判断,未填完的服务由llm_active/llm_chain挡在调用之外。模型输入框的自动拉取一并删除:下拉在输入时反复开合,每次都会打一次网络。验证
cargo test --lib:567 通过npx vitest run:169 通过npx tsc --noEmit:无错误