diff --git a/service-ai/bin/.gitignore b/service-ai/bin/.gitignore
new file mode 100644
index 0000000..b70feb9
--- /dev/null
+++ b/service-ai/bin/.gitignore
@@ -0,0 +1,102 @@
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+!.vscode/*.code-snippets
+.history/
+*.vsix
+*~
+.fuse_hidden*
+.directory
+.Trash-*
+.nfs*
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+lerna-debug.log*
+.pnpm-debug.log*
+report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
+pids
+*.pid
+*.seed
+*.pid.lock
+lib-cov
+coverage
+*.lcov
+.nyc_output
+.grunt
+bower_components
+.lock-wscript
+build/Release
+node_modules/
+jspm_packages/
+web_modules/
+*.tsbuildinfo
+.npm
+.eslintcache
+.stylelintcache
+.rpt2_cache/
+.rts2_cache_cjs/
+.rts2_cache_es/
+.rts2_cache_umd/
+.node_repl_history
+*.tgz
+.yarn-integrity
+.env
+.env.development.local
+.env.test.local
+.env.production.local
+.env.local
+.cache
+.parcel-cache
+.next
+out
+.nuxt
+dist
+.cache/
+.vuepress/dist
+.temp
+.docusaurus
+.serverless/
+.fusebox/
+.dynamodb/
+.tern-port
+.vscode-test
+.yarn/cache
+.yarn/unplugged
+.yarn/build-state.yml
+.yarn/install-state.gz
+.pnp.*
+Thumbs.db
+Thumbs.db:encryptable
+ehthumbs.db
+ehthumbs_vista.db
+*.stackdump
+[Dd]esktop.ini
+$RECYCLE.BIN/
+*.cab
+*.msi
+*.msix
+*.msm
+*.msp
+*.lnk
+.DS_Store
+.AppleDouble
+.LSOverride
+Icon
+._*
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
diff --git a/service-ai/bin/build-ai-chat.js b/service-ai/bin/build-ai-chat.js
new file mode 100644
index 0000000..ed6356b
--- /dev/null
+++ b/service-ai/bin/build-ai-chat.js
@@ -0,0 +1,14 @@
+import {cd, path} from 'zx'
+import {trim} from "licia";
+import {run_deploy, run_package, run_upload} from '../../bin/library.js'
+
+// 切换目录
+cd(trim(path.dirname(import.meta.dirname)))
+// 执行流程
+try {
+ await run_deploy('service-ai-core')
+ await run_package('service-ai-chat')
+ await run_upload('service-ai-chat')
+} catch (e) {
+ console.error(e)
+}
\ No newline at end of file
diff --git a/service-ai/bin/build-ai-chat.sh b/service-ai/bin/build-ai-chat.sh
deleted file mode 100755
index 73ad775..0000000
--- a/service-ai/bin/build-ai-chat.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-root_path=$(dirname $(cd $(dirname $0);pwd))
-source $(realpath $root_path/..)/bin/library.sh
-deploy service-ai-core
-package service-ai-chat
-upload $root_path/service-ai-chat/target/service-ai-chat-1.0.0-SNAPSHOT.jar
\ No newline at end of file
diff --git a/service-ai/bin/test.js b/service-ai/bin/test.js
new file mode 100644
index 0000000..e69de29
diff --git a/service-ai/pom.xml b/service-ai/pom.xml
index 71da03a..f165b52 100644
--- a/service-ai/pom.xml
+++ b/service-ai/pom.xml
@@ -24,7 +24,7 @@
3.4.3
2024.0.1
- 1.0.0-M6
+ 1.0.0-RC1
11.1.0
5.1.0
5.8.27
diff --git a/service-ai/service-ai-chat/pom.xml b/service-ai/service-ai-chat/pom.xml
index 542ffa0..efb09c3 100644
--- a/service-ai/service-ai-chat/pom.xml
+++ b/service-ai/service-ai-chat/pom.xml
@@ -18,7 +18,7 @@
org.springframework.ai
- spring-ai-openai-spring-boot-starter
+ spring-ai-starter-model-openai
diff --git a/service-ai/service-ai-chat/src/main/java/com/lanyuanxiaoyao/service/ai/chat/controller/ChatController.java b/service-ai/service-ai-chat/src/main/java/com/lanyuanxiaoyao/service/ai/chat/controller/ChatController.java
index cb78f95..4df3613 100644
--- a/service-ai/service-ai-chat/src/main/java/com/lanyuanxiaoyao/service/ai/chat/controller/ChatController.java
+++ b/service-ai/service-ai-chat/src/main/java/com/lanyuanxiaoyao/service/ai/chat/controller/ChatController.java
@@ -32,13 +32,19 @@ public class ChatController {
private final ChatClient chatClient;
public ChatController(ChatClient.Builder builder) {
- this.chatClient = builder
- .defaultSystem("始终在中文语境下进行对话")
- .build();
+ this.chatClient = builder.build();
}
private ChatClient.ChatClientRequestSpec buildRequest(ImmutableList messages) {
return chatClient.prompt()
+ .system("""
+ 你是一名专业的AI运维助手,负责“Hudi数据同步服务平台”的运维工作;
+ 你将会友好地帮助用户解答关于该平台运维工作的问题,你会尽可能通过各种方式获取知识和数据来解答;
+ 对于无法通过已有知识回答的问题,你会提示用户你无法解答该问题,而不是虚构不存在的数据或答案;
+ 对于与该平台无关的问题,你会委婉地拒绝用户,并提示无法回答;
+ 你将始终在中文语境下进行对话。
+ """)
+ .tools(new DatetimeTools())
.messages(
messages
.collect(message -> StrUtil.equals(message.getRole(), "assistant")
@@ -52,9 +58,10 @@ public class ChatController {
@PostMapping("sync")
@ResponseBody
public String chatSync(@RequestBody ImmutableList messages) {
- return buildRequest(messages)
+ String content = buildRequest(messages)
.call()
.content();
+ return StrUtil.trimToEmpty(content);
}
@PostMapping("async")
diff --git a/service-ai/service-ai-chat/src/main/java/com/lanyuanxiaoyao/service/ai/chat/tools/DatetimeTools.java b/service-ai/service-ai-chat/src/main/java/com/lanyuanxiaoyao/service/ai/chat/tools/DatetimeTools.java
index e436df4..5745b09 100644
--- a/service-ai/service-ai-chat/src/main/java/com/lanyuanxiaoyao/service/ai/chat/tools/DatetimeTools.java
+++ b/service-ai/service-ai-chat/src/main/java/com/lanyuanxiaoyao/service/ai/chat/tools/DatetimeTools.java
@@ -11,8 +11,8 @@ import org.springframework.ai.tool.annotation.Tool;
public class DatetimeTools {
private final static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
- @Tool(description = "获取当前时间")
- public String getCurrentTime() {
+ @Tool(description = "获取当前日期和时间")
+ public String getCurrentDateTime() {
return LocalDateTime.now().format(formatter);
}
}
diff --git a/service-ai/service-ai-chat/src/main/resources/application.yml b/service-ai/service-ai-chat/src/main/resources/application.yml
index 723c522..600878a 100644
--- a/service-ai/service-ai-chat/src/main/resources/application.yml
+++ b/service-ai/service-ai-chat/src/main/resources/application.yml
@@ -2,14 +2,14 @@ spring:
application:
name: service-ai-chat
profiles:
- include: random-port,common,metrics,forest
+ include: random-port,common,discovery,metrics,forest
ai:
openai:
base-url: http://132.121.206.65:10086
api-key: ENC(K+Hff9QGC+fcyi510VIDd9CaeK/IN5WBJ9rlkUsHEdDgIidW+stHHJlsK0lLPUXXREha+ToQZqqDXJrqSE+GUKCXklFhelD8bRHFXBIeP/ZzT2cxhzgKUXgjw3S0Qw2R)
chat:
options:
- model: 'Qwen3-1.7'
+ model: 'Qwen3-1.7-vllm'
mvc:
async:
request-timeout: 300000
diff --git a/service-ai/service-ai-chat/src/main/resources/logback-spring.xml b/service-ai/service-ai-chat/src/main/resources/logback-spring.xml
index 01bad8b..d686c9c 100644
--- a/service-ai/service-ai-chat/src/main/resources/logback-spring.xml
+++ b/service-ai/service-ai-chat/src/main/resources/logback-spring.xml
@@ -29,6 +29,6 @@
-
+
\ No newline at end of file
diff --git a/service-ai/service-ai-core/pom.xml b/service-ai/service-ai-core/pom.xml
index f21af36..64496dd 100644
--- a/service-ai/service-ai-core/pom.xml
+++ b/service-ai/service-ai-core/pom.xml
@@ -44,5 +44,11 @@
+
+
+ org.springframework.boot
+ spring-boot-starter-webflux
+ provided
+
\ No newline at end of file
diff --git a/service-ai/service-ai-core/src/main/java/com/lanyuanxiaoyao/service/ai/core/configuration/WebClientConfiguration.java b/service-ai/service-ai-core/src/main/java/com/lanyuanxiaoyao/service/ai/core/configuration/WebClientConfiguration.java
new file mode 100644
index 0000000..afcddb1
--- /dev/null
+++ b/service-ai/service-ai-core/src/main/java/com/lanyuanxiaoyao/service/ai/core/configuration/WebClientConfiguration.java
@@ -0,0 +1,39 @@
+package com.lanyuanxiaoyao.service.ai.core.configuration;
+
+import java.net.http.HttpClient;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.http.client.JdkClientHttpRequestFactory;
+import org.springframework.http.client.reactive.JdkClientHttpConnector;
+import org.springframework.web.client.RestClient;
+import org.springframework.web.reactive.function.client.WebClient;
+
+/**
+ * vLLM只能使用http1.0
+ *
+ * @author lanyuanxiaoyao
+ * @version 20250519
+ */
+@Configuration
+public class WebClientConfiguration {
+ private HttpClient httpClient() {
+ return HttpClient.newBuilder()
+ .version(HttpClient.Version.HTTP_1_1)
+ .build();
+ }
+
+ @Bean
+ @Primary
+ public RestClient.Builder restClientBuilder() {
+ return RestClient.builder()
+ .requestFactory(new JdkClientHttpRequestFactory(httpClient()));
+ }
+
+ @Bean
+ @Primary
+ public WebClient.Builder webClientBuilder() {
+ return WebClient.builder()
+ .clientConnector(new JdkClientHttpConnector(httpClient()));
+ }
+}
diff --git a/service-ai/service-ai-knowledge/pom.xml b/service-ai/service-ai-knowledge/pom.xml
index 65487e6..702f182 100644
--- a/service-ai/service-ai-knowledge/pom.xml
+++ b/service-ai/service-ai-knowledge/pom.xml
@@ -24,11 +24,11 @@
org.springframework.ai
- spring-ai-openai-spring-boot-starter
+ spring-ai-starter-model-openai
org.springframework.ai
- spring-ai-qdrant-store-spring-boot-starter
+ spring-ai-qdrant-store
org.springframework.ai