diff --git a/pom.xml b/pom.xml
index 8b626842535d909b26df2f4ec4fec43cf174af0e..78b5961f1ede72da7184400b5bfb288ff04c4c40 100644
--- a/pom.xml
+++ b/pom.xml
@@ -60,6 +60,26 @@
junit
test
+
+ com.squareup.retrofit2
+ retrofit
+ 2.9.0
+
+
+ com.squareup.retrofit2
+ converter-jackson
+ 2.9.0
+
+
+ com.squareup.retrofit2
+ adapter-rxjava2
+ 2.9.0
+
+
+ com.squareup.okhttp3
+ logging-interceptor
+ 4.12.0
+
diff --git a/src/main/java/cn/bugstack/xfg/frame/config/Retrofit2Config.java b/src/main/java/cn/bugstack/xfg/frame/config/Retrofit2Config.java
new file mode 100644
index 0000000000000000000000000000000000000000..d612756cd1f6a86857edb3cf66bcdd38c38c8c57
--- /dev/null
+++ b/src/main/java/cn/bugstack/xfg/frame/config/Retrofit2Config.java
@@ -0,0 +1,52 @@
+package cn.bugstack.xfg.frame.config;
+
+import cn.bugstack.xfg.frame.service.IKnowledgeCenterService;
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.OkHttpClient;
+import okhttp3.logging.HttpLoggingInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import retrofit2.Retrofit;
+import retrofit2.converter.jackson.JacksonConverterFactory;
+
+import java.util.concurrent.TimeUnit;
+
+
+@Slf4j
+@Configuration
+public class Retrofit2Config {
+ private static final String BASE_URL = "https://demo.ragflow.io/";
+
+ @Bean
+ public Retrofit retrofit() {
+ // 创建日志拦截器
+ HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
+ @Override
+ public void log(String message) {
+ // 使用 SLF4J 记录日志,便于与 Spring Boot 日志系统集成
+ log.info("Retrofit: {}", message);
+ }
+ });
+
+ // 设置日志级别
+ loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
+
+ // 创建 OkHttpClient 并添加拦截器
+ OkHttpClient okHttpClient = new OkHttpClient.Builder()
+ .addInterceptor(loggingInterceptor)
+ .connectTimeout(30, TimeUnit.SECONDS)
+ .readTimeout(30, TimeUnit.SECONDS)
+ .writeTimeout(30, TimeUnit.SECONDS)
+ .build();
+
+ return new Retrofit.Builder()
+ .baseUrl(BASE_URL)
+ .client(okHttpClient)
+ .addConverterFactory(JacksonConverterFactory.create()).build();
+ }
+
+ @Bean
+ public IKnowledgeCenterService knowledgeCenterService() {
+ return retrofit().create(IKnowledgeCenterService.class);
+ }
+}
diff --git a/src/main/java/cn/bugstack/xfg/frame/controller/UserController.java b/src/main/java/cn/bugstack/xfg/frame/controller/UserController.java
index a69fc2fccd14c773db93449fb60fd1f469fbf752..0ec17141f1e6b300364d03f6a0120ee3072db969 100644
--- a/src/main/java/cn/bugstack/xfg/frame/controller/UserController.java
+++ b/src/main/java/cn/bugstack/xfg/frame/controller/UserController.java
@@ -1,14 +1,19 @@
package cn.bugstack.xfg.frame.controller;
import cn.bugstack.xfg.frame.common.Result;
+import cn.bugstack.xfg.frame.domain.req.KeySensorCompletionReq;
+import cn.bugstack.xfg.frame.domain.res.CompletionRes;
import cn.bugstack.xfg.frame.domain.res.UserRes;
import cn.bugstack.xfg.frame.domain.vo.UserVO;
+import cn.bugstack.xfg.frame.service.IKnowledgeCenterService;
import cn.bugstack.xfg.frame.service.IUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
+import retrofit2.Call;
import javax.annotation.Resource;
+import java.io.IOException;
import java.util.List;
@Slf4j
@@ -18,13 +23,16 @@ public class UserController {
@Resource
private IUserService userService;
+ @Resource
+ private IKnowledgeCenterService knowledgeCenterService;
+
/**
* http://localhost:8089/queryUserInfo
*/
- @RequestMapping("queryUserInfo")
+ @RequestMapping("/queryUserInfo")
public UserRes queryUserInfo() {
try {
- log.info("查询用户信息");
+ log.info("查询用户信息开始");
List userVOList = userService.queryUserList();
return UserRes.builder().userVOList(userVOList).result(Result.buildSuccess()).build();
} catch (Exception e) {
@@ -33,4 +41,17 @@ public class UserController {
}
}
+ @RequestMapping("/queryAI")
+ public String queryAI() throws IOException {
+ KeySensorCompletionReq.KeySensorCompletionReqBuilder reqBuilder =
+ KeySensorCompletionReq.builder()
+ .question("请给我一个5个字")
+ .style("normal");
+ Call call = knowledgeCenterService.getCompletions("Bearer ragflow-djN2QwZjc0YTNlNzExZjBiYjBlNDIwMT", reqBuilder.build(), "56a8f80aa85911f08a8a42010a8e0005");
+ CompletionRes completionRes = call.execute().body();
+ log.info("completionRes: {}", completionRes);
+
+ return "test";
+ }
+
}
diff --git a/src/main/java/cn/bugstack/xfg/frame/domain/req/CompletionBaseReq.java b/src/main/java/cn/bugstack/xfg/frame/domain/req/CompletionBaseReq.java
new file mode 100644
index 0000000000000000000000000000000000000000..15dddbafecc96b5087a46023db1ea748c6fbb977
--- /dev/null
+++ b/src/main/java/cn/bugstack/xfg/frame/domain/req/CompletionBaseReq.java
@@ -0,0 +1,23 @@
+package cn.bugstack.xfg.frame.domain.req;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * @author Linnea
+ * @Description xx类
+ * @Date 2025/10/14
+ */
+@Data
+@SuperBuilder
+@AllArgsConstructor
+@NoArgsConstructor
+public class CompletionBaseReq {
+ private String question;
+ private String style;
+ private String[] kb_ids;
+ private boolean stream;
+}
diff --git a/src/main/java/cn/bugstack/xfg/frame/domain/req/KeySensorCompletionReq.java b/src/main/java/cn/bugstack/xfg/frame/domain/req/KeySensorCompletionReq.java
new file mode 100644
index 0000000000000000000000000000000000000000..f3bba102acfadf234d614534340e9e85a41d5a75
--- /dev/null
+++ b/src/main/java/cn/bugstack/xfg/frame/domain/req/KeySensorCompletionReq.java
@@ -0,0 +1,22 @@
+package cn.bugstack.xfg.frame.domain.req;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * @author Linnea
+ * @Description xx类
+ * @Date 2025/10/14
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@SuperBuilder
+public class KeySensorCompletionReq extends CompletionBaseReq{
+ private String sensorList;
+ private String session_id;
+ private String user_id;
+}
diff --git a/src/main/java/cn/bugstack/xfg/frame/domain/res/CompletionRes.java b/src/main/java/cn/bugstack/xfg/frame/domain/res/CompletionRes.java
new file mode 100644
index 0000000000000000000000000000000000000000..2685fedfb29318a1bf4479fc37cdc4154477184a
--- /dev/null
+++ b/src/main/java/cn/bugstack/xfg/frame/domain/res/CompletionRes.java
@@ -0,0 +1,42 @@
+package cn.bugstack.xfg.frame.domain.res;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CompletionRes {
+ // 主要响应字段
+ private String answer;
+ private String audioBinary;
+ private Double createdAt;
+ private String id;
+ private String prompt;
+ private String sessionId;
+
+ // 引用信息相关字段
+ private List chunks;
+ private List docAggs;
+ private Integer total;
+
+ // 内部类 - 文本块
+ @Data
+ public static class Chunk {
+ private String content;
+ private String datasetId;
+ private String documentId;
+ private String documentName;
+ private String id;
+ private String imageId;
+ private List