AIModelDataFormatter.java
2.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package com.xly.util;
import cn.hutool.json.JSONUtil;
import com.xly.entity.ToolMeta;
import java.util.*;
public class AIModelDataFormatter {
public static String formatDataForAI(ToolMeta meta, Integer TotalCount,
List<Map<String, Object>> rows,
Set<String> headers) {
StringBuilder response = new StringBuilder();
// 3. **关键:先显示用户友好的表格**
response.append("## 查询结果(共").append(TotalCount).append("条)\n\n");
response.append(buildMarkdownTable(rows, headers));
response.append("\n");
// 4. 机器可读的结构化数据(只出现一次!)
response.append("<!-- MACHINE_DATA_START -->\n");
response.append(buildMachineReadableData(rows,headers));
response.append("\n<!-- MACHINE_DATA_END -->\n\n");
return response.toString();
}
/**
* 构建Markdown表格
*/
public static String buildMarkdownTable(List<Map<String, Object>> rows, Set<String> headers) {
StringBuilder table = new StringBuilder();
// 表头
table.append("| 序号 | ");
for (String header : headers) {
table.append(header).append(" | ");
}
table.append("\n|");
table.append("---|".repeat(headers.size() + 1));
table.append("\n");
// 表格数据
for (int i = 0; i < rows.size(); i++) {
Map<String, Object> row = rows.get(i);
table.append("| ").append(i + 1).append(" | ");
for (String header : headers) {
Object value = row.get(header);
table.append(value != null ? value : "—").append(" | ");
}
table.append("\n");
}
return table.toString();
}
/**
* 构建机器可读数据
*/
public static String buildMachineReadableData(List<Map<String, Object>> rows, Set<String> headers) {
List<Map<String, Object>> dataList = new ArrayList<>();
for (int i = 0; i < rows.size(); i++) {
Map<String, Object> row = rows.get(i);
Map<String, Object> item = new LinkedHashMap<>();
item.put("序号", i + 1);
for (String header : headers) {
Object value = row.get(header);
item.put(header,value);
}
dataList.add(item);
}
return JSONUtil.toJsonStr(dataList);
}
}