提交AI工具类

pull/1/head
liu 11 months ago
parent b1c6ff274b
commit 910d54b4c9

@ -56,11 +56,20 @@
<lock4j.version>2.2.5</lock4j.version>
<minio.version>8.5.7</minio.version>
<okhttp.version>4.9.0</okhttp.version>
<springboot.ai>1.0.3</springboot.ai>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.springboot.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${springboot.ai}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>

@ -36,6 +36,12 @@
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
</dependency>
<!-- 引入ollama的依赖.版本号来自于 dependencyManagement中 spring-ai-bom中的版本号.-->
<dependency>
<groupId>io.springboot.ai</groupId>
<artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>

@ -0,0 +1,106 @@
package com.supervision.util;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.ChatResponse;
import org.springframework.ai.chat.messages.Message;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.ollama.OllamaChatClient;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.*;
@Slf4j
public class AiChatUtil {
public static final ExecutorService chatExecutor = ThreadUtil.newFixedExecutor(5, 0, "chat", new ThreadPoolExecutor.CallerRunsPolicy());
public static final OllamaChatClient chatClient = SpringBeanUtil.getBean(OllamaChatClient.class);
/**
*
*
* @param chat
* @return jsonObject
*/
public Optional<JSONObject> chat(String chat) {
Prompt prompt = new Prompt(List.of(new UserMessage(chat)));
Future<String> submit = chatExecutor.submit(new ChatTask(chatClient, prompt));
try {
return Optional.of(JSONUtil.parseObj(submit.get()));
} catch (ExecutionException | InterruptedException e) {
log.error("调用大模型生成失败");
}
return Optional.empty();
}
/**
* ,
*
* @param messageList
* @return jsonObject
*/
public Optional<JSONObject> chat(List<Message> messageList) {
Prompt prompt = new Prompt(messageList);
Future<String> submit = chatExecutor.submit(new ChatTask(chatClient, prompt));
try {
return Optional.of(JSONUtil.parseObj(submit.get()));
} catch (ExecutionException | InterruptedException e) {
log.error("调用大模型生成失败");
}
return Optional.empty();
}
/**
*
*
* @param messageList
* @param clazz
* @param <T>
* @return ,
*/
public <T> Optional<T> chat(List<Message> messageList, Class<T> clazz) {
Prompt prompt = new Prompt(messageList);
Future<String> submit = chatExecutor.submit(new ChatTask(chatClient, prompt));
try {
String s = submit.get();
return Optional.ofNullable(JSONUtil.toBean(s, clazz));
} catch (ExecutionException | InterruptedException e) {
log.error("调用大模型生成失败");
}
return Optional.empty();
}
/**
*
*
* @param chat
* @param clazz
* @param <T>
* @return ,
*/
public <T> Optional<T> chat(String chat, Class<T> clazz) {
Prompt prompt = new Prompt(List.of(new UserMessage(chat)));
Future<String> submit = chatExecutor.submit(new ChatTask(chatClient, prompt));
try {
String s = submit.get();
return Optional.ofNullable(JSONUtil.toBean(s, clazz));
} catch (ExecutionException | InterruptedException e) {
log.error("调用大模型生成失败");
}
return Optional.empty();
}
private record ChatTask(OllamaChatClient chatClient, Prompt prompt) implements Callable<String> {
@Override
public String call() {
ChatResponse call = chatClient.call(prompt);
return call.getResult().getOutput().getContent();
}
}
}

@ -32,6 +32,11 @@
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>

@ -4,6 +4,7 @@ import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
/**
* @author fulin
@ -12,6 +13,7 @@ import org.springframework.context.annotation.Configuration;
@ConfigurationProperties(prefix = "nebula")
@EnableConfigurationProperties(NebulaGraphProperties.class)
@Data
@Primary
public class NebulaGraphProperties {
private String username;

@ -13,6 +13,7 @@ import org.springframework.stereotype.Component;
@RequiredArgsConstructor
public class NebulaSession {
private final NebulaGraphProperties nebulaGraphProperties;
@Bean

@ -2,9 +2,9 @@ spring:
cloud:
nacos:
config:
server-addr: 192.168.10.137:8848
server-addr: 192.168.10.138:8848
file-extension: yml
namespace: b9eea377-79ec-4ba5-9cc2-354f7bd5181e
namespace: 0a75e42d-26fe-4ee6-a460-f1738845cf4d
discovery:
server-addr: 192.168.10.137:8848
namespace: b9eea377-79ec-4ba5-9cc2-354f7bd5181e
server-addr: 192.168.10.138:8848
namespace: 0a75e42d-26fe-4ee6-a460-f1738845cf4d

@ -37,6 +37,7 @@
</exclusions>
</dependency>
<!-- 操作视频流 -->
<dependency>
<groupId>org.bytedeco</groupId>

@ -34,11 +34,6 @@
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
@ -116,18 +111,6 @@
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.springboot.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>1.0.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>

Loading…
Cancel
Save