From 4b6cb726d2ad0a8b26f99a8b4641151c68638c5d Mon Sep 17 00:00:00 2001 From: wangys <3401275564@qq.com> Date: Mon, 29 Dec 2025 18:40:26 +0800 Subject: [PATCH] =?UTF-8?q?ai=E5=AF=B9=E8=AF=9D=E4=BC=98=E5=8C=96=E7=9F=A5?= =?UTF-8?q?=E8=AF=86=E5=BA=93=E9=80=89=E6=8B=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/xyzh/ai/client/DifyApiClient.java | 56 ++++++++++++- .../dto/ConversationVariablesResponse.java | 69 ++++++++++++++++ .../xyzh/ai/controller/ChatController.java | 53 +++++++++++- .../ai/service/impl/AgentChatServiceImpl.java | 82 ++++++++++++------- .../org/xyzh/api/ai/dto/ChatPrepareData.java | 4 +- .../xyzh/api/ai/service/AgentChatService.java | 2 +- .../constance/SysConfigRedisPrefix.java | 8 ++ .../packages/shared/src/types/ai/aiChat.ts | 19 +---- .../packages/workcase/src/types/shared.d.ts | 1 - .../src/views/public/AIChat/AIChatView.vue | 7 +- .../packages/workcase_wechat/api/ai/aiChat.ts | 4 +- .../api/workcase/workcaseChat.ts | 2 +- .../workcase_wechat/pages/index/index.uvue | 5 +- .../workcase_wechat/types/ai/aiChat.ts | 18 +--- 14 files changed, 249 insertions(+), 81 deletions(-) create mode 100644 urbanLifelineServ/ai/src/main/java/org/xyzh/ai/client/dto/ConversationVariablesResponse.java create mode 100644 urbanLifelineServ/apis/api-system/src/main/java/org/xyzh/api/system/constance/SysConfigRedisPrefix.java diff --git a/urbanLifelineServ/ai/src/main/java/org/xyzh/ai/client/DifyApiClient.java b/urbanLifelineServ/ai/src/main/java/org/xyzh/ai/client/DifyApiClient.java index c0cb735f..bd5c419c 100644 --- a/urbanLifelineServ/ai/src/main/java/org/xyzh/ai/client/DifyApiClient.java +++ b/urbanLifelineServ/ai/src/main/java/org/xyzh/ai/client/DifyApiClient.java @@ -698,10 +698,10 @@ public class DifyApiClient { String lastId, Integer limit, String apiKey) { - + StringBuilder urlBuilder = new StringBuilder(difyConfig.getFullApiUrl("/conversations")); urlBuilder.append("?user=").append(userId); - + if (lastId != null && !lastId.isEmpty()) { urlBuilder.append("&last_id=").append(lastId); } @@ -718,7 +718,7 @@ public class DifyApiClient { try (Response response = httpClient.newCall(httpRequest).execute()) { String responseBody = response.body() != null ? response.body().string() : ""; - + if (!response.isSuccessful()) { logger.error("获取对话列表失败: {} - {}", response.code(), responseBody); throw new DifyException("获取对话列表失败: " + responseBody); @@ -732,6 +732,56 @@ public class DifyApiClient { } } + /** + * 获取对话变量 + * @param conversationId 会话ID + * @param userId 用户标识 + * @param lastId 当前页最后面一条记录的ID,默认null + * @param limit 一次请求返回多少条记录,默认20条,最大100条,最小1条 + * @param apiKey API密钥 + * @return 对话变量响应 + */ + public ConversationVariablesResponse getConversationVariables( + String conversationId, + String userId, + String lastId, + Integer limit, + String apiKey) { + + StringBuilder urlBuilder = new StringBuilder( + difyConfig.getFullApiUrl("/conversations/" + conversationId + "/variables")); + urlBuilder.append("?user=").append(userId); + + if (lastId != null && !lastId.isEmpty()) { + urlBuilder.append("&last_id=").append(lastId); + } + if (limit != null) { + urlBuilder.append("&limit=").append(limit); + } + + try { + Request httpRequest = new Request.Builder() + .url(urlBuilder.toString()) + .header("Authorization", "Bearer " + getApiKey(apiKey)) + .get() + .build(); + + try (Response response = httpClient.newCall(httpRequest).execute()) { + String responseBody = response.body() != null ? response.body().string() : ""; + + if (!response.isSuccessful()) { + logger.error("获取对话变量失败: {} - {}", response.code(), responseBody); + throw new DifyException("获取对话变量失败: " + responseBody); + } + + return JSON.parseObject(responseBody, ConversationVariablesResponse.class); + } + } catch (IOException e) { + logger.error("获取对话变量异常", e); + throw new DifyException("获取对话变量异常: " + e.getMessage(), e); + } + } + // ===================== 通用 HTTP 方法(用于代理转发)===================== /** diff --git a/urbanLifelineServ/ai/src/main/java/org/xyzh/ai/client/dto/ConversationVariablesResponse.java b/urbanLifelineServ/ai/src/main/java/org/xyzh/ai/client/dto/ConversationVariablesResponse.java new file mode 100644 index 00000000..292a8018 --- /dev/null +++ b/urbanLifelineServ/ai/src/main/java/org/xyzh/ai/client/dto/ConversationVariablesResponse.java @@ -0,0 +1,69 @@ +package org.xyzh.ai.client.dto; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.Data; + +import java.util.List; + +/** + * @description 对话变量响应 + * @filename ConversationVariablesResponse.java + * @author AI Assistant + * @copyright xyzh + * @since 2025-12-29 + */ +@Data +public class ConversationVariablesResponse { + + private Integer limit; + + @JSONField(name = "has_more") + private Boolean hasMore; + + private List data; + + /** + * 对话中的变量项 + */ + @Data + public static class ConversationVariableItem { + + /** + * 变量ID + */ + private String id; + + /** + * 变量名称 + */ + private String name; + + /** + * 变量类型 (string, number, boolean 等) + */ + @JSONField(name = "value_type") + private String valueType; + + /** + * 变量值 + */ + private String value; + + /** + * 变量描述 + */ + private String description; + + /** + * 创建时间戳 + */ + @JSONField(name = "created_at") + private Long createdAt; + + /** + * 最后更新时间戳 + */ + @JSONField(name = "updated_at") + private Long updatedAt; + } +} diff --git a/urbanLifelineServ/ai/src/main/java/org/xyzh/ai/controller/ChatController.java b/urbanLifelineServ/ai/src/main/java/org/xyzh/ai/controller/ChatController.java index 8d66188a..a7d0c012 100644 --- a/urbanLifelineServ/ai/src/main/java/org/xyzh/ai/controller/ChatController.java +++ b/urbanLifelineServ/ai/src/main/java/org/xyzh/ai/controller/ChatController.java @@ -8,6 +8,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; +import org.xyzh.ai.client.dto.ConversationVariablesResponse; import org.xyzh.api.ai.dto.ChatPrepareData; import org.xyzh.api.ai.dto.TbChat; import org.xyzh.api.ai.dto.TbChatMessage; @@ -46,6 +47,9 @@ public class ChatController { @Autowired private AIFileUploadService fileUploadService; + @Autowired + private org.xyzh.ai.client.DifyApiClient difyApiClient; + // ====================== 会话管理 ====================== /** @@ -151,7 +155,7 @@ public class ChatController { * @since 2025-12-17 */ @PostMapping("/conversation/page") - public ResultDomain> getChatPage(@RequestBody PageRequest pageRequest, @RequestHeader("Authorization") String token) { + public ResultDomain getChatPage(@RequestBody PageRequest pageRequest, @RequestHeader("Authorization") String token) { log.info("分页获取会话列表: agentId={}", pageRequest.getFilter().getAgentId()); pageRequest.getFilter().setUserType(false); @@ -164,6 +168,53 @@ public class ChatController { return chatService.getChatPage(pageRequest); } + /** + * @description 获取对话变量 + * @param params 请求参数(包含agentId, conversationId, userId, lastId, limit) + * @author yslg + * @since 2025-12-29 + */ + @PostMapping("/conversation/variables") + public ResultDomain getConversationVariables( + @RequestBody Map params, + @RequestHeader("Authorization") String token) { + + // 参数验证 + ValidationResult result = ValidationUtils.validateMap(params, Arrays.asList( + ValidationUtils.requiredString("agentId", "智能体ID", 1, 100), + ValidationUtils.requiredString("conversationId", "会话ID", 1, 100), + ValidationUtils.requiredString("userId", "用户ID", 1, 100) + )); + if (!result.isValid()) { + return ResultDomain.failure(result.getAllErrors()); + } + + String agentId = (String) params.get("agentId"); + String conversationId = (String) params.get("conversationId"); + String userId = (String) params.get("userId"); + String lastId = params.containsKey("lastId") ? (String) params.get("lastId") : null; + Integer limit = params.containsKey("limit") ? + Integer.parseInt(params.get("limit").toString()) : 20; + + log.info("获取对话变量: agentId={}, conversationId={}, userId={}", agentId, conversationId, userId); + + try { + // 获取智能体信息以获取 API Key + // 这里需要根据 agentId 获取对应的 API Key + // 暂时先使用一个占位符,实际使用时需要从数据库或配置中获取 + // 或者通过 chatService 获取智能体配置 + + // 调用 Dify API 获取会话变量 + ConversationVariablesResponse response = + difyApiClient.getConversationVariables(conversationId, userId, lastId, limit, agentId); + + return ResultDomain.success("获取对话变量成功",response); + } catch (Exception e) { + log.error("获取对话变量失败", e); + return ResultDomain.failure("获取对话变量失败: " + e.getMessage()); + } + } + // ====================== 消息管理 ====================== /** diff --git a/urbanLifelineServ/ai/src/main/java/org/xyzh/ai/service/impl/AgentChatServiceImpl.java b/urbanLifelineServ/ai/src/main/java/org/xyzh/ai/service/impl/AgentChatServiceImpl.java index 725942bf..925fb3c9 100644 --- a/urbanLifelineServ/ai/src/main/java/org/xyzh/ai/service/impl/AgentChatServiceImpl.java +++ b/urbanLifelineServ/ai/src/main/java/org/xyzh/ai/service/impl/AgentChatServiceImpl.java @@ -1,5 +1,6 @@ package org.xyzh.ai.service.impl; +import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import org.apache.dubbo.config.annotation.DubboService; @@ -12,6 +13,7 @@ import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import org.xyzh.ai.client.DifyApiClient; import org.xyzh.ai.client.callback.StreamCallback; import org.xyzh.ai.client.dto.ChatRequest; +import org.xyzh.ai.config.DifyConfig; import org.xyzh.ai.mapper.TbChatMapper; import org.xyzh.ai.mapper.TbChatMessageMapper; import org.xyzh.api.ai.dto.ChatPrepareData; @@ -19,17 +21,23 @@ import org.xyzh.api.ai.dto.DifyFileInfo; import org.xyzh.api.ai.dto.TbAgent; import org.xyzh.api.ai.dto.TbChat; import org.xyzh.api.ai.dto.TbChatMessage; +import org.xyzh.api.ai.dto.TbKnowledge; import org.xyzh.api.ai.service.AgentChatService; import org.xyzh.api.ai.service.AgentService; +import org.xyzh.api.ai.service.KnowledgeService; +import org.xyzh.api.system.service.GuestService; +import org.xyzh.common.core.domain.LoginDomain; import org.xyzh.common.core.domain.ResultDomain; import org.xyzh.common.core.page.PageDomain; import org.xyzh.common.core.page.PageParam; import org.xyzh.common.core.page.PageRequest; import org.xyzh.common.redis.service.RedisService; +import org.xyzh.common.utils.NonUtils; import org.xyzh.common.utils.id.IdUtil; import org.xyzh.common.auth.utils.LoginUtil; import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -69,20 +77,11 @@ public class AgentChatServiceImpl implements AgentChatService { @Autowired private RedisService redisService; - /** - * @description 根据 userType 获取用户ID - * @param chat 会话信息(包含 userId 和 userType) - * @return 真实的系统用户ID - */ - private String getUserIdByType(TbChat chat) { - if (!chat.getUserType()) { - // 来客(userType=false):直接返回传入的 userId(已经是真正的系统 userId) - return chat.getUserId(); - } else { - // 员工(userType=true):从登录信息获取 userId - return LoginUtil.getCurrentUserId(); - } - } + @Autowired + private KnowledgeService knowledgeService; + + @Autowired + private DifyConfig difyConfig; /** * @description 判断智能体是否是outer @@ -130,7 +129,8 @@ public class AgentChatServiceImpl implements AgentChatService { } // 2. 获取用户ID并校验权限 - String userId = getUserIdByType(chat); + LoginDomain loginDomain = LoginUtil.getCurrentLogin(); + String userId = loginDomain.getUser().getUserId(); if (userId == null) { return ResultDomain.failure("用户信息获取失败"); } @@ -164,7 +164,8 @@ public class AgentChatServiceImpl implements AgentChatService { return ResultDomain.failure("智能体不可用"); } // 2. 获取用户ID并校验权限 - String userId = getUserIdByType(filter); + LoginDomain loginDomain = LoginUtil.getCurrentLogin(); + String userId = loginDomain.getUser().getUserId(); if (userId == null) { return ResultDomain.failure("用户信息获取失败"); } @@ -189,12 +190,9 @@ public class AgentChatServiceImpl implements AgentChatService { @Override public ResultDomain getChatList(TbChat filter) { - // 判断agent是否是outer - if(!isOuterAgent(filter.getAgentId())){ - return ResultDomain.failure("智能体不可用"); - } + // 获取用户ID - String userId = getUserIdByType(filter); + String userId = LoginUtil.getCurrentUserId(); if (userId == null) { return ResultDomain.failure("用户信息获取失败"); } @@ -204,16 +202,16 @@ public class AgentChatServiceImpl implements AgentChatService { } @Override - public ResultDomain> getChatPage(PageRequest pageRequest) { + public ResultDomain getChatPage(PageRequest pageRequest) { TbChat filter = pageRequest.getFilter(); // 判断agent是否是outer(来客才需要校验) if (!filter.getUserType() && !isOuterAgent(filter.getAgentId())) { - return ResultDomain.>failure("智能体不可用"); + return ResultDomain.failure("智能体不可用"); } // 获取用户ID - String userId = getUserIdByType(filter); + String userId = LoginUtil.getCurrentUserId(); if (userId == null) { - return ResultDomain.>failure("用户信息获取失败"); + return ResultDomain.failure("用户信息获取失败"); } filter.setUserId(userId); @@ -224,7 +222,7 @@ public class AgentChatServiceImpl implements AgentChatService { pageParam.setTotal((int) total); PageDomain pageDomain = new PageDomain<>(pageParam, chatList); - return ResultDomain.>success("查询成功", pageDomain); + return ResultDomain.success("查询成功", pageDomain); } // ====================== 智能体聊天管理 ====================== @@ -241,7 +239,7 @@ public class AgentChatServiceImpl implements AgentChatService { return ResultDomain.failure("智能体不可用"); } // 2. 获取用户ID并校验权限 - String userId = getUserIdByType(filter); + String userId = LoginUtil.getCurrentUserId(); if (userId == null) { return ResultDomain.failure("用户信息获取失败"); } @@ -272,7 +270,8 @@ public class AgentChatServiceImpl implements AgentChatService { chatFilter.setUserId(prepareData.getUserId()); chatFilter.setUserType(prepareData.getUserType()); - String userId = getUserIdByType(chatFilter); + LoginDomain loginDomain = LoginUtil.getCurrentLogin(); + String userId = loginDomain.getUser().getUserId(); if (userId == null) { return ResultDomain.failure("用户信息获取失败"); } @@ -299,6 +298,8 @@ public class AgentChatServiceImpl implements AgentChatService { sessionData.put("userId", userId); sessionData.put("filesData", prepareData.getFiles()); sessionData.put("apiKey", agent.getApiKey()); + sessionData.put("outer", agent.getIsOuter()); + sessionData.put("service", prepareData.getService()); String cacheKey = CHAT_SESSION_PREFIX + sessionId; redisService.set(cacheKey, sessionData, SESSION_TTL, TimeUnit.SECONDS); @@ -332,6 +333,9 @@ public class AgentChatServiceImpl implements AgentChatService { String query = (String) sessionData.get("query"); String userId = (String) sessionData.get("userId"); String apiKey = (String) sessionData.get("apiKey"); + String service = (String) sessionData.get("service"); + Boolean outer = (Boolean) sessionData.get("outer"); + @SuppressWarnings("unchecked") List filesData = (List) sessionData.get("filesData"); @@ -365,7 +369,23 @@ public class AgentChatServiceImpl implements AgentChatService { chatRequest.setQuery(query); chatRequest.setUser(userId); chatRequest.setResponseMode("streaming"); - chatRequest.setInputs(new HashMap<>()); // Dify API 要求 inputs 必传 + Map inputsMap = new HashMap<>(); + chatRequest.setInputs(inputsMap); // Dify API 要求 inputs 必传 + // 处理动态知识库的问题 + if(outer && NonUtils.isNotEmpty(service)){ + TbKnowledge filter = new TbKnowledge(); + filter.setService(service); + filter.setCategory("external"); + ResultDomain knowledgeRD = knowledgeService.listKnowledges(filter); + List datasets = new ArrayList<>(); + if(knowledgeRD.getSuccess()){ + datasets = knowledgeRD.getDataList().stream().map(TbKnowledge::getDifyDatasetId).toList(); + } + inputsMap.put("datasets", JSON.toJSONString(datasets)); + inputsMap.put("dataset_apikey", difyConfig.getKnowledgeApiKey()); + + } + if (filesData != null && !filesData.isEmpty()) { chatRequest.setFiles(filesData); @@ -454,7 +474,7 @@ public class AgentChatServiceImpl implements AgentChatService { TbAgent agent = agentResult.getData(); // 2. 获取用户ID - String userId = getUserIdByType(filter); + String userId = LoginUtil.getCurrentUserId(); if (userId == null) { return ResultDomain.failure("用户信息获取失败"); } @@ -480,7 +500,7 @@ public class AgentChatServiceImpl implements AgentChatService { } // 2. 获取用户ID - String userId = getUserIdByType(filter); + String userId = LoginUtil.getCurrentUserId(); if (userId == null) { return ResultDomain.failure("用户信息获取失败"); } diff --git a/urbanLifelineServ/apis/api-ai/src/main/java/org/xyzh/api/ai/dto/ChatPrepareData.java b/urbanLifelineServ/apis/api-ai/src/main/java/org/xyzh/api/ai/dto/ChatPrepareData.java index b085c729..3fa26272 100644 --- a/urbanLifelineServ/apis/api-ai/src/main/java/org/xyzh/api/ai/dto/ChatPrepareData.java +++ b/urbanLifelineServ/apis/api-ai/src/main/java/org/xyzh/api/ai/dto/ChatPrepareData.java @@ -28,5 +28,7 @@ public class ChatPrepareData implements Serializable { @Schema(description = "用户类型(false=来客,true=员工)") private Boolean userType; - + + @Schema(description = "服务名称") + private String service; } diff --git a/urbanLifelineServ/apis/api-ai/src/main/java/org/xyzh/api/ai/service/AgentChatService.java b/urbanLifelineServ/apis/api-ai/src/main/java/org/xyzh/api/ai/service/AgentChatService.java index dc0fe924..e4b7f7b6 100644 --- a/urbanLifelineServ/apis/api-ai/src/main/java/org/xyzh/api/ai/service/AgentChatService.java +++ b/urbanLifelineServ/apis/api-ai/src/main/java/org/xyzh/api/ai/service/AgentChatService.java @@ -48,7 +48,7 @@ public interface AgentChatService { * @param pageRequest 分页请求参数 * @return 分页会话列表 */ - ResultDomain> getChatPage(PageRequest pageRequest); + ResultDomain getChatPage(PageRequest pageRequest); // ====================== 智能体聊天管理 ====================== diff --git a/urbanLifelineServ/apis/api-system/src/main/java/org/xyzh/api/system/constance/SysConfigRedisPrefix.java b/urbanLifelineServ/apis/api-system/src/main/java/org/xyzh/api/system/constance/SysConfigRedisPrefix.java new file mode 100644 index 00000000..39c014b1 --- /dev/null +++ b/urbanLifelineServ/apis/api-system/src/main/java/org/xyzh/api/system/constance/SysConfigRedisPrefix.java @@ -0,0 +1,8 @@ +package org.xyzh.api.system.constance; + +/** + * 通过redis事件,实现数据库更新配置,更新其他服务的bean数据 + */ +public class SysConfigRedisPrefix { + public static final String SYS_CONFIG_DIFY="sys:config:dify"; +} diff --git a/urbanLifelineWeb/packages/shared/src/types/ai/aiChat.ts b/urbanLifelineWeb/packages/shared/src/types/ai/aiChat.ts index 8e59d3e2..4dc34182 100644 --- a/urbanLifelineWeb/packages/shared/src/types/ai/aiChat.ts +++ b/urbanLifelineWeb/packages/shared/src/types/ai/aiChat.ts @@ -88,6 +88,7 @@ export interface ChatPrepareData { userId?: string /** 用户类型(false=来客,true=员工) */ userType?: boolean + service?: string } // ==================== 请求参数类型(必传校验) ==================== @@ -106,24 +107,6 @@ export interface CreateChatParam { title?: string } -/** - * 准备流式对话参数 - */ -export interface PrepareChatParam { - /** 对话ID(必传) */ - chatId: string - /** 用户问题(必传) */ - query: string - /** 智能体ID(必传) */ - agentId: string - /** 用户类型(必传) */ - userType: boolean - /** 用户ID */ - userId?: string - /** 文件列表 */ - files?: DifyFileInfo[] -} - /** * 停止对话参数 */ diff --git a/urbanLifelineWeb/packages/workcase/src/types/shared.d.ts b/urbanLifelineWeb/packages/workcase/src/types/shared.d.ts index 2d4c54cf..acd17692 100644 --- a/urbanLifelineWeb/packages/workcase/src/types/shared.d.ts +++ b/urbanLifelineWeb/packages/workcase/src/types/shared.d.ts @@ -131,7 +131,6 @@ declare module 'shared/types' { DifyFileInfo, ChatPrepareData, CreateChatParam, - PrepareChatParam, StopChatParam, CommentMessageParam, ChatListParam, diff --git a/urbanLifelineWeb/packages/workcase/src/views/public/AIChat/AIChatView.vue b/urbanLifelineWeb/packages/workcase/src/views/public/AIChat/AIChatView.vue index 5250cb54..fb77749e 100644 --- a/urbanLifelineWeb/packages/workcase/src/views/public/AIChat/AIChatView.vue +++ b/urbanLifelineWeb/packages/workcase/src/views/public/AIChat/AIChatView.vue @@ -275,7 +275,7 @@ import type { TbChat, TbChatMessage, TbAgent, - PrepareChatParam, + ChatPrepareData, SSEMessageData, DifyFileInfo, TbSysFileDTO @@ -479,13 +479,14 @@ const sendMessage = async () => { } // 准备流式对话参数 - const prepareParam: PrepareChatParam = { + const prepareParam: ChatPrepareData = { chatId: currentChatId.value!, query: query, agentId: agentId, userType: userType.value, userId: userId.value, - files: uploadedFiles.value.length > 0 ? uploadedFiles.value : undefined + files: uploadedFiles.value.length > 0 ? uploadedFiles.value : undefined, + service: "workcase" } // 清空已上传的文件 diff --git a/urbanLifelineWeb/packages/workcase_wechat/api/ai/aiChat.ts b/urbanLifelineWeb/packages/workcase_wechat/api/ai/aiChat.ts index c3d1a24f..aaa0dc05 100644 --- a/urbanLifelineWeb/packages/workcase_wechat/api/ai/aiChat.ts +++ b/urbanLifelineWeb/packages/workcase_wechat/api/ai/aiChat.ts @@ -4,7 +4,7 @@ import type { TbChat, TbChatMessage, CreateChatParam, - PrepareChatParam, + ChatPrepareData, StopChatParam, CommentMessageParam, ChatListParam, @@ -72,7 +72,7 @@ export const aiChatAPI = { * 准备流式对话会话 * @param param agentId、chatId、query、userId 必传 */ - prepareChatMessageSession(param: PrepareChatParam): Promise> { + prepareChatMessageSession(param: ChatPrepareData): Promise> { return request({ url: `${this.baseUrl}/stream/prepare`, method: 'POST', data: param }) }, diff --git a/urbanLifelineWeb/packages/workcase_wechat/api/workcase/workcaseChat.ts b/urbanLifelineWeb/packages/workcase_wechat/api/workcase/workcaseChat.ts index d0060451..ae02c07a 100644 --- a/urbanLifelineWeb/packages/workcase_wechat/api/workcase/workcaseChat.ts +++ b/urbanLifelineWeb/packages/workcase_wechat/api/workcase/workcaseChat.ts @@ -16,7 +16,7 @@ import type { TbChat, TbChatMessage, CreateChatParam, - PrepareChatParam, + ChatPrepareData, StopChatParam, CommentMessageParam, ChatListParam, diff --git a/urbanLifelineWeb/packages/workcase_wechat/pages/index/index.uvue b/urbanLifelineWeb/packages/workcase_wechat/pages/index/index.uvue index 5b847cc0..025371c5 100644 --- a/urbanLifelineWeb/packages/workcase_wechat/pages/index/index.uvue +++ b/urbanLifelineWeb/packages/workcase_wechat/pages/index/index.uvue @@ -354,13 +354,14 @@ } // 准备流式对话(包含文件) - const prepareData = { + const prepareData: ChatPrepareData = { chatId: chatId.value, query: query, agentId: agentId, userType: userType.value, userId: userInfo.value.userId, - files: files.length > 0 ? files : undefined + files: files.length > 0 ? files : undefined, + service: "workcase" } console.log('准备流式对话参数:', JSON.stringify(prepareData)) diff --git a/urbanLifelineWeb/packages/workcase_wechat/types/ai/aiChat.ts b/urbanLifelineWeb/packages/workcase_wechat/types/ai/aiChat.ts index 068fe8c7..c82ded49 100644 --- a/urbanLifelineWeb/packages/workcase_wechat/types/ai/aiChat.ts +++ b/urbanLifelineWeb/packages/workcase_wechat/types/ai/aiChat.ts @@ -87,6 +87,7 @@ export interface ChatPrepareData { userId?: string /** 用户类型(false=来客,true=员工) */ userType?: boolean + service?: string } /** @@ -125,23 +126,6 @@ export interface CreateChatParam { title?: string } -/** - * 准备流式对话参数 - */ -export interface PrepareChatParam { - /** 对话ID(必传) */ - chatId: string - /** 用户问题(必传) */ - query: string - /** 智能体ID */ - agentId: string - userType: boolean - /** 用户ID */ - userId?: string - /** 用户类型 */ - /** 文件列表 */ - files?: DifyFileInfo[] -} /** * 停止对话参数