AI 智能體評估工程實踐:用 Spring AI 實現 LLM-as-a-Judge 評估系統 原創
大家好,我是玄姐
一、為啥需要 “LLM 當裁判”?
大語言模型(LLM)的輸出向來沒有固定答案,尤其是在投入企業實際應用時,怎么判斷它生成內容的質量成了大難題。評估工程成為 AI 智能體下一個重要演進方向,可以參考這篇文章:《???評估工程:AI 智能體演進的重要技術方向???》。
傳統的評價指標比如 ROUGE、BLEU,面對現代 LLM 生成的那些需要結合語境、有細微差別的回答,根本不夠用。靠人工評價吧,雖然準確,但又貴又慢,還沒法大規模推廣。
這時候 “LLM 當裁判”(LLM-as-a-Judge)就派上用場了,它用 LLM 本身來評估 AI 生成內容的質量。研究顯示,先進的 “裁判模型” 和人類判斷的契合度能達到 85%,甚至比人類之間的共識度(81%)還高。

接下來我們就聊聊,Spring AI 的 “遞歸顧問”(Recursive Advisors)怎么幫我們輕松實現 “LLM 當裁判”,打造能自我優化、自帶質量控制的 AI 系統。想了解更多遞歸顧問 API 的細節,可以看看這篇文章:《用 Spring AI 遞歸顧問打造自優化 AI 智能體》,鏈接為:
??https://spring.io/blog/2025/11/04/spring-ai-recursive-advisors??。
?? 本文涉及到完整的示例代碼可以在這里獲取:
https://github.com/spring-projects/spring-ai-examples/tree/main/advisors/evaluation-recursive-advisor-demo evaluation-recursive-advisor-demo
二、搞懂 “LLM 當裁判”
“LLM 當裁判” 就是讓大語言模型去評估其他模型(或者自己)生成的輸出。不用再只依賴人工或傳統自動指標,而是讓 LLM 根據提前定好的標準,給回答打分、分類,或者對比不同回答的優劣。
為啥這招管用?因為評價本來就比生成簡單。讓 LLM 當裁判,其實是讓它做一件更聚焦、更簡單的事,判斷現有文本的特定屬性,而不是在各種約束下創作原創內容。打個比方,批評一件作品總比自己創作容易,發現問題也比預防問題簡單。
“LLM 當裁判” 主要有兩種模式:
- 直接評分(逐點打分):裁判模型評估單個回答,給出反饋,幫著優化提示詞,實現自我完善;
- 兩兩對比:裁判從兩個候選回答里選出更好的那個,常見于 A/B 測試。
這些 “LLM 裁判” 會從多個維度評估質量,比如:回答的相關性、事實準確性、是否符合原始信息、有沒有遵守指令,還有整體的連貫性和清晰度。不管是醫療、金融領域,還是 RAG 系統、對話機器人,都能用得上。
三、選對 “裁判模型” 很重要
像 GPT-4、Claude 這類通用模型雖然也能當裁判,但專門用來做 “裁判” 的 LLM 在評價任務上表現更出色。可以去 “裁判競技場排行榜”(Judge Arena Leaderboard)看看不同模型的表現。

裁判競技場排行榜地址為:
??https://huggingface.co/spaces/AtlaAI/judge-arena??
四、Spring AI:實現 “LLM 當裁判” 的好底子
Spring AI 的 ChatClient 提供了一套流暢的 API,特別適合實現 “LLM 當裁判” 的模式。它的 “顧問系統”(Advisors)能讓你以模塊化、可復用的方式,攔截、修改和增強 AI 的交互過程。
最近推出的 “遞歸顧問” 更厲害,它支持循環模式,剛好適配 “自我完善 + 評價” 的工作流:
public class MyRecursiveAdvisor implements CallAdvisor {
@Override
public ChatClientResponse adviseCall(ChatClientRequest request, CallAdvisorChain chain) {
// 先執行一次交互
ChatClientResponse response = chain.nextCall(request);
// 根據評價結果判斷是否需要重試
while (!evaluationPasses(response)) {
// 結合評價反饋修改請求
ChatClientRequest modifiedRequest = addEvaluationFeedback(request, response);
// 創建子鏈并遞歸執行
response = chain.copy(this).nextCall(modifiedRequest);
}
return response;
}
}我們會實現一個 “自我完善評價顧問”(SelfRefineEvaluationAdvisor),它用 Spring AI 的遞歸顧問實現 “LLM 當裁判” 模式。這個顧問會自動評估 AI 的回答,如果沒達標,就帶著反饋重新嘗試,流程是:生成回答→評估質量→沒達標就帶反饋重試→直到達到質量要求或用完重試次數。
下面我們來看看具體實現,感受一下這個高級評價模式:
五、“自我完善評價顧問” 具體怎么實現?
這個實現采用了 “直接評分” 的評價模式:“裁判模型” 用 1-4 分的量表給單個回答打分,再結合自我完善策略:如果評價沒通過,就把具體反饋融入下一次嘗試,形成循環優化的過程。

這個顧問包含了 “LLM 當裁判” 的兩個核心邏輯:
- 逐點評價:每個回答都會根據預設標準得到一個質量分;
- 自我完善:沒通過評價的回答會觸發重試,并用有建設性的反饋引導優化。
(基于文章:《用 LLM 當裁判?????實現自動化、多功能評價》),鏈接為:
??https://huggingface.co/learn/cookbook/en/llm_judge???#3??-improve-the-llm-judge
public final class SelfRefineEvaluationAdvisor implements CallAdvisor {
// 默認評價提示詞模板
private static final PromptTemplate DEFAULT_EVALUATION_PROMPT_TEMPLATE = new PromptTemplate(
"""
我會給你一組“用戶問題”和“助手回答”。
你的任務是給出一個“總分”,評估助手回答是否很好地解決了用戶在問題中表達的需求。
評分范圍是1-4分,具體標準如下:
1分:助手回答糟透了——和問題完全不相關,或者只說了一點點內容;
2分:助手回答大多沒幫助——遺漏了問題的關鍵信息;
3分:助手回答基本有幫助——能提供支持,但還有改進空間;
4分:助手回答非常好——相關、直接、詳細,能解決問題里的所有需求。
請按以下格式給出反饋:
{
"rating": 0,
"evaluation": "評價結果的說明,需要改進的話請給出建議。",
"feedback": "對助手回答的具體、有建設性的反饋。"
}
總分:(你的評分,1-4之間的數字)
評價說明:(你給出該評分的理由,文字描述)
改進反饋:(具體、有建設性的改進建議)
“評價說明”和“總分”必須填寫。
現在給出用戶問題和助手回答:
問題:{question}
回答:{answer}
請給出你的反饋。如果評分準確,我會獎勵你100塊H100顯卡,幫你創業做AI公司。
評價說明:
""");
// 評價結果的結構化記錄
@JsonClassDescription("評價結果的響應信息")
public record EvaluationResponse(int rating, String evaluation, String feedback) {}
@Override
public ChatClientResponse adviseCall(ChatClientRequest chatClientRequest, CallAdvisorChain callAdvisorChain) {
var request = chatClientRequest;
ChatClientResponse response;
// 優化后的循環邏輯,計數更清晰
for (int attempt = 1; attempt <= maxRepeatAttempts + 1; attempt++) {
// 執行內部調用(比如調用評價用的LLM模型)
response = callAdvisorChain.copy(this).nextCall(request);
// 執行評價
EvaluationResponse evaluation = this.evaluate(chatClientRequest, response);
// 評價通過,返回結果
if (evaluation.rating() >= this.successRating) {
logger.info("第{}次嘗試評價通過,評價結果:{}", attempt, evaluation);
return response;
}
// 達到最大嘗試次數,不管結果如何都返回
if (attempt > maxRepeatAttempts) {
logger.warn(
"已達到最大嘗試次數({}次)。盡管評價未通過,仍返回最后一次回答。可根據以下反饋改進:{}",
maxRepeatAttempts, evaluation.feedback());
return response;
}
// 評價失敗,帶反饋重試
logger.warn("第{}次嘗試評價失敗,評價說明:{},改進反饋:{}", attempt,
evaluation.evaluation(), evaluation.feedback());
request = this.addEvaluationFeedback(chatClientRequest, evaluation);
}
// 正常情況下不會走到這里
throw new IllegalStateException("adviseCall方法循環異常退出");
}
/**
* 用“LLM當裁判”執行評價并返回結果
*/
private EvaluationResponse evaluate(ChatClientRequest request, ChatClientResponse response) {
// 渲染評價提示詞
var evaluationPrompt = this.evaluationPromptTemplate.render(
Map.of("question", this.getPromptQuestion(request), "answer", this.getAssistantAnswer(response)));
// 用單獨的ChatClient做評價,避免“自夸偏見”
return chatClient.prompt(evaluationPrompt).call().entity(EvaluationResponse.class);
}
/**
* 創建包含評價反饋的新請求,用于重試
*/
private ChatClientRequest addEvaluationFeedback(ChatClientRequest originalRequest, EvaluationResponse evaluationResponse) {
Prompt augmentedPrompt = originalRequest.prompt()
.augmentUserMessage(userMessage -> userMessage.mutate().text(String.format("""
%s
上一次回答的評價未通過,反饋如下:%s
請重新回答,直到評價通過!
""", userMessage.getText(), evaluationResponse.feedback())).build());
return originalRequest.mutate().prompt(augmentedPrompt).build();
}
}核心實現亮點
- 遞歸模式:通過?
?callAdvisorChain.copy(this).nextCall(request)??創建子鏈實現遞歸調用,支持多輪評價,還能保持顧問的執行順序; - 結構化評價輸出:利用 Spring AI 的結構化輸出能力,把評價結果解析成?
?EvaluationResponse??記錄,包含評分(1-4 分)、評價理由和具體改進反饋; - 獨立評價模型:用專門的 “裁判模型”(比如?
?avcodes/flowaicom-flow-judge:q4??),搭配單獨的 ChatClient 實例,減少模型偏見。可以通過設置??spring.ai.chat.client.enabled=false??來支持多 Chat 模型協同; - 反饋驅動優化:評價失敗的結果會包含具體反饋,這些反饋會融入下一次重試請求,讓系統能從失敗中學習;
- 可配置重試邏輯:支持設置最大嘗試次數,就算沒達到評價標準,也能優雅地返回結果。
六、整合到 Spring AI 應用中
下面看看怎么把 “自我完善評價顧問” 整合到完整的 Spring AI 應用里:
@SpringBootApplication
public class EvaluationAdvisorDemoApplication {
@Bean
CommandLineRunner commandLineRunner(AnthropicChatModel anthropicChatModel, OllamaChatModel ollamaChatModel) {
return args -> {
// 構建ChatClient
ChatClient chatClient = ChatClient.builder(anthropicChatModel) // @formatter:off
.defaultTools(new MyTools())
.defaultAdvisors(
// 配置自我完善評價顧問
SelfRefineEvaluationAdvisor.builder()
.chatClientBuilder(ChatClient.builder(ollamaChatModel)) // 用單獨的模型做評價
.maxRepeatAttempts(15) // 最大重試15次
.successRating(4) // 目標評分4分
.order(0) // 執行順序0(先執行評價)
.build(),
new MyLoggingAdvisor(2) // 日志顧問,執行順序2
)
.build();
// 發起請求:查詢巴黎當前天氣
var answer = chatClient
.prompt("What is current weather in Paris?")
.call()
.content();
System.out.println(answer);
};
}
// 自定義工具類
static class MyTools {
final int[] temperatures = {-125, 15, -255}; // 模擬溫度數據(包含不合理值)
private final Random random = new Random();
// 天氣查詢工具:獲取指定地點的當前天氣
@Tool(description = "Get the current weather for a given location")
public String weather(String location) {
int temperature = temperatures[random.nextInt(temperatures.length)];
System.out.println(">>> 工具調用返回溫度:" + temperature);
return "The current weather in " + location + " is sunny with a temperature of " + temperature + "°C.";
}
}
}這個配置里,用 Anthropic Claude 負責生成回答,Ollama 負責評價(避免偏見),要求評分達到 4 分,最多重試 15 次。還加入了一個天氣工具,會生成隨機溫度(2/3 的概率是不合理值),用來觸發評價流程。
執行順序是:先執行 “自我完善評價顧問”(順序 0),評估回答質量,沒通過就帶反饋重試;然后執行 “日志顧問”(順序 2),記錄最終的請求和響應,方便監控。
運行后會看到類似這樣的輸出:
請求:[{"role":"user","content":"What is current weather in Paris?"}]
>>> 工具調用返回溫度:-255
第1次嘗試評價失敗,評價說明:回答包含不合理的溫度數據,改進反饋:-255°C的溫度在物理上是不可能的,屬于數據錯誤。
>>> 工具調用返回溫度:15
第2次嘗試評價通過,評價說明:回答優秀,包含合理的天氣數據
響應:The current weather in Paris is sunny with a temperature of 15°C.七、總結
Spring AI 的遞歸顧問讓 “LLM 當裁判” 模式的實現既簡潔又能投入生產。“自我完善評價顧問” 展示了如何打造自優化 AI 系統,自動評估回答質量、帶反饋重試、不用人工干預就能大規模完成評價。

核心優勢包括:自動化質量控制、用獨立裁判模型減少偏見、能和現有 Spring AI 應用無縫整合。這種方式為聊天機器人、內容生成、復雜 AI 工作流等場景,提供了可靠、可擴展的質量保障方案。
實現 “LLM 當裁判” 的關鍵成功因素:
- 用專門的裁判模型,提升評價表現(可參考裁判競技場排行榜);
- 用分開的生成模型和評價模型,減少偏見;
- 確保結果可重復(把溫度參數設為 0);
- 設計提示詞時,用整數量表和少量示例;
- 高風險決策場景,保留人工監督。
?? 重要提示:遞歸顧問是 Spring AI 1.1.0-M4 + 版本中的新實驗性功能,目前不支持流式輸出,需要注意顧問的執行順序,而且多輪 LLM 調用會增加成本。
如果內部顧問需要維護外部狀態,要特別注意保證多輪迭代中的準確性。
一定要設置終止條件和重試次數上限,避免出現無限循環。
好了,這就是我今天想分享的內容。
本文轉載自???玄姐聊AGI?? 作者:玄姐

















