fix: avoid low-confidence supervisor retry by default

This commit is contained in:
zhuyongxin
2026-07-03 15:32:09 +08:00
parent b0f288ae36
commit 5b827fe90e
2 changed files with 118 additions and 38 deletions
@@ -104,6 +104,9 @@ public class ChatService {
@Value("${verifier.low-confidence-threshold:0.5}")
private double verifierLowConfidenceThreshold;
@Value("${chat.complex.retry-on-low-confidence:false}")
private boolean retryOnLowConfidence;
/** 多 Agent Chat 的 Prompt */
private String chatPlannerPrompt;
private String chatExecutorPrompt;
@@ -211,16 +214,19 @@ public class ChatService {
/**
* 动态构建方法工具数组
* 根据 cls.mock-enabled 决定是否包含 QueryLogsTools
* 根据已注入的 Bean 暴露本地工具,避免 mock/真实模式下漏注入。
*/
public Object[] buildMethodToolsArray() {
List<Object> methodTools = new ArrayList<>();
methodTools.add(dateTimeTools);
methodTools.add(lookupKnowledgeTool);
if (queryLogsTools != null) {
// Mock 模式:包含 QueryLogsTools
return new Object[]{dateTimeTools, lookupKnowledgeTool};
} else {
// 真实模式:不包含 QueryLogsTools(由 MCP 提供日志查询功能)
return new Object[]{dateTimeTools, lookupKnowledgeTool, queryMetricsTools};
methodTools.add(queryLogsTools);
}
if (queryMetricsTools != null) {
methodTools.add(queryMetricsTools);
}
return methodTools.toArray();
}
/**
@@ -436,7 +442,10 @@ public class ChatService {
break;
}
if (finalDecision.groundednessScore() >= verifierLowConfidenceThreshold || round == 2) {
boolean shouldRetry = retryOnLowConfidence
&& finalDecision.groundednessScore() < verifierLowConfidenceThreshold
&& round < 2;
if (!shouldRetry) {
answer = buildLowConfidenceOutput(answer, finalDecision);
persistVerifierEvaluation(session, finalDecision, round);
break;