diff --git a/Backend/pom.xml b/Backend/pom.xml index fb1bdf8..65b81d1 100644 --- a/Backend/pom.xml +++ b/Backend/pom.xml @@ -71,6 +71,12 @@ mybatis-plus-jsqlparser + + org.springframework.ai + spring-ai-starter-model-openai + 1.0.3 + + org.springframework.boot diff --git a/Backend/src/main/java/com/wonder/bi/constant/CommonConstant.java b/Backend/src/main/java/com/wonder/bi/constant/CommonConstant.java index d343bc5..b92ca70 100644 --- a/Backend/src/main/java/com/wonder/bi/constant/CommonConstant.java +++ b/Backend/src/main/java/com/wonder/bi/constant/CommonConstant.java @@ -32,4 +32,13 @@ public interface CommonConstant { " \"{前端 Echarts V5 的 option 配置对象的json代码,合理地将数据进行可视化,不要生成任何多余的内容,比如注释}\\n\" +\n" + " \"【【【【【\\n\" +\n" + " \"{明确的数据分析结论、越详细越好,不要生成多余的注释}\""; + + String CHART_AGENT_PROMPT = """ + 你是一个数据分析师和前端开发专家,我会按照以下固定格式给你提供内容:\ + 分析需求: + {数据分析的需求或者目标} + 原始数据 + {csv格式的原始数据,用,作为分隔符} + 请根据这两部分内容,按照以下指定格式生成内容 + {前端 Echarts V5 的 option 配置对象的json代码,合理地将数据进行可视化,不要生成任何多余的内容,比如注释}"""; } diff --git a/Backend/src/main/java/com/wonder/bi/manager/ChartAgentManager.java b/Backend/src/main/java/com/wonder/bi/manager/ChartAgentManager.java new file mode 100644 index 0000000..06f100f --- /dev/null +++ b/Backend/src/main/java/com/wonder/bi/manager/ChartAgentManager.java @@ -0,0 +1,28 @@ +package com.wonder.bi.manager; + +import com.wonder.bi.constant.CommonConstant; +import lombok.extern.slf4j.Slf4j; +import org.springframework.ai.chat.client.ChatClient; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class ChartAgentManager { + + private ChatClient client; + + public ChartAgentManager(ChatClient.Builder chatClientBuilder) { + this.client = chatClientBuilder + .defaultSystem(CommonConstant.CHART_AGENT_PROMPT) + .build(); + } + + public String getChartJson(String message) { + String content = client + .prompt(message) + .call() + .content(); + log.info(content); + return content; + } +} diff --git a/Backend/src/main/resources/application.yml b/Backend/src/main/resources/application.yml index bd96ed0..6a7a142 100644 --- a/Backend/src/main/resources/application.yml +++ b/Backend/src/main/resources/application.yml @@ -19,6 +19,13 @@ knife4j: spring: application: name: bi-backend + ai: + openai: + base-url: https://api.siliconflow.cn + api-key: sk-idvvtxhxwaulcmvoshpvouuenezzttqgaeqwbdcucqmvfncm + chat: + options: + model: Qwen/Qwen3-Coder-30B-A3B-Instruct # 支持 swagger3 mvc: pathmatch: diff --git a/Backend/src/test/java/com/wonder/bi/manager/ChartAgentManagerTest.java b/Backend/src/test/java/com/wonder/bi/manager/ChartAgentManagerTest.java new file mode 100644 index 0000000..a07443c --- /dev/null +++ b/Backend/src/test/java/com/wonder/bi/manager/ChartAgentManagerTest.java @@ -0,0 +1,27 @@ +package com.wonder.bi.manager; + +import jakarta.annotation.Resource; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +import static org.junit.jupiter.api.Assertions.*; + +@SpringBootTest +class ChartAgentManagerTest { + + @Resource + private ChartAgentManager chartAgent; + + @Test + void getChartJson() { + String chartJson = chartAgent.getChartJson("分析需求:\n" + + "分析网站用户的增长情况\n" + + "原始数据:\n" + + "日期,用户数\n" + + "1号,10\n" + + "2号,20\n" + + "3号,30\n"); + Assertions.assertNotNull(chartJson); + } +} \ No newline at end of file