♻️Refactor: 使用 SpringAI 框架生成结构化 JSON
This commit is contained in:
@@ -71,6 +71,12 @@
|
|||||||
<artifactId>mybatis-plus-jsqlparser</artifactId>
|
<artifactId>mybatis-plus-jsqlparser</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.ai</groupId>
|
||||||
|
<artifactId>spring-ai-starter-model-openai</artifactId>
|
||||||
|
<version>1.0.3</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- redis -->
|
<!-- redis -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
|||||||
@@ -32,4 +32,13 @@ public interface CommonConstant {
|
|||||||
" \"{前端 Echarts V5 的 option 配置对象的json代码,合理地将数据进行可视化,不要生成任何多余的内容,比如注释}\\n\" +\n" +
|
" \"{前端 Echarts V5 的 option 配置对象的json代码,合理地将数据进行可视化,不要生成任何多余的内容,比如注释}\\n\" +\n" +
|
||||||
" \"【【【【【\\n\" +\n" +
|
" \"【【【【【\\n\" +\n" +
|
||||||
" \"{明确的数据分析结论、越详细越好,不要生成多余的注释}\"";
|
" \"{明确的数据分析结论、越详细越好,不要生成多余的注释}\"";
|
||||||
|
|
||||||
|
String CHART_AGENT_PROMPT = """
|
||||||
|
你是一个数据分析师和前端开发专家,我会按照以下固定格式给你提供内容:\
|
||||||
|
分析需求:
|
||||||
|
{数据分析的需求或者目标}
|
||||||
|
原始数据
|
||||||
|
{csv格式的原始数据,用,作为分隔符}
|
||||||
|
请根据这两部分内容,按照以下指定格式生成内容
|
||||||
|
{前端 Echarts V5 的 option 配置对象的json代码,合理地将数据进行可视化,不要生成任何多余的内容,比如注释}""";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,6 +19,13 @@ knife4j:
|
|||||||
spring:
|
spring:
|
||||||
application:
|
application:
|
||||||
name: bi-backend
|
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
|
# 支持 swagger3
|
||||||
mvc:
|
mvc:
|
||||||
pathmatch:
|
pathmatch:
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user