lihao05
|
e7d7de79fe
|
feat: 功能优化
|
2025-10-20 10:12:44 +08:00 |
|
lihao05
|
77ddd169c7
|
feat: 流程编排init
|
2025-10-16 21:38:00 +08:00 |
|
evo
|
f906645708
|
Merge pull request #198 from wenxwang/fix/admin-knowledge-remove-error
fix(Knowledge): 知识库删除失败
|
2025-09-27 19:08:17 +08:00 |
|
evo
|
c17e16dd0f
|
Merge pull request #181 from LM20230311/feat-model-priority
解决问答实现类中重新查询模型逻辑可能导致自动选择的模型被重置问题
|
2025-09-27 19:07:34 +08:00 |
|
LM20230311
|
bd346f1e85
|
fix: 解决不登陆无法问答问题;修复余额不足后流不关闭问题;
|
2025-09-24 20:27:55 +08:00 |
|
LM20230311
|
f10f44158c
|
upgrade: 升级knife4j版本为3,4.5.0;
|
2025-09-24 19:01:33 +08:00 |
|
likunlong
|
9e23587fb1
|
upgrade: 升级spring ai版本为正式1.0.0;
|
2025-09-24 10:08:51 +08:00 |
|
ageerle
|
6462752fd6
|
恢复微信模块,优化知识库切片功能
|
2025-09-19 14:50:02 +08:00 |
|
ageerle
|
afc1272ff5
|
恢复微信模块,优化知识库切片功能
|
2025-09-19 11:15:37 +08:00 |
|
ageerle
|
acc2d5d1a8
|
Merge remote-tracking branch 'origin/pdf-image'
# Conflicts:
# ruoyi-admin/src/main/resources/application-dev.yml
# ruoyi-admin/src/main/resources/application-prod.yml
# ruoyi-modules-api/ruoyi-knowledge-api/pom.xml
# ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/PdfImageExtractService.java
# ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/PdfImageExtractServiceImpl.java
# ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/VectorStoreServiceImpl.java
# ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/knowledge/KnowledgeController.java
# ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/DealFileService.java
# ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/KnowledgeInfoServiceImpl.java
# script/sql/update/202505141010.sql
|
2025-09-19 10:56:26 +08:00 |
|
w
|
ff0a3d1016
|
fix(Knowledge): 知识库删除失败
|
2025-09-17 12:00:27 +08:00 |
|
Administrator
|
2b5fd810a4
|
fix(billing): 统一计费代理类BillingChatServiceProxy
|
2025-09-04 16:41:14 +08:00 |
|
Administrator
|
4a8d21a742
|
fix(billing): 1. 新增统一计费代理 BillingChatServiceProxy位置:ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/proxy/BillingChatServiceProxy.java 作用:为所有ChatService实现类提供透明的计费代理包装
核心功能:
AI回复前余额预检查,避免无效消耗
自动收集AI回复内容
统一处理AI回复的保存和计费
适配多种AI服务的数据格式
2. 重构工厂类
ChatServiceFactory
改进:自动为所有ChatService包装计费代理
新增方法:getOriginalService() 用于获取未包装的原始服务优势:调用方无需关心计费逻辑,完全透明
3. 增强计费服务 IChatCostService 接口
新增方法:checkBalanceSufficient() - 余额预检查
分离关注点:saveMessage() - 仅保存消息
publishBillingEvent() - 仅发布计费事件
deductToken() - 仅执行计费扣费
|
2025-09-04 16:35:55 +08:00 |
|
Administrator
|
c7554d7e35
|
fix(billing): 1. 新增统一计费代理 BillingChatServiceProxy位置:ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/proxy/BillingChatServiceProxy.java 作用:为所有ChatService实现类提供透明的计费代理包装
核心功能:
AI回复前余额预检查,避免无效消耗
自动收集AI回复内容
统一处理AI回复的保存和计费
适配多种AI服务的数据格式
2. 重构工厂类
ChatServiceFactory
改进:自动为所有ChatService包装计费代理
新增方法:getOriginalService() 用于获取未包装的原始服务优势:调用方无需关心计费逻辑,完全透明
3. 增强计费服务 IChatCostService 接口
新增方法:checkBalanceSufficient() - 余额预检查
分离关注点:saveMessage() - 仅保存消息
publishBillingEvent() - 仅发布计费事件
deductToken() - 仅执行计费扣费
|
2025-09-04 15:37:52 +08:00 |
|
Administrator
|
1e4af3d01b
|
fix(billing): 修复Token计费逻辑和消息更新机制
* 修复Token计费算法:按批次计费而非Token数量计费
* 添加ChatRequest.messageId字段支持消息关联更新
* 优化消息保存流程:分离基础信息保存和计费信息更新
* 修复预检查逻辑:统一预检查和实际扣费计算方式
* 调整Token阈值:100 → 1000,减少扣费频次
* 完善事件传递:ChatMessageCreatedEvent增加messageId
Fixes: 余额预检查误判、消息计费信息缺失、Token计费不准确
|
2025-08-29 15:19:37 +08:00 |
|
Administrator
|
1e3b49c9b8
|
用户发送消息 → 预检查余额 → 保存用户消息 → 发布计费事件 → 异步扣费 → 保存账单记录
添加了billingType计费类型字段消息保存的时候写入进去
|
2025-08-27 16:48:48 +08:00 |
|
Administrator
|
9f7f00e50c
|
用户发送消息 → 预检查余额 → 保存用户消息 → 发布计费事件 → 异步扣费 → 保存账单记录
添加了billingType计费类型字段消息保存的时候写入进去
|
2025-08-27 15:30:59 +08:00 |
|
Administrator
|
1c721981db
|
Merge remote-tracking branch 'origin/main'
# Conflicts:
# ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/DifyServiceImpl.java
# ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/impl/GenTableServiceImpl.java
|
2025-08-27 10:49:37 +08:00 |
|
l90215
|
7a374d877b
|
feat: 调整知识库问答接入提示词模板
|
2025-08-27 10:47:34 +08:00 |
|
likunlong
|
43426054ec
|
feat: 兼容不选自动模型时的原先逻辑;封装通用方法,简化创建有监控的SSE,简化流式错误输出并通知重试;
|
2025-08-27 10:47:31 +08:00 |
|
likunlong
|
ccdbb20935
|
feat: 不选择模型自动选择时走原始默认逻辑;
|
2025-08-27 10:47:29 +08:00 |
|
likunlong
|
4b37cfe97d
|
feat: 失败回调器中使用emitter对象的唯一hash作为key,不再使用session,不与业务进行绑定,同时也保证跨线程调用的正确性;
|
2025-08-27 10:47:26 +08:00 |
|
likunlong
|
c43d4784de
|
feat: 处理在非Web线程中获取Request中token失败的问题;
|
2025-08-27 10:47:25 +08:00 |
|
likunlong
|
359cee28d5
|
feat: 修改目前实现类使用统一重试降级逻辑;
|
2025-08-27 10:47:22 +08:00 |
|
likunlong
|
aa11c1f233
|
feat: 问答时添加统一重试和降级逻辑;
|
2025-08-27 10:47:20 +08:00 |
|
likunlong
|
a0d029c142
|
feat: 自动设置请求参数中的模型名称;
|
2025-08-27 10:47:20 +08:00 |
|
likunlong
|
6ce52befe2
|
feat: 根据是否有附件和是否自动,自动选择模型并且获取服务;
|
2025-08-27 10:47:19 +08:00 |
|
likunlong
|
4f7ad59e46
|
feat: 添加自动获取高优先级模型和服务的逻辑;
|
2025-08-27 10:47:19 +08:00 |
|
violateer
|
0cdba56a07
|
feature: 添加开启知识库角色,用户可见个人知识库及角色分配知识库
|
2025-08-27 10:47:01 +08:00 |
|
l90215
|
a6eb98daab
|
feat: fix代码生成类型问题
|
2025-08-27 10:46:37 +08:00 |
|
likunlong
|
67303cf5be
|
feat: 上传已经确定模型的选择,这里只需要根据名字获取模型直接使用就好;
|
2025-08-26 09:54:08 +08:00 |
|
l90215
|
b9276c5dcc
|
feat: 调整知识库问答接入提示词模板
|
2025-08-20 17:52:51 +08:00 |
|
evo
|
baf065a294
|
Merge pull request #175 from LM20230311/feat-model-priority
Feat model priority:支持自动选择模型;支持模型的重试;
|
2025-08-20 14:04:17 +08:00 |
|
likunlong
|
842a39d6d2
|
feat: 兼容不选自动模型时的原先逻辑;封装通用方法,简化创建有监控的SSE,简化流式错误输出并通知重试;
|
2025-08-19 20:28:53 +08:00 |
|
likunlong
|
9fba91c35f
|
feat: 不选择模型自动选择时走原始默认逻辑;
|
2025-08-19 18:00:20 +08:00 |
|
likunlong
|
498135b7fd
|
feat: 失败回调器中使用emitter对象的唯一hash作为key,不再使用session,不与业务进行绑定,同时也保证跨线程调用的正确性;
|
2025-08-19 17:53:27 +08:00 |
|
likunlong
|
c3ab13ae67
|
feat: 处理在非Web线程中获取Request中token失败的问题;
|
2025-08-19 17:39:20 +08:00 |
|
likunlong
|
1638b9dd75
|
feat: 修改目前实现类使用统一重试降级逻辑;
|
2025-08-19 16:51:51 +08:00 |
|
likunlong
|
4434d8346c
|
feat: 问答时添加统一重试和降级逻辑;
|
2025-08-19 16:46:25 +08:00 |
|
likunlong
|
119483df86
|
feat: 自动设置请求参数中的模型名称;
|
2025-08-19 15:12:24 +08:00 |
|
likunlong
|
07cb351807
|
feat: 根据是否有附件和是否自动,自动选择模型并且获取服务;
|
2025-08-19 10:32:17 +08:00 |
|
likunlong
|
8d0c557bdb
|
feat: 添加自动获取高优先级模型和服务的逻辑;
|
2025-08-18 14:30:08 +08:00 |
|
violateer
|
b52f7a7112
|
feature: 添加开启知识库角色,用户可见个人知识库及角色分配知识库
|
2025-08-15 20:41:59 +08:00 |
|
Administrator
|
affdc5e3a6
|
问题概述
1.保存消息和计费逻辑存在耦合
2.修改计费逻辑:
按次计费被阈值限制:旧逻辑把 TIMES 分支放在 totalTokens ≥ 100 的大分支里,导致没到100 token时不扣费,违背“每次调用就扣费”的语义。
token累计不当:TIMES 分支只扣费不处理累计,同时在 totalTokens < 100 时不会进入任何TIMES逻辑,累计会无意义增长。
粒度不稳定:TOKEN 计费一旦达阈值就把 total 全扣完并清零,不利于对账与用户体验。
打印方式:使用 System.out.println,不利于生产追踪。
改动要点
1.新增独立方法
saveMessage(ChatRequest): 只落库。
publishBillingEvent(ChatRequest): 只发布异步计费事件。
保留组合方法 saveMessageAndPublishEvent(ChatRequest) 以便需要一行调用时使用。
调用处已改为“先保存,再发布事件”
SseServiceImpl: 先 saveMessage,再 publishBillingEvent。
SSEEventSourceListener: 同上。
DifyServiceImpl: 同上。
2.计费模式分流:
TIMES:每次调用直接扣费,不累计。
TOKEN:按阈值(100)批量扣费,保留余数,账单颗粒稳定。
保留余数:total = prev + delta;billable = floor(total/threshold)threshold;remainder = total % threshold。
日志替换:统一使用 log.debug。
结构更清晰、可维护。
所有金额计算统一用 BigDecimal,保留两位小数,RoundingMode.HALF_UP
按次计费:每次直接扣费(BigDecimal),边界转 Double
按 token 计费:按阈值批量结算,保留余数;费用=单价(BigDecimal)×可结算token数
1. 消息分类存储
用户消息:role="user", deductCost=null, totalTokens=本次token数, remark="用户消息"
系统账单:role="system", deductCost=实际扣费, totalTokens=计费token数, remark="TIMES_BILLING/TOKEN_BILLING"
2. 数据流程
用户发送消息 → 预检查余额 → 保存用户消息 → 发布计费事件 → 异步扣费 → 保存账单记录
|
2025-08-14 14:00:48 +08:00 |
|
l90215
|
e83d70e9c3
|
feat: fix代码生成类型问题
|
2025-08-11 21:59:02 +08:00 |
|
Administrator
|
5a2e08f87d
|
问题概述
1.保存消息和计费逻辑存在耦合
2.修改计费逻辑:
按次计费被阈值限制:旧逻辑把 TIMES 分支放在 totalTokens ≥ 100 的大分支里,导致没到100 token时不扣费,违背“每次调用就扣费”的语义。
token累计不当:TIMES 分支只扣费不处理累计,同时在 totalTokens < 100 时不会进入任何TIMES逻辑,累计会无意义增长。
粒度不稳定:TOKEN 计费一旦达阈值就把 total 全扣完并清零,不利于对账与用户体验。
打印方式:使用 System.out.println,不利于生产追踪。
3.建议数据库不要存扣除金额和累计消耗token,消息表里不需要存“累计到目前为止多少”,否则每条消息都变成快照,既冗余又易不一致
改动要点
1.新增独立方法
saveMessage(ChatRequest): 只落库。
publishBillingEvent(ChatRequest): 只发布异步计费事件。
保留组合方法 saveMessageAndPublishEvent(ChatRequest) 以便需要一行调用时使用。
调用处已改为“先保存,再发布事件”
SseServiceImpl: 先 saveMessage,再 publishBillingEvent。
SSEEventSourceListener: 同上。
DifyServiceImpl: 同上。
2.计费模式分流:
TIMES:每次调用直接扣费,不累计。
TOKEN:按阈值(100)批量扣费,保留余数,账单颗粒稳定。
保留余数:total = prev + delta;billable = floor(total/threshold)threshold;remainder = total % threshold。
日志替换:统一使用 log.debug。
结构更清晰、可维护。
所有金额计算统一用 BigDecimal,保留两位小数,RoundingMode.HALF_UP
按次计费:每次直接扣费(BigDecimal),边界转 Double
按 token 计费:按阈值批量结算,保留余数;费用=单价(BigDecimal)×可结算token数
|
2025-08-08 13:39:37 +08:00 |
|
l90215
|
10708b7625
|
feat: 优化空指针bug&格式化代码&初始化用户知识库角色配置
|
2025-08-04 20:50:49 +08:00 |
|
ageerle
|
cc4ca69640
|
Merge pull request #143 from violateer/feature/knowledge-role
添加知识库权限控制功能
|
2025-08-02 15:56:42 +08:00 |
|
ageerle
|
3c19a2b7a4
|
Merge pull request #142 from keke-cxn/main
修复:请求地址'/system/role/authUser/selectAll',发生未知异常:cn.dev33.satoken.exce…
|
2025-08-02 15:56:16 +08:00 |
|
keke
|
21c390c4d6
|
修复:1.在使用dify的时候,发送1+1=?模型返回2,但是第二次问他为什么等于2的时候,模型无法获取上下文信息,经过排查,发现缺少conversationId,session表需要添加conversationId字段
2.在使用dify的时候message表中并没有存储模型返回的消息,并且扣除费用、
|
2025-08-02 13:18:30 +08:00 |
|