From 19a93325b1744165d3d93c94c334eecc8c24fd96 Mon Sep 17 00:00:00 2001 From: lanyuanxiaoyao Date: Sun, 2 Mar 2025 21:08:36 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AE=80=E5=8D=95=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/dataSources.xml | 13 ++++++++ .../analysis/controller/ChatController.java | 5 +-- src/main/resources/application.yml | 1 + .../lanyuanxiaoyao/ai/analysis/FakeData.java | 31 +++++++++++++++++-- 4 files changed, 45 insertions(+), 5 deletions(-) diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml index 0d43583..7c5274f 100644 --- a/.idea/dataSources.xml +++ b/.idea/dataSources.xml @@ -13,5 +13,18 @@ $ProjectFileDir$ + + mysql.8 + true + com.mysql.cj.jdbc.Driver + jdbc:mysql://192.168.100.139:3307/main?useSSL=false&allowPublicKeyRetrieval=true + + + + + + + $ProjectFileDir$ + \ No newline at end of file diff --git a/src/main/java/com/lanyuanxiaoyao/ai/analysis/controller/ChatController.java b/src/main/java/com/lanyuanxiaoyao/ai/analysis/controller/ChatController.java index 882b30f..a6077df 100644 --- a/src/main/java/com/lanyuanxiaoyao/ai/analysis/controller/ChatController.java +++ b/src/main/java/com/lanyuanxiaoyao/ai/analysis/controller/ChatController.java @@ -55,8 +55,8 @@ public class ChatController { // language=TEXT prompts.add(""" 你是一名服务器主机运维管理员,对于用户提出的问题,你会尝试从多个方面思考分析,通过多种角度进行研究,使用尽可能多的数据对比对用户的问题进行回答 - 你会积极使用表格、echarts图表等形式对数据进行分类、统计,力求能直观表达数据之间的关系和趋势,尤其是用户问题中出现“趋势”、“占比”、“对比”等字眼的时候 - 你始终会在中文语境下回答,对于用户的每个问题,先提出4个和用户提问最为相关的问题,针对以上5个问题分别进行回答 + 你会积极使用表格、echarts图表等形式对数据进行分类、统计,力求能直观表达数据之间的关系和趋势,当用户问题中出现“趋势”、“占比”、“对比”等字眼的时候,优先使用echarts图表进行分析 + 你始终会在中文语境下回答,对于用户的每个问题,先提出4个和用户提问最为相关的问题,针对以上5个问题分别进行回答再并整合答案汇总成为最终的回答,至少500字以上 对于echarts图表,严格按照如下格式进行绘制,这部份代码必须新起一段 ```echarts @@ -169,6 +169,7 @@ public class ChatController { 你将所管理的主机信息记录在据数据库中schema名为main、表名为host_assets的MySQL表中,任何关于主机的数据的回答都必须从实际的数据中获取,严禁虚构任何不存在的表或表字段,没有描述的表或字段可以从表名或字段名中推测,如果找不到答案,就回复“数据库中没有找到相关数据” 任何时候你都只能查询数据库,不会对数据库进行任何修改操作,也不会查询除host_assets外的任何表,数据库查询结果中出现null表示没有数据 用户问题中提到的关键词通常不是精准的字段名或字段内容,你需要结合精确匹配或模糊匹配等等多种方式综合查询数据,必要的时候可以多次查询数据库综合查询数据 + 当用户的问题涉及到具体检索某一列的某个值时,如果该列不是主键、日期、时间等内容,先使用distinct语句查询该列的取值情况,再根据用户的需求选择具体的值进行查询,避免查询不存在的取值 以下是host_assets表的详细信息,包含表名、表描述、字段名和字段描述"""); prompts.add(databaseTools.getTableInformation(databaseName)); prompts.add(""); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 544bd83..1aee99e 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -30,6 +30,7 @@ spring: completions-path: /chat/completions options: model: "glm-4-flash" + parallel-tool-calls: true ollama: chat: model: "qwen2.5:7b" diff --git a/src/test/java/com/lanyuanxiaoyao/ai/analysis/FakeData.java b/src/test/java/com/lanyuanxiaoyao/ai/analysis/FakeData.java index d137406..41873bd 100644 --- a/src/test/java/com/lanyuanxiaoyao/ai/analysis/FakeData.java +++ b/src/test/java/com/lanyuanxiaoyao/ai/analysis/FakeData.java @@ -1,5 +1,7 @@ package com.lanyuanxiaoyao.ai.analysis; +import cn.hutool.core.date.DateField; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.db.DbUtil; @@ -11,6 +13,7 @@ import java.sql.Statement; import java.util.ArrayList; import java.util.List; import java.util.Locale; +import java.util.Set; import lombok.extern.slf4j.Slf4j; import net.datafaker.Faker; @@ -23,15 +26,15 @@ public class FakeData { public static void main(String[] args) { Faker faker = new Faker(new Locale("zh-CN")); - try (Session session = DbUtil.newSession(new SimpleDataSource("jdbc:mysql://localhost:3307/main", "test", "test"))) { + /*try (Session session = DbUtil.newSession(new SimpleDataSource("jdbc:mysql://192.168.100.139:3307/main", "test", "test"))) { String fieldName = "system_name"; List items = new ArrayList<>(); List entities = session.query(StrUtil.format("select distinct {} as name from host_assets where {} is not null", fieldName, fieldName)); for (Entity entity : entities) { - /* Set fields = entity.getFieldNames(); + *//* Set fields = entity.getFieldNames(); for (String field : fields) { items.add(entity.get(field).toString()); - } */ + } *//* items.add(entity.getStr("name")); } for (String item : items) { @@ -46,6 +49,28 @@ public class FakeData { } } catch (SQLException e) { log.error(e.getMessage(), e); + }*/ + try (Session session = DbUtil.newSession(new SimpleDataSource("jdbc:mysql://192.168.100.139:3307/main?useSSL=false&allowPublicKeyRetrieval=true", "test", "test"))) { + String fieldName = "id"; + List items = new ArrayList<>(); + List entities = session.query(StrUtil.format("select distinct {} as name from host_assets where {} is not null", fieldName, fieldName)); + for (Entity entity : entities) { + Set fields = entity.getFieldNames(); + for (String field : fields) { + items.add(entity.get(field).toString()); + } + items.add(entity.getStr("name")); + } + for (String item : items) { + String dateText = RandomUtil.randomDate(DateUtil.parseDateTime("2024-12-31 00:00:00"), DateField.DAY_OF_YEAR, -200, -1).toString("yyyy-MM-dd"); + String sql = StrUtil.format("update host_assets set start_date = '{}' where {} = '{}'", dateText, fieldName, item); + log.info("{}", sql); + try (Statement statement = session.getConnection().createStatement()) { + statement.execute(sql); + } + } + } catch (SQLException e) { + log.error(e.getMessage(), e); } } }