wanghanlin
|
d6a20f228a
|
feat: 支持图片/附件 SFTP 上传、多模态对话与 FAQ Markdown 编辑器
后端:
- 新增 SFTP 附件上传服务与 /attachment/upload 接口
- 新增 StorageProperties 集中化存储配置(支持 DataSize 50MB)
- ChatContext 新增 imageUrls,AI 调用链路透传多模态图片
- AssistantApp 构造 UserMessage(text, Media) 实现视觉输入
- ContentSafetyAdvisor MASK 脱敏时保留原消息图片 Media
- 配置拆分到 application-dev.yml / application-prod.yml(对齐参考项目)
前端:
- 对话面板支持图片/附件上传与缩略图/下载链接展示
- chat.ts 透传 imageUrls,chatAdapter 增加 Attachment 模型
- FAQ 编辑器替换为 md-editor-v3,支持粘贴图片自动上传
- FAQ 表格答案摘要去除 markdown 语法
- UI-DEV-GUIDE 补充 FormDrawer 使用规范
|
2 days ago |
wanghanlin
|
321bee93ff
|
fix(mcp): 修复 SSE 端点带路径前缀时连接 404
HttpClientSseClientTransport 内部用 URI.resolve 拼接端点,对以 / 开头的
sseEndpoint 会整体替换 path,导致 /mcp-cdw/sse 被解析成 /sse 丢失前缀。
改为显式拆分 origin 与 path,分别作为 baseUri 与 sseEndpoint 传入,
并兼容用户填 base 或完整 SSE URL 两种写法。
|
4 days ago |
wanghanlin
|
a1328994a5
|
feat(mcp): MCP 服务配置支持自定义请求头鉴权
- mcp_server_config 新增 headers JSONB 字段,SSE 模式通过 customizeRequest 注入请求头
- 敏感头(Authorization 等)返回前脱敏,更新时未改动保留原值
- DatabaseInitConfig 与 init-database.sql 同步新增 headers 列迁移
- McpClientManager 增加 @DependsOn(databaseInitConfig) 保证列迁移先于客户端加载
- 前端 MCP 配置弹窗新增请求头输入框
|
5 days ago |
wanghanlin
|
940caedea8
|
feat(部署): 前端静态资源免认证访问与打包配置
- pom.xml 将 static/** 单独作为资源目录,关闭 filtering 并指定 targetPath 避免平铺到 classes 根目录
- JwtAuthFilter 跳过首页与静态资源路径,避免管理后台密钥误校验产生 WARN 日志
- SecurityConfig 放行 /、/index.html、/assets/**、/sdk/** 等静态资源与首页
|
7 days ago |
wanghanlin
|
1cd8ed1248
|
feat(chat): 流式对话输出对齐 OpenAI Chat Completions 标准 SSE 格式
- 新增 AssistantApp.chatStreamOpenAi,复用 chatStream 编排逻辑,将流式文本分片包装为 data: {"choices":[{"delta":{"content":"..."}}]} 标准 JSON chunk
- 首片 delta 携带 role=assistant,流结束时追加 finish_reason=stop chunk 与 data: [DONE];熔断降级、FAQ 命中、错误兜底统一走 openAiFallbackStream
- AiController、OpenApiController 的流式接口改调 chatStreamOpenAi,旧路径保留纯文本输出向后兼容
|
7 days ago |
wanghanlin
|
23f195326d
|
feat(llm-trace): 提示词追踪增强与缺陷修复
新增追踪字段与落库链路:
- FAQ 命中详情(faqId/faqQuestion/faqMatchType/faqScore)
- 错误分类(errorType/errorMessage)与 Token 用量三档
- MCP 工具调用事件(toolCallsJson)、多轮历史(historyMessagesJson/historyTurns)
- RAG 命中片段(ragHitsJson)、检索模式(searchMode)、账户/API Key
- 数据库迁移新增 13 列 + 3 索引,同步 init-database.sql
前端增强:
- 筛选新增 API Key / 错误类型下拉,列表新增 RAG 列与刷新按钮
- 详情 Tab 扩展 FAQ / 工具调用 / 对话上下文,Prompt 关键词搜索高亮
- 新增会话时间线抽屉、调用趋势图(Chart.js 双轴折线)
缺陷修复:
- MCP 工具事件采集改用 ToolContext 显式收集器,修复 Reactor 流式跨线程丢 ThreadLocal 导致 toolCallsJson 为空
- 趋势统计 GROUP BY 别名改为 date_trunc 表达式,修复 PostgreSQL 语法错误
- 详情表格移除重复 row-key,新增 /error-types 与 /trend 接口
|
1 week ago |
wanghanlin
|
2fe322aa7d
|
完成「LLM 调用追踪面板」开发
|
1 week ago |
wanghanlin
|
61b0ae5639
|
feat(sensitive-word): 敏感词管理页布局与交互优化
- 工具栏新增级别筛选、统计提示,表格新增备注/更新时间列
- 状态列改为 t-switch 一键启用/禁用(失败自动回滚)
- 编辑弹窗加宽并新增启用开关、保存 loading、必填校验
- 批量导入提示成功/跳过重复数,删除确认带词内容
- 后端 list 接口新增 level 级别过滤参数
|
1 week ago |
wanghanlin
|
a8cb53b171
|
fix(mcp): MCP 客户端服务端重启后自动重连
|
1 week ago |
wanghanlin
|
6590ac762d
|
feat(role): 客服角色 MCP 工具授权
- 修正 allowedMcpTools 空列表语义:仅无角色(null)回退为全部,空列表=严格禁止
- 三个对话入口区分「无角色」与「角色无授权」,无角色向后兼容允许全部
- 工具注册名引入 configId 命名空间(mcp_<configId>_<name>),避免跨 Server 同名工具冲突
- 新增 GET /mcp-server/tools 接口,返回按 Server 分组的可用工具清单
- 更新角色 MCP 授权后清理 AssistantApp ChatClient 缓存,改动即时生效
- listRoles 解析 allowed_mcp_tools JSONB 为 string[],避免 PGobject 原样返回
- 前端 RoleManager 新增「MCP 工具授权」区块,接入保存/脏检测/全部授权
|
1 week ago |
wanghanlin
|
0205af7b72
|
fix(app): SSE 流式输出保留行尾空白避免 Markdown 标题损坏
新增 preserveTrailingWhitespace 方法,缓冲以空白结尾的 chunk 与下一 chunk 合并后发出,规避前端 SSE 逐行 trim 导致的行尾空格丢失(如 "## " 标题标记被拼成 "##标题")。
- 捕获内部订阅并注册 onCancel/onDispose,下游取消时同步取消上游,避免资源泄漏
- 尾部空白缓冲设 256 上限,防止纯空白输出导致 buffer 无界增长
- onError 先 flush 已缓冲内容再传播,避免已生成文本丢失
- 空白判定改用 Character.isWhitespace,对齐前端 trim 语义
|
2 weeks ago |
wanghanlin
|
7ce8028d73
|
重构客服角色管理页面排版
|
2 weeks ago |
wanghanlin
|
1dc9cc9fe6
|
修复保存faq报错问题
|
2 weeks ago |
wanghanlin
|
d5585206cf
|
新增反馈运营看板删除功能
|
2 weeks ago |
wanghanlin
|
1ed6c8fb43
|
新增反馈运营看板
|
2 weeks ago |
wanghanlin
|
b5abf32530
|
迁移到 TDesign 架构时漏掉了文档上传路由和菜单入口
|
2 weeks ago |
wanghanlin
|
1fe6a19366
|
修复:TDesign <t-space> 内部 v-if 导致按钮动作错位
|
3 weeks ago |
wanghanlin
|
fc1193c4f3
|
完成了 AI 执行链流程图的 5 项差异修正,并建立了三层持续同步机制(CLAUDE.md 规则 + Stop Hook + JavaDoc 标记)
|
3 weeks ago |
wanghanlin
|
bfb5a66393
|
AI回复增加推荐问题功能
|
3 weeks ago |
wanghanlin
|
149dc3270c
|
新增日志查看功能
|
3 weeks ago |
wanghanlin
|
5caebfb20f
|
API Key 管理页面编辑功能
|
3 weeks ago |
wanghanlin
|
de38fc4b90
|
调试日志:输出 MCP 调用原始返回结果
|
4 weeks ago |
wanghanlin
|
ba3393d897
|
重构后台前端项目,整体迁移到TDesign Starter for Vue架构下,并已全部测试通过
|
4 weeks ago |
wanghanlin
|
527d9e71b7
|
AI 对话执行链路流程图
|
4 weeks ago |
wanghanlin
|
f397fda3ca
|
修复 API Key 日志泄露、模型配置缓存、JWT 误报、IntentRouter JSON 解析异常、事务噪声及 MCP 超时重连
|
1 month ago |
wanghanlin
|
4eb726a056
|
SDK 聊天窗口底部的保密声明
|
1 month ago |
wanghanlin
|
91c4c185b3
|
重构(AI对话): 统一对话管道,收敛接口形态,补齐Open API能力
|
1 month ago |
wanghanlin
|
b9e14a2547
|
优化回答规则提示词并修复SSE流式换行丢失
|
1 month ago |
wanghanlin
|
0bc4b66e93
|
入口图标改造 + SDK 瘦身
|
1 month ago |
wanghanlin
|
14c5ccf6ab
|
、API Key 绑定客服角色、编写 SDK 集成文档
|
2 months ago |
wanghanlin
|
631398833a
|
添加文件存储和下载功能
|
2 months ago |
wanghanlin
|
5ab0cc756a
|
优化客服角色管理页面,修复角色数据重启后被覆盖的问题
|
2 months ago |
wanghanlin
|
8c02a3f054
|
为客服角色管理页面的字段添加 label
并移除排序字段
|
2 months ago |
wanghanlin
|
747a9ab558
|
支持mcp服务加入对话链
|
2 months ago |
wanghanlin
|
d95c921227
|
重构配置页面,对标cc-switch三要素设计,新增动态模型列表获取
|
2 months ago |
wanghanlin
|
db68b13cad
|
修复配置管理编辑保存报错问题
|
2 months ago |
wanghanlin
|
f8e5a1b59c
|
fix(安全): 修复多个安全漏洞和功能问题
安全修复:
- 修复会话管理 API 安全限制被完全解除的问题
- 移除 SecurityConfig 中会话接口的 permitAll() 配置
- 为 ConversationController 所有方法添加 @PreAuthorize 注解
- 新增 SDK 安全会话端点,内置账户归属校验
- 修复 verifyConversationOwnership 所有权绕过漏洞
- 强制要求至少提供 accountId 或 roleId 一个有效参数
- 防止通过空参数绕过归属校验
功能修复:
- 修复 Webhook 创建时 user_id 违反非空约束
- 从 SecurityContext 获取当前登录用户 ID
- 同步修复 ApiKeyController 的相同问题
- 修复 SDK 会话接口安全问题
- 新增 /ai/sdk/conversation/* 端点
- 实现 conversation_session 表归属校验
- SDK 前端代码迁移到新端点
影响范围:
- 会话管理接口现在需要 JWT 认证
- Webhook 和 API Key 创建功能恢复正常
- SDK 会话功能通过归属校验保证安全
安全等级:高危漏洞修复
涉及文件:8 个 Java 文件 + 3 个 SDK 文件
|
2 months ago |
wanghanlin
|
db292ff4d0
|
fix(知识库): 修复文档分块查询和切换状态功能
- 修复 vector_store 表缺少 create_time 列导致分块查询失败
- 添加幂等迁移方法,自动为 vector_store 表添加 create_time 列
- 兼容 Spring AI 自动建表时不含此列的情况
- 修复切换文档启用/禁用状态失败
- 解决 PostgreSQL json/jsonb 类型不匹配问题
- 使用 metadata::jsonb 显式类型转换
- 统一 enabled 值写入为字符串类型,与搜索过滤条件一致
- 修复批量启用/禁用文档功能
- 同步修复 batchToggleDocuments 方法的相同问题
影响范围:
- 文档分块查看/编辑/删除功能恢复正常
- 文档启用/禁用功能恢复正常
- 批量操作功能恢复正常
测试验证:
- 文档分块查询:✅ 通过
- 切换文档状态:✅ 通过
- 批量启用文档:✅ 通过
- 全量回归测试:✅ 无新增问题
|
2 months ago |
wanghanlin
|
09d8b909cf
|
修复用户管理功能异常,并将教训更新到文档
|
2 months ago |
wanghanlin
|
43449bc59a
|
fix(model-config): AI 大模型配置管理全面排查修复(20 项)
后端修复:
- 修复 updateConfig 激活逻辑竞态条件:appType 变更时只停用目标类型的活跃配置
- 修复 getConfigDetail 直接修改 MyBatis 缓存实体的安全隐患,改为防御性拷贝
- 修复 persistExtraConfig 异常被静默吞掉的问题,改为抛出异常触发事务回滚
- 修复 deleteConfig 缺失 @Transactional 注解
- 修复 updatePriority 未校验配置存在性
- 修复 updateConfig 空 apiKey(trim 后)会覆盖已有值的问题
- createConfig 增加 provider 字段非空校验
- 导入接口增加 100 条数据量限制,导出接口移除 maskApiKey 参数强制脱敏
- ChatModelFactory.testConnection 使用专用线程池替代 ForkJoinPool.commonPool
- EmbeddingModelFactory RetryTemplate 显式设置最大重试次数
- ModelConfigLoader 增加 RERANK 类型启动校验
- RERANK 健康状态从误报 ONLINE 改为 UNKNOWN
- listConfigs 从原生 SQL 重构为 MyBatis Plus LambdaQueryWrapper
前端修复:
- 新建模式切换提供商时始终重置 model_name 为新提供商默认模型
- 编辑模式切换提供商时清理不属于新提供商的无效 model_name
- extraConfig 始终发送(含空对象),确保后端能清空已废弃的高级参数
- 关闭导入弹窗时重置预览和结果状态
- 健康看板支持 UNKNOWN 状态(🟡 未检测)展示
|
2 months ago |
wanghanlin
|
e2ff2a9c3d
|
修复DatabaseInitConfig数据库初始化遗漏问题
|
2 months ago |
wanghanlin
|
c70d96c00d
|
修复文档列表移动分类功能的 bug
|
2 months ago |
wanghanlin
|
0414e209cb
|
大模型配置管理功能增强
|
2 months ago |
wanghanlin
|
e5cf51c507
|
知识库文档管理 P0 阶段功能完善与体验优化
- 新增文档关键词搜索(title + source_name LIKE 查询,前端 300ms 防抖)
- 文档列表增加文件大小(formatBytes)和分类名称列
- 分类管理支持编辑弹窗、树形层级展示(最多3级)、创建时选择父分类
- 新建 DocumentProcessingService 异步处理服务,上传/重处理改为同步插入
PROCESSING 记录 + 异步执行,前端自动轮询状态
- 修复分页参数越界、LIKE 通配符未转义、异步删除竞态条件等安全问题
- 修复全选 checkbox 始终选中、分类排序方向不一致、文本上传缺少认证头等缺陷
- 移除 DocUpload.js 遗留调试日志
|
2 months ago |
wanghanlin
|
cdaff49533
|
优化前端操作交互体验。
ai大模型配置错误不影响启动服务。
去除后台系统提示词,直接使用前端角色设定提示词。
|
2 months ago |
pyx
|
1e0c9a7f11
|
智能客服支持角色知识库并修复 SDK 历史会话隔离
|
2 months ago |
wanghanlin
|
dec3d19f3c
|
用户认证/运营看板/API开放平台
|
2 months ago |
wanghanlin
|
f7eb0bfaf1
|
feat(P0): 完成阶段一全部需求 — 混合检索/内容安全/用户反馈/FAQ精准匹配
P0-001 混合检索+重排序引擎:
- HybridSearchService 支持 VECTOR/KEYWORD/HYBRID 三种检索模式
- RrfFusion RRF 融合算法 (k=60)
- RerankerService 支持 DashScope + OpenAI 兼容多提供商
- vector_store 新增 content_tsvector 列 + GIN 索引 + 触发器
- DocSearch.js 增加检索模式下拉选择
P0-004 内容安全过滤:
- ContentSafetyService DFA 字典树引擎(volatile + copy-on-write 线程安全)
- ContentSafetyAdvisor BaseAdvisor 实现,输入/输出双向审核
- SensitiveWordService 敏感词 CRUD + 批量导入 + 字典树热加载
- SensitiveWordManager.js 前端管理组件
P0-002 用户反馈系统:
- MessageFeedbackService upsert 语义反馈提交 + 统计 API
- ChatPanel.js 添加 👍/👎 反馈按钮
- Chat SDK handleFeedback() 对接后端 POST /feedback
- ConversationService 导出集成反馈信息
P0-003 意图识别+FAQ精准匹配:
- IntentRouter LLM 意图分类(FAQ/RAG/CHITCHAT)
- FaqMatchEngine 三级匹配(精确→关键词→向量语义,阈值 0.85)
- FaqService FAQ CRUD + 异步向量化
- FaqManager.js 前端管理(CRUD + 批量导入/导出 + 启用/禁用)
共享变更:
- DatabaseInitConfig 新增 5 张表 + 全文检索初始化
- api.js 新增反馈/敏感词/FAQ API 封装
- app.js 注册 SensitiveWordManager + FaqManager 组件
- application.yml 新增 knowledge.faq.semantic-threshold 配置
|
2 months ago |
wanghanlin
|
8e586a8c35
|
求移除未使用的 PRODUCT_EXTRACT(商品信息抽取)类型配置
|
2 months ago |
wanghanlin
|
f73aee1616
|
中移除 AI 大模型配置相关的初始化数据
|
2 months ago |