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);
}
}
}