Agent设计模式学习(基于langchain4j实现)(3) - 循环工作流

上节继续,仍然还是这个简历优化的示例,这次引入1个 “简历审阅者(CVReviewer)”的角色,定义如下:

public interface CvReviewer {

    @Agent("根据特定指示审阅简历,提供反馈和分数。请考虑简历与职位要求的匹配程度")
    @SystemMessage("""
            您是此职位的招聘经理:
            {{jobDescription}}
            您需要审阅申请人的简历,并决定在众多申请人中邀请谁进行现场面试。
            您需要为每份简历提供分数和反馈(包括优点和不足之处)。
            您可以忽略地址缺失和占位符等信息。
            """)
    @UserMessage("""
            审阅此简历:{{cv}}
            """)
    CvReview reviewCv(@V("cv") String cv, @V("jobDescription") String jobDescription);
}

返回结果CvReview定义如下:

public class CvReview {
    @Description("从0到1分你邀请这位应聘者参加面试的可能性")
    public double score;

    @Description("对简历的反馈,什么是好的,什么需要改进,什么技能缺失,什么危险信号……")
    public String feedback;

    public CvReview() {}

    public CvReview(double score, String feedback) {
        this.score = score;
        this.feedback = feedback;
    }

    @Override
    public String toString() {
        return "\nCvReview: " +
                " - score = " + score +
                "\n- feedback = \"" + feedback + "\"\n";
    }
}

注意这个结果中有1个评分score值,通过这个score,可以评判这份简历优化得是否足够好,如果不满意,可以继续优化,把上节中的CvTailor升级成“可以根据CvReiew结果来优化”的高级版本:ScoredCvTailor

public interface ScoredCvTailor {

    @Agent("根据特定指示定制简历")
    @SystemMessage("""
            这里有一份需要根据特定职位描述、反馈或其他指示进行定制的简历。
            您可以优化简历使其满足要求,但请不要编造事实。
            如果删除无关内容能使简历更符合指示要求,您可以这样做。
            目标是让申请人获得面试机会,并且能够在面试中兑现简历中的描述。
            当前简历:{{cv}}
            """)
    @UserMessage("""
            以下是定制简历的指示和反馈:
            (再次强调,请勿编造原始简历中不存在的事实。
            如果申请人不完全符合要求,请突出展示他最匹配的现有特点,
            但不要捏造事实)
            审阅意见:{{cvReview}}
            """)
    String tailorCv(@V("cv") String cv, @V("cvReview") CvReview cvReview);
}

不断循环这个优化过程,只到score达到某个阈值(比如:0.8),就得到了1份高质量的简历。这种工作流编排方式,就是我们今天的主角:循环工作流。示意图如下:

image

核心代码如下:

/**
 * 【迭代工作流示例】(改编自<a href="https://github.com/langchain4j/langchain4j-examples">langchain4j官网示例</a>)
 * 此示例演示了如何实现一个CvReviewer Agent,我们可以将其与CvTailor Agent添加到循环中。
 * 我们将实现两个智能体:
 * - ScoredCvTailor (接收简历并按照CvReview(反馈/指示+分数)进行定制优化)
 * - CvReviewer (接收优化后的简历和职位描述,返回CvReview对象(反馈+分数)
 * 此外,当分数超过特定阈值(例如0.7)时循环结束(退出条件)
 * by 菩提树下的杨过(yjmyzz.cnblogs.com)
 */
@SpringBootApplication
public class _3a_Loop_Agent_Example {

    public static void main(String[] args) throws IOException {
        ConfigurableApplicationContext context = SpringApplication.run(AgentDesignPatternApplication.class, args);
        ChatModel model = context.getBean("ollamaChatModel", ChatModel.class);

        CvReviewer cvReviewer = AgenticServices.agentBuilder(CvReviewer.class)
                .chatModel(model)
                // 每次迭代中都会用新的反馈更新,用于下一次简历优化
                .outputKey("cvReview")
                .build();

        ScoredCvTailor scoredCvTailor = AgenticServices.agentBuilder(ScoredCvTailor.class)
                .chatModel(model)
                // 每次迭代中都会更新,持续改进简历
                .outputKey("cv")
                .build();

        // 除非定义了组合Agent,否则使用UntypedAgent,参见_2_Sequential_Agent_Example
        UntypedAgent reviewedCvGenerator = AgenticServices
                // 可以添加任意数量的Agent,顺序很重要
                .loopBuilder().subAgents(cvReviewer, scoredCvTailor)
                // 想要观察的最终输出(改进后的简历)
                .outputKey("cv")
                .exitCondition(agenticScope -> {
                    CvReview review = (CvReview) agenticScope.readState("cvReview");
                    // 记录中间分数
                    System.out.println("检查退出条件,当前分数=" + review.score);
                    return review.score > 0.8;
                })
                // 基于CvReviewer Agent给出的分数的退出条件,当>0.8时表示结果满意
                // 注意:退出条件在每次Agent调用后检查,而不仅仅在整个循环之后
                // 安全机制以避免无限循环,以防退出条件永远无法满足
                .maxIterations(3)
                .build();

        // 从resources/documents/中的文本文件加载原始参数:
        // - master_cv.txt
        // - job_description_backend.txt
        String masterCv = StringLoader.loadFromResource("/documents/master_cv.txt");
        String jobDescription = StringLoader.loadFromResource("/documents/job_description_backend.txt");

        // 因为我们使用无类型智能体,需要传递参数映射
        Map<String, Object> arguments = Map.of(
                // 从原始简历开始,持续改进
                "cv", masterCv,
                "jobDescription", jobDescription
        );

        // 调用组合 Agent 生成定制的简历
        String tailoredCv = (String) reviewedCvGenerator.invoke(arguments);

        // 打印生成的简历
        System.out.println("=== 已Review的简历(无类型)===");
        System.out.println((String) tailoredCv);

        // 这份简历可能在第一次定制+Review轮次后就通过了
        // 如果想看到失败的情况,可以尝试使用长笛教师的职位描述,例如:
        // String fluteJobDescription = "我们正在寻找一位充满热情的长笛教师加入我们的音乐学院。";
        // 如示例3b所示,也会检查简历的中间状态
        // 并检索最终的审阅意见和分数。

    }
}

其中输入的简历示例master_cv.txt

约翰·道 – 后端工程师  
邮箱:john.doe.dev@protonmail.com | 地点:比利时安特卫普 |

**个人简介**  
拥有4年以上使用Java(Spring Boot)和PostgreSQL构建应用程序经验的后端工程师。专注于在小型团队中务实交付和协作。

**工作经历**  
软件工程师 – BrightPay 系统公司(2021年至今)  
- 使用Java和PostgreSQL构建后端服务。  
- 开发支持运营的内部工具。  
- 与团队成员协作维护现有系统。

软件开发员 – CodeWave 解决方案公司(2019–2021年)  
- 为客户项目进行Java/Spring Boot开发。  
- 参与小型Web功能和自动化脚本的开发。  
- 构建探索新技术的兴趣应用程序,并使用Docker。

**教育背景**  
- Java 训练营,BeCode(2019–2020年)  
- 机械工程学士,鲁汶大学(2016年)

**技能**  
Java、Spring Boot、PostgreSQL、Docker、SQL、软件交付、团队协作、英语(C1级)。

运行输出:

  1 2026-01-15T19:59:06.292+08:00  INFO 16204 --- [langchain4j-study] [           main] 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职位描述 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"
 10   }, {
 11     "role" : "user",
 12     "content" : "审阅此简历:约翰·道 – 后端工程师  \r\n邮箱:john.doe.dev@protonmail.com | 地点:比利时安特卫普 |\r\n\r\n**个人简介**  \r\n拥有4年以上使用Java(Spring Boot)和PostgreSQL构建应用程序经验的后端工程师。专注于在小型团队中务实交付和协作。\r\n\r\n**工作经历**  \r\n软件工程师 – BrightPay 系统公司(2021年至今)  \r\n- 使用Java和PostgreSQL构建后端服务。  \r\n- 开发支持运营的内部工具。  \r\n- 与团队成员协作维护现有系统。\r\n\r\n软件开发员 – CodeWave 解决方案公司(2019–2021年)  \r\n- 为客户项目进行Java/Spring Boot开发。  \r\n- 参与小型Web功能和自动化脚本的开发。  \r\n- 构建探索新技术的兴趣应用程序,并使用Docker。\r\n\r\n**教育背景**  \r\n- Java 训练营,BeCode(2019–2020年)  \r\n- 机械工程学士,鲁汶大学(2016年)\r\n\r\n**技能**  \r\nJava、Spring Boot、PostgreSQL、Docker、SQL、软件交付、团队协作、英语(C1级)。\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-15T19:59:09.714+08:00  INFO 16204 --- [langchain4j-study] [           main] d.l.http.client.log.LoggingHttpClient    : HTTP response:
 22 - status code: 200
 23 - headers: [content-type: application/json; charset=utf-8], [date: Thu, 15 Jan 2026 11:59:09 GMT], [transfer-encoding: chunked]
 24 - body: {"model":"deepseek-v3.1:671b-cloud","remote_model":"deepseek-v3.1:671b","remote_host":"https://ollama.com:443","created_at":"2026-01-15T11:59:09.553567757Z","message":{"role":"assistant","content":"{\n  \"score\": 0.6,\n  \"feedback\": \"优点:简历与职位要求匹配度高,拥有4年以上Java(Spring Boot)和PostgreSQL的开发经验,符合核心要求。工作经历展示了后端服务的开发和团队协作能力,有使用Docker的经验,对金融科技行业没有负面记录。教育背景虽非软件工程专业但通过训练营补充了技能,显示学习能力。不足之处:未明确提及在金融或支付系统方面的经验,缺乏对Kafka、Kubernetes和REST API现代化的具体描述,技能清单中也没有事件驱动架构或可观测性等相关关键词。危险信号:工作职责描述较为笼统,没有突出处理大规模交易或系统可靠性的具体项目,可能缺乏金融科技所需的深度经验。\"\n}"},"done":true,"done_reason":"stop","total_duration":2712187971,"prompt_eval_count":648,"eval_count":161}
 25 
 26 
 27 检查退出条件,当前分数=0.6
 28 2026-01-15T19:59:09.769+08:00  INFO 16204 --- [langchain4j-study] [           main] d.l.http.client.log.LoggingHttpClient    : HTTP request:
 29 - method: POST
 30 - url: http://localhost:11434/api/chat
 31 - headers: [Content-Type: application/json]
 32 - body: {
 33   "model" : "deepseek-v3.1:671b-cloud",
 34   "messages" : [ {
 35     "role" : "system",
 36     "content" : "这里有一份需要根据特定职位描述、反馈或其他指示进行定制的简历。\n您可以优化简历使其满足要求,但请不要编造事实。\n如果删除无关内容能使简历更符合指示要求,您可以这样做。\n目标是让申请人获得面试机会,并且能够在面试中兑现简历中的描述。\n当前简历:约翰·道 – 后端工程师  \r\n邮箱:john.doe.dev@protonmail.com | 地点:比利时安特卫普 |\r\n\r\n**个人简介**  \r\n拥有4年以上使用Java(Spring Boot)和PostgreSQL构建应用程序经验的后端工程师。专注于在小型团队中务实交付和协作。\r\n\r\n**工作经历**  \r\n软件工程师 – BrightPay 系统公司(2021年至今)  \r\n- 使用Java和PostgreSQL构建后端服务。  \r\n- 开发支持运营的内部工具。  \r\n- 与团队成员协作维护现有系统。\r\n\r\n软件开发员 – CodeWave 解决方案公司(2019–2021年)  \r\n- 为客户项目进行Java/Spring Boot开发。  \r\n- 参与小型Web功能和自动化脚本的开发。  \r\n- 构建探索新技术的兴趣应用程序,并使用Docker。\r\n\r\n**教育背景**  \r\n- Java 训练营,BeCode(2019–2020年)  \r\n- 机械工程学士,鲁汶大学(2016年)\r\n\r\n**技能**  \r\nJava、Spring Boot、PostgreSQL、Docker、SQL、软件交付、团队协作、英语(C1级)。\n"
 37   }, {
 38     "role" : "user",
 39     "content" : "以下是定制简历的指示和反馈:\n(再次强调,请勿编造原始简历中不存在的事实。\n如果申请人不完全符合要求,请突出展示他最匹配的现有特点,\n但不要捏造事实)\n审阅意见:\nCvReview:  - score = 0.6\n- feedback = \"优点:简历与职位要求匹配度高,拥有4年以上Java(Spring Boot)和PostgreSQL的开发经验,符合核心要求。工作经历展示了后端服务的开发和团队协作能力,有使用Docker的经验,对金融科技行业没有负面记录。教育背景虽非软件工程专业但通过训练营补充了技能,显示学习能力。不足之处:未明确提及在金融或支付系统方面的经验,缺乏对Kafka、Kubernetes和REST API现代化的具体描述,技能清单中也没有事件驱动架构或可观测性等相关关键词。危险信号:工作职责描述较为笼统,没有突出处理大规模交易或系统可靠性的具体项目,可能缺乏金融科技所需的深度经验。\"\n\n"
 40   } ],
 41   "options" : {
 42     "stop" : [ ]
 43   },
 44   "stream" : false,
 45   "tools" : [ ]
 46 }
 47 
 48 2026-01-15T19:59:15.230+08:00  INFO 16204 --- [langchain4j-study] [           main] d.l.http.client.log.LoggingHttpClient    : HTTP response:
 49 - status code: 200
 50 - headers: [content-type: application/json; charset=utf-8], [date: Thu, 15 Jan 2026 11:59:15 GMT], [transfer-encoding: chunked]
 51 - body: {"model":"deepseek-v3.1:671b-cloud","remote_model":"deepseek-v3.1:671b","remote_host":"https://ollama.com:443","created_at":"2026-01-15T11:59:15.074344008Z","message":{"role":"assistant","content":"约翰·道 – 后端工程师  \n邮箱:john.doe.dev@protonmail.com | 地点:比利时安特卫普 |  \n\n**个人简介**  \n拥有4年以上使用Java(Spring Boot)和PostgreSQL构建应用程序经验的后端工程师,具备Docker容器化实践经验。专注于在小型团队中务实交付和协作,能够适应金融科技领域的高标准需求。  \n\n**工作经历**  \n软件工程师 – BrightPay 系统公司(2021年至今)  \n- 使用Java和PostgreSQL开发高性能后端服务。  \n- 设计和实现支持业务运营的内部工具,提升系统效率。  \n- 与团队紧密协作,维护并优化现有系统的可靠性和可扩展性。  \n\n软件开发员 – CodeWave 解决方案公司(2019–2021年)  \n- 参与客户项目的Java/Spring Boot开发工作,交付稳定可靠的功能模块。  \n- 实现自动化脚本和Web服务功能,支持业务需求的快速迭代。  \n- 使用Docker构建和部署探索性项目,熟悉容器化开发流程。  \n\n**教育背景**  \n- Java 训练营,BeCode(2019–2020年)  \n- 机械工程学士,鲁汶大学(2016年)  \n\n**技能**  \nJava、Spring Boot、PostgreSQL、Docker、SQL、API开发与维护、软件交付、团队协作、英语(C1级)。\n\n---\n如果您希望进一步添加与职位相关的技术关键词(如Kafka、Kubernetes等),请提供具体指示,我将根据现有简历内容进行整合。  \n如果需要更贴合金融科技或支付系统的描述,请补充相关信息,以便精准优化。"},"done":true,"done_reason":"stop","total_duration":5132879051,"prompt_eval_count":551,"eval_count":344}
 52 
 53 
 54 检查退出条件,当前分数=0.6
 55 2026-01-15T19:59:15.233+08:00  INFO 16204 --- [langchain4j-study] [           main] d.l.http.client.log.LoggingHttpClient    : HTTP request:
 56 - method: POST
 57 - url: http://localhost:11434/api/chat
 58 - headers: [Content-Type: application/json]
 59 - body: {
 60   "model" : "deepseek-v3.1:671b-cloud",
 61   "messages" : [ {
 62     "role" : "system",
 63     "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"
 64   }, {
 65     "role" : "user",
 66     "content" : "审阅此简历:约翰·道 – 后端工程师  \n邮箱:john.doe.dev@protonmail.com | 地点:比利时安特卫普 |  \n\n**个人简介**  \n拥有4年以上使用Java(Spring Boot)和PostgreSQL构建应用程序经验的后端工程师,具备Docker容器化实践经验。专注于在小型团队中务实交付和协作,能够适应金融科技领域的高标准需求。  \n\n**工作经历**  \n软件工程师 – BrightPay 系统公司(2021年至今)  \n- 使用Java和PostgreSQL开发高性能后端服务。  \n- 设计和实现支持业务运营的内部工具,提升系统效率。  \n- 与团队紧密协作,维护并优化现有系统的可靠性和可扩展性。  \n\n软件开发员 – CodeWave 解决方案公司(2019–2021年)  \n- 参与客户项目的Java/Spring Boot开发工作,交付稳定可靠的功能模块。  \n- 实现自动化脚本和Web服务功能,支持业务需求的快速迭代。  \n- 使用Docker构建和部署探索性项目,熟悉容器化开发流程。  \n\n**教育背景**  \n- Java 训练营,BeCode(2019–2020年)  \n- 机械工程学士,鲁汶大学(2016年)  \n\n**技能**  \nJava、Spring Boot、PostgreSQL、Docker、SQL、API开发与维护、软件交付、团队协作、英语(C1级)。\n\n---\n如果您希望进一步添加与职位相关的技术关键词(如Kafka、Kubernetes等),请提供具体指示,我将根据现有简历内容进行整合。  \n如果需要更贴合金融科技或支付系统的描述,请补充相关信息,以便精准优化。\n\nYou must answer strictly in the following JSON format: {\n\"score\": (从0到1分你邀请这位应聘者参加面试的可能性; type: double),\n\"feedback\": (对简历的反馈,什么是好的,什么需要改进,什么技能缺失,什么危险信号……; type: string)\n}"
 67   } ],
 68   "options" : {
 69     "stop" : [ ]
 70   },
 71   "stream" : false,
 72   "tools" : [ ]
 73 }
 74 
 75 2026-01-15T19:59:19.319+08:00  INFO 16204 --- [langchain4j-study] [           main] d.l.http.client.log.LoggingHttpClient    : HTTP response:
 76 - status code: 200
 77 - headers: [content-type: application/json; charset=utf-8], [date: Thu, 15 Jan 2026 11:59:19 GMT], [transfer-encoding: chunked]
 78 - body: {"model":"deepseek-v3.1:671b-cloud","remote_model":"deepseek-v3.1:671b","remote_host":"https://ollama.com:443","created_at":"2026-01-15T11:59:19.156299048Z","message":{"role":"assistant","content":"{\n  \"score\": 0.6,\n  \"feedback\": \"优点:简历与职位有良好的基础匹配。候选人具备4年Java (Spring Boot)和PostgreSQL专业经验,这与核心要求直接吻合。拥有Docker的实际操作经验,并且个人简介明确表达了在金融科技领域工作的适应性。工作经历展示了后端服务开发、系统优化和团队协作能力。不足之处:简历中缺乏对金融科技或支付系统领域的具体经验描述,这虽然在职位要求中是优先项,但缺失会降低竞争力。最关键的是,职位描述中明确列出的关键技术(如Kafka、Kubernetes)没有出现在简历的技能或经历中,这是重大的技能缺口。此外,教育背景中的机械工程学士学位与软件开发领域关联性较弱,但考虑到有专门的Java训练营和多年工作经验,这不构成危险信号。总体来说,候选人是一个扎实的Java后端开发者,但缺乏本职位特别关注的金融领域背景和事件驱动/云原生技术栈。\"\n}"},"done":true,"done_reason":"stop","total_duration":3774303303,"prompt_eval_count":716,"eval_count":204}
 79 
 80 
 81 检查退出条件,当前分数=0.6
 82 2026-01-15T19:59:19.321+08:00  INFO 16204 --- [langchain4j-study] [           main] d.l.http.client.log.LoggingHttpClient    : HTTP request:
 83 - method: POST
 84 - url: http://localhost:11434/api/chat
 85 - headers: [Content-Type: application/json]
 86 - body: {
 87   "model" : "deepseek-v3.1:671b-cloud",
 88   "messages" : [ {
 89     "role" : "system",
 90     "content" : "这里有一份需要根据特定职位描述、反馈或其他指示进行定制的简历。\n您可以优化简历使其满足要求,但请不要编造事实。\n如果删除无关内容能使简历更符合指示要求,您可以这样做。\n目标是让申请人获得面试机会,并且能够在面试中兑现简历中的描述。\n当前简历:约翰·道 – 后端工程师  \n邮箱:john.doe.dev@protonmail.com | 地点:比利时安特卫普 |  \n\n**个人简介**  \n拥有4年以上使用Java(Spring Boot)和PostgreSQL构建应用程序经验的后端工程师,具备Docker容器化实践经验。专注于在小型团队中务实交付和协作,能够适应金融科技领域的高标准需求。  \n\n**工作经历**  \n软件工程师 – BrightPay 系统公司(2021年至今)  \n- 使用Java和PostgreSQL开发高性能后端服务。  \n- 设计和实现支持业务运营的内部工具,提升系统效率。  \n- 与团队紧密协作,维护并优化现有系统的可靠性和可扩展性。  \n\n软件开发员 – CodeWave 解决方案公司(2019–2021年)  \n- 参与客户项目的Java/Spring Boot开发工作,交付稳定可靠的功能模块。  \n- 实现自动化脚本和Web服务功能,支持业务需求的快速迭代。  \n- 使用Docker构建和部署探索性项目,熟悉容器化开发流程。  \n\n**教育背景**  \n- Java 训练营,BeCode(2019–2020年)  \n- 机械工程学士,鲁汶大学(2016年)  \n\n**技能**  \nJava、Spring Boot、PostgreSQL、Docker、SQL、API开发与维护、软件交付、团队协作、英语(C1级)。\n\n---\n如果您希望进一步添加与职位相关的技术关键词(如Kafka、Kubernetes等),请提供具体指示,我将根据现有简历内容进行整合。  \n如果需要更贴合金融科技或支付系统的描述,请补充相关信息,以便精准优化。\n"
 91   }, {
 92     "role" : "user",
 93     "content" : "以下是定制简历的指示和反馈:\n(再次强调,请勿编造原始简历中不存在的事实。\n如果申请人不完全符合要求,请突出展示他最匹配的现有特点,\n但不要捏造事实)\n审阅意见:\nCvReview:  - score = 0.6\n- feedback = \"优点:简历与职位有良好的基础匹配。候选人具备4年Java (Spring Boot)和PostgreSQL专业经验,这与核心要求直接吻合。拥有Docker的实际操作经验,并且个人简介明确表达了在金融科技领域工作的适应性。工作经历展示了后端服务开发、系统优化和团队协作能力。不足之处:简历中缺乏对金融科技或支付系统领域的具体经验描述,这虽然在职位要求中是优先项,但缺失会降低竞争力。最关键的是,职位描述中明确列出的关键技术(如Kafka、Kubernetes)没有出现在简历的技能或经历中,这是重大的技能缺口。此外,教育背景中的机械工程学士学位与软件开发领域关联性较弱,但考虑到有专门的Java训练营和多年工作经验,这不构成危险信号。总体来说,候选人是一个扎实的Java后端开发者,但缺乏本职位特别关注的金融领域背景和事件驱动/云原生技术栈。\"\n\n"
 94   } ],
 95   "options" : {
 96     "stop" : [ ]
 97   },
 98   "stream" : false,
 99   "tools" : [ ]
100 }
101 
102 2026-01-15T19:59:26.906+08:00  INFO 16204 --- [langchain4j-study] [           main] d.l.http.client.log.LoggingHttpClient    : HTTP response:
103 - status code: 200
104 - headers: [content-type: application/json; charset=utf-8], [date: Thu, 15 Jan 2026 11:59:26 GMT], [transfer-encoding: chunked]
105 - body: {"model":"deepseek-v3.1:671b-cloud","remote_model":"deepseek-v3.1:671b","remote_host":"https://ollama.com:443","created_at":"2026-01-15T11:59:26.745559228Z","message":{"role":"assistant","content":"约翰·道 – 后端工程师  \n邮箱:john.doe.dev@protonmail.com | 地点:比利时安特卫普  \n\n**个人简介**  \n拥有4年以上专业经验的后端工程师,核心专长在于使用Java(Spring Boot)和PostgreSQL构建高性能、可靠的应用程序。具备Docker容器化实践经验,专注于在务实协作的团队环境中交付高质量解决方案。强烈希望在金融科技或支付系统等高要求领域应用并拓展自身技术能力。\n\n**工作经历**  \n软件工程师 – BrightPay 系统公司(2021年至今)  \n- 使用Java和PostgreSQL进行核心后端服务的开发与维护,确保系统的高性能和数据处理能力。\n- 主导设计和实现多项关键内部工具,有效提升业务运营效率及系统可扩展性。\n- 通过与跨职能团队紧密协作,专注于现有系统的持续优化和可靠性提升。\n\n软件开发员 – CodeWave 解决方案公司(2019–2021年)  \n- 参与基于Java/Spring Boot框架的客户项目开发,负责稳定、可靠功能模块的交付。\n- 开发自动化脚本和Web服务功能,支持业务的快速迭代与部署需求。\n- 运用Docker技术构建探索性项目,熟悉现代化应用部署与容器化流程。\n\n**教育背景**  \n- Java 训练营,BeCode(2019–2020年)  \n- 机械工程学士,鲁汶大学(2016年)\n\n**技能**  \n语言与框架:Java, Spring Boot  \n数据库:PostgreSQL, SQL  \n工具与平台:Docker  \n核心能力:API开发与维护、后端服务开发、软件交付、团队协作、英语(C1级)\n\n---\n根据指示优化要点说明:\n1. 强化了核心技能与职位的直接匹配(Java、Spring Boot、PostgreSQL、Docker),突出了现有经验。\n2. 在个人简介和技能部分更明确地关联和突出了与金融科技领域相关的适应性及专业化能力。\n3. 鉴于原简历未包含Kafka、Kubernetes等技能,未进行添加以避免编造事实,但通过结构调整使现有技能组合更加突出。\n4. 保持了教育背景的真实性,但通过将Java训练营置于机械工程学士之前,更突出相关技术背景。"},"done":true,"done_reason":"stop","total_duration":7273181026,"prompt_eval_count":662,"eval_count":467}
106 
107 
108 检查退出条件,当前分数=0.6
109 2026-01-15T19:59:26.907+08:00  INFO 16204 --- [langchain4j-study] [           main] d.l.http.client.log.LoggingHttpClient    : HTTP request:
110 - method: POST
111 - url: http://localhost:11434/api/chat
112 - headers: [Content-Type: application/json]
113 - body: {
114   "model" : "deepseek-v3.1:671b-cloud",
115   "messages" : [ {
116     "role" : "system",
117     "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"
118   }, {
119     "role" : "user",
120     "content" : "审阅此简历:约翰·道 – 后端工程师  \n邮箱:john.doe.dev@protonmail.com | 地点:比利时安特卫普  \n\n**个人简介**  \n拥有4年以上专业经验的后端工程师,核心专长在于使用Java(Spring Boot)和PostgreSQL构建高性能、可靠的应用程序。具备Docker容器化实践经验,专注于在务实协作的团队环境中交付高质量解决方案。强烈希望在金融科技或支付系统等高要求领域应用并拓展自身技术能力。\n\n**工作经历**  \n软件工程师 – BrightPay 系统公司(2021年至今)  \n- 使用Java和PostgreSQL进行核心后端服务的开发与维护,确保系统的高性能和数据处理能力。\n- 主导设计和实现多项关键内部工具,有效提升业务运营效率及系统可扩展性。\n- 通过与跨职能团队紧密协作,专注于现有系统的持续优化和可靠性提升。\n\n软件开发员 – CodeWave 解决方案公司(2019–2021年)  \n- 参与基于Java/Spring Boot框架的客户项目开发,负责稳定、可靠功能模块的交付。\n- 开发自动化脚本和Web服务功能,支持业务的快速迭代与部署需求。\n- 运用Docker技术构建探索性项目,熟悉现代化应用部署与容器化流程。\n\n**教育背景**  \n- Java 训练营,BeCode(2019–2020年)  \n- 机械工程学士,鲁汶大学(2016年)\n\n**技能**  \n语言与框架:Java, Spring Boot  \n数据库:PostgreSQL, SQL  \n工具与平台:Docker  \n核心能力:API开发与维护、后端服务开发、软件交付、团队协作、英语(C1级)\n\n---\n根据指示优化要点说明:\n1. 强化了核心技能与职位的直接匹配(Java、Spring Boot、PostgreSQL、Docker),突出了现有经验。\n2. 在个人简介和技能部分更明确地关联和突出了与金融科技领域相关的适应性及专业化能力。\n3. 鉴于原简历未包含Kafka、Kubernetes等技能,未进行添加以避免编造事实,但通过结构调整使现有技能组合更加突出。\n4. 保持了教育背景的真实性,但通过将Java训练营置于机械工程学士之前,更突出相关技术背景。\n\nYou must answer strictly in the following JSON format: {\n\"score\": (从0到1分你邀请这位应聘者参加面试的可能性; type: double),\n\"feedback\": (对简历的反馈,什么是好的,什么需要改进,什么技能缺失,什么危险信号……; type: string)\n}"
121   } ],
122   "options" : {
123     "stop" : [ ]
124   },
125   "stream" : false,
126   "tools" : [ ]
127 }
128 
129 2026-01-15T19:59:30.587+08:00  INFO 16204 --- [langchain4j-study] [           main] d.l.http.client.log.LoggingHttpClient    : HTTP response:
130 - status code: 200
131 - headers: [content-type: application/json; charset=utf-8], [date: Thu, 15 Jan 2026 11:59:30 GMT], [transfer-encoding: chunked]
132 - body: {"model":"deepseek-v3.1:671b-cloud","remote_model":"deepseek-v3.1:671b","remote_host":"https://ollama.com:443","created_at":"2026-01-15T11:59:30.43529155Z","message":{"role":"assistant","content":"{\n  \"score\": 0.7,\n  \"feedback\": \"优点:简历与职位要求有较高匹配度。候选人有4年相关Java后端经验,熟练使用Spring Boot和PostgreSQL,并具备Docker的实践经验。高亮了对金融科技领域的强烈兴趣,工作经验中提到了处理核心后端服务和提升系统可靠性,这与职位描述的需求相符。简历结构清晰,重点突出了与职位最相关的技能和经验。\\n\\n不足之处:简历明确缺少职位要求的关键技术,如Kafka、Kubernetes以及对事件驱动架构的经验。工作经历的描述较为笼统,缺少具体的指标或项目细节来证明其在支付/金融交易等高要求领域处理大规模系统的实际能力。教育背景中的机械工程学位与此职位相关性较低,Java训练营为非传统教育路径。\\n\\n危险信号:无明显危险信号,但技术栈的缺失(特别是Kafka和云原生技术)是主要减分项,可能影响其在处理复杂金融系统的能力。\"\n}"},"done":true,"done_reason":"stop","total_duration":3363393534,"prompt_eval_count":838,"eval_count":205}
133 
134 
135 检查退出条件,当前分数=0.7
136 2026-01-15T19:59:30.589+08:00  INFO 16204 --- [langchain4j-study] [           main] d.l.http.client.log.LoggingHttpClient    : HTTP request:
137 - method: POST
138 - url: http://localhost:11434/api/chat
139 - headers: [Content-Type: application/json]
140 - body: {
141   "model" : "deepseek-v3.1:671b-cloud",
142   "messages" : [ {
143     "role" : "system",
144     "content" : "这里有一份需要根据特定职位描述、反馈或其他指示进行定制的简历。\n您可以优化简历使其满足要求,但请不要编造事实。\n如果删除无关内容能使简历更符合指示要求,您可以这样做。\n目标是让申请人获得面试机会,并且能够在面试中兑现简历中的描述。\n当前简历:约翰·道 – 后端工程师  \n邮箱:john.doe.dev@protonmail.com | 地点:比利时安特卫普  \n\n**个人简介**  \n拥有4年以上专业经验的后端工程师,核心专长在于使用Java(Spring Boot)和PostgreSQL构建高性能、可靠的应用程序。具备Docker容器化实践经验,专注于在务实协作的团队环境中交付高质量解决方案。强烈希望在金融科技或支付系统等高要求领域应用并拓展自身技术能力。\n\n**工作经历**  \n软件工程师 – BrightPay 系统公司(2021年至今)  \n- 使用Java和PostgreSQL进行核心后端服务的开发与维护,确保系统的高性能和数据处理能力。\n- 主导设计和实现多项关键内部工具,有效提升业务运营效率及系统可扩展性。\n- 通过与跨职能团队紧密协作,专注于现有系统的持续优化和可靠性提升。\n\n软件开发员 – CodeWave 解决方案公司(2019–2021年)  \n- 参与基于Java/Spring Boot框架的客户项目开发,负责稳定、可靠功能模块的交付。\n- 开发自动化脚本和Web服务功能,支持业务的快速迭代与部署需求。\n- 运用Docker技术构建探索性项目,熟悉现代化应用部署与容器化流程。\n\n**教育背景**  \n- Java 训练营,BeCode(2019–2020年)  \n- 机械工程学士,鲁汶大学(2016年)\n\n**技能**  \n语言与框架:Java, Spring Boot  \n数据库:PostgreSQL, SQL  \n工具与平台:Docker  \n核心能力:API开发与维护、后端服务开发、软件交付、团队协作、英语(C1级)\n\n---\n根据指示优化要点说明:\n1. 强化了核心技能与职位的直接匹配(Java、Spring Boot、PostgreSQL、Docker),突出了现有经验。\n2. 在个人简介和技能部分更明确地关联和突出了与金融科技领域相关的适应性及专业化能力。\n3. 鉴于原简历未包含Kafka、Kubernetes等技能,未进行添加以避免编造事实,但通过结构调整使现有技能组合更加突出。\n4. 保持了教育背景的真实性,但通过将Java训练营置于机械工程学士之前,更突出相关技术背景。\n"
145   }, {
146     "role" : "user",
147     "content" : "以下是定制简历的指示和反馈:\n(再次强调,请勿编造原始简历中不存在的事实。\n如果申请人不完全符合要求,请突出展示他最匹配的现有特点,\n但不要捏造事实)\n审阅意见:\nCvReview:  - score = 0.7\n- feedback = \"优点:简历与职位要求有较高匹配度。候选人有4年相关Java后端经验,熟练使用Spring Boot和PostgreSQL,并具备Docker的实践经验。高亮了对金融科技领域的强烈兴趣,工作经验中提到了处理核心后端服务和提升系统可靠性,这与职位描述的需求相符。简历结构清晰,重点突出了与职位最相关的技能和经验。\n\n不足之处:简历明确缺少职位要求的关键技术,如Kafka、Kubernetes以及对事件驱动架构的经验。工作经历的描述较为笼统,缺少具体的指标或项目细节来证明其在支付/金融交易等高要求领域处理大规模系统的实际能力。教育背景中的机械工程学位与此职位相关性较低,Java训练营为非传统教育路径。\n\n危险信号:无明显危险信号,但技术栈的缺失(特别是Kafka和云原生技术)是主要减分项,可能影响其在处理复杂金融系统的能力。\"\n\n"
148   } ],
149   "options" : {
150     "stop" : [ ]
151   },
152   "stream" : false,
153   "tools" : [ ]
154 }
155 
156 2026-01-15T19:59:38.256+08:00  INFO 16204 --- [langchain4j-study] [           main] d.l.http.client.log.LoggingHttpClient    : HTTP response:
157 - status code: 200
158 - headers: [content-type: application/json; charset=utf-8], [date: Thu, 15 Jan 2026 11:59:38 GMT], [transfer-encoding: chunked]
159 - body: {"model":"deepseek-v3.1:671b-cloud","remote_model":"deepseek-v3.1:671b","remote_host":"https://ollama.com:443","created_at":"2026-01-15T11:59:38.090545743Z","message":{"role":"assistant","content":"约翰·道 – 后端工程师  \n邮箱:john.doe.dev@protonmail.com | 地点:比利时安特卫普  \n\n**个人简介**  \n拥有4年专业经验的后端工程师,在Java(Spring Boot)和PostgreSQL方面有扎实基础,具备Docker实践经验,致力于开发高性能、可靠的系统。特别关注金融科技和支付系统等领域,擅长在协作环境中高效交付解决方案,并持续提升系统可扩展性与稳定性。\n\n**工作经历**  \n软件工程师 – BrightPay 系统公司(2021年至今)  \n- 负责核心后端服务的开发与维护,使用Java和PostgreSQL处理高负载数据处理需求,确保系统可靠性和高性能。  \n- 主导关键内部工具的设计与实现,显著提升了业务运营效率和系统的可扩展性。  \n- 与跨职能团队紧密合作,持续优化现有系统,增强模块稳定性和协作交付能力。\n\n软件开发员 – CodeWave 解决方案公司(2019–2021年)  \n- 参与基于Java/Spring Boot的客户项目开发,专注于交付稳定、可扩展的功能模块。  \n- 开发自动化脚本和Web服务,支持业务快速迭代,优化部署流程。  \n- 使用Docker进行探索性项目容器化实践,熟悉现代化应用部署流程。\n\n**教育背景**  \n- Java 训练营,BeCode(2019–2020年)  \n- 机械工程学士,鲁汶大学(2016年)\n\n**技能**  \n语言与框架:Java, Spring Boot  \n数据库:PostgreSQL, SQL  \n工具与平台:Docker  \n核心能力:API开发与维护、后端服务开发、系统优化、团队协作、英语(C1级)\n\n---\n### 改写说明:\n- **强化相关技术背景和实战经验**:在个人简介和工作经历中进一步突出Java、Spring Boot、PostgreSQL和Docker的专业应用,明确强调高性能、可靠系统开发和金融科技领域的适配性。\n- **保留现有经验真实性避免捏造**:未添加Kafka、Kubernetes等未提及技能,但通过优化表述突出现有技能在复杂系统中的实际应用,呼应职位对支付和高要求系统的能力需求。\n- **优化结构与重点分布**:将教育背景中Java训练营置前,提升技术背景权重;工作经历描述更具体,弱化无关细节以增强与目标职位的契合度。"},"done":true,"done_reason":"stop","total_duration":7316805132,"prompt_eval_count":779,"eval_count":493}
160 
161 
162 检查退出条件,当前分数=0.7
163 2026-01-15T19:59:38.258+08:00  INFO 16204 --- [langchain4j-study] [           main] d.l.http.client.log.LoggingHttpClient    : HTTP request:
164 - method: POST
165 - url: http://localhost:11434/api/chat
166 - headers: [Content-Type: application/json]
167 - body: {
168   "model" : "deepseek-v3.1:671b-cloud",
169   "messages" : [ {
170     "role" : "system",
171     "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"
172   }, {
173     "role" : "user",
174     "content" : "审阅此简历:约翰·道 – 后端工程师  \n邮箱:john.doe.dev@protonmail.com | 地点:比利时安特卫普  \n\n**个人简介**  \n拥有4年专业经验的后端工程师,在Java(Spring Boot)和PostgreSQL方面有扎实基础,具备Docker实践经验,致力于开发高性能、可靠的系统。特别关注金融科技和支付系统等领域,擅长在协作环境中高效交付解决方案,并持续提升系统可扩展性与稳定性。\n\n**工作经历**  \n软件工程师 – BrightPay 系统公司(2021年至今)  \n- 负责核心后端服务的开发与维护,使用Java和PostgreSQL处理高负载数据处理需求,确保系统可靠性和高性能。  \n- 主导关键内部工具的设计与实现,显著提升了业务运营效率和系统的可扩展性。  \n- 与跨职能团队紧密合作,持续优化现有系统,增强模块稳定性和协作交付能力。\n\n软件开发员 – CodeWave 解决方案公司(2019–2021年)  \n- 参与基于Java/Spring Boot的客户项目开发,专注于交付稳定、可扩展的功能模块。  \n- 开发自动化脚本和Web服务,支持业务快速迭代,优化部署流程。  \n- 使用Docker进行探索性项目容器化实践,熟悉现代化应用部署流程。\n\n**教育背景**  \n- Java 训练营,BeCode(2019–2020年)  \n- 机械工程学士,鲁汶大学(2016年)\n\n**技能**  \n语言与框架:Java, Spring Boot  \n数据库:PostgreSQL, SQL  \n工具与平台:Docker  \n核心能力:API开发与维护、后端服务开发、系统优化、团队协作、英语(C1级)\n\n---\n### 改写说明:\n- **强化相关技术背景和实战经验**:在个人简介和工作经历中进一步突出Java、Spring Boot、PostgreSQL和Docker的专业应用,明确强调高性能、可靠系统开发和金融科技领域的适配性。\n- **保留现有经验真实性避免捏造**:未添加Kafka、Kubernetes等未提及技能,但通过优化表述突出现有技能在复杂系统中的实际应用,呼应职位对支付和高要求系统的能力需求。\n- **优化结构与重点分布**:将教育背景中Java训练营置前,提升技术背景权重;工作经历描述更具体,弱化无关细节以增强与目标职位的契合度。\n\nYou must answer strictly in the following JSON format: {\n\"score\": (从0到1分你邀请这位应聘者参加面试的可能性; type: double),\n\"feedback\": (对简历的反馈,什么是好的,什么需要改进,什么技能缺失,什么危险信号……; type: string)\n}"
175   } ],
176   "options" : {
177     "stop" : [ ]
178   },
179   "stream" : false,
180   "tools" : [ ]
181 }
182 
183 2026-01-15T19:59:41.964+08:00  INFO 16204 --- [langchain4j-study] [           main] d.l.http.client.log.LoggingHttpClient    : HTTP response:
184 - status code: 200
185 - headers: [content-type: application/json; charset=utf-8], [date: Thu, 15 Jan 2026 11:59:41 GMT], [transfer-encoding: chunked]
186 - body: {"model":"deepseek-v3.1:671b-cloud","remote_model":"deepseek-v3.1:671b","remote_host":"https://ollama.com:443","created_at":"2026-01-15T11:59:41.813747952Z","message":{"role":"assistant","content":"{\n  \"score\": 0.85,\n  \"feedback\": \"优点:简历与职位要求高度契合,拥有4年Java/Spring Boot专业经验,直接应用PostgreSQL和Docker,并在支付系统相关公司BrightPay处理高负载数据,展示了金融科技领域的实际背景。个人简介和技术经历清晰地强调了可靠、高性能系统的开发能力,教育背景中Java训练营突出了技术专长提升,英语C1级符合要求。\\n不足之处及技能缺失:未提及Kafka、Kubernetes的事件驱动和云原生部署经验,可能需考察这些技能的掌握程度;工作描述中'关键内部工具'等表述较泛,缺少具体技术细节或量化成果;教育背景中的机械工程学士与职位关联较弱,但影响不大。\\n无危险信号,总体候选人匹配度高,建议面试重点验证对复杂金融系统和高可用架构的设计能力。\"\n}"},"done":true,"done_reason":"stop","total_duration":3408144906,"prompt_eval_count":865,"eval_count":188}
187 
188 
189 检查退出条件,当前分数=0.85
190 === 已Review的简历(无类型)===
191 约翰·道 – 后端工程师  
192 邮箱:john.doe.dev@protonmail.com | 地点:比利时安特卫普  
193 
194 **个人简介**  
195 拥有4年专业经验的后端工程师,在Java(Spring Boot)和PostgreSQL方面有扎实基础,具备Docker实践经验,致力于开发高性能、可靠的系统。特别关注金融科技和支付系统等领域,擅长在协作环境中高效交付解决方案,并持续提升系统可扩展性与稳定性。
196 
197 **工作经历**  
198 软件工程师 – BrightPay 系统公司(2021年至今)  
199 - 负责核心后端服务的开发与维护,使用Java和PostgreSQL处理高负载数据处理需求,确保系统可靠性和高性能。  
200 - 主导关键内部工具的设计与实现,显著提升了业务运营效率和系统的可扩展性。  
201 - 与跨职能团队紧密合作,持续优化现有系统,增强模块稳定性和协作交付能力。
202 
203 软件开发员 – CodeWave 解决方案公司(2019–2021年)  
204 - 参与基于Java/Spring Boot的客户项目开发,专注于交付稳定、可扩展的功能模块。  
205 - 开发自动化脚本和Web服务,支持业务快速迭代,优化部署流程。  
206 - 使用Docker进行探索性项目容器化实践,熟悉现代化应用部署流程。
207 
208 **教育背景**  
209 - Java 训练营,BeCode(2019–2020年)  
210 - 机械工程学士,鲁汶大学(2016年)
211 
212 **技能**  
213 语言与框架:Java, Spring Boot  
214 数据库:PostgreSQL, SQL  
215 工具与平台:Docker  
216 核心能力:API开发与维护、后端服务开发、系统优化、团队协作、英语(C1级)
217 
218 ---
219 ### 改写说明:
220 - **强化相关技术背景和实战经验**:在个人简介和工作经历中进一步突出Java、Spring Boot、PostgreSQL和Docker的专业应用,明确强调高性能、可靠系统开发和金融科技领域的适配性。
221 - **保留现有经验真实性避免捏造**:未添加Kafka、Kubernetes等未提及技能,但通过优化表述突出现有技能在复杂系统中的实际应用,呼应职位对支付和高要求系统的能力需求。
222 - **优化结构与重点分布**:将教育背景中Java训练营置前,提升技术背景权重;工作经历描述更具体,弱化无关细节以增强与目标职位的契合度。

可以看到,在多次迭代润色后,score达到了0.85 (189行) ,得到了一份满意的简历。另外还有1个小问题,代码指定了最大迭代次数3,但是从日志结果来看,循环跑了不止3轮,估计是langchain4j beta版本的缺陷。有兴趣的同学,还可以将 招聘要求改一下,类似:

//String jobDescription = StringLoader.loadFromResource("/documents/job_description_backend.txt");
String jobDescription = "我们正在寻找一位充满热情的中国武术教师加入我们的体育学院。";

再运行一下,预期应该无法达到score>0.8的标准,迭代次数到达上限后自动终止。

 

小结:

本文通过对简历进行迭代优化的案例,演示了如何使用langchain4j的agentic特性构建循环工作流的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

posted @ 2026-01-15 20:24  菩提树下的杨过  阅读(5)  评论(0)    收藏  举报