feat: add aiops payload query augmentation

This commit is contained in:
aruo
2026-07-05 12:56:20 +08:00
parent 674dd27a48
commit 72a3dbf8c5
8 changed files with 219 additions and 0 deletions
@@ -205,15 +205,33 @@ public class AiOpsService {
|| !isBlank(request.getTimeRange());
}
String buildKnowledgeRetrievalQuery(AIOpsRequest request) {
if (request == null || !hasAlertPayload(request)) {
return "";
}
StringBuilder query = new StringBuilder();
appendQueryTerm(query, request.getAlertName());
appendQueryTerm(query, request.getService());
appendQueryTerm(query, request.getSeverity());
appendQueryTerm(query, request.getDescription());
appendQueryTerm(query, request.getTimeRange());
appendQueryTerm(query, request.getUserRequest());
return query.toString();
}
String buildTaskPrompt(AIOpsRequest request) {
StringBuilder prompt = new StringBuilder();
prompt.append("你是企业级 SRE,接到了自动化告警排查任务。请结合工具调用,执行**规划→执行→再规划**的闭环,并最终按照固定模板输出《告警分析报告》。禁止编造虚假数据,如连续多次查询失败需诚实反馈无法完成的原因。");
prompt.append("\n\n本次告警输入:\n");
prompt.append(buildQuerySummary(request));
if (hasAlertPayload(request)) {
String knowledgeQuery = buildKnowledgeRetrievalQuery(request);
prompt.append("\n\nAIOps scope mode: PAYLOAD_TARGETED\n");
prompt.append("- The request includes an alert payload. Treat the supplied alert payload as the primary and only main diagnosis target.\n");
prompt.append("- The final report must focus on the supplied alert fields such as alertName, service, severity, description, and timeRange.\n");
prompt.append("- Recommended lookup_knowledge query: ").append(knowledgeQuery).append("\n");
prompt.append("- If knowledge-base evidence is needed, call lookup_knowledge with the recommended query or a narrower query that preserves alertName and service.\n");
prompt.append("- You may call queryPrometheusAlerts only to verify whether the supplied alert is still active or to identify related risk/context.\n");
prompt.append("- If queryPrometheusAlerts returns unrelated active alerts, do not create full root-cause or remediation sections for them.\n");
prompt.append("- Mention unrelated active alerts only briefly in a Related Risk section when they help explain the supplied alert.\n");
@@ -316,6 +334,15 @@ public class AiOpsService {
}
}
private void appendQueryTerm(StringBuilder builder, String value) {
if (!isBlank(value)) {
if (!builder.isEmpty()) {
builder.append(' ');
}
builder.append(value.trim());
}
}
private boolean isBlank(String value) {
return value == null || value.trim().isEmpty();
}