書接上回,現在簡歷已經潤色得足夠好了,投遞到了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