基于 AI 的智能表单填写插件分享:OfferNow 简历闪填

项目背景

为什么要做这个? 相信最近在看机会、跑春招的兄弟们都有同一个痛点:网申太折磨人了。 现在的招聘系统(北森、Moka、各大银行官网、国企系统)可以说是一个“万国博览会”,每家公司的 DOM 结构、字段定义都不一样。 虽然市面上已有一些自动填充插件,但痛点依然明显: 传统插件(Regex/规则流): 稍微改个 ID 或者 Class 名就失效,维护成本极高,且无法应对复杂语义(比如区分“手机号”和“紧急联系人电话”)。 RPA 工具: 配置太重,对普通用户不友好,那是给企业用的,不是给我们求职者用的。 核心思考: 现在 Gemini 3.0、GPT-4o 这种大模型已经具备了极强的语义理解能力和多模态能力。能不能让 LLM 像人眼一样去“看”网页,自动把简历里的信息“填”进去,从而实现 0 配置的自动化? 基于这个想法,我开发了 OfferNow。

实现思路

LLM 带来的降维打击

这个项目的核心难点在于网页 HTML 结构的非标准化。 以前我们写爬虫或脚本,需要针对每个网站写 XPath 或 CSS Selector。但在 OfferNow 中,我引入了 Gemini 3.0 Pro。 利用 Gemini 3.0 强大的上下文理解能力(Context Window),我不需要硬编码规则。插件会将当前页面的表单结构提取出来,配合用户的简历 JSON,直接丢给模型进行语义映射。 实测下来,模型能精准识别出 <input name="q1_v2"> 这种乱码字段其实是“期望薪资”,也能把简历里的“2023.09”自动格式化为目标网站需要的“2023-09-01”。

纯 Agent 带来的挑战与优化

如果直接让 Agent 全托管操作,会面临两个问题:Latency(延迟)和 Cost(Token 成本)。 每次填一个框都请求一次 API 是不现实的。我的解决方案是 “本地化预处理 + 批量推断”: DOM 剪枝: 在发送给 LLM 之前,先在本地通过算法剔除页面上无关的广告、导航栏等干扰元素,只保留核心表单区,大幅减少 Token 消耗。 一次性推断: 将整个表单结构打包,让 Gemini 一次性返回所有字段的映射关系,而不是填一个问一次。

隐私优先设计: 不同于云端 Agent,OfferNow 坚持“数据本地化”。简历数据只存在浏览器的 LocalStorage 中,LLM 只负责逻辑处理,不存储任何用户数据。

  1. 项目进展 本项目目前已经上线 Chrome 应用商店 和 Edge 商店。 虽然刚上线一个月,但在没有大规模推广的情况下,全靠口碑传播已经积累了 2000+种子用户。 目前的版本已经能够完美适配: ✅ 主流第三方招聘系统(Moka、北森、Taleo等) ✅ 令人头秃的银行网申系统(工行、建行等老旧框架实测通过率 90%+) ✅ 互联网大厂官网(字节、腾讯、阿里等) 这个项目花了我不少心血去调优 Prompt 和解析算法,中间踩过很多 DOM 隔离和跨域的坑,现在终于稳定了。 欢迎体验与交流。

大家可以在商店搜索 “OfferNow简历闪填” 即可找到,也可以直接访问cv.offernow.cn获取。

如果你也是开发者,或者对 LLM 落地应用感兴趣,欢迎在评论区交流技术细节!也欢迎大家提 Bug,我连夜修!

#简历中的项目经历要怎么写#
全部评论

相关推荐

eino&nbsp;v0.7.15&nbsp;版本更新详解:ChatModel&nbsp;Agent&nbsp;中间件与&nbsp;Agent&nbsp;名称修正1.&nbsp;adk&nbsp;修复:在未配置工具的情况下支持&nbsp;after&nbsp;chatmodel在此前版本中,当&nbsp;ChatModelAgent&nbsp;未配置工具时,AfterChatModel&nbsp;中间件不会被正确执行。本次更新通过调整&nbsp;ChatModelAgent&nbsp;的链式执行逻辑,使得&nbsp;AfterChatModel&nbsp;在没有工具配置的情况下也能够正常触发。具体改动体现在&nbsp;chatmodel.go&nbsp;文件中,对&nbsp;buildRunFunc&nbsp;方法进行了修改:•&nbsp;在构建&nbsp;Chain&nbsp;时引入本地状态生成函数,用于初始化&nbsp;ChatModelAgentState•&nbsp;在&nbsp;ChatModel&nbsp;执行前,通过&nbsp;StatePreHandler&nbsp;更新并处理&nbsp;state.Messages,同时顺序执行&nbsp;BeforeChatModel&nbsp;中间件•&nbsp;在&nbsp;ChatModel&nbsp;执行后,通过&nbsp;StatePostHandler&nbsp;将模型输出追加到&nbsp;state.Messages,并顺序执行&nbsp;AfterChatModel&nbsp;中间件•&nbsp;保证&nbsp;BeforeChatModel&nbsp;和&nbsp;AfterChatModel&nbsp;都围绕&nbsp;ChatModel&nbsp;的执行过程正确生效通过这一调整,即使未配置工具调用能力,ChatModel&nbsp;的前置和后置中间件也能按预期执行。2.&nbsp;adk&nbsp;修复:agent&nbsp;名称设置修正在&nbsp;flow.go&nbsp;中,对&nbsp;agent&nbsp;运行时的&nbsp;AgentName&nbsp;和&nbsp;RunPath&nbsp;设置逻辑进行了修正。更新后的逻辑说明如下:•&nbsp;始终使用当前&nbsp;agent&nbsp;的名称作为&nbsp;event.AgentName•&nbsp;当&nbsp;event.RunPath&nbsp;已存在时,将框架生成的&nbsp;RunPath&nbsp;与自定义&nbsp;RunPath&nbsp;合并,避免重复或错误的路径段•&nbsp;当&nbsp;event.RunPath&nbsp;不存在时,直接使用当前运行上下文中的&nbsp;RunPath•&nbsp;保证事件记录策略中,RunPath&nbsp;能够准确匹配当前&nbsp;agent&nbsp;的执行路径,避免因路径重复导致的事件不记录问题该修复解决了在运行流式&nbsp;agent&nbsp;时,AgentName&nbsp;和&nbsp;RunPath&nbsp;可能配置错误的问题。
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务