mirror of
https://gitcode.com/ageerle/ruoyi-ai.git
synced 2026-04-14 12:23:39 +00:00
feat: 处理在非Web线程中获取Request中token失败的问题;
This commit is contained in:
@@ -77,4 +77,9 @@ public class ChatRequest {
|
|||||||
*/
|
*/
|
||||||
private Boolean autoSelectModel;
|
private Boolean autoSelectModel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 会话令牌(为避免在非Web线程中获取Request,入口处注入)
|
||||||
|
*/
|
||||||
|
private String token;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -128,8 +128,8 @@ public class ImageServiceImpl implements IChatService {
|
|||||||
OpenAiStreamClient openAiStreamClient = ChatConfig.createOpenAiStreamClient(chatModelVo.getApiHost(), chatModelVo.getApiKey());
|
OpenAiStreamClient openAiStreamClient = ChatConfig.createOpenAiStreamClient(chatModelVo.getApiHost(), chatModelVo.getApiKey());
|
||||||
List<Message> messages = chatRequest.getMessages();
|
List<Message> messages = chatRequest.getMessages();
|
||||||
|
|
||||||
// 获取会话token
|
// 获取会话token(从入口透传,避免非Web线程取值报错)
|
||||||
String token = StpUtil.getTokenValue();
|
String token = chatRequest.getToken();
|
||||||
// 创建 SSE 事件源监听器
|
// 创建 SSE 事件源监听器
|
||||||
SSEEventSourceListener listener = new SSEEventSourceListener(emitter, chatRequest.getUserId(), chatRequest.getSessionId(), token);
|
SSEEventSourceListener listener = new SSEEventSourceListener(emitter, chatRequest.getUserId(), chatRequest.getSessionId(), token);
|
||||||
|
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ public class OpenAIServiceImpl implements IChatService {
|
|||||||
Message userMessage = Message.builder().content("工具返回信息:"+toolString).role(Message.Role.USER).build();
|
Message userMessage = Message.builder().content("工具返回信息:"+toolString).role(Message.Role.USER).build();
|
||||||
messages.add(userMessage);
|
messages.add(userMessage);
|
||||||
}
|
}
|
||||||
String token = StpUtil.getTokenValue();
|
String token = chatRequest.getToken();
|
||||||
SSEEventSourceListener listener = new SSEEventSourceListener(emitter,chatRequest.getUserId(),chatRequest.getSessionId(), token);
|
SSEEventSourceListener listener = new SSEEventSourceListener(emitter,chatRequest.getUserId(),chatRequest.getSessionId(), token);
|
||||||
ChatCompletion completion = ChatCompletion
|
ChatCompletion completion = ChatCompletion
|
||||||
.builder()
|
.builder()
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ import java.nio.file.Files;
|
|||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import cn.dev33.satoken.stp.StpUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author ageer
|
* @author ageer
|
||||||
@@ -77,6 +78,12 @@ public class SseServiceImpl implements ISseService {
|
|||||||
public SseEmitter sseChat(ChatRequest chatRequest, HttpServletRequest request) {
|
public SseEmitter sseChat(ChatRequest chatRequest, HttpServletRequest request) {
|
||||||
SseEmitter sseEmitter = new SseEmitter(0L);
|
SseEmitter sseEmitter = new SseEmitter(0L);
|
||||||
try {
|
try {
|
||||||
|
// 记录当前会话令牌,供异步线程使用
|
||||||
|
try {
|
||||||
|
chatRequest.setToken(StpUtil.getTokenValue());
|
||||||
|
} catch (Exception ignore) {
|
||||||
|
// 保底:无token场景下忽略
|
||||||
|
}
|
||||||
// 构建消息列表
|
// 构建消息列表
|
||||||
buildChatMessageList(chatRequest);
|
buildChatMessageList(chatRequest);
|
||||||
// 设置对话角色
|
// 设置对话角色
|
||||||
|
|||||||
Reference in New Issue
Block a user