Spring Boot + DeepSeek 求职 Agent 实践:工具注册、多轮调用与简历 JD 对比

这次更新把我原来的简历优化平台整理成了一个求职 Agent 应用:围绕简历版本、目标 JD、公司资料和投递记录,建立连续的操作流程。

项目名是 Resume Fit AI,使用 Java 21、Spring Boot 3、Spring AI 和 DeepSeek。本文记录目前已经实现的功能、工具注册方式,以及多轮调用中处理异常时的一些取舍。

1. 业务流程

页面按以下顺序组织:

text 复制代码
简历与版本
    ↓
简历分析
    ↓
找岗位与对比
    ↓
了解公司
    ↓
投递跟进

用户保存简历后,可以选择版本分析表达和完整性,再粘贴完整岗位 JD 做对比。修改后的内容可以另存版本、查看文本差异并导出纯文字 PDF。公司资料保留来源,投递进度由用户手动维护。

这样的流程让一次分析结果能接上后续操作,而不只是留在一段聊天回复中。

2. 代码按职责拆开

当前分成三部分:

层次 主要职责
AI 层 模型适配、消息、工具定义与模型返回值
Agent 层 多轮循环、工具目录与执行、预算和停止条件
求职应用层 简历版本、岗位、公司资料、投递业务和报告校验

通用 AgentLoop 不读取业务数据库,不判断某个简历报告应该有哪些字段。应用层负责准备任务上下文,并提供本次任务允许调用的工具。

3. 工具目录和执行器分工

ToolCatalog 使用工具名到 ToolSpec 的映射。注册时拒绝同名工具,运行前冻结目录;模型可见的是登记好的工具定义,实际执行由 ToolExecutor 处理。

它是进程内的工具目录,不需要额外部署一个注册服务。

一次调用需要经过这些步骤:

text 复制代码
模型返回工具名、参数、调用 ID
    ↓
确认工具在白名单中
    ↓
校验参数
    ↓
执行对应处理逻辑
    ↓
校验并限制工具输出
    ↓
以原调用 ID 回传结果

工具名只是选择能力的入口,不能因为模型给出一个字符串,就允许它调用后端任意方法。工具目录也不能替代业务权限校验,例如选定的简历版本仍需验证归属。

4. Agent 多轮运行

整体过程是"请求模型 → 执行工具 → 回传结果 → 再请求模型",直到输出最终结果或触发停止条件。

项目为循环设置了轮数、工具调用次数、总超时、单次调用超时和 Token 预算。模型不再请求工具时,最终内容还要经过应用层的结果校验;格式或内容不符合约定,不能直接标记成功。

原始调用 ID 会保留,用来把工具结果对应回模型的那次请求,不能只回传一个工具名。

5. 重试与取消的边界

重试需要知道失败发生在哪一步。

当前只对符合策略、且尚未执行工具的临时模型错误进行一次有限重试;重试仍消耗本次任务的预算。参数错误、未知工具或最终输出无效,都不能简单靠无限重试解决。

如果任务已经执行了有副作用的操作,盲目重放还可能重复写入。因此"失败就把整段流程再跑一遍"不能作为通用策略。

前端和服务端也处理了取消、超时以及迟到结果,避免切换简历版本后,上一次任务的结果覆盖当前内容。

6. 招聘平台搜索的实际状态

目前线上提供 BOSS 直聘、智联招聘和 51job 搜索入口。用户确认条件后去平台查找,再把核实过的完整 JD 粘贴回应用,继续收藏和分析。

Tavily / SearXNG 的搜索适配已预留,但服务器还没有配置搜索来源,因此自动搜索并返回真实职位列表尚未启用。

搜索摘要与完整 JD 是两种输入,不能直接混用。关键词覆盖可以提供核对线索,不能宣传成综合匹配度或录用概率。当前也没有公司信誉评分、自动投递或自动联系招聘方的功能。

7. 验证与后续

本轮后端检查共 82 项:79 项通过,3 项真实模型测试按设计跳过。同时进行了本地浏览器流程和边界检查。真实模型并发、外部职位搜索效果仍需单独验证,不能用离线通过结果代替。

接下来会继续完善搜索来源接入和结果核实流程,并结合实际反馈调整页面操作。

线上体验:

https://jianli.wanbinxy.icu/job-assistant.html

欢迎反馈功能问题,也欢迎交流工具注册、多轮调用和异常处理方面的实现思路。

相关推荐
程序员cxuan2 小时前
别学 subagent 了,很可能要凉了。
后端·agent·ai编程
IvorySQL2 小时前
PostgreSQL 日报|Anonymizer 3.3 修复高危漏洞(10 月 29 日)
数据库·postgresql
合众恒跃2 小时前
合众恒跃具身机器人嵌入式AI解决方案
人工智能·机器人·rk3588·jetson·英伟达·瑞芯微·rk3576
小咕聊编程2 小时前
基于Django的个人摄影博客网站设计与开发
后端·python·django
梦想很大很大2 小时前
让 Codex 自由发挥,给 nvm-desktop 换个 UI
前端·人工智能·设计
geovindu2 小时前
SQL Data Sampling and Approximation Techniques using postgreSQL 18
大数据·数据库·数据仓库·sql·postgresql·数据库开发·数据库架构
论文复现现场2 小时前
DeepSeek V4.1 Flash 和 V4 Pro 有什么区别?API 价格、性能与迁移建议
java·服务器·人工智能·python·大模型api·deepseek·deepseek v4.1
hey you~2 小时前
医疗器械门店语音机器人,产品咨询来电,怎么限制回答医疗诊断类内容?
人工智能·机器人·语音识别·意图识别·语音机器人·转人工·nlu安全
zyseo82 小时前
谷歌SEO 关键词研究完整方法论:从种子词到优先级矩阵
数据库·人工智能·矩阵