AIModelDataFormatter.java 2.45 KB
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);
    }

}