书接上回,现在简历已经润色得足够好了,投递到了HR手上,假设跟候选人也做了初步的电话沟通。接下来,公司需要对候选人做如下审查:
- 经理:针对简历,结合招聘岗位要求,审查简历是否符合要求(包括优点和不足)
- HR:针对简历,结合电话沟通记录以及HR招聘相关要求,审查简历是否适合(包括优点和不足)
- 团队成员:针对简历,评估候选人融入团队的程度(包括优点和不足)
可以发现,这3个角色对候选人的评估,相互之间并无严格的顺序依赖,可以并行处理,这就是今天要说的“并行工作流”,示意图如下:

一、输入素材
1.1 人事招聘要求 hr_requirements.txt
1 ## HR招聘要求 2 - 姓名和联系方式必须清晰完整。 3 - 必须在比利时/欧盟有合法工作许可。 4 - 最好能在1-2个月内入职。 5 - 薪资期望在55,000-70,000欧元/年范围内。 6 - 稳定的工作历史;无超过6个月的职业空白期。 7 - 每个职位至少任职1年,且具有相关科技行业经验。 8 - 职业生涯中职责范围的增长是可取的。 9 - 要求荷兰语(母语水平)和英语(C1等级)流利。 10 - 简历需清晰、专业;无重大语法问题。 11 - 具备团队合作、指导他人和产品导向经验者优先。
1.2 电话面试记录 phone_interview_notes.txt
1 电话面试记录 – 约翰·多伊 (后端工程师) – 2025-09-05 2 面试官:萨拉·雅各布斯 (HR) 3 4 工作许可: 比利时公民;拥有欧盟工作许可。 5 工作地点: 安特卫普;倾向每周3天远程办公。 6 可入职时间: 需提前3个月通知;无需搬迁。 7 薪资期望: 当前年薪62,000欧元;期望约75,000欧元;要求培训预算。 8 工作经验: 约4年后端开发(Java, Spring Boot, PostgreSQL);领导过定价工具项目;使用过Kafka POC;对指导他人有兴趣。 9 职业履历: 当前职位4年,先前职位1.5年;无重大职业空白期。 10 软技能: 荷兰语母语,英语C1水平;沟通清晰;务实,产品导向。 11 备注: 薪资略高于范围;可入职时间晚于预期;分布式系统经验有限。
1.3 优化后的简历 tailored_cv.txt
1 约翰·多伊 – 后端工程师 2 安特卫普,比利时 | john.doe.dev@protonmail.com | +32 495 67 89 23 | 领英 | GitHub 3 4 简介 5 拥有4年以上经验的后端工程师(Java, Spring Boot, PostgreSQL),专注于可扩展系统、API现代化和自动化。荷兰语流利,英语C1水平。 6 7 工作经历 8 BrightPay Systems(2021年至今):构建后端服务;开发定价工具(报价时间缩短35%);完成SOAP到REST的API迁移;指导实习生。 9 CodeWave Solutions(2019–2021年):后端开发;建立CI/CD流程(GitHub Actions);使用Docker、Kafka(概念验证);开发小型React管理界面;参与个人项目(Spring+Vue预算应用,物联网自动化)。 10 11 教育背景 12 Java 编程训练营,BeCode(2019–2020年) 13 机械工程学士,鲁汶大学(2016年) 14 15 技能 16 技术:Java,Spring Boot,PostgreSQL,Docker,Kafka(基础),CI/CD,REST设计,整洁代码,指导新人 17 语言:荷兰语(母语),英语(C1),法语(B1)
二、定义各种审查Agent
2.1 HrCvReviewer
1 public interface HrCvReviewer { 2 3 @Agent(name = "hrReviewer", description = "审查简历以评估候选人是否符合HR要求,提供反馈和评分") 4 @SystemMessage(""" 5 你作为HR专员,根据以下职位要求审查简历: 6 {{hrRequirements}} 7 你需要为每份简历提供评分和反馈(包括优点和不足之处)。 8 可以忽略诸如缺少地址或占位符等内容。 9 10 重要提示:请仅返回有效的JSON格式响应,换行符使用\\n,不要包含任何Markdown格式或代码块。 11 """) 12 @UserMessage(""" 13 请审查这份简历:{{candidateCv}},以及附带的电话面试记录:{{phoneInterviewNotes}} 14 """) 15 CvReview reviewCv(@V("candidateCv") String cv, @V("phoneInterviewNotes") String phoneInterviewNotes, @V("hrRequirements") String hrRequirements); 16 }
2.2 ManagerCvReviewer
1 public interface ManagerCvReviewer { 2 3 @Agent(name = "managerReviewer", description = "基于职位描述审查简历,提供反馈和评分") 4 @SystemMessage(""" 5 你是该职位的招聘经理: 6 {{jobDescription}} 7 你需要审查申请人简历,从众多候选人中决定邀请谁参加现场面试。 8 你需要为每份简历提供评分和反馈(包括优点和不足之处)。 9 可以忽略诸如缺少地址或占位符等内容。 10 11 重要提示:请仅返回有效的JSON格式响应,换行符使用\\n,不要包含任何Markdown格式或代码块。 12 """) 13 @UserMessage(""" 14 请审查这份简历:{{candidateCv}} 15 """) 16 CvReview reviewCv(@V("candidateCv") String cv, @V("jobDescription") String jobDescription); 17 }
2.3 TeamMemberCvReviewer
1 public interface TeamMemberCvReviewer { 2 3 @Agent(name = "teamMemberReviewer", description = "审查简历以评估候选人是否适合团队,提供反馈和评分") 4 @SystemMessage(""" 5 你在一个充满动力、自我驱动的同事且拥有高度自由度的团队中工作。 6 你的团队重视协作、责任感和务实精神。 7 你需要审查申请人简历,评估此人融入团队的程度。 8 你需要为每份简历提供评分和反馈(包括优点和不足之处)。 9 可以忽略诸如缺少地址或占位符等内容。 10 11 重要提示:请仅返回有效的JSON格式响应,换行符使用\\n,不要包含任何Markdown格式或代码块。 12 """) 13 @UserMessage(""" 14 请审查这份简历:{{candidateCv}} 15 """) 16 CvReview reviewCv(@V("candidateCv") String cv); 17 }
三、并行Agent示例
1 /** 2 * 这个示例演示了如何实现3个并行的CvReviewer智能体, 3 * 它们将同时评估简历。我们将实现三个智能体: 4 * - ManagerCvReviewer(评估候选人胜任工作的可能性) 5 * 输入:简历和职位描述 6 * - TeamMemberCvReviewer(评估候选人融入团队的程度) 7 * 输入:简历 8 * - HrCvReviewer(从HR角度检查候选人是否符合要求) 9 * 输入:简历、HR要求 10 * by 菩提树下的杨过(yjmyzz.cnblogs.com) 11 */ 12 @SpringBootApplication 13 public class _4_Parallel_Workflow_Example { 14 15 public static void main(String[] args) throws IOException { 16 ConfigurableApplicationContext context = SpringApplication.run(AgentDesignPatternApplication.class, args); 17 ChatModel model = context.getBean("ollamaChatModel", ChatModel.class); 18 19 // 2. 在本包中定义三个子智能体: 20 // - HrCvReviewer.java 21 // - ManagerCvReviewer.java 22 // - TeamMemberCvReviewer.java 23 24 // 3. 使用AgenticServices创建所有智能体 25 HrCvReviewer hrCvReviewer = AgenticServices.agentBuilder(HrCvReviewer.class) 26 .chatModel(model) 27 .outputKey("hrReview") // 这将在每次迭代中被覆盖,同时也作为我们想要观察的最终输出 28 .build(); 29 30 ManagerCvReviewer managerCvReviewer = AgenticServices.agentBuilder(ManagerCvReviewer.class) 31 .chatModel(model) 32 .outputKey("managerReview") // 这会覆盖原始输入指令,并在每次迭代中被覆盖,用作CvTailor的新指令 33 .build(); 34 35 TeamMemberCvReviewer teamMemberCvReviewer = AgenticServices.agentBuilder(TeamMemberCvReviewer.class) 36 .chatModel(model) 37 .outputKey("teamMemberReview") // 这会覆盖原始输入指令,并在每次迭代中被覆盖,用作CvTailor的新指令 38 .build(); 39 40 // 4. 构建执行流程 41 var executor = Executors.newFixedThreadPool(3); // 保留引用以便后续关闭 42 43 UntypedAgent cvReviewGenerator = AgenticServices // 使用UntypedAgent,除非你定义了结果组合智能体,参见_2_Sequential_Agent_Example 44 .parallelBuilder() 45 .subAgents(hrCvReviewer, managerCvReviewer, teamMemberCvReviewer) // 可以添加任意多个 46 .executor(executor) // 可选,默认使用内部缓存的线程池,执行完成后会自动关闭 47 .outputKey("fullCvReview") // 这是我们想要观察的最终输出 48 .output(agenticScope -> { 49 // 从智能体作用域读取每个评审者的输出 50 CvReview hrReview = (CvReview) agenticScope.readState("hrReview"); 51 CvReview managerReview = (CvReview) agenticScope.readState("managerReview"); 52 CvReview teamMemberReview = (CvReview) agenticScope.readState("teamMemberReview"); 53 // 返回汇总的评审结果,包含平均分(或你想要的任何其他聚合方式) 54 String feedback = String.join("\n", 55 "HR评审: " + hrReview.feedback, 56 "经理评审: " + managerReview.feedback, 57 "团队成员评审: " + teamMemberReview.feedback 58 ); 59 double avgScore = (hrReview.score + managerReview.score + teamMemberReview.score) / 3.0; 60 61 return new CvReview(avgScore, feedback); 62 }) 63 .build(); 64 65 // 5. 从resources/documents/目录下的文本文件加载原始参数 66 String candidateCv = StringLoader.loadFromResource("/documents/tailored_cv.txt"); 67 String jobDescription = StringLoader.loadFromResource("/documents/job_description_backend.txt"); 68 String hrRequirements = StringLoader.loadFromResource("/documents/hr_requirements.txt"); 69 String phoneInterviewNotes = StringLoader.loadFromResource("/documents/phone_interview_notes.txt"); 70 71 // 6. 由于我们使用了无类型智能体,需要传递参数映射 72 Map<String, Object> arguments = Map.of( 73 "candidateCv", candidateCv, 74 "jobDescription", jobDescription 75 , "hrRequirements", hrRequirements 76 , "phoneInterviewNotes", phoneInterviewNotes 77 ); 78 79 // 7. 调用组合智能体生成定制的简历 80 var review = cvReviewGenerator.invoke(arguments); 81 82 // 8. 打印生成的简历 83 System.out.println("=== 已评审的简历 ==="); 84 System.out.println(review); 85 86 // 9. 关闭执行器 87 executor.shutdown(); 88 89 } 90 91 92 }
时序图(简化版) - AI生成

时序图(详细版) - AI生成

运行结果:
1 2026-01-17T15:54:11.422+08:00 INFO 9072 --- [langchain4j-study] [pool-5-thread-3] d.l.http.client.log.LoggingHttpClient : HTTP request: 2 - method: POST 3 - url: http://localhost:11434/api/chat 4 - headers: [Content-Type: application/json] 5 - body: { 6 "model" : "deepseek-v3.1:671b-cloud", 7 "messages" : [ { 8 "role" : "system", 9 "content" : "你在一个充满动力、自我驱动的同事且拥有高度自由度的团队中工作。\n你的团队重视协作、责任感和务实精神。\n你需要审查申请人简历,评估此人融入团队的程度。\n你需要为每份简历提供评分和反馈(包括优点和不足之处)。\n可以忽略诸如缺少地址或占位符等内容。\n\n重要提示:请仅返回有效的JSON格式响应,换行符使用\\n,不要包含任何Markdown格式或代码块。\n" 10 }, { 11 "role" : "user", 12 "content" : "请审查这份简历:约翰·多伊 – 后端工程师\r\n安特卫普,比利时 | john.doe.dev@protonmail.com | +32 495 67 89 23 | 领英 | GitHub\r\n\r\n简介\r\n拥有4年以上经验的后端工程师(Java, Spring Boot, PostgreSQL),专注于可扩展系统、API现代化和自动化。荷兰语流利,英语C1水平。\r\n\r\n工作经历\r\nBrightPay Systems(2021年至今):构建后端服务;开发定价工具(报价时间缩短35%);完成SOAP到REST的API迁移;指导实习生。\r\nCodeWave Solutions(2019–2021年):后端开发;建立CI/CD流程(GitHub Actions);使用Docker、Kafka(概念验证);开发小型React管理界面;参与个人项目(Spring+Vue预算应用,物联网自动化)。\r\n\r\n教育背景\r\nJava 编程训练营,BeCode(2019–2020年)\r\n机械工程学士,鲁汶大学(2016年)\r\n\r\n技能\r\n技术:Java,Spring Boot,PostgreSQL,Docker,Kafka(基础),CI/CD,REST设计,整洁代码,指导新人\r\n语言:荷兰语(母语),英语(C1),法语(B1)\n\nYou must answer strictly in the following JSON format: {\n\"score\": (从0到1分你邀请这位应聘者参加面试的可能性; type: double),\n\"feedback\": (对简历的反馈,什么是好的,什么需要改进,什么技能缺失,什么危险信号……; type: string)\n}" 13 } ], 14 "options" : { 15 "stop" : [ ] 16 }, 17 "stream" : false, 18 "tools" : [ ] 19 } 20 21 2026-01-17T15:54:11.422+08:00 INFO 9072 --- [langchain4j-study] [pool-5-thread-2] d.l.http.client.log.LoggingHttpClient : HTTP request: 22 - method: POST 23 - url: http://localhost:11434/api/chat 24 - headers: [Content-Type: application/json] 25 - body: { 26 "model" : "deepseek-v3.1:671b-cloud", 27 "messages" : [ { 28 "role" : "system", 29 "content" : "你是该职位的招聘经理:\n职位描述 ID: 123A\r\n后端工程师(金融科技,安特卫普)\r\n------------------------------------------------------------\r\n我们正在招聘一位**后端工程师**,协助我们构建并完善支付与对账服务。您将主要使用 **Java (Spring Boot)**,并与产品及运营团队紧密合作,确保金融交易系统的可靠性和可扩展性。\r\n\r\n**职责:**\r\n* 设计、实现并维护能够处理大规模支付与对账业务的后端服务。\r\n* 在云原生环境中使用 **PostgreSQL**、**Kafka**、**Docker** 和 **Kubernetes**。\r\n* 专注于构建可靠、幂等的系统,并具备强大的可观测性。\r\n* 支持将遗留服务迁移至现代的 REST API。\r\n\r\n**要求:**\r\n* 具备 Java 和 Spring Boot 后端开发的职业经验。\r\n* 深入理解关系型数据库和事件驱动架构。\r\n* 熟悉容器化技术和部署流程。\r\n* 有金融或定价系统相关经验者优先。\r\n* 要求英语流利,会荷兰语者更佳。\n你需要审查申请人简历,从众多候选人中决定邀请谁参加现场面试。\n你需要为每份简历提供评分和反馈(包括优点和不足之处)。\n可以忽略诸如缺少地址或占位符等内容。\n\n重要提示:请仅返回有效的JSON格式响应,换行符使用\\n,不要包含任何Markdown格式或代码块。\n" 30 }, { 31 "role" : "user", 32 "content" : "请审查这份简历:约翰·多伊 – 后端工程师\r\n安特卫普,比利时 | john.doe.dev@protonmail.com | +32 495 67 89 23 | 领英 | GitHub\r\n\r\n简介\r\n拥有4年以上经验的后端工程师(Java, Spring Boot, PostgreSQL),专注于可扩展系统、API现代化和自动化。荷兰语流利,英语C1水平。\r\n\r\n工作经历\r\nBrightPay Systems(2021年至今):构建后端服务;开发定价工具(报价时间缩短35%);完成SOAP到REST的API迁移;指导实习生。\r\nCodeWave Solutions(2019–2021年):后端开发;建立CI/CD流程(GitHub Actions);使用Docker、Kafka(概念验证);开发小型React管理界面;参与个人项目(Spring+Vue预算应用,物联网自动化)。\r\n\r\n教育背景\r\nJava 编程训练营,BeCode(2019–2020年)\r\n机械工程学士,鲁汶大学(2016年)\r\n\r\n技能\r\n技术:Java,Spring Boot,PostgreSQL,Docker,Kafka(基础),CI/CD,REST设计,整洁代码,指导新人\r\n语言:荷兰语(母语),英语(C1),法语(B1)\n\nYou must answer strictly in the following JSON format: {\n\"score\": (从0到1分你邀请这位应聘者参加面试的可能性; type: double),\n\"feedback\": (对简历的反馈,什么是好的,什么需要改进,什么技能缺失,什么危险信号……; type: string)\n}" 33 } ], 34 "options" : { 35 "stop" : [ ] 36 }, 37 "stream" : false, 38 "tools" : [ ] 39 } 40 41 2026-01-17T15:54:11.422+08:00 INFO 9072 --- [langchain4j-study] [pool-5-thread-1] d.l.http.client.log.LoggingHttpClient : HTTP request: 42 - method: POST 43 - url: http://localhost:11434/api/chat 44 - headers: [Content-Type: application/json] 45 - body: { 46 "model" : "deepseek-v3.1:671b-cloud", 47 "messages" : [ { 48 "role" : "system", 49 "content" : "你作为HR专员,根据以下职位要求审查简历:\n## HR招聘要求\r\n- 姓名和联系方式必须清晰完整。\r\n- 必须在比利时/欧盟有合法工作许可。\r\n- 最好能在1-2个月内入职。\r\n- 薪资期望在55,000-70,000欧元/年范围内。\r\n- 稳定的工作历史;无超过6个月的职业空白期。\r\n- 每个职位至少任职1年,且具有相关科技行业经验。\r\n- 职业生涯中职责范围的增长是可取的。\r\n- 要求荷兰语(母语水平)和英语(C1等级)流利。\r\n- 简历需清晰、专业;无重大语法问题。\r\n- 具备团队合作、指导他人和产品导向经验者优先。\n你需要为每份简历提供评分和反馈(包括优点和不足之处)。\n可以忽略诸如缺少地址或占位符等内容。\n\n重要提示:请仅返回有效的JSON格式响应,换行符使用\\n,不要包含任何Markdown格式或代码块。\n" 50 }, { 51 "role" : "user", 52 "content" : "请审查这份简历:约翰·多伊 – 后端工程师\r\n安特卫普,比利时 | john.doe.dev@protonmail.com | +32 495 67 89 23 | 领英 | GitHub\r\n\r\n简介\r\n拥有4年以上经验的后端工程师(Java, Spring Boot, PostgreSQL),专注于可扩展系统、API现代化和自动化。荷兰语流利,英语C1水平。\r\n\r\n工作经历\r\nBrightPay Systems(2021年至今):构建后端服务;开发定价工具(报价时间缩短35%);完成SOAP到REST的API迁移;指导实习生。\r\nCodeWave Solutions(2019–2021年):后端开发;建立CI/CD流程(GitHub Actions);使用Docker、Kafka(概念验证);开发小型React管理界面;参与个人项目(Spring+Vue预算应用,物联网自动化)。\r\n\r\n教育背景\r\nJava 编程训练营,BeCode(2019–2020年)\r\n机械工程学士,鲁汶大学(2016年)\r\n\r\n技能\r\n技术:Java,Spring Boot,PostgreSQL,Docker,Kafka(基础),CI/CD,REST设计,整洁代码,指导新人\r\n语言:荷兰语(母语),英语(C1),法语(B1),以及附带的电话面试记录:电话面试记录 – 约翰·多伊 (后端工程师) – 2025-09-05\r\n面试官:萨拉·雅各布斯 (HR)\r\n\r\n工作许可: 比利时公民;拥有欧盟工作许可。\r\n工作地点: 安特卫普;倾向每周3天远程办公。\r\n可入职时间: 需提前3个月通知;无需搬迁。\r\n薪资期望: 当前年薪62,000欧元;期望约75,000欧元;要求培训预算。\r\n工作经验: 约4年后端开发(Java, Spring Boot, PostgreSQL);领导过定价工具项目;使用过Kafka POC;对指导他人有兴趣。\r\n职业履历: 当前职位4年,先前职位1.5年;无重大职业空白期。\r\n软技能: 荷兰语母语,英语C1水平;沟通清晰;务实,产品导向。\r\n备注: 薪资略高于范围;可入职时间晚于预期;分布式系统经验有限。\n\nYou must answer strictly in the following JSON format: {\n\"score\": (从0到1分你邀请这位应聘者参加面试的可能性; type: double),\n\"feedback\": (对简历的反馈,什么是好的,什么需要改进,什么技能缺失,什么危险信号……; type: string)\n}" 53 } ], 54 "options" : { 55 "stop" : [ ] 56 }, 57 "stream" : false, 58 "tools" : [ ] 59 } 60 61 2026-01-17T15:54:14.452+08:00 INFO 9072 --- [langchain4j-study] [pool-5-thread-2] d.l.http.client.log.LoggingHttpClient : HTTP response: 62 - status code: 200 63 - headers: [content-type: application/json; charset=utf-8], [date: Sat, 17 Jan 2026 07:54:14 GMT], [transfer-encoding: chunked] 64 - body: {"model":"deepseek-v3.1:671b-cloud","remote_model":"deepseek-v3.1:671b","remote_host":"https://ollama.com:443","created_at":"2026-01-17T07:54:14.128982804Z","message":{"role":"assistant","content":"{\n\"score\": 0.7,\n\"feedback\": \"优点:拥有4年相关的Java和Spring Boot经验,具体参与了API现代化工作(SOAP到REST),符合职位需求。有定价工具开发经验,这是优先考虑项。技术栈(PostgreSQL, Docker)与职位匹配。荷兰语流利,英语沟通能力良好。有指导经验。\\n不足之处:金融科技或支付系统直接经验未明确提及,这是一个关键需求。Kafka经验标注为“基础”和“概念验证”,可能不够深入。金融系统所需的可靠性和可观测性技能在简历中未突出。缺乏Kubernetes经验的明确说明。教育背景中机械工程学位与软件工程关联性较弱。\"\n}"},"done":true,"done_reason":"stop","total_duration":2523983598,"prompt_eval_count":674,"eval_count":153} 65 66 67 2026-01-17T15:55:22.847+08:00 INFO 9072 --- [langchain4j-study] [pool-5-thread-3] d.l.http.client.log.LoggingHttpClient : HTTP response: 68 - status code: 200 69 - headers: [content-type: application/json; charset=utf-8], [date: Sat, 17 Jan 2026 07:55:22 GMT], [transfer-encoding: chunked] 70 - body: {"model":"deepseek-v3.1:671b-cloud","remote_model":"deepseek-v3.1:671b","remote_host":"https://ollama.com:443","created_at":"2026-01-17T07:55:22.545191436Z","message":{"role":"assistant","content":"{\n\"score\": 0.75,\n\"feedback\": \"好的方面:具备4年相关经验,技术栈与职位需求匹配(Java, Spring Boot, PostgreSQL),有实际项目成果(如SOAP到REST迁移、CI/CD实施),显示了自动化和可扩展系统的关注点;拥有指导经验,符合团队协作价值观。需要改进:个人项目和技术广度(如Kafka基础、React经验)可能不太深入,缺乏对系统设计或大规模处理的具体细节;教育背景中机械工程与软件工程无关,但训练营弥补了部分。技能缺失:缺乏云平台(AWS/Azure)或微服务架构经验,可能限制在高度分布式团队中的贡献。无明显危险信号。\"\n}"},"done":true,"done_reason":"stop","total_duration":10361972956,"prompt_eval_count":442,"eval_count":151} 71 72 73 2026-01-17T15:55:26.421+08:00 INFO 9072 --- [langchain4j-study] [pool-5-thread-1] d.l.http.client.log.LoggingHttpClient : HTTP response: 74 - status code: 200 75 - headers: [content-type: application/json; charset=utf-8], [date: Sat, 17 Jan 2026 07:55:26 GMT], [transfer-encoding: chunked] 76 - body: {"model":"deepseek-v3.1:671b-cloud","remote_model":"deepseek-v3.1:671b","remote_host":"https://ollama.com:443","created_at":"2026-01-17T07:55:26.117462176Z","message":{"role":"assistant","content":"{\n\"score\": 0.7,\n\"feedback\": \"简历优点:姓名、联系方式和比利时/欧盟工作许可明确;每个职位任职时间超过1年(分别是4年和1.5年),无重大职业空白期,工作历史稳定;荷兰语和英语水平符合要求(荷兰语母语,英语C1);技能与职位要求匹配,具有Java、Spring Boot等后端开发经验;展示了职责范围增长(如指导实习生、领导定价工具项目)。不足之处:薪资期望(75,000欧元)略高于职位范围(55,000-70,000欧元);可入职时间(需3个月通知)晚于理想的1-2个月;分布式系统经验(如Kafka)有限且为概念验证;简历过于简洁,缺乏细节,如工作职责描述可以更具体和专业。\"\n}"},"done":true,"done_reason":"stop","total_duration":13998598290,"prompt_eval_count":798,"eval_count":174} 77 78 79 === 已评审的简历 === 80 81 CvReview: - score = 0.7166666666666667 82 - feedback = "HR评审: 简历优点:姓名、联系方式和比利时/欧盟工作许可明确;每个职位任职时间超过1年(分别是4年和1.5年),无重大职业空白期,工作历史稳定;荷兰语和英语水平符合要求(荷兰语母语,英语C1);技能与职位要求匹配,具有Java、Spring Boot等后端开发经验;展示了职责范围增长(如指导实习生、领导定价工具项目)。不足之处:薪资期望(75,000欧元)略高于职位范围(55,000-70,000欧元);可入职时间(需3个月通知)晚于理想的1-2个月;分布式系统经验(如Kafka)有限且为概念验证;简历过于简洁,缺乏细节,如工作职责描述可以更具体和专业。 83 经理评审: 优点:拥有4年相关的Java和Spring Boot经验,具体参与了API现代化工作(SOAP到REST),符合职位需求。有定价工具开发经验,这是优先考虑项。技术栈(PostgreSQL, Docker)与职位匹配。荷兰语流利,英语沟通能力良好。有指导经验。 84 不足之处:金融科技或支付系统直接经验未明确提及,这是一个关键需求。Kafka经验标注为“基础”和“概念验证”,可能不够深入。金融系统所需的可靠性和可观测性技能在简历中未突出。缺乏Kubernetes经验的明确说明。教育背景中机械工程学位与软件工程关联性较弱。 85 团队成员评审: 好的方面:具备4年相关经验,技术栈与职位需求匹配(Java, Spring Boot, PostgreSQL),有实际项目成果(如SOAP到REST迁移、CI/CD实施),显示了自动化和可扩展系统的关注点;拥有指导经验,符合团队协作价值观。需要改进:个人项目和技术广度(如Kafka基础、React经验)可能不太深入,缺乏对系统设计或大规模处理的具体细节;教育背景中机械工程与软件工程无关,但训练营弥补了部分。技能缺失:缺乏云平台(AWS/Azure)或微服务架构经验,可能限制在高度分布式团队中的贡献。无明显危险信号。"
82行,即为3个评审Agent并行执行的结果。
文中示例代码:
https://github.com/yjmyzz/agentic_turoial_with_langchain4j
参考:
Building Effective AI Agents \ Anthropic
[译] AI Workflow & AI Agent:架构、模式与工程建议(Anthropic,2024)
Agents and Agentic AI | LangChain4j