diff --git a/.gitignore b/.gitignore index ccdf948e..d75b3761 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,8 @@ target/ ruoyi-modules/ruoyi-generator/src/main/resources/vm/vben5 +README.md + ###################################################################### # IDE diff --git a/README.md b/README.md index 7d20c406..4aff8d35 100644 --- a/README.md +++ b/README.md @@ -59,24 +59,16 @@ ### 系统体验 - 用户端:https://web.pandarobot.chat - 管理端:https://admin.pandarobot.chat - - 用户名: admin 密码:admin123 +- 用户名: admin 密码:admin123 ### 源码地址 - -[1]gitee -- 前端服务-用户端: https://gitee.com/ageerle/ruoyi-web -- 前端服务-管理端: https://gitee.com/ageerle/ruoyi-admin -- 前端服务-小程序端: https://gitee.com/ageerle/ruoyi-uniapp -- 后端服务:https://gitee.com/ageerle/ruoyi-ai - -[2]github +[1]github - 前端服务-用户端: https://github.com/ageerle/ruoyi-web - 前端服务-管理端: https://github.com/ageerle/ruoyi-admin - 前端服务-小程序端: https://github.com/ageerle/ruoyi-uniapp - 后端服务:https://github.com/ageerle/ruoyi-ai -[3]gitcode +[2]gitcode - 前端服务-用户端:https://gitcode.com/ageerle/ruoyi-web - 前端服务-管理端: https://gitcode.com/ageerle/ruoyi-admin - 前端服务-小程序端: https://gitcode.com/ageerle/ruoyi-uniapp @@ -86,27 +78,25 @@ - 配套文档: https://doc.pandarobot.chat - 项目部署文档:https://doc.pandarobot.chat/guide/introduction/ -### 核心功能 -1. 全套开源系统:提供完整的前端应用、后台管理以及小程序应用,基于MIT协议,开箱即用。 -2. 本地RAG方案:集成Milvus/Weaviate向量库、本地向量化模型与Ollama,实现本地化RAG。 -3. 丰富插件功能:支持联网、SQL查询插件及Text2API插件,扩展系统能力与应用场景。 -4. 内置SSE、websocket等网络协议,支持对接多种大语言模型,同时还集成了MidJourney和DALLE AI绘画功能。 -5. 强大的多媒体功能:支持AI翻译、PPT制作、语音克隆和翻唱等。 -6. 扩展功能:支持将大模型接入个人或企业微信。 -7. 支付功能:支持易支付、微信支付等多种支付方式。 +### 核心功能与技术亮点 +#### 1. 全栈式开源系统 +- 全套开源系统:提供完整的前端应用、后台管理以及小程序应用,基于MIT协议,开箱即用。 +#### 2. 本地化 RAG 方案 +- 基于 **Langchain4j** 框架,支持 Milvus/Weaviate/Qdrant 向量库,结合 BGE-large-zh-v1.5 本地向量化模型 实现高效文档检索与知识库构建。 +- 支持 本地 LLM 接入,结合私有知识库实现安全可控的问答系统,避免依赖云端服务的隐私风险。 +#### 3. 多模态 AI 引擎与工具集成 +- 智能对话:支持 OpenAI GPT-4、Azure、ChatGLM 等主流模型,内置 SSE/WebSocket 协议实现低延迟交互,兼容 **扣子**、**DIFY** 等平台 API 调用。 +- **Spring AI MCP** 支持:通过注解快速定义本地工具,支持调用 MCP 广场 的海量 MCP Server 服务,扩展模型能力边界。 +#### 4. 企业级扩展与商业化支持 +- 即时通讯集成:支持对接个人微信、企业微信及微信公众号,实现消息自动回复、用户管理与智能客服。 +- 支付系统:集成易支付、微信支付、Stripe 国际信用卡支付,满足商业化场景需求。 +#### 5. 多媒体处理与创新功能 + - AI 绘画:集成 DALL·E-3、MidJourney、Stable Diffusion,支持文生图、图生图及风格化创作,适用于营销素材生成与创意设计。 + - PPT 制作:根据文本输入自动生成结构化幻灯片,支持自定义模板(需要使用三方平台 如:文多多)。 ### 项目演示 #### mcp支持 - -### 如何使用 -1. ruoyi-admin\src\main\resources\application.yml中mcp.client.enabled改为true -2. application.yml中配置openai api-key(用于推理使用那个工具,并构建工具所需参数) -3. 启动[ruoyi-mcp-server] -4. [mcp-server.json]中配置fileSystem.command(npx本地安装路径) -5. 指定fileSystem操作目录(本地必须存在指定的目录) -6. 配置search1api.env.SEARCH1API_KEY 申请地址:https://www.search1api.com/ -7. 详情教程:https://blog.csdn.net/weixin_42416319/article/details/147385808
drawing drawing @@ -122,7 +112,6 @@ drawing
- #### 用户端
drawing @@ -204,7 +193,6 @@ ### 注意事项 - vben模板 - Q:vben5 的模板默认是没有的吗? A:vben模板是收费的 请联系vben-vue-plus作者获取。 @@ -214,7 +202,6 @@ 该项目使用Git进行版本管理。您可以在repository参看当前可用版本。 - ### 版权说明 该项目使用了MIT授权许可,详情请参阅 [LICENSE.txt](https://github.com/ageerle/ruoyi-ai/blob/main/LICENSE) @@ -251,7 +238,7 @@ #### 项目文档 1. 项目文档基于vitepress构建 -2. 按照[如何参与开源项目](#如何参与开源项目)拉取 https://github.com/ageerle/ruoyi-doc +2. 按照[如何参与开源项目](#如何参与开源项目)拉取https://github.com/ageerle/ruoyi-doc 3. 安装依赖:npm install 4. 启动项目:npm run docs:dev 5. 主页路径:docs/guide/introduction/index.md @@ -277,12 +264,16 @@ [license-url]: https://github.com/ageerle/ruoyi-ai/blob/master/LICENSE.txt [linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=flat-square&logo=linkedin&colorB=555 +## 🌿 第三方生态 +- [PPIO 派欧云:一键调用高性价比的开源模型 API 和 GPU 容器](https://ppinfra.com/user/register?invited_by=P8QTUY&utm_source=github_ruoyi-ai) ### 附:技术讨论群 -#### 全面开放,欢迎加入 +#### 进群学习 🏠 wx:ruoyi-ai(加人备注:ruoyi-ai) + drawing + 🏠 qq:1603234088 (加人备注:ruoyi-ai) 👏👏👏 ruoyi-ai官方交流1群(qq区):1034554687 @@ -291,10 +282,3 @@ drawing
-👏👏👏 ruoyi-ai官方交流4群(微信区): -
- drawing -
- - - diff --git a/image/小助手wx.png b/image/小助手wx.png new file mode 100644 index 00000000..740710c7 Binary files /dev/null and b/image/小助手wx.png differ diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index af82aab5..90a1b50c 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -226,7 +226,7 @@ springdoc: # 标题 title: '标题:RuoYi-Vue-Plus多租户管理系统_接口文档' # 描述 - description: '描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...' + description: ' 用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...' # 版本 version: '版本号: ${ruoyi.version}' # 作者信息 diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/config/LocalCache.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/config/LocalCache.java index e90286ee..c8d05595 100644 --- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/config/LocalCache.java +++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/config/LocalCache.java @@ -6,7 +6,6 @@ import cn.hutool.core.date.DateUnit; import lombok.extern.slf4j.Slf4j; /** - * 描述: * * @author https:www.unfbx.com * @date 2023-03-10 diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/constant/OpenAIConst.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/constant/OpenAIConst.java index bab2821c..4c673740 100644 --- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/constant/OpenAIConst.java +++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/constant/OpenAIConst.java @@ -1,7 +1,6 @@ package org.ruoyi.common.chat.constant; /** - * 描述: * * @author https:www.unfbx.com * @since 2023-03-06 @@ -10,6 +9,8 @@ public class OpenAIConst { public final static String OPENAI_HOST = "https://api.openai.com/"; + public final static String apiUrl = "v1/chat/completions"; + public final static int SUCCEED_CODE = 200; } diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/BillingUsage.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/BillingUsage.java index 2ad8b040..0936f7fb 100644 --- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/BillingUsage.java +++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/BillingUsage.java @@ -8,7 +8,7 @@ import java.math.BigDecimal; import java.util.List; /** - * 描述:金额消耗信息 + * 金额消耗信息 * * @author https:www.unfbx.com * @since 2023-04-08 diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/CreditGrantsResponse.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/CreditGrantsResponse.java index 6b3629f9..93600d80 100644 --- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/CreditGrantsResponse.java +++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/CreditGrantsResponse.java @@ -8,7 +8,7 @@ import java.io.Serializable; import java.math.BigDecimal; /** - * 描述:余额查询接口返回值 + * 余额查询接口返回值 * * @author https:www.unfbx.com * @since 2023-03-18 diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/DailyCost.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/DailyCost.java index b11c9d77..bdbca47a 100644 --- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/DailyCost.java +++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/DailyCost.java @@ -7,7 +7,7 @@ import lombok.Data; import java.util.List; /** - * 描述:金额消耗列表 + * 金额消耗列表 * * @author https:www.unfbx.com * @since 2023-04-08 diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/Datum.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/Datum.java index e2eb2e4b..ed4b5aec 100644 --- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/Datum.java +++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/Datum.java @@ -7,7 +7,6 @@ import lombok.Data; import java.math.BigDecimal; /** - * 描述: * * @author https:www.unfbx.com * @since 2023-03-18 diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/Grants.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/Grants.java index f8f4cce2..25445fcc 100644 --- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/Grants.java +++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/Grants.java @@ -7,7 +7,6 @@ import lombok.Data; import java.util.List; /** - * 描述: * * @author https:www.unfbx.com * @since 2023-03-18 diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/LineItem.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/LineItem.java index 90499bb6..c6954059 100644 --- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/LineItem.java +++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/LineItem.java @@ -6,7 +6,7 @@ import lombok.Data; import java.math.BigDecimal; /** - * 描述:金额消耗列表 + * 金额消耗列表 * * @author https:www.unfbx.com * @since 2023-04-08 diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/Plan.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/Plan.java index de74e213..5f7e6468 100644 --- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/Plan.java +++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/Plan.java @@ -4,7 +4,6 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; /** - * 描述: * * @author https:www.unfbx.com * @since 2023-04-08 diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/Subscription.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/Subscription.java index f41c94b2..53619864 100644 --- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/Subscription.java +++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/Subscription.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; /** - * 描述:账户信息 + * 账户信息 * * @author https:www.unfbx.com * @since 2023-04-08 diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/BaseChatCompletion.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/BaseChatCompletion.java index c0bcd183..4305387b 100644 --- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/BaseChatCompletion.java +++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/BaseChatCompletion.java @@ -13,7 +13,7 @@ import java.util.Map; import static org.ruoyi.common.chat.entity.chat.BaseChatCompletion.Model.GPT_3_5_TURBO; /** - * 描述: chat模型基础类 + * chat模型基础类 * * @author https:www.unfbx.com * @since 1.1.2 diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/BaseMessage.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/BaseMessage.java index 8759aa82..cf100792 100644 --- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/BaseMessage.java +++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/BaseMessage.java @@ -12,7 +12,6 @@ import java.io.Serializable; import java.util.List; /** - * 描述: * * @author https:www.unfbx.com * @since 1.1.2 diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ChatChoice.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ChatChoice.java index 54bdf6fa..d0c3f140 100644 --- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ChatChoice.java +++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ChatChoice.java @@ -7,7 +7,6 @@ import lombok.Data; import java.io.Serializable; /** - * 描述: * * @author https:www.unfbx.com * @since 2023-03-02 diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ChatCompletion.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ChatCompletion.java index 003013b2..217e3e59 100644 --- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ChatCompletion.java +++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ChatCompletion.java @@ -12,7 +12,7 @@ import java.io.Serializable; import java.util.List; /** - * 描述: chat模型参数 + * chat模型参数 * * @author https:www.unfbx.com * 2023-03-02 diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ChatCompletionResponse.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ChatCompletionResponse.java index 5f02aa38..477e7cf9 100644 --- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ChatCompletionResponse.java +++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ChatCompletionResponse.java @@ -8,7 +8,7 @@ import java.io.Serializable; import java.util.List; /** - * 描述: chat答案类 + * chat答案类 * * @author https:www.unfbx.com * 2023-03-02 diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ChatCompletionWithPicture.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ChatCompletionWithPicture.java index b7a060df..bc4c5782 100644 --- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ChatCompletionWithPicture.java +++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ChatCompletionWithPicture.java @@ -11,7 +11,7 @@ import java.io.Serializable; import java.util.List; /** - * 描述: chat模型附带图片的参数 + * : chat模型附带图片的参数 * * @author https:www.unfbx.com * @since 1.1.2 diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/Content.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/Content.java index 02fdcbb0..0abe01f7 100644 --- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/Content.java +++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/Content.java @@ -6,7 +6,6 @@ import lombok.*; import lombok.extern.slf4j.Slf4j; /** - * 描述: * * @author https://www.unfbx.com * @since 1.1.2 diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/FunctionCall.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/FunctionCall.java index 66910789..fcd8eccc 100644 --- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/FunctionCall.java +++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/FunctionCall.java @@ -6,7 +6,7 @@ import lombok.Data; import lombok.NoArgsConstructor; /** - * 描述:函数调用返回值 + * 函数调用返回值 * * @author https://www.unfbx.com * @since 2023-06-14 diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/Functions.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/Functions.java index d245dd2e..b65e0f4a 100644 --- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/Functions.java +++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/Functions.java @@ -6,7 +6,7 @@ import lombok.Data; import java.io.Serializable; /** - * 描述:方法参数实体类,实例数据如下 + * 方法参数实体类,实例数据如下 *
  *     {
  *          "name": "get_current_weather",
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ImageUrl.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ImageUrl.java
index 47a0c725..749b9c97 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ImageUrl.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ImageUrl.java
@@ -8,7 +8,6 @@ import lombok.NoArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 
 /**
- * 描述:
  *
  * @author https://www.unfbx.com
  * 2023-11-10
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/Message.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/Message.java
index 40412d26..40ef481f 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/Message.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/Message.java
@@ -10,7 +10,7 @@ import java.io.Serializable;
 import java.util.List;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  * @since 2023-03-02
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/MessagePicture.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/MessagePicture.java
index 18a4ee88..db7d77c4 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/MessagePicture.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/MessagePicture.java
@@ -10,8 +10,6 @@ import java.io.Serializable;
 import java.util.List;
 
 /**
- * 描述:
- *
  * @author https:www.unfbx.com
  * @since 2023-03-02
  */
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/Parameters.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/Parameters.java
index 48a9036b..7a015357 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/Parameters.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/Parameters.java
@@ -6,7 +6,7 @@ import lombok.Data;
 import java.io.Serializable;
 import java.util.List;
 /**
- * 描述:方法参数类,扩展参数可以继承Parameters自己实现
+ *  方法参数类,扩展参数可以继承Parameters自己实现
  * 参考:
  * 
  * {
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/common/Choice.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/common/Choice.java
index 59debb53..cc747f14 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/common/Choice.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/common/Choice.java
@@ -7,7 +7,6 @@ import lombok.Data;
 import java.io.Serializable;
 
 /**
- * 描述:
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/common/DeleteResponse.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/common/DeleteResponse.java
index eedd8eaa..7c2238ed 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/common/DeleteResponse.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/common/DeleteResponse.java
@@ -6,7 +6,7 @@ import lombok.Data;
 import java.io.Serializable;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/common/OpenAiResponse.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/common/OpenAiResponse.java
index 5ce90787..15dc7bc5 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/common/OpenAiResponse.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/common/OpenAiResponse.java
@@ -6,7 +6,7 @@ import lombok.Data;
 import java.io.Serializable;
 import java.util.List;
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/common/Usage.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/common/Usage.java
index 09a92076..188d2d4a 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/common/Usage.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/common/Usage.java
@@ -7,7 +7,7 @@ import lombok.Data;
 import java.io.Serializable;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/completions/Completion.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/completions/Completion.java
index 42fe86de..64057967 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/completions/Completion.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/completions/Completion.java
@@ -10,7 +10,7 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * 描述: 问题类
+ *   问题类
  *
  * @author https:www.unfbx.com
  * 2023-02-11
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/completions/CompletionResponse.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/completions/CompletionResponse.java
index 31593746..78e14a22 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/completions/CompletionResponse.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/completions/CompletionResponse.java
@@ -9,7 +9,7 @@ import org.ruoyi.common.chat.entity.common.Usage;
 import java.io.Serializable;
 
 /**
- * 描述: 答案类
+ *   答案类
  *
  * @author https:www.unfbx.com
  *  2023-02-11
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/edits/Edit.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/edits/Edit.java
index 4a2da137..662c0bc2 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/edits/Edit.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/edits/Edit.java
@@ -7,7 +7,7 @@ import lombok.extern.slf4j.Slf4j;
 import java.io.Serializable;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/edits/EditResponse.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/edits/EditResponse.java
index 803b742e..07917614 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/edits/EditResponse.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/edits/EditResponse.java
@@ -9,7 +9,7 @@ import org.ruoyi.common.chat.entity.common.Usage;
 import java.io.Serializable;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/embeddings/Embedding.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/embeddings/Embedding.java
index e7789236..d176e2ab 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/embeddings/Embedding.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/embeddings/Embedding.java
@@ -9,7 +9,7 @@ import java.util.List;
 import java.util.Objects;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/embeddings/EmbeddingResponse.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/embeddings/EmbeddingResponse.java
index 00868ef7..ad48b2a1 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/embeddings/EmbeddingResponse.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/embeddings/EmbeddingResponse.java
@@ -8,7 +8,7 @@ import java.io.Serializable;
 import java.util.List;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/engines/Engine.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/engines/Engine.java
index ce375a46..72b28c4b 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/engines/Engine.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/engines/Engine.java
@@ -6,7 +6,7 @@ import lombok.Data;
 import java.io.Serializable;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/files/File.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/files/File.java
index b696962d..06be2403 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/files/File.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/files/File.java
@@ -6,7 +6,7 @@ import lombok.Data;
 import java.io.Serializable;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/files/UploadFileResponse.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/files/UploadFileResponse.java
index 6d1bcda7..c3e87cc7 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/files/UploadFileResponse.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/files/UploadFileResponse.java
@@ -6,7 +6,7 @@ import lombok.Data;
 import java.io.Serializable;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/Image.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/Image.java
index 08754494..84f60ffb 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/Image.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/Image.java
@@ -11,7 +11,7 @@ import lombok.extern.slf4j.Slf4j;
 import java.io.Serializable;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  * 2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/ImageEdit.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/ImageEdit.java
index eac0a61b..32ee3675 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/ImageEdit.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/ImageEdit.java
@@ -11,7 +11,7 @@ import java.io.Serializable;
 import java.util.Objects;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/ImageResponse.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/ImageResponse.java
index ca61b454..7ad84150 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/ImageResponse.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/ImageResponse.java
@@ -7,7 +7,7 @@ import java.io.Serializable;
 import java.util.List;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/ImageVariations.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/ImageVariations.java
index 34b81b9a..03ea00f1 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/ImageVariations.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/ImageVariations.java
@@ -12,7 +12,7 @@ import java.io.Serializable;
 import java.util.Objects;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/Item.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/Item.java
index da7a158b..58f7ca06 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/Item.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/Item.java
@@ -7,7 +7,7 @@ import lombok.Data;
 import java.io.Serializable;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/ResponseFormat.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/ResponseFormat.java
index 4c06dcd2..5a9e1e2d 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/ResponseFormat.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/ResponseFormat.java
@@ -6,7 +6,7 @@ import lombok.Getter;
 import java.io.Serializable;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/SizeEnum.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/SizeEnum.java
index d8b02046..fe2997ea 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/SizeEnum.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/SizeEnum.java
@@ -6,7 +6,7 @@ import lombok.Getter;
 import java.io.Serializable;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/models/Model.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/models/Model.java
index 2848e126..bfedf88d 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/models/Model.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/models/Model.java
@@ -8,7 +8,7 @@ import java.io.Serializable;
 import java.util.List;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/models/ModelResponse.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/models/ModelResponse.java
index 6aa4cea0..f78cf84d 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/models/ModelResponse.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/models/ModelResponse.java
@@ -7,7 +7,7 @@ import java.io.Serializable;
 import java.util.List;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/models/Permission.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/models/Permission.java
index fd66a0a6..8b15a0a6 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/models/Permission.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/models/Permission.java
@@ -7,7 +7,7 @@ import lombok.Data;
 import java.io.Serializable;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  * 2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/moderations/Categories.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/moderations/Categories.java
index ebe72e69..69d9add7 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/moderations/Categories.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/moderations/Categories.java
@@ -7,7 +7,7 @@ import lombok.Data;
 import java.io.Serializable;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/moderations/CategoryScores.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/moderations/CategoryScores.java
index b14e230a..13f9ed0b 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/moderations/CategoryScores.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/moderations/CategoryScores.java
@@ -8,7 +8,7 @@ import java.io.Serializable;
 import java.math.BigDecimal;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/moderations/Moderation.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/moderations/Moderation.java
index 42dd1bef..f6831f74 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/moderations/Moderation.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/moderations/Moderation.java
@@ -10,7 +10,7 @@ import java.util.List;
 import java.util.Objects;
 
 /**
- * 描述:文本审核,敏感词鉴别
+ *  文本审核,敏感词鉴别
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/moderations/ModerationResponse.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/moderations/ModerationResponse.java
index 046cd0b7..b1a3dd21 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/moderations/ModerationResponse.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/moderations/ModerationResponse.java
@@ -7,7 +7,7 @@ import java.io.Serializable;
 import java.util.List;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/moderations/Result.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/moderations/Result.java
index 28dee336..a42682a3 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/moderations/Result.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/moderations/Result.java
@@ -7,7 +7,7 @@ import lombok.Data;
 import java.io.Serializable;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/whisper/Whisper.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/whisper/Whisper.java
index 4ffc5227..7de6ca57 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/whisper/Whisper.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/whisper/Whisper.java
@@ -7,7 +7,7 @@ import lombok.Getter;
 import java.io.Serializable;
 
 /**
- * 描述:语音转文字
+ *  语音转文字
  *
  * @author https:www.unfbx.com
  * @since 2023-03-02
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/whisper/WhisperResponse.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/whisper/WhisperResponse.java
index 3635dd93..d80900fa 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/whisper/WhisperResponse.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/whisper/WhisperResponse.java
@@ -6,7 +6,7 @@ import lombok.Data;
 import java.io.Serializable;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  * @since 2023-03-02
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/listener/WebSocketEventListener.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/listener/WebSocketEventListener.java
index 15c47231..c704a28d 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/listener/WebSocketEventListener.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/listener/WebSocketEventListener.java
@@ -16,7 +16,7 @@ import org.springframework.web.socket.WebSocketSession;
 import java.util.Objects;
 
 /**
- * 描述:OpenAI流式输出Socket接收
+ *  OpenAI流式输出Socket接收
  *
  * @author https:www.unfbx.com
  * @date 2023-03-23
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/OpenAiApi.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/OpenAiApi.java
index bb0bd124..ba6fa9ed 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/OpenAiApi.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/OpenAiApi.java
@@ -40,7 +40,7 @@ import java.time.LocalDate;
 import java.util.Map;
 
 /**
- * 描述: open ai官方api接口
+ *   open ai官方api接口
  *
  * @author https:www.unfbx.com
  * 2023-02-15
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/OpenAiClient.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/OpenAiClient.java
index ccc52147..fc8462a0 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/OpenAiClient.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/OpenAiClient.java
@@ -56,7 +56,7 @@ import java.util.concurrent.TimeUnit;
 
 
 /**
- * 描述: open ai 客户端
+ *   open ai 客户端
  *
  * @author https:www.unfbx.com
  * @since 2023-02-11
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/OpenAiStreamClient.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/OpenAiStreamClient.java
index ef03cb24..e02dde19 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/OpenAiStreamClient.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/OpenAiStreamClient.java
@@ -53,7 +53,7 @@ import java.util.*;
 import java.util.concurrent.TimeUnit;
 
 /**
- * 描述: open ai 客户端
+ *   open ai 客户端
  *
  * @author https:www.unfbx.com
  * 2023-02-28
@@ -71,6 +71,11 @@ public class OpenAiStreamClient {
      */
     private String apiHost;
 
+    /**
+     * 自定义url 兼容多个平台
+     */
+    private String apiUrl;
+
     /**
      * 自定义的okHttpClient
      * 如果不自定义 ,就是用sdk默认的OkHttpClient实例
@@ -112,6 +117,11 @@ public class OpenAiStreamClient {
         }
         apiHost = builder.apiHost;
 
+        if (StrUtil.isBlank(builder.apiUrl)) {
+            builder.apiUrl = OpenAIConst.apiUrl;
+        }
+        apiUrl = builder.apiUrl;
+
         if (Objects.isNull(builder.keyStrategy)) {
             builder.keyStrategy = new KeyRandomStrategy();
         }
@@ -136,12 +146,12 @@ public class OpenAiStreamClient {
         }
         okHttpClient = builder.okHttpClient;
 
-        this.openAiApi = new Retrofit.Builder()
-            .baseUrl(apiHost)
-            .client(okHttpClient)
-            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
-            .addConverterFactory(JacksonConverterFactory.create())
-            .build().create(OpenAiApi.class);
+//        this.openAiApi = new Retrofit.Builder()
+//            .baseUrl(apiHost)
+//            .client(okHttpClient)
+//            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
+//            .addConverterFactory(JacksonConverterFactory.create())
+//            .build().create(OpenAiApi.class);
     }
 
     /**
@@ -180,7 +190,7 @@ public class OpenAiStreamClient {
             ObjectMapper mapper = new ObjectMapper();
             String requestBody = mapper.writeValueAsString(chatCompletion);
             Request request = new Request.Builder()
-                .url(this.apiHost + "v1/chat/completions")
+                .url(this.apiHost)
                 .post(RequestBody.create(MediaType.parse(ContentType.JSON.getValue()), requestBody))
                 .build();
             factory.newEventSource(request, eventSourceListener);
@@ -334,7 +344,6 @@ public class OpenAiStreamClient {
 
         BillingUsage billingUsage = billingUsage(start.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(), end.toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
         double totalUsage = billingUsage.getTotalUsage().doubleValue() / 100;
-        System.out.println(totalUsage);
         Subscription subscription = subscription();
         KeyInfo keyInfo = new KeyInfo();
         String start_key = key.substring(0, 6);
@@ -611,6 +620,8 @@ public class OpenAiStreamClient {
          */
         private String apiHost;
 
+        private String apiUrl;
+
         /**
          * 自定义OkhttpClient
          */
@@ -645,6 +656,16 @@ public class OpenAiStreamClient {
             return this;
         }
 
+        /**
+         * @param val 自定义请求后缀
+         * @return Builder
+         * @see OpenAIConst
+         */
+        public Builder apiUrl(String val) {
+            apiUrl = val;
+            return this;
+        }
+
         public Builder keyStrategy(KeyStrategyFunction val) {
             keyStrategy = val;
             return this;
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/TestOpenAIAPI.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/TestOpenAIAPI.java
index 349f5c14..3df000d8 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/TestOpenAIAPI.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/TestOpenAIAPI.java
@@ -21,7 +21,7 @@ public class TestOpenAIAPI {
             .build();
 
         try (Response response = client.newCall(request).execute()) {
-            System.out.println(response.body().string());
+
         }
     }
 
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/exception/CommonError.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/exception/CommonError.java
index e59e9cdc..e7cae02e 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/exception/CommonError.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/exception/CommonError.java
@@ -1,7 +1,7 @@
 package org.ruoyi.common.chat.openai.exception;
 
 /**
- * 描述: 错误
+ *   错误
  *
  * @author https:www.unfbx.com
  *  2023-02-11
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/exception/IError.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/exception/IError.java
index 84af81c7..0e17a63a 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/exception/IError.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/exception/IError.java
@@ -1,6 +1,6 @@
 package org.ruoyi.common.chat.openai.exception;
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-11
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/function/KeyRandomStrategy.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/function/KeyRandomStrategy.java
index 5dc10a0b..e4945d63 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/function/KeyRandomStrategy.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/function/KeyRandomStrategy.java
@@ -5,7 +5,7 @@ import cn.hutool.core.util.RandomUtil;
 import java.util.List;
 
 /**
- * 描述:随机策略
+ *  随机策略
  *
  * @author https:www.unfbx.com
  * @since 2023-04-03
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/function/KeyStrategyFunction.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/function/KeyStrategyFunction.java
index 5ce5af05..c446414b 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/function/KeyStrategyFunction.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/function/KeyStrategyFunction.java
@@ -3,7 +3,7 @@ package org.ruoyi.common.chat.openai.function;
 import java.util.function.Function;
 
 /**
- * 描述:key 的获取策略
+ *  key 的获取策略
  * jdk默认实现
  * @see Function
  *
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/interceptor/DefaultOpenAiAuthInterceptor.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/interceptor/DefaultOpenAiAuthInterceptor.java
index 97154704..1165bc28 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/interceptor/DefaultOpenAiAuthInterceptor.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/interceptor/DefaultOpenAiAuthInterceptor.java
@@ -9,7 +9,7 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * 描述:请求增加header apikey
+ *  请求增加header apikey
  *
  * @author https:www.unfbx.com
  * @since 2023-03-23
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/interceptor/DynamicKeyOpenAiAuthInterceptor.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/interceptor/DynamicKeyOpenAiAuthInterceptor.java
index 1f8c7588..6fd892a5 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/interceptor/DynamicKeyOpenAiAuthInterceptor.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/interceptor/DynamicKeyOpenAiAuthInterceptor.java
@@ -16,7 +16,7 @@ import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
- * 描述:动态处理key的鉴权拦截器
+ *  动态处理key的鉴权拦截器
  *
  * @author https:www.unfbx.com
  * @since 2023-04-25
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/interceptor/OpenAILogger.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/interceptor/OpenAILogger.java
index c0801e2f..dc32a69b 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/interceptor/OpenAILogger.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/interceptor/OpenAILogger.java
@@ -4,7 +4,7 @@ import lombok.extern.slf4j.Slf4j;
 import okhttp3.logging.HttpLoggingInterceptor;
 
 /**
- * 描述: 日志
+ *   日志
  *
  * @author https:www.unfbx.com
  * 2023-02-28
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/interceptor/OpenAiResponseInterceptor.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/interceptor/OpenAiResponseInterceptor.java
index 6d656a23..936bcab7 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/interceptor/OpenAiResponseInterceptor.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/interceptor/OpenAiResponseInterceptor.java
@@ -13,7 +13,7 @@ import java.io.IOException;
 import java.util.Objects;
 
 /**
- * 描述:openai 返回值处理Interceptor
+ *  openai 返回值处理Interceptor
  *
  * @author https:www.unfbx.com
  * @since  2023-03-23
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/plugin/CmdReq.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/plugin/CmdReq.java
deleted file mode 100644
index a275150b..00000000
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/plugin/CmdReq.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.ruoyi.common.chat.plugin;
-
-
-import lombok.Data;
-import org.ruoyi.common.chat.openai.plugin.PluginParam;
-
-@Data
-public class CmdReq extends PluginParam {
-    /**
-     * 指令
-     */
-    private String cmd;
-}
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/plugin/CmdResp.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/plugin/CmdResp.java
deleted file mode 100644
index 4e101393..00000000
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/plugin/CmdResp.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.ruoyi.common.chat.plugin;
-
-import lombok.Data;
-
-@Data
-public class CmdResp {
-
-    /**
-     * 返回结果
-     */
-    private String result;
-}
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/plugin/SqlPlugin.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/plugin/SqlPlugin.java
deleted file mode 100644
index a40734d7..00000000
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/plugin/SqlPlugin.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package org.ruoyi.common.chat.plugin;
-
-import org.ruoyi.common.chat.openai.plugin.PluginAbstract;
-
-import java.sql.*;
-
-/**
- * @author ageer
- */
-public class SqlPlugin extends PluginAbstract {
-
-    public SqlPlugin(Class r) {
-        super(r);
-    }
-
-
-
-    @Override
-    public SqlResp func(SqlReq args) {
-        SqlResp resp = new SqlResp();
-        resp.setUserBalance(getBalance(args.getUsername()));
-        return resp;
-    }
-
-    @Override
-    public String content(SqlResp resp) {
-        return  "用户余额:"+resp.getUserBalance();
-    }
-
-
-    public String getBalance(String userName) {
-        // MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL
-        String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
-        String DB_URL = "jdbc:mysql://43.139.70.230:3306/ry-vue";
-        // 数据库的用户名与密码,需要根据自己的设置
-        String USER = "ry-vue";
-        String PASS = "BXZiGsY35K523Xfx";
-        Connection conn = null;
-        Statement stmt = null;
-        String balance = "0.1";
-
-        try{
-            // 注册 JDBC 驱动
-            Class.forName(JDBC_DRIVER);
-
-            // 打开链接
-            System.out.println("连接数据库...");
-            conn = DriverManager.getConnection(DB_URL,USER,PASS);
-
-            // 执行查询
-            System.out.println(" 实例化Statement对象...");
-            stmt = conn.createStatement();
-            String sql;
-            sql = "SELECT user_balance FROM sys_user where user_name ='" + userName + "'";
-            ResultSet rs = stmt.executeQuery(sql);
-            // 展开结果集数据库
-            while(rs.next()){
-                // 通过字段检索
-                balance = rs.getString("user_balance");
-                // 输出数据
-                System.out.print("余额: " + balance);
-                System.out.print("\n");
-            }
-            // 完成后关闭
-            rs.close();
-            stmt.close();
-            conn.close();
-        }catch(SQLException se){
-            // 处理 JDBC 错误
-            se.printStackTrace();
-        }catch(Exception e){
-            // 处理 Class.forName 错误
-            e.printStackTrace();
-        }finally{
-            // 关闭资源
-            try{
-                if(stmt!=null) stmt.close();
-            }catch(SQLException se2){
-            }// 什么都不做
-            try{
-                if(conn!=null) conn.close();
-            }catch(SQLException se){
-                se.printStackTrace();
-            }
-        }
-       return balance;
-    }
-}
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/plugin/SqlReq.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/plugin/SqlReq.java
deleted file mode 100644
index 481ba72c..00000000
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/plugin/SqlReq.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.ruoyi.common.chat.plugin;
-
-
-import lombok.Data;
-import org.ruoyi.common.chat.openai.plugin.PluginParam;
-
-@Data
-public class SqlReq extends PluginParam {
-    /**
-     * 用户名称
-     */
-    private String username;
-}
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/plugin/SqlResp.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/plugin/SqlResp.java
deleted file mode 100644
index b84b555b..00000000
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/plugin/SqlResp.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.ruoyi.common.chat.plugin;
-
-import lombok.Data;
-
-@Data
-public class SqlResp {
-
-    /**
-     * 用户余额
-     */
-    private String userBalance;
-}
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/request/ChatRequest.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/request/ChatRequest.java
index c611c74a..ed62cb42 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/request/ChatRequest.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/request/ChatRequest.java
@@ -7,7 +7,7 @@ import org.ruoyi.common.chat.entity.chat.Message;
 import java.util.List;
 
 /**
- * 描述:对话请求对象
+ *  对话请求对象
  *
  * @author ageerle
  * @sine 2023-04-08
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/request/Dall3Request.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/request/Dall3Request.java
index c6625de9..727fbf33 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/request/Dall3Request.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/request/Dall3Request.java
@@ -4,7 +4,7 @@ import jakarta.validation.constraints.NotEmpty;
 import lombok.Data;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  * @sine 2023-04-08
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/sse/ConsoleEventSourceListener.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/sse/ConsoleEventSourceListener.java
index e02b2655..4202e81e 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/sse/ConsoleEventSourceListener.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/sse/ConsoleEventSourceListener.java
@@ -10,7 +10,7 @@ import okhttp3.sse.EventSourceListener;
 import java.util.Objects;
 
 /**
- * 描述: sse
+ *   sse
  *
  * @author https:www.unfbx.com
  * 2023-02-28
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/sse/DefaultPluginListener.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/sse/DefaultPluginListener.java
index ab6fcf1e..7a55ca9a 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/sse/DefaultPluginListener.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/sse/DefaultPluginListener.java
@@ -8,7 +8,7 @@ import org.ruoyi.common.chat.openai.OpenAiStreamClient;
 import org.ruoyi.common.chat.openai.plugin.PluginAbstract;
 
 /**
- * 描述: 插件开发返回信息收集sse监听器
+ *   插件开发返回信息收集sse监听器
  *
  * @author https:www.unfbx.com
  * 2023-08-18
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/sse/PluginListener.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/sse/PluginListener.java
index 8b9d4a4f..f1bfa44b 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/sse/PluginListener.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/sse/PluginListener.java
@@ -19,7 +19,7 @@ import org.ruoyi.common.chat.openai.plugin.PluginParam;
 import java.util.Objects;
 
 /**
- * 描述: 插件开发返回信息收集sse监听器
+ *   插件开发返回信息收集sse监听器
  *
  * @author https:www.unfbx.com
  * 2023-08-18
diff --git a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/utils/TikTokensUtil.java b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/utils/TikTokensUtil.java
index 2000651d..f333ed70 100644
--- a/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/utils/TikTokensUtil.java
+++ b/ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/utils/TikTokensUtil.java
@@ -15,7 +15,7 @@ import org.jetbrains.annotations.NotNull;
 import java.util.*;
 
 /**
- * 描述:token计算工具类
+ *  token计算工具类
  *
  * @author https:www.unfbx.com
  * @since 2023-04-04
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/event/ConfigChangeEvent.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/event/ConfigChangeEvent.java
index 67244af4..816668a4 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/event/ConfigChangeEvent.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/event/ConfigChangeEvent.java
@@ -3,7 +3,7 @@ package org.ruoyi.common.core.event;
 import org.springframework.context.ApplicationEvent;
 
 /**
- * 描述:定义一个事件类,用于通知配置变化
+ *  定义一个事件类,用于通知配置变化
  *
  * @author ageerle@163.com
  * date 2024/5/19
diff --git a/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/ChatChoice.java b/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/ChatChoice.java
index 7919ad15..42ba7798 100644
--- a/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/ChatChoice.java
+++ b/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/ChatChoice.java
@@ -7,7 +7,7 @@ import lombok.Data;
 import java.io.Serializable;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  * @since 2023-03-02
diff --git a/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/ChatCompletionResponse.java b/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/ChatCompletionResponse.java
index 3134d4ee..56488357 100644
--- a/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/ChatCompletionResponse.java
+++ b/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/ChatCompletionResponse.java
@@ -7,7 +7,7 @@ import java.io.Serializable;
 import java.util.List;
 
 /**
- * 描述: chat答案类
+ *   chat答案类
  *
  * @author https:www.unfbx.com
  * 2023-03-02
diff --git a/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/DouyuLiveChatClientTest.java b/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/DouyuLiveChatClientTest.java
index 56cc6d0e..f7683afc 100644
--- a/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/DouyuLiveChatClientTest.java
+++ b/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/DouyuLiveChatClientTest.java
@@ -45,11 +45,7 @@ import tech.ordinaryroad.live.chat.client.douyu.netty.handler.DouyuConnectionHan
 
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
-import java.io.IOException;
 import java.util.Objects;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
@@ -95,12 +91,9 @@ class DouyuLiveChatClientTest implements IDouyuConnectionListener, IDouyuMsgList
                     .build();
 
             long startTime = System.currentTimeMillis(); // 获取开始时间的毫秒数
-            System.out.println("执行前.......");
             Thread.sleep(3000);
-            System.out.println("执行后.......");
             long endTime = System.currentTimeMillis(); // 获取结束时间的毫秒数
             long timeDiff = endTime - startTime; // 计算时间差
-            System.out.println("执行时间 " + timeDiff / 1000 + " 秒。");
 
             try (Response response = okClient.newCall(request).execute()) {
                 if (response.body() != null) {
diff --git a/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/Message.java b/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/Message.java
index 7ab7d80b..4aef1fd2 100644
--- a/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/Message.java
+++ b/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/Message.java
@@ -9,7 +9,7 @@ import lombok.Getter;
 import java.io.Serializable;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  * @since 2023-03-02
diff --git a/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/Usage.java b/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/Usage.java
index 5595bc08..aabe418d 100644
--- a/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/Usage.java
+++ b/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/client/Usage.java
@@ -7,7 +7,7 @@ import lombok.Data;
 import java.io.Serializable;
 
 /**
- * 描述:
+ *  
  *
  * @author https:www.unfbx.com
  *  2023-02-15
diff --git a/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/util/DouyuCodecUtilTest.java b/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/util/DouyuCodecUtilTest.java
index b4d72604..919995d3 100644
--- a/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/util/DouyuCodecUtilTest.java
+++ b/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-douyu/src/test/java/tech/ordinaryroad/live/chat/client/douyu/util/DouyuCodecUtilTest.java
@@ -48,7 +48,6 @@ class DouyuCodecUtilTest {
         Map stringObjectMap = DouyuCodecUtil.parseDouyuSttStringToMap(mapkb);
         assertNotNull(stringObjectMap);
         stringObjectMap.forEach((string, o) -> {
-            System.out.println(string);
         });
     }
 
@@ -58,7 +57,6 @@ class DouyuCodecUtilTest {
         Map stringObjectMap = DouyuCodecUtil.parseDouyuSttStringToMap(pdrinfo);
         assertNotNull(stringObjectMap);
         stringObjectMap.forEach((string, o) -> {
-            System.out.println(string);
         });
     }
 
@@ -78,7 +76,6 @@ class DouyuCodecUtilTest {
                 }});
             }});
         }});
-        System.out.println(douyuSttString);
         assertEquals("key1@=value1/key2@=2/key3@=11@AA=11@AS12@AA=12@AS@S22@AA=22@AS21@AA=21@AS@S/".length(), douyuSttString.length());
     }
 
@@ -87,8 +84,6 @@ class DouyuCodecUtilTest {
         String mapkb = "type@=mapkb/pk_time@=600/teams@=team@AA=5@ASres@AA=1@ASsc@AA=660000@ASbf@AA=0@AS@Steam@AA=6@ASres@AA=2@ASsc@AA=600000@ASbf@AA=0@AS@Steam@AA=4@ASres@AA=3@ASsc@AA=456000@ASbf@AA=0@AS@Steam@AA=2@ASres@AA=4@ASsc@AA=302000@ASbf@AA=0@AS@Steam@AA=3@ASres@AA=5@ASsc@AA=100000@ASbf@AA=0@AS@Steam@AA=1@ASres@AA=6@ASsc@AA=200@ASbf@AA=0@AS@S/";
         IDouyuMsg iDouyuMsg = DouyuCodecUtil.parseDouyuSttString(mapkb, DouyuCodecUtil.MSG_TYPE_RECEIVE);
         String douyuSttString = DouyuCodecUtil.toDouyuSttString(iDouyuMsg);
-        System.out.println(mapkb);
-        System.out.println(douyuSttString);
         assertEquals(mapkb.length(), douyuSttString.length());
         IDouyuMsg douyuSttStringMsg = DouyuCodecUtil.parseDouyuSttString(douyuSttString, DouyuCodecUtil.MSG_TYPE_RECEIVE);
         assertNotNull(douyuSttStringMsg);
@@ -97,6 +92,5 @@ class DouyuCodecUtilTest {
     @Test
     void unescape() {
         String unescape = DouyuCodecUtil.unescape("team@AA=5@ASres@AA=1@ASsc@AA=660000@ASbf@AA=0@AS@Steam@AA=6@ASres@AA=2@ASsc@AA=600000@ASbf@AA=0@AS@Steam@AA=4@ASres@AA=3@ASsc@AA=456000@ASbf@AA=0@AS@Steam@AA=2@ASres@AA=4@ASsc@AA=302000@ASbf@AA=0@AS@Steam@AA=3@ASres@AA=5@ASsc@AA=100000@ASbf@AA=0@AS@Steam@AA=1@ASres@AA=6@ASsc@AA=200@ASbf@AA=0@AS@S");
-        System.out.println(unescape);
     }
-}
\ No newline at end of file
+}
diff --git a/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/test/java/tech/ordinaryroad/live/chat/client/huya/util/HuyaCodecUtilTest.java b/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/test/java/tech/ordinaryroad/live/chat/client/huya/util/HuyaCodecUtilTest.java
index aabfed7e..71749f05 100644
--- a/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/test/java/tech/ordinaryroad/live/chat/client/huya/util/HuyaCodecUtilTest.java
+++ b/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-huya/src/test/java/tech/ordinaryroad/live/chat/client/huya/util/HuyaCodecUtilTest.java
@@ -26,7 +26,6 @@ class HuyaCodecUtilTest {
         ConnectParaInfo wsConnectParaInfo = ConnectParaInfo.newWSConnectParaInfo(ver, exp, appSrc);
         byte[] byteArray = wsConnectParaInfo.toByteArray();
         String s = HuyaCodecUtil.ab2str(byteArray);
-        System.out.println(s);
     }
 
     @Test
@@ -36,7 +35,6 @@ class HuyaCodecUtilTest {
         String s = HuyaCodecUtil.ab2str(byteArray);
 
         String btoa = HuyaCodecUtil.btoa(s);
-        System.out.println(btoa);
     }
 
     @Test
@@ -67,7 +65,6 @@ class HuyaCodecUtilTest {
         LiveLaunchReq liveLaunchReq = new LiveLaunchReq();
         liveLaunchReq = wupReq.getUniAttribute().getByClass("tReq", liveLaunchReq);
         UserId tId = liveLaunchReq.getTId();
-        System.out.println(wupReq.getTarsServantRequest().getVersion());
     }
 
     @Test
@@ -96,4 +93,4 @@ class HuyaCodecUtilTest {
 
         UserId tId = getLivingInfoReq.getTId();
     }
-}
\ No newline at end of file
+}
diff --git a/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/test/java/tech/ordinaryroad/live/chat/client/kuaishou/api/KuaishouApisTest.java b/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/test/java/tech/ordinaryroad/live/chat/client/kuaishou/api/KuaishouApisTest.java
index db2fa9eb..8bc3d05f 100644
--- a/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/test/java/tech/ordinaryroad/live/chat/client/kuaishou/api/KuaishouApisTest.java
+++ b/ruoyi-common/ruoyi-common-live/live-chat-clients/live-chat-client-kuaishou/src/test/java/tech/ordinaryroad/live/chat/client/kuaishou/api/KuaishouApisTest.java
@@ -28,13 +28,5 @@ class KuaishouApisTest {
 
     @Test
     void sendComment() {
-        System.out.println(KuaishouApis.sendComment(System.getenv("cookie"),
-                "3x6pb6bcmjrarvs",
-                KuaishouApis.SendCommentRequest
-                        .builder()
-                        .liveStreamId("XKLoBv2mAEo")
-                        .content("666666a")
-                        .build()
-        ));
     }
-}
\ No newline at end of file
+}
diff --git a/ruoyi-common/ruoyi-common-pay/src/main/java/org/ruoyi/common/listener/ConfigChangeListener.java b/ruoyi-common/ruoyi-common-pay/src/main/java/org/ruoyi/common/listener/ConfigChangeListener.java
index b6b4fec8..06dcc3de 100644
--- a/ruoyi-common/ruoyi-common-pay/src/main/java/org/ruoyi/common/listener/ConfigChangeListener.java
+++ b/ruoyi-common/ruoyi-common-pay/src/main/java/org/ruoyi/common/listener/ConfigChangeListener.java
@@ -10,7 +10,7 @@ import org.springframework.context.ApplicationListener;
 import org.springframework.stereotype.Component;
 
 /**
- * 描述:创建一个监听器,用于处理配置变化事件
+ *  创建一个监听器,用于处理配置变化事件
  *
  * @author ageerle@163.com
  * date 2024/5/19
diff --git a/ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/client/SingleHttpClient.java b/ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/client/SingleHttpClient.java
index 7fcc9bfb..201b17ae 100644
--- a/ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/client/SingleHttpClient.java
+++ b/ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/client/SingleHttpClient.java
@@ -84,7 +84,6 @@ public class SingleHttpClient {
             if (params != null) {
                 String paramStr = EntityUtils.toString(new UrlEncodedFormEntity(params, Consts.UTF_8));
                 httpGet = new HttpGet(url + "?" + paramStr);
-//                System.out.println(url + "?" + paramStr);
             } else {
                 httpGet = new HttpGet(url);
             }
diff --git a/ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/tools/CommonTools.java b/ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/tools/CommonTools.java
index 17b2aff8..68cc5614 100644
--- a/ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/tools/CommonTools.java
+++ b/ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/itchat4j/utils/tools/CommonTools.java
@@ -292,9 +292,6 @@ public class CommonTools {
 			sb.append(content.substring(lastStart));
 		}
 		if (sb.length() != 0) {
-			System.out.println(EmojiParser.parseToUnicode(sb.toString()));
-			System.out.println(EmojiParser.parseToAliases(EmojiParser.parseToUnicode(sb.toString())));
-			System.out.println(EmojiParser.removeAllEmojis(sb.toString()));
 		}
 	}
 
diff --git a/ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/utils/MD5Util.java b/ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/utils/MD5Util.java
index 1748c30a..ccf72a10 100644
--- a/ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/utils/MD5Util.java
+++ b/ruoyi-common/ruoyi-common-wechat/src/main/java/org/ruoyi/common/wechat/web/utils/MD5Util.java
@@ -61,7 +61,6 @@ public class MD5Util {
 	}
 
 	public static void main(String[] args) {
-		System.out.println(MD5Encrypt("wxwobot"));
 	}
 
 
diff --git a/ruoyi-modules-api/ruoyi-chat-api/pom.xml b/ruoyi-modules-api/ruoyi-chat-api/pom.xml
index e2506bad..b47d9c3e 100644
--- a/ruoyi-modules-api/ruoyi-chat-api/pom.xml
+++ b/ruoyi-modules-api/ruoyi-chat-api/pom.xml
@@ -71,6 +71,18 @@
             spring-ai-starter-model-openai
         
 
+        
+            io.github.imfangs
+            dify-java-client
+            1.0.7
+        
+
+        
+            com.coze
+            coze-api
+            0.3.1
+        
+
     
 
 
diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatModel.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatModel.java
index f67e7657..816ab8bb 100644
--- a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatModel.java
+++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatModel.java
@@ -1,6 +1,7 @@
 package org.ruoyi.domain;
 
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.baomidou.mybatisplus.annotation.*;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -46,7 +47,7 @@ public class ChatModel extends BaseEntity {
     /**
      * 模型价格
      */
-    private Long modelPrice;
+    private Double modelPrice;
 
     /**
      * 计费类型
@@ -68,6 +69,7 @@ public class ChatModel extends BaseEntity {
      */
     private String apiHost;
 
+
     /**
      * 密钥
      */
diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatModelBo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatModelBo.java
index 45e0705c..5af9bc31 100644
--- a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatModelBo.java
+++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatModelBo.java
@@ -1,5 +1,6 @@
 package org.ruoyi.domain.bo;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import org.ruoyi.common.core.validate.AddGroup;
 import org.ruoyi.common.core.validate.EditGroup;
 import org.ruoyi.domain.ChatModel;
@@ -48,7 +49,7 @@ public class ChatModelBo extends BaseEntity {
      * 模型价格
      */
     @NotNull(message = "模型价格不能为空", groups = { AddGroup.class, EditGroup.class })
-    private Long modelPrice;
+    private Double modelPrice;
 
     /**
      * 计费类型
@@ -79,6 +80,7 @@ public class ChatModelBo extends BaseEntity {
     @NotBlank(message = "密钥不能为空", groups = { AddGroup.class, EditGroup.class })
     private String apiKey;
 
+
     /**
      * 备注
      */
diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/request/TranslationRequest.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/request/TranslationRequest.java
index c8121e7e..83977698 100644
--- a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/request/TranslationRequest.java
+++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/request/TranslationRequest.java
@@ -3,7 +3,7 @@ package org.ruoyi.domain.request;
 import lombok.Data;
 
 /**
- * 描述:翻译请求对象
+ *  翻译请求对象
  *
  * @author ageerle@163.com
  * date 2025/1/13
diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatModelVo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatModelVo.java
index 56efb598..d477435b 100644
--- a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatModelVo.java
+++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatModelVo.java
@@ -56,7 +56,7 @@ public class ChatModelVo implements Serializable {
      * 模型价格
      */
     @ExcelProperty(value = "模型价格")
-    private Long modelPrice;
+    private Double modelPrice;
 
     /**
      * 计费类型
@@ -94,5 +94,4 @@ public class ChatModelVo implements Serializable {
     @ExcelProperty(value = "备注")
     private String remark;
 
-
 }
diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/pom.xml b/ruoyi-modules-api/ruoyi-knowledge-api/pom.xml
index f6412e1b..83eac39a 100644
--- a/ruoyi-modules-api/ruoyi-knowledge-api/pom.xml
+++ b/ruoyi-modules-api/ruoyi-knowledge-api/pom.xml
@@ -103,6 +103,18 @@
             1.19.6
         
 
+        
+            dev.langchain4j
+            langchain4j-document-parser-apache-tika
+        
+
+        
+        
+            commons-io
+            commons-io
+            2.17.0
+        
+
     
 
 
diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/ExcelFileLoader.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/ExcelFileLoader.java
new file mode 100644
index 00000000..b47ce11f
--- /dev/null
+++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/ExcelFileLoader.java
@@ -0,0 +1,41 @@
+package org.ruoyi.chain.loader;
+
+import dev.langchain4j.data.document.Document;
+import dev.langchain4j.data.document.parser.apache.tika.ApacheTikaDocumentParser;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.ruoyi.chain.split.TextSplitter;
+import org.ruoyi.common.core.exception.UtilException;
+import org.springframework.stereotype.Component;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+@Component
+@AllArgsConstructor
+@Slf4j
+public class ExcelFileLoader implements ResourceLoader {
+    private final TextSplitter textSplitter;
+    private static final int DEFAULT_BUFFER_SIZE = 8192;
+    @Override
+    public String getContent(InputStream inputStream) {
+        // 使用带缓冲的输入流包装(保持原流不自动关闭)
+        try (InputStream bufferedStream = new BufferedInputStream(inputStream, DEFAULT_BUFFER_SIZE)) {
+            ApacheTikaDocumentParser apacheTikaDocumentParser = new ApacheTikaDocumentParser();
+            Document document = apacheTikaDocumentParser.parse(bufferedStream);
+            return document.text();
+        } catch (IOException e) {
+            String errorMsg = "Excel文件流读取失败";
+            throw new UtilException(errorMsg, e);
+        } catch (RuntimeException e) {
+            String errorMsg = "Excel内容解析异常";
+            throw new UtilException(errorMsg, e);
+        }
+    }
+
+    @Override
+    public List getChunkList(String content, String kid) {
+        return textSplitter.split(content, kid);
+    }
+}
diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/ResourceLoaderFactory.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/ResourceLoaderFactory.java
index aa72d761..ec33c668 100644
--- a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/ResourceLoaderFactory.java
+++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/ResourceLoaderFactory.java
@@ -1,10 +1,7 @@
 package org.ruoyi.chain.loader;
 
 import lombok.AllArgsConstructor;
-import org.ruoyi.chain.split.CharacterTextSplitter;
-import org.ruoyi.chain.split.CodeTextSplitter;
-import org.ruoyi.chain.split.MarkdownTextSplitter;
-import org.ruoyi.chain.split.TokenTextSplitter;
+import org.ruoyi.chain.split.*;
 
 import org.ruoyi.constant.FileType;
 import org.springframework.stereotype.Component;
@@ -16,6 +13,8 @@ public class ResourceLoaderFactory {
     private final CodeTextSplitter codeTextSplitter;
     private final MarkdownTextSplitter markdownTextSplitter;
     private final TokenTextSplitter tokenTextSplitter;
+    private final ExcelTextSplitter excelTextSplitter;
+
     public ResourceLoader getLoaderByFileType(String fileType){
         if (FileType.isTextFile(fileType)){
             return new TextFileLoader(characterTextSplitter);
@@ -25,6 +24,8 @@ public class ResourceLoaderFactory {
             return new PdfFileLoader(characterTextSplitter);
         } else if (FileType.isMdFile(fileType)) {
             return new MarkDownFileLoader(markdownTextSplitter);
+        }else if (FileType.isExcel(fileType)) {
+            return new ExcelFileLoader(excelTextSplitter);
         }else if (FileType.isCodeFile(fileType)) {
             return new CodeFileLoader(codeTextSplitter);
         }else {
diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/ExcelTextSplitter.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/ExcelTextSplitter.java
new file mode 100644
index 00000000..cc2b5f04
--- /dev/null
+++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/ExcelTextSplitter.java
@@ -0,0 +1,17 @@
+package org.ruoyi.chain.split;
+
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+@AllArgsConstructor
+@Slf4j
+public class ExcelTextSplitter implements TextSplitter{
+    @Override
+    public List split(String content, String kid) {
+        return null;
+    }
+}
diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/constant/FileType.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/constant/FileType.java
index aa141679..e939508b 100644
--- a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/constant/FileType.java
+++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/constant/FileType.java
@@ -7,6 +7,8 @@ public class FileType {
     public static final String DOC = "doc";
     public static final String DOCX = "docx";
     public static final String PDF = "pdf";
+    public static final String XLS = "xls";
+    public static final String XLSX = "xlsx";
 
     public static final String LOG = "log";
     public static final String XML = "xml";
@@ -88,4 +90,13 @@ public class FileType {
         }
     }
 
+    public static boolean isExcel(String type){
+        if (type.equalsIgnoreCase(XLS) || type.equalsIgnoreCase(XLSX)){
+            return true;
+        }
+        else {
+            return false;
+        }
+    }
+
 }
diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/VectorStoreServiceImpl.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/VectorStoreServiceImpl.java
index 294342a6..d74176a4 100644
--- a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/VectorStoreServiceImpl.java
+++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/VectorStoreServiceImpl.java
@@ -11,6 +11,7 @@ import dev.langchain4j.store.embedding.EmbeddingSearchRequest;
 import dev.langchain4j.store.embedding.EmbeddingStore;
 import dev.langchain4j.store.embedding.filter.Filter;
 import dev.langchain4j.store.embedding.filter.comparison.IsEqualTo;
+import dev.langchain4j.store.embedding.inmemory.InMemoryEmbeddingStore;
 import dev.langchain4j.store.embedding.milvus.MilvusEmbeddingStore;
 import dev.langchain4j.store.embedding.qdrant.QdrantEmbeddingStore;
 import dev.langchain4j.store.embedding.weaviate.WeaviateEmbeddingStore;
@@ -39,11 +40,11 @@ public class VectorStoreServiceImpl implements VectorStoreService {
 
     private final ConfigService configService;
 
-    Map> storeMap;
+    Map> storeMap = new HashMap<>();
 
     @Override
     public void createSchema(String kid,String modelName) {
-        EmbeddingStore embeddingStore = WeaviateEmbeddingStore.builder().build();
+        EmbeddingStore embeddingStore;
         switch (modelName) {
             case "weaviate" -> {
                 String protocol = configService.getConfigValue("weaviate", "protocol");
@@ -78,6 +79,10 @@ public class VectorStoreServiceImpl implements VectorStoreService {
                         .collectionName(collectionName)
                         .build();
             }
+            default -> {
+                //使用内存
+                embeddingStore = new InMemoryEmbeddingStore<>();
+            }
         }
         storeMap.put(kid,embeddingStore);
     }
diff --git a/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysUserPasswordBo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysUserPasswordBo.java
index 493ba0aa..ae9a0854 100644
--- a/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysUserPasswordBo.java
+++ b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysUserPasswordBo.java
@@ -7,7 +7,7 @@ import java.io.Serializable;
 
 
 /**
- * 描述:用户密码修改bo
+ *  用户密码修改bo
  *
  * @author ageerle@163.com
  * date 2025/3/9
diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/chat/ChatController.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/chat/ChatController.java
index a082cd9b..032c44dd 100644
--- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/chat/ChatController.java
+++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/chat/ChatController.java
@@ -28,7 +28,7 @@ import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
 
 
 /**
- * 描述:聊天管理
+ *  聊天管理
  *
  * @author ageerle@163.com
  * @date 2023-03-01
@@ -70,8 +70,7 @@ public class ChatController {
     @PostMapping("/audio")
     @ResponseBody
     public WhisperResponse audio(@RequestParam("file") MultipartFile file) {
-        WhisperResponse whisperResponse = sseService.speechToTextTranscriptionsV2(file);
-        return whisperResponse;
+        return sseService.speechToTextTranscriptionsV2(file);
     }
 
     /**
diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/bo/GenerateLuma.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/bo/GenerateLuma.java
index 8cef12cf..2fa34c7c 100644
--- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/bo/GenerateLuma.java
+++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/bo/GenerateLuma.java
@@ -3,7 +3,7 @@ package org.ruoyi.chat.domain.bo;
 import lombok.Data;
 
 /**
- * 描述:文生视频请求对象
+ *  文生视频请求对象
  *
  * @author ageerle@163.com
  * date 2024/6/27
diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/bo/GenerateLyric.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/bo/GenerateLyric.java
index 699c7801..4a59d75e 100644
--- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/bo/GenerateLyric.java
+++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/bo/GenerateLyric.java
@@ -3,7 +3,7 @@ package org.ruoyi.chat.domain.bo;
 import lombok.Data;
 
 /**
- * 描述:生成歌词
+ *  生成歌词
  *
  * @author ageerle@163.com
  * date 2024/6/27
diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/ChatModeType.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/ChatModeType.java
index 04c5e453..d29bccd3 100644
--- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/ChatModeType.java
+++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/ChatModeType.java
@@ -6,6 +6,8 @@ import lombok.Getter;
 public enum ChatModeType {
     OLLAMA("ollama", "本地部署模型"),
     CHAT("chat", "中转模型"),
+    DIFY("dify", "DIFY"),
+    COZE("coze", "扣子"),
     VECTOR("vector", "知识库向量模型");
 
     private final String code;
diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/DisplayType.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/DisplayType.java
index a4eae3d9..85813ff5 100644
--- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/DisplayType.java
+++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/DisplayType.java
@@ -3,7 +3,7 @@ package org.ruoyi.chat.enums;
 import lombok.Getter;
 
 /**
- * 描述:是否显示
+ *  是否显示
  *
  * @author ageerle@163.com
  * date 2025/4/10
diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/factory/ChatServiceFactory.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/factory/ChatServiceFactory.java
new file mode 100644
index 00000000..f1e88a9a
--- /dev/null
+++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/factory/ChatServiceFactory.java
@@ -0,0 +1,43 @@
+package org.ruoyi.chat.factory;
+
+import org.ruoyi.chat.service.chat.IChatService;
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * 聊天服务工厂类
+ *
+ * @author ageerle@163.com
+ * date 2025/5/10
+ */
+@Component
+public class ChatServiceFactory  implements ApplicationContextAware {
+    private final Map chatServiceMap = new ConcurrentHashMap<>();
+
+    @Override
+    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+        // 初始化时收集所有IChatService的实现
+        Map serviceMap = applicationContext.getBeansOfType(IChatService.class);
+        for (IChatService service : serviceMap.values()) {
+            if (service != null) {
+                chatServiceMap.put(service.getCategory(), service);
+            }
+        }
+    }
+
+    /**
+     * 根据模型类别获取对应的聊天服务实现
+     */
+    public IChatService getChatService(String category) {
+        IChatService service = chatServiceMap.get(category);
+        if (service == null) {
+            throw new IllegalArgumentException("不支持的模型类别: " + category);
+        }
+        return service;
+    }
+}
diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/listener/SSEEventSourceListener.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/listener/SSEEventSourceListener.java
index f8fd1cf9..7185d510 100644
--- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/listener/SSEEventSourceListener.java
+++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/listener/SSEEventSourceListener.java
@@ -24,7 +24,7 @@ import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
 import java.util.Objects;
 
 /**
- * 描述:OpenAIEventSourceListener
+ *  OpenAIEventSourceListener
  *
  * @author https:www.unfbx.com
  * @date 2023-02-22
diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/IChatService.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/IChatService.java
index fc070721..55ea2ac8 100644
--- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/IChatService.java
+++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/IChatService.java
@@ -16,6 +16,8 @@ public interface IChatService {
      * @param chatRequest 请求对象
      */
     SseEmitter chat(ChatRequest chatRequest,SseEmitter emitter);
-
-
+    /**
+     * 获取此服务支持的模型类别
+     */
+    String getCategory();
 }
diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/UserModelService.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/UserModelService.java
index ada36d09..01b677d7 100644
--- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/UserModelService.java
+++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/UserModelService.java
@@ -1,26 +1,16 @@
 package org.ruoyi.chat.service.chat;
 
-import cn.dev33.satoken.stp.StpUtil;
 import lombok.RequiredArgsConstructor;
 import org.ruoyi.chat.enums.DisplayType;
-import org.ruoyi.chat.enums.UserGradeType;
-import org.ruoyi.common.satoken.utils.LoginHelper;
 import org.ruoyi.domain.bo.ChatModelBo;
-import org.ruoyi.domain.bo.ChatPackagePlanBo;
 import org.ruoyi.domain.vo.ChatModelVo;
-import org.ruoyi.domain.vo.ChatPackagePlanVo;
 import org.ruoyi.service.IChatModelService;
-import org.ruoyi.service.IChatPackagePlanService;
-import org.ruoyi.system.domain.vo.SysUserVo;
-import org.ruoyi.system.service.ISysUserService;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 /**
- * 描述:用户模型信息
+ * 用户模型信息
  *
  * @author ageerle@163.com
  * date 2025/4/10
@@ -32,30 +22,9 @@ public class UserModelService {
 
     private final IChatModelService chatModelService;
 
-    private final ISysUserService userService;
-
-    private final IChatPackagePlanService packagePlanService;
-
     public List modelList(ChatModelBo bo) {
         bo.setModelShow(DisplayType.VISIBLE.getCode());
-        List chatModelList = chatModelService.queryList(bo);
-        ChatPackagePlanBo sysPackagePlanBo = new ChatPackagePlanBo();
-        if (StpUtil.isLogin()) {
-            Long userId = LoginHelper.getLoginUser().getUserId();
-            SysUserVo sysUserVo = userService.selectUserById(userId);
-            if (UserGradeType.UNPAID.getCode().equals(sysUserVo.getUserGrade())){
-                sysPackagePlanBo.setName("Free");
-                ChatPackagePlanVo chatPackagePlanVo = packagePlanService.queryList(sysPackagePlanBo).get(0);
-                List array = new ArrayList<>(Arrays.asList(chatPackagePlanVo.getPlanDetail().split(",")));
-                chatModelList.removeIf(model -> !array.contains(model.getModelName()));
-            }
-        }else {
-            sysPackagePlanBo.setName("Visitor");
-            ChatPackagePlanVo sysPackagePlanVo = packagePlanService.queryList(sysPackagePlanBo).get(0);
-            List array = new ArrayList<>(Arrays.asList(sysPackagePlanVo.getPlanDetail().split(",")));
-            chatModelList.removeIf(model -> !array.contains(model.getModelName()));
-        }
-        return new ArrayList<>(chatModelList);
+        return chatModelService.queryList(bo);
     }
 
 }
diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/CozeServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/CozeServiceImpl.java
new file mode 100644
index 00000000..6da0988c
--- /dev/null
+++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/CozeServiceImpl.java
@@ -0,0 +1,81 @@
+package org.ruoyi.chat.service.chat.impl;
+
+import com.coze.openapi.client.chat.CreateChatReq;
+import com.coze.openapi.client.chat.model.ChatEvent;
+import com.coze.openapi.client.chat.model.ChatEventType;
+import com.coze.openapi.client.connversations.message.model.Message;
+import com.coze.openapi.service.auth.TokenAuth;
+import com.coze.openapi.service.config.Consts;
+import com.coze.openapi.service.service.CozeAPI;
+import io.reactivex.Flowable;
+import lombok.extern.slf4j.Slf4j;
+import org.ruoyi.chat.enums.ChatModeType;
+import org.ruoyi.chat.service.chat.IChatService;
+import org.ruoyi.common.chat.request.ChatRequest;
+import org.ruoyi.domain.vo.ChatModelVo;
+import org.ruoyi.service.IChatModelService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
+
+import java.util.Collections;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/**
+ * 扣子聊天管理
+ *
+ * @author ageer
+ */
+@Service
+@Slf4j
+public class CozeServiceImpl implements IChatService {
+
+    @Autowired
+    private IChatModelService chatModelService;
+
+    @Override
+    public SseEmitter chat(ChatRequest chatRequest, SseEmitter emitter) {
+        ChatModelVo chatModelVo = chatModelService.selectModelByName(chatRequest.getModel());
+
+        TokenAuth authCli = new TokenAuth(chatModelVo.getApiKey());
+        CozeAPI coze =
+                new CozeAPI.Builder()
+                        .baseURL(chatModelVo.getApiHost())
+                        .auth(authCli)
+                        .readTimeout(10000)
+                        .build();
+        CreateChatReq req =
+                CreateChatReq.builder()
+                        .botID(chatModelVo.getModelName())
+                        .userID(chatRequest.getUserId().toString())
+                        .messages(Collections.singletonList(Message.buildUserQuestionText("What can you do?")))
+                        .build();
+
+        Flowable resp = coze.chat().stream(req);
+        ExecutorService executor = Executors.newFixedThreadPool(10);
+        executor.submit(() -> {
+            resp.blockingForEach(
+                    event -> {
+                        if (ChatEventType.CONVERSATION_MESSAGE_DELTA.equals(event.getEvent())) {
+                            emitter.send(event.getMessage().getContent());
+                            log.info("coze: {}", event.getMessage().getContent());
+                        }
+                        if (ChatEventType.CONVERSATION_CHAT_COMPLETED.equals(event.getEvent())) {
+                            emitter.complete();
+                            log.info("Token usage: {}", event.getChat().getUsage().getTokenCount());
+                        }
+                    }
+            );
+            coze.shutdownExecutor();
+        });
+
+
+        return emitter;
+    }
+
+    @Override
+    public String getCategory() {
+        return ChatModeType.COZE.getCode();
+    }
+}
diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/DifyServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/DifyServiceImpl.java
new file mode 100644
index 00000000..06989bb0
--- /dev/null
+++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/DifyServiceImpl.java
@@ -0,0 +1,96 @@
+package org.ruoyi.chat.service.chat.impl;
+
+import io.github.imfangs.dify.client.DifyClient;
+import io.github.imfangs.dify.client.DifyClientFactory;
+import io.github.imfangs.dify.client.callback.ChatStreamCallback;
+import io.github.imfangs.dify.client.enums.ResponseMode;
+import io.github.imfangs.dify.client.event.ErrorEvent;
+import io.github.imfangs.dify.client.event.MessageEndEvent;
+import io.github.imfangs.dify.client.event.MessageEvent;
+import io.github.imfangs.dify.client.model.DifyConfig;
+import io.github.imfangs.dify.client.model.chat.ChatMessage;
+
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+
+import org.ruoyi.chat.enums.ChatModeType;
+import org.ruoyi.chat.service.chat.IChatService;
+import org.ruoyi.common.chat.request.ChatRequest;
+import org.ruoyi.domain.vo.ChatModelVo;
+import org.ruoyi.service.IChatModelService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
+
+/**
+ * dify 聊天管理
+ *
+ * @author ageer
+ */
+@Service
+@Slf4j
+public class DifyServiceImpl implements IChatService {
+
+    @Autowired
+    private IChatModelService chatModelService;
+
+    @Override
+    public SseEmitter chat(ChatRequest chatRequest, SseEmitter emitter) {
+        ChatModelVo chatModelVo = chatModelService.selectModelByName(chatRequest.getModel());
+
+        // 使用自定义配置创建客户端
+        DifyConfig config = DifyConfig.builder()
+                .baseUrl(chatModelVo.getApiHost())
+                .apiKey(chatModelVo.getApiKey())
+                .connectTimeout(5000)
+                .readTimeout(60000)
+                .writeTimeout(30000)
+                .build();
+        DifyClient chatClient = DifyClientFactory.createClient(config);
+
+        // 创建聊天消息
+        ChatMessage message = ChatMessage.builder()
+                .query(chatRequest.getPrompt())
+                .user(chatRequest.getUserId().toString())
+                .responseMode(ResponseMode.STREAMING)
+                .build();
+
+        // 发送流式消息
+        try {
+            chatClient.sendChatMessageStream(message, new ChatStreamCallback() {
+                @SneakyThrows
+                @Override
+                public void onMessage(MessageEvent event) {
+                    emitter.send(event.getAnswer());
+                    log.info("收到消息片段: {}", event.getAnswer());
+                }
+
+                @Override
+                public void onMessageEnd(MessageEndEvent event) {
+                    emitter.complete();
+                    log.info("消息结束,完整消息ID: {}", event.getMessageId());
+                }
+
+                @Override
+                public void onError(ErrorEvent event) {
+                    System.err.println("错误: " + event.getMessage());
+                }
+
+                @Override
+                public void onException(Throwable throwable) {
+                    System.err.println("异常: " + throwable.getMessage());
+                }
+            });
+        } catch (Exception e) {
+            log.error("dify请求失败:{}", e.getMessage());
+        }
+
+        return emitter;
+    }
+
+    @Override
+    public String getCategory() {
+        return ChatModeType.DIFY.getCode();
+    }
+
+}
diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/OllamaServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/OllamaServiceImpl.java
index f06461b1..532b052e 100644
--- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/OllamaServiceImpl.java
+++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/OllamaServiceImpl.java
@@ -7,6 +7,8 @@ import io.github.ollama4j.models.chat.OllamaChatRequestBuilder;
 import io.github.ollama4j.models.chat.OllamaChatRequestModel;
 import io.github.ollama4j.models.generate.OllamaStreamHandler;
 import lombok.extern.slf4j.Slf4j;
+import org.ruoyi.chat.enums.ChatModeType;
+import org.ruoyi.chat.service.chat.IChatService;
 import org.ruoyi.chat.util.SSEUtil;
 import org.ruoyi.common.chat.entity.chat.Message;
 import org.ruoyi.common.chat.request.ChatRequest;
@@ -22,14 +24,18 @@ import java.util.List;
 import java.util.concurrent.CompletableFuture;
 
 
+/**
+ * @author ageer
+ */
 @Service
 @Slf4j
-public class OllamaServiceImpl  {
+public class OllamaServiceImpl implements IChatService {
 
-   @Autowired
-   private  IChatModelService chatModelService;
+    @Autowired
+    private IChatModelService chatModelService;
 
-    public SseEmitter chat(ChatRequest chatRequest,SseEmitter emitter) {
+    @Override
+    public SseEmitter chat(ChatRequest chatRequest, SseEmitter emitter) {
         ChatModelVo chatModelVo = chatModelService.selectModelByName(chatRequest.getModel());
         String host = chatModelVo.getApiHost();
         List msgList = chatRequest.getMessages();
@@ -56,7 +62,6 @@ public class OllamaServiceImpl  {
                 OllamaStreamHandler streamHandler = (s) -> {
                     String substr = s.substring(response.length());
                     response.append(substr);
-                    System.out.println(substr);
                     try {
                         emitter.send(substr);
                     } catch (IOException e) {
@@ -73,4 +78,8 @@ public class OllamaServiceImpl  {
         return emitter;
     }
 
+    @Override
+    public String getCategory() {
+        return ChatModeType.OLLAMA.getCode();
+    }
 }
diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/OpenAIServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/OpenAIServiceImpl.java
index c2e5ed31..094689c2 100644
--- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/OpenAIServiceImpl.java
+++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/OpenAIServiceImpl.java
@@ -3,6 +3,7 @@ package org.ruoyi.chat.service.chat.impl;
 import io.modelcontextprotocol.client.McpSyncClient;
 import lombok.extern.slf4j.Slf4j;
 import org.ruoyi.chat.config.ChatConfig;
+import org.ruoyi.chat.enums.ChatModeType;
 import org.ruoyi.chat.listener.SSEEventSourceListener;
 import org.ruoyi.chat.service.chat.IChatService;
 import org.ruoyi.common.chat.entity.chat.ChatCompletion;
@@ -21,6 +22,9 @@ import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
 import java.util.List;
 
 
+/**
+ * @author ageer
+ */
 @Service
 @Slf4j
 public class OpenAIServiceImpl implements IChatService {
@@ -28,9 +32,6 @@ public class OpenAIServiceImpl implements IChatService {
     @Autowired
     private IChatModelService chatModelService;
 
-    private OpenAiStreamClient openAiStreamClient;
-
-
     @Value("${spring.ai.mcp.client.enabled}")
     private Boolean enabled;
 
@@ -47,7 +48,7 @@ public class OpenAIServiceImpl implements IChatService {
     @Override
     public SseEmitter chat(ChatRequest chatRequest,SseEmitter emitter) {
         ChatModelVo chatModelVo = chatModelService.selectModelByName(chatRequest.getModel());
-        openAiStreamClient = ChatConfig.createOpenAiStreamClient(chatModelVo.getApiHost(), chatModelVo.getApiKey());
+        OpenAiStreamClient openAiStreamClient = ChatConfig.createOpenAiStreamClient(chatModelVo.getApiHost(), chatModelVo.getApiKey());
         List messages = chatRequest.getMessages();
         if (enabled) {
             String toolString = mcpChat(chatRequest.getPrompt());
@@ -69,4 +70,9 @@ public class OpenAIServiceImpl implements IChatService {
         return this.chatClient.prompt(prompt).call().content();
     }
 
+    @Override
+    public String getCategory() {
+        return ChatModeType.CHAT.getCode();
+    }
+
 }
diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java
index c12ed44e..cc5f2896 100644
--- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java
+++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java
@@ -8,7 +8,9 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import okhttp3.ResponseBody;
 import org.ruoyi.chat.enums.ChatModeType;
+import org.ruoyi.chat.factory.ChatServiceFactory;
 import org.ruoyi.chat.service.chat.IChatCostService;
+import org.ruoyi.chat.service.chat.IChatService;
 import org.ruoyi.chat.service.chat.ISseService;
 import org.ruoyi.chat.util.IpUtil;
 import org.ruoyi.chat.util.SSEUtil;
@@ -61,9 +63,7 @@ public class SseServiceImpl implements ISseService {
 
     private final IChatModelService chatModelService;
 
-    private final OpenAIServiceImpl openAIService;
-
-    private final OllamaServiceImpl ollamaService;
+    private final ChatServiceFactory chatServiceFactory;
 
     private final IChatSessionService chatSessionService;
 
@@ -95,7 +95,8 @@ public class SseServiceImpl implements ISseService {
                 chatCostService.deductToken(chatRequest);
             }
             // 根据模型分类调用不同的处理逻辑
-            switchModelAndHandle(chatRequest,sseEmitter);
+            IChatService chatService = chatServiceFactory.getChatService(chatModelVo.getCategory());
+            chatService.chat(chatRequest, sseEmitter);
         } catch (Exception e) {
             log.error(e.getMessage(),e);
             SSEUtil.sendErrorEvent(sseEmitter,e.getMessage());
@@ -147,17 +148,6 @@ public class SseServiceImpl implements ISseService {
             }
     }
 
-    /**
-     *  根据模型名称前缀调用不同的处理逻辑
-     */
-    private void switchModelAndHandle(ChatRequest chatRequest,SseEmitter emitter) {
-        // 调用ollama中部署的本地模型
-        if (ChatModeType.OLLAMA.getCode().equals(chatModelVo.getCategory())) {
-            ollamaService.chat(chatRequest,emitter);
-        } else {
-            openAIService.chat(chatRequest,emitter);
-        }
-    }
 
     /**
      *  构建消息列表
diff --git a/ruoyi-modules/ruoyi-wechat/src/main/java/org/ruoyi/service/VxLoginService.java b/ruoyi-modules/ruoyi-wechat/src/main/java/org/ruoyi/service/VxLoginService.java
index 31e6876b..874a8bf9 100644
--- a/ruoyi-modules/ruoyi-wechat/src/main/java/org/ruoyi/service/VxLoginService.java
+++ b/ruoyi-modules/ruoyi-wechat/src/main/java/org/ruoyi/service/VxLoginService.java
@@ -26,7 +26,7 @@ import org.springframework.stereotype.Service;
 import java.util.UUID;
 
 /**
- * 描述:微信公众号登录
+ *  微信公众号登录
  *
  * @author ageerle@163.com
  * date 2025/4/30
diff --git a/script/sql/update/20250509.sql b/script/sql/update/20250509.sql
new file mode 100644
index 00000000..19bfe5e1
--- /dev/null
+++ b/script/sql/update/20250509.sql
@@ -0,0 +1,4 @@
+ALTER TABLE `chat_model`
+    ADD COLUMN `api_url` varchar(50) NULL COMMENT '请求后缀' AFTER `api_key`;
+
+INSERT INTO `chat_config` (`id`, `category`, `config_name`, `config_value`, `config_dict`, `create_dept`, `create_time`, `create_by`, `update_by`, `update_time`, `remark`, `version`, `del_flag`, `update_ip`, `tenant_id`) VALUES (1779450794872414211, 'chat', 'apiUrl', 'v1/chat/completions', 'API 请求后缀', 103, '2024-04-14 18:05:05', '1', '1', '2025-04-23 22:29:04', NULL, NULL, '0', NULL, 0);