You need to sign in or sign up before continuing.
提交 4c75b5ab 编写于 作者: L Linnea Lin

retrofit

上级 70c26a5e
......@@ -60,6 +60,26 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>converter-jackson</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>adapter-rxjava2</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>logging-interceptor</artifactId>
<version>4.12.0</version>
</dependency>
</dependencies>
<build>
......
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);
}
}
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<UserVO> 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<CompletionRes> call = knowledgeCenterService.getCompletions("Bearer ragflow-djN2QwZjc0YTNlNzExZjBiYjBlNDIwMT", reqBuilder.build(), "56a8f80aa85911f08a8a42010a8e0005");
CompletionRes completionRes = call.execute().body();
log.info("completionRes: {}", completionRes);
return "test";
}
}
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;
}
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;
}
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<Chunk> chunks;
private List<DocAgg> 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<Object> positions;
private String url;
}
// 内部类 - 文档聚合
@Data
public static class DocAgg {
private Integer count;
private String docId;
private String docName;
}
}
\ No newline at end of file
package cn.bugstack.xfg.frame.service;
import cn.bugstack.xfg.frame.domain.req.KeySensorCompletionReq;
import cn.bugstack.xfg.frame.domain.res.CompletionRes;
import retrofit2.Call;
import retrofit2.http.*;
public interface IKnowledgeCenterService {
/**
* 对接 completion 接口
*
* @param authorization 认证头信息
* @param req 请求参数对象
* @return 响应结果
*/
@POST("api/v1/chats/{chat_id}/completions")
Call<CompletionRes> getCompletions(
@Header("Authorization") String authorization,
@Body KeySensorCompletionReq req,
@Path("chat_id") String chat_id
);
}
server:
port: 8089
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://127.0.0.1:3306/road-map?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC&useSSL=true
driver-class-name: com.mysql.jdbc.Driver
mybatis:
mapper-locations: classpath:/mybatis/mapper/*.xml
config-location: classpath:/mybatis/config/mybatis-config.xml
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
</typeAliases>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.bugstack.xfg.frame.dao.IUserDao">
<resultMap id="userMap" type="cn.bugstack.xfg.frame.domain.po.User">
<result column="id" property="id"/>
<result column="user_id" property="userId"/>
<result column="user_nickname" property="userNickname"/>
<result column="user_head" property="userHead"/>
<result column="user_password" property="userPassword"/>
<result column="create_time" property="createTime"/>
<result column="update_time" property="updateTime"/>
</resultMap>
<select id="queryUserList" parameterType="cn.bugstack.xfg.frame.domain.po.User" resultMap="userMap">
SELECT id, user_id, user_nickname, user_head, user_password, create_time, update_time
FROM user
ORDER BY ID DESC
LIMIT 10
</select>
</mapper>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册