From c4af6699cf465819683ee91dfd36b744dd522fad Mon Sep 17 00:00:00 2001 From: wanghanlin <1533525126@qq.com> Date: Fri, 26 Jun 2026 11:07:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=8A=E5=B5=8C=E5=85=A5=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=BB=8E=E4=BB=85=E5=8D=83=E9=97=AE=E6=89=A9?= =?UTF-8?q?=E5=B1=95=E5=88=B0=E5=A4=9A=E5=8E=82=E5=95=86=E3=80=82=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E9=99=90=E5=88=B6=E3=80=81=E5=90=8E=E7=AB=AF=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E8=A6=86=E7=9B=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CLAUDE.md | 42 +- client/dist/chatbot-sdk.js | 44 +- client/dist/chatbot-sdk.js.map | 2 +- client/dist/chatbot-sdk.min.js | 2 +- client/dist/chatbot-sdk.min.js.map | 2 +- client/src/api.ts | 33 +- client/src/chat.ts | 10 +- .../supportbot/config/ChatModelFactory.java | 52 +- .../supportbot/config/DatabaseInitConfig.java | 19 +- .../config/DynamicEmbeddingModel.java | 58 + .../config/EmbeddingConfigFixer.java | 160 +++ .../config/EmbeddingModelFactory.java | 190 +++ .../supportbot/config/ModelConfigLoader.java | 52 +- .../supportbot/controller/AiController.java | 40 +- .../controller/AiModelConfigController.java | 5 + .../controller/ConversationController.java | 16 +- .../rag/load/InMemoryVectorStoreConfig.java | 14 +- .../rag/load/PgVectorStoreConfig.java | 52 +- src/main/resources/application.yml | 13 +- .../static/components/ModelConfigManager.js | 58 +- src/main/resources/static/sdk/chatbot-sdk.js | 44 +- .../resources/static/sdk/chatbot-sdk.js.map | 2 +- .../resources/static/sdk/chatbot-sdk.min.js | 2 +- .../static/sdk/chatbot-sdk.min.js.map | 2 +- src/main/resources/static/sdk/test.html | 1094 ++++++++++------- 25 files changed, 1398 insertions(+), 610 deletions(-) create mode 100644 src/main/java/com/wok/supportbot/config/DynamicEmbeddingModel.java create mode 100644 src/main/java/com/wok/supportbot/config/EmbeddingConfigFixer.java create mode 100644 src/main/java/com/wok/supportbot/config/EmbeddingModelFactory.java diff --git a/CLAUDE.md b/CLAUDE.md index aba1ab1..be45978 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -37,7 +37,7 @@ AI 智能客服系统,基于 Spring AI Alibaba + 通义千问 + PGVector,支 `SupportBotApplication.java` 中 `@SpringBootApplication(exclude = PgVectorStoreAutoConfiguration.class)`,因为项目在 `PgVectorStoreConfig` 中手动配置 PgVectorStore Bean(标记 `@Primary`),不使用自动配置。另有一个 `InMemoryVectorStoreConfig` 作为开发备选。 ### Spring AI 集成模式 -- **ChatClient Builder**: 所有对话通过 `ChatClient.builder(dashscopeChatModel)` 构建 +- **ChatClient Builder**: 所有对话通过 `ChatClient.builder(chatModelFactory.getChatModel("CHAT"))` 构建,ChatModel 由 `ChatModelFactory` 按 DB 活跃配置动态创建 - **Advisor 链**: `MessageChatMemoryAdvisor`(记忆) → `MyLoggerAdvisor`(日志) → `QuestionAnswerAdvisor`(RAG) - **结构化输出**: `ProductInfoApp` 使用 `.entity(ProductInfo.class)` 提取结构化数据 - **SSE 流式**: 三种实现 — Flux\、Flux\、SseEmitter @@ -57,26 +57,27 @@ AI 智能客服系统,基于 Spring AI Alibaba + 通义千问 + PGVector,支 ## 关键配置 -- `application.yml` 含 API Key,已被 `.gitignore` 排除 -- 对话模型: `qwen-turbo`,temperature: 0.7;Embedding: `text-embedding-v2`(1536维) +- `application.yml` 含 DashScope API Key,已被 `.gitignore` 排除 +- **模型名称、温度、最大 Token 等参数已全部迁移到前端「AI 大模型配置管理」页面**,通过 `ai_model_config` 表管理,不再在 yml 中配置(yml 仅保留 `api-key`) - MyBatis Plus 逻辑删除字段: `isDelete`,主键策略: `assign_id`(雪花算法) - **雪花 ID 精度问题**: `KnowledgeDocument.id`、`categoryId` 和 `KnowledgeCategory.id`、`parentId` 已添加 `@JsonSerialize(using = ToStringSerializer.class)`,序列化为字符串避免前端 JS 精度丢失。新增 Long ID 字段时务必加上此注解 - PostgreSQL JSONB 字段使用自定义 `PostgresJsonTypeHandler`(期望 JSON 对象 `'{}'`,非数组 `'[]'`) -- 向量维度: 1536,距离类型: COSINE_DISTANCE,索引: HNSW +- **向量维度**: 由 `knowledge.vector.dimension` 配置(默认 1536)。修改后需执行 `DROP TABLE IF EXISTS vector_store CASCADE` 重建向量表,并重新上传知识库文档。距离类型: COSINE_DISTANCE,索引: HNSW - **分块配置**: `knowledge.chunk.*` 配置项(`ChunkConfig`),默认 chunkSize=200, overlap=100, minChunkSizeChars=10, maxNumChunks=5000, keepSeparator=true - **上传校验**: `ALLOWED_EXTENSIONS` 白名单 + 50MB 大小限制(`spring.servlet.multipart` 配置),前后端双重校验 - **文档去重**: `KnowledgeDocument.contentHash` 字段(SHA-256),上传时自动计算并查重 - **数据库自动初始化**: `DatabaseInitConfig` 在启动时检查并创建 `knowledge_category`/`knowledge_document`/`ai_model_config` 等表,对已存在的 `knowledge_document` 表会自动补加 `content_hash` 列。注意 `knowledge-base.sql` 脚本为早期版本,缺少此列,实际以 `DatabaseInitConfig` 为准 ### 模型配置管理 -- **ai_model_config 表**: 存储大模型配置,支持多套配置按 App 类型(CHAT / PRODUCT_EXTRACT / EMBEDDING / RAG_REWRITE)独立管理 +- **ai_model_config 表**: 存储大模型配置,支持多套配置按 App 类型(CHAT / PRODUCT_EXTRACT / EMBEDDING / RAG_REWRITE)独立管理。**所有模型参数(名称、温度、最大Token、API Key、Base URL 等)全部由此表管理,不再依赖 application.yml** - **激活互斥**: 同一 App 类型只能有一个 `is_active=true` 的配置,激活操作由 Service 层 `@Transactional` 保证 -- **启动 seed**: 首次启动时自动从 `application.yml` 读取当前配置写入 DB 作为默认数据 -- **启动校验**: `ModelConfigLoader` 在应用就绪后比较 DB 活跃配置与 yml 配置,不一致时打印 WARNING 日志 +- **启动 seed**: 首次启动时使用硬编码默认值写入 DB(`qwen-turbo` / `text-embedding-v2`),用户可在前端修改 +- **启动校验**: `ModelConfigLoader` 在应用就绪后检查 DB 中每种 App 类型是否有活跃配置,并对 DashScope 提供商比较 DB 与 yml 的 API Key 一致性 - **API Key 脱敏**: 前端展示时只显示前 4 位 + `****` + 后 4 位 -- **运行时切换**: 通过 `ChatModelFactory` 按 DB 活跃配置动态创建/缓存 ChatModel,配置变更时立即生效(无需重启) -- **多提供商支持**: DashScope(通义千问)+ OpenAI 兼容提供商(DeepSeek / 豆包 / Kimi / 智谱 / OpenAI),通过 `spring-ai-openai` + 自定义 `baseUrl` 接入 -- **缓存刷新**: 配置增删改激活时 Controller 自动调用 `ChatModelFactory.clearCache()` + `AssistantApp.clearCache()` +- **ChatModel 运行时切换**: 通过 `ChatModelFactory` 按 DB 活跃配置动态创建/缓存 ChatModel(包括 DashScope,不再复用 yml 自动配置的 Bean),配置变更时立即生效(无需重启) +- **EmbeddingModel 运行时切换**: 通过 `EmbeddingModelFactory` + `DynamicEmbeddingModel` 代理,按 DB 活跃配置动态创建/缓存 EmbeddingModel,`PgVectorStoreConfig` 和 `InMemoryVectorStoreConfig` 注入 `DynamicEmbeddingModel`,向量化模型配置变更后无需重启即可生效 +- **多提供商支持**: DashScope(通义千问)+ OpenAI 兼容提供商(DeepSeek / 豆包 / Kimi / 智谱 / OpenAI),ChatModel 和 EmbeddingModel 均通过对应 API 手动构建 +- **缓存刷新**: 配置增删改激活时 Controller 自动调用 `ChatModelFactory.clearCache()` + `EmbeddingModelFactory.clearCache()` + `AssistantApp.clearCache()` ### 依赖版本 - Spring AI BOM: `1.0.1`,统一管理所有 `org.springframework.ai` 依赖版本 @@ -84,6 +85,25 @@ AI 智能客服系统,基于 Spring AI Alibaba + 通义千问 + PGVector,支 - `spring-ai-openai`: BOM 管理(OpenAI 兼容提供商支持) - `spring-ai-alibaba-starter` (M6.1) 已移除,不再使用 +### EmbeddingModel 架构 +- **EmbeddingConfigFixer**:`ApplicationListener`,启动时检查 EMBEDDING 配置合理性、**校验 EmbeddingModel 实际维度与 yml 配置是否一致**,不一致时 WARN 告警并给出修复步骤。**不再强制修正非 DashScope 配置**,尊重用户在 DB 中配置的提供商和模型 +- **EmbeddingModelFactory**:按 DB 活跃配置动态创建/缓存 EmbeddingModel,**支持多种提供商**: + - DashScope(通义千问):`DashScopeEmbeddingModel` + - OpenAI 兼容提供商(DeepSeek / 豆包 / Kimi / 智谱 / OpenAI):通过 `OpenAiEmbeddingModel` + 自定义 baseUrl + `embeddingsPath` 创建 + - **各厂商 embeddingsPath 映射**: + | 提供商 | embeddingsPath | 说明 | + |--------|---------------|------| + | dashscope | — | 不走 OpenAI 兼容,使用 DashScopeEmbeddingModel | + | volcengine | `/embeddings` | baseUrl 已含 `/api/v3`,不能重复加 `/v1` | + | moonshot | `/embeddings` | baseUrl 已含 `/v1` | + | zhipu | `/embeddings` | baseUrl 已含 `/api/paas/v4` | + | deepseek | `/v1/embeddings` | 标准 OpenAI 路径 | + | openai | `/v1/embeddings` | 标准 OpenAI 路径 | + - **豆包多模态模型**(`doubao-embedding-vision*`)使用 `/embeddings/multimodal` 端点,请求格式与 OpenAI 不兼容,Factory 会检测并拒绝创建,提示改用纯文本模型 + - 注意:各提供商的 embedding 端点兼容性由用户自行验证,向量维度需与 PgVectorStore 的 `dimensions(1536)` 一致 +- **DynamicEmbeddingModel**:代理类实现 `EmbeddingModel` 接口,每次调用委托给 Factory,使 VectorStore 无需重建即可热切换 +- **前端**:`ModelConfigManager.js` 对 EMBEDDING 类型不再限制 provider,可自由选择任意提供商 + ## 前端架构 - **技术栈**: Vue 3 CDN + ES Module(`importmap` 引入,无构建工具) @@ -110,4 +130,4 @@ AI 智能客服系统,基于 Spring AI Alibaba + 通义千问 + PGVector,支 - `DocumentService.searchDocuments()`: Spring AI 1.0.1 的 filter 支持有限,分类过滤暂未实现 - `CompressionQueryRewriter`: 当前传入空历史列表 - MyBatis Plus 3.5.12 的 `mybatis-plus-spring-boot3-starter` 不含 `PaginationInnerInterceptor`,分页通过 SQL `LIMIT/OFFSET` 手动实现 -- `ChatModelFactory` 中 DashScope 配置始终返回同一个自动配置 Bean,不支持按 DB 中的不同模型名/温度创建独立实例 +- `PgVectorStoreConfig.dimensions(1536)` 硬编码了向量维度,切换非 1536 维的 Embedding 模型时需修改并重建 vector_store 表 → **已修复:维度由 `knowledge.vector.dimension` 配置,启动时自动检测不匹配并告警** diff --git a/client/dist/chatbot-sdk.js b/client/dist/chatbot-sdk.js index c4b3740..23eb255 100644 --- a/client/dist/chatbot-sdk.js +++ b/client/dist/chatbot-sdk.js @@ -98,15 +98,9 @@ var ChatbotSDK = (function () { const params = new URLSearchParams(); params.set('message', message); params.set('chatId', currentConfig.integrateId); - if (currentConfig.userId) { - params.set('accountId', currentConfig.userId); - } - if (currentConfig.roleId) { - params.set('roleId', String(currentConfig.roleId)); - } - if (currentConfig.categoryId) { - params.set('categoryId', String(currentConfig.categoryId)); - } + setIfPresent(params, 'accountId', currentConfig.userId); + setIfPresent(params, 'roleId', currentConfig.roleId); + setIfPresent(params, 'categoryId', currentConfig.categoryId); return buildUrl(`/ai/assistant_app/chat/sync?${params.toString()}`); } /** 构建 SSE 流式请求 URL */ @@ -114,17 +108,21 @@ var ChatbotSDK = (function () { const params = new URLSearchParams(); params.set('message', message); params.set('chatId', currentConfig.integrateId); - if (currentConfig.userId) { - params.set('accountId', currentConfig.userId); - } - if (currentConfig.roleId) { - params.set('roleId', String(currentConfig.roleId)); - } - if (currentConfig.categoryId) { - params.set('categoryId', String(currentConfig.categoryId)); - } + setIfPresent(params, 'accountId', currentConfig.userId); + setIfPresent(params, 'roleId', currentConfig.roleId); + setIfPresent(params, 'categoryId', currentConfig.categoryId); return buildUrl(`/ai/assistant_app/chat/sse?${params.toString()}`); } + /** + * 安全设置可选参数:仅当 value 非空时追加,数字类型直接转字符串 + */ + function setIfPresent(params, key, value) { + if (value === undefined || value === null) + return; + if (typeof value === 'string' && value.trim() === '') + return; + params.set(key, String(value)); + } /** 带超时的 fetch 封装 */ async function safeFetch(url, options = {}, timeout = REQUEST_TIMEOUT) { const controller = new AbortController(); @@ -1084,18 +1082,18 @@ var ChatbotSDK = (function () { let aiContent; const aiTimestamp = now(); if (config$1.streaming) { - // 流式输出 + // 流式输出:气泡由 sendStreamMessage 内部的 onChunk 回调创建 aiContent = await sendStreamMessage(text, aiTimestamp); } else { - // 同步请求 + // 同步请求:需要在此渲染 AI 气泡 aiContent = await chatRequest(text); } - // 4. 隐藏 loading + // 4. 隐藏 loading(流式模式在 onChunk 中已隐藏,此处做兜底) if (hideLoadingFn$1) hideLoadingFn$1(); - // 5. 渲染 AI 气泡 - if (messagesContainer$1) { + // 5. 非流式模式:在此渲染 AI 气泡;流式模式气泡已在 stream 回调中创建 + if (!config$1.streaming && messagesContainer$1) { renderAIBubble(messagesContainer$1, aiContent, aiTimestamp); } const aiMsg = { diff --git a/client/dist/chatbot-sdk.js.map b/client/dist/chatbot-sdk.js.map index b5cd0d3..e3a9868 100644 --- a/client/dist/chatbot-sdk.js.map +++ b/client/dist/chatbot-sdk.js.map @@ -1 +1 @@ -{"version":3,"file":"chatbot-sdk.js","sources":["../src/logger.ts","../src/config.ts","../src/api.ts","../src/styles.ts","../src/utils.ts","../src/dom.ts","../src/storage.ts","../src/chat.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["config","messagesContainer","inputEl","sendBtn","clearBtn","showLoadingFn","hideLoadingFn"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"chatbot-sdk.js","sources":["../src/logger.ts","../src/config.ts","../src/api.ts","../src/styles.ts","../src/utils.ts","../src/dom.ts","../src/storage.ts","../src/chat.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["config","messagesContainer","inputEl","sendBtn","clearBtn","showLoadingFn","hideLoadingFn"],"mappings":"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"} \ No newline at end of file diff --git a/client/dist/chatbot-sdk.min.js b/client/dist/chatbot-sdk.min.js index b9e1b25..0826a35 100644 --- a/client/dist/chatbot-sdk.min.js +++ b/client/dist/chatbot-sdk.min.js @@ -1,2 +1,2 @@ -var ChatbotSDK=function(){"use strict";const n="[ChatbotSDK]";let e=!0;const t={info(t,r){e&&console.log(n,t,void 0!==r?r:"")},warn(t,r){e&&console.warn(n,t,void 0!==r?r:"")},error(e,t){console.error(n,e,void 0!==t?t:"")}};let r=null;function o(n){if(!r)throw new Error("API 配置未初始化");return`${r.requestDomain.replace(/\/+$/,"")}${n.startsWith("/")?n:`/${n}`}`}async function s(n,e={},t=3e4){const r=new AbortController,o=setTimeout(()=>r.abort(),t);try{return await fetch(n,Object.assign(Object.assign({},e),{signal:r.signal,mode:"cors",credentials:"include"}))}catch(n){if(n instanceof DOMException&&"AbortError"===n.name)throw new i("请求超时,请稍后重试","timeout");if(n instanceof TypeError&&n.message.includes("Failed to fetch"))throw new i("跨域请求被拦截,请联系管理员将当前域名加入 API 白名单","cors");throw new i("网络连接失败,请检查网络","network")}finally{clearTimeout(o)}}class i extends Error{constructor(n,e){super(n),this.name="CskError",this.type=e}}function a(n){switch(n){case 401:return"鉴权失败,请联系管理员";case 403:return"无访问权限,请联系管理员配置";case 404:return"请求的资源不存在";case 429:return"请求过于频繁,请稍后重试";case 500:return"服务器异常,请稍后重试";case 502:case 503:return"服务暂不可用,请稍后重试";default:return`请求失败(状态码 ${n})`}}async function c(n){const e=function(n){const e=new URLSearchParams;return e.set("message",n),e.set("chatId",r.integrateId),r.userId&&e.set("accountId",r.userId),r.roleId&&e.set("roleId",String(r.roleId)),r.categoryId&&e.set("categoryId",String(r.categoryId)),o(`/ai/assistant_app/chat/sync?${e.toString()}`)}(n),c=Date.now();t.info(`发送消息 integrateId=${r.integrateId} length=${n.length}`);try{const n=await s(e);if(!n.ok){const e=a(n.status);throw t.error(`请求失败 integrateId=${r.integrateId} status=${n.status} message=${e}`),new i(e,`http_${n.status}`)}const o=await n.text(),d=Date.now()-c;return t.info(`AI 回复 integrateId=${r.integrateId} length=${o.length} duration=${d}ms`),o}catch(n){if(n instanceof i)throw n;throw t.error(`请求异常 integrateId=${r.integrateId}`,n),new i("请求发生未知错误","unknown")}}async function d(n,e,c,d){var l;const u=function(n){const e=new URLSearchParams;return e.set("message",n),e.set("chatId",r.integrateId),r.userId&&e.set("accountId",r.userId),r.roleId&&e.set("roleId",String(r.roleId)),r.categoryId&&e.set("categoryId",String(r.categoryId)),o(`/ai/assistant_app/chat/sse?${e.toString()}`)}(n),m=Date.now();let p="";t.info(`发送流式消息 integrateId=${r.integrateId} length=${n.length}`);try{const n=await s(u,{},6e4);if(!n.ok){const e=a(n.status);return t.error(`流式请求失败 integrateId=${r.integrateId} status=${n.status} message=${e}`),void d(new i(e,`http_${n.status}`))}const o=null===(l=n.body)||void 0===l?void 0:l.getReader();if(!o)return void d(new i("浏览器不支持流式读取","stream_unsupported"));const g=new TextDecoder("utf-8",{stream:!0});let h="";try{for(;;){const{done:n,value:t}=await o.read();if(n)break;h+=g.decode(t,{stream:!0});const r=h.split("\n");h=r.pop()||"";for(const n of r){const t=n.trim();if(t&&!t.startsWith(":"))if(t.startsWith("data:")){const n=t.substring(5).trim();n&&(p+=n,e(n))}else{if("[DONE]"===t)break;t.startsWith("event:")||t.startsWith("id:")||t.startsWith("retry:")||(p+=t,e(t))}}}if(h.trim()){const n=h.trim();if(n.startsWith("data:")){const t=n.substring(5).trim();t&&(p+=t,e(t))}else"[DONE]"!==n&&(p+=n,e(n))}}catch(n){if(!(p.length>0))throw n;e("\n\n[网络不稳定,内容可能不完整]")}finally{o.releaseLock()}const f=Date.now()-m;t.info(`流式回复完成 integrateId=${r.integrateId} length=${p.length} duration=${f}ms`),c()}catch(n){n instanceof i?d(n):(t.error(`流式请求异常 integrateId=${r.integrateId}`,n),d(new i("网络连接失败,请检查网络","network")))}}let l=null;function u(n){const e=function(n,e){const t=n.match(/^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);if(!t)return n;const r=n=>Math.max(0,Math.min(255,n)),o=r(parseInt(t[1],16)+e),s=r(parseInt(t[2],16)+e),i=r(parseInt(t[3],16)+e);return`#${o.toString(16).padStart(2,"0")}${s.toString(16).padStart(2,"0")}${i.toString(16).padStart(2,"0")}`}(n.primaryColor,-15);return`\n --csk-primary: ${n.primaryColor};\n --csk-primary-hover: ${e};\n --csk-bg-user: var(--csk-primary);\n --csk-bg-ai: #F3F4F6;\n --csk-text-user: #FFFFFF;\n --csk-text-ai: #1F2937;\n --csk-window-width: ${n.width}px;\n `}function m(n){document.querySelector("style[data-csk-sdk]")||(l=document.createElement("style"),l.setAttribute("data-csk-sdk",""),l.textContent=function(n){return`\n/* ChatbotSDK 样式 - csk- 命名空间 */\n.csk-root {\n ${u(n)}\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans SC", sans-serif;\n font-size: 14px;\n line-height: 1.5;\n color: #1F2937;\n}\n\n/* ========== 悬浮按钮 ========== */\n.csk-launcher {\n position: fixed;\n bottom: 20px;\n z-index: 9998;\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: #fff;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n border: none;\n color: var(--csk-primary);\n user-select: none;\n}\n.csk-launcher--right {\n right: 20px;\n}\n.csk-launcher--left {\n left: 20px;\n}\n.csk-launcher:hover {\n transform: scale(1.1);\n box-shadow: 0 6px 24px rgba(0, 0, 0, 0.2);\n}\n.csk-launcher:active {\n transform: scale(0.95);\n}\n\n/* ========== 聊天弹窗 ========== */\n.csk-window {\n position: fixed;\n bottom: 20px;\n z-index: 9999;\n width: var(--csk-window-width);\n height: 560px;\n background: #fff;\n border-radius: 12px;\n box-shadow: 0 8px 40px rgba(0, 0, 0, 0.18);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n transition: opacity 0.2s ease, transform 0.2s ease;\n}\n.csk-window--right {\n right: 20px;\n}\n.csk-window--left {\n left: 20px;\n}\n.csk-window--hidden {\n display: none;\n}\n\n/* ========== 头部 ========== */\n.csk-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 16px;\n height: 48px;\n min-height: 48px;\n background: var(--csk-primary);\n color: #fff;\n border-radius: 12px 12px 0 0;\n cursor: move;\n user-select: none;\n}\n.csk-header__title {\n font-size: 15px;\n font-weight: 600;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.csk-header__actions {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n.csk-header__btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n color: #fff;\n cursor: pointer;\n border-radius: 6px;\n transition: background 0.15s;\n}\n.csk-header__btn:hover {\n background: rgba(255, 255, 255, 0.2);\n}\n\n/* ========== 消息区 ========== */\n.csk-messages {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n background: #FAFAFA;\n scroll-behavior: smooth;\n}\n.csk-messages::-webkit-scrollbar {\n width: 5px;\n}\n.csk-messages::-webkit-scrollbar-track {\n background: transparent;\n}\n.csk-messages::-webkit-scrollbar-thumb {\n background: #D1D5DB;\n border-radius: 3px;\n}\n\n/* 消息气泡 */\n.csk-msg {\n display: flex;\n flex-direction: column;\n margin-bottom: 16px;\n max-width: 85%;\n word-break: break-word;\n}\n.csk-msg--user {\n margin-left: auto;\n align-items: flex-end;\n}\n.csk-msg--ai {\n margin-right: auto;\n align-items: flex-start;\n}\n.csk-msg__bubble {\n padding: 10px 14px;\n border-radius: 12px;\n font-size: 14px;\n line-height: 1.6;\n}\n.csk-msg--user .csk-msg__bubble {\n background: var(--csk-bg-user);\n color: var(--csk-text-user);\n border-radius: 12px 12px 4px 12px;\n}\n.csk-msg--ai .csk-msg__bubble {\n background: var(--csk-bg-ai);\n color: var(--csk-text-ai);\n border-radius: 12px 12px 12px 4px;\n}\n.csk-msg__time {\n font-size: 11px;\n color: #9CA3AF;\n margin-top: 4px;\n padding: 0 4px;\n}\n\n/* ========== Loading 动画 ========== */\n.csk-loading {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 12px 14px;\n margin-bottom: 16px;\n}\n.csk-loading__dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: #D1D5DB;\n animation: csk-bounce 1.4s ease-in-out infinite both;\n}\n.csk-loading__dot:nth-child(1) { animation-delay: 0s; }\n.csk-loading__dot:nth-child(2) { animation-delay: 0.16s; }\n.csk-loading__dot:nth-child(3) { animation-delay: 0.32s; }\n\n@keyframes csk-bounce {\n 0%, 80%, 100% { transform: scale(0.6); }\n 40% { transform: scale(1); }\n}\n\n/* ========== 输入区 ========== */\n.csk-input-area {\n display: flex;\n align-items: center;\n padding: 10px 12px;\n border-top: 1px solid #E5E7EB;\n background: #fff;\n gap: 8px;\n}\n.csk-input {\n flex: 1;\n border: 1px solid #E5E7EB;\n border-radius: 8px;\n padding: 10px 12px;\n font-size: 14px;\n outline: none;\n transition: border-color 0.2s;\n font-family: inherit;\n resize: none;\n min-height: 20px;\n max-height: 100px;\n}\n.csk-input:focus {\n border-color: var(--csk-primary);\n}\n.csk-input::placeholder {\n color: #9CA3AF;\n}\n.csk-send-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n min-width: 40px;\n border: none;\n border-radius: 8px;\n background: var(--csk-primary);\n color: #fff;\n cursor: pointer;\n transition: background 0.2s;\n}\n.csk-send-btn:hover {\n background: var(--csk-primary-hover);\n}\n.csk-send-btn:disabled {\n background: #D1D5DB;\n cursor: not-allowed;\n}\n\n/* ========== 清空按钮 ========== */\n.csk-clear-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 6px 12px;\n border: 1px solid #E5E7EB;\n border-radius: 6px;\n background: #fff;\n color: #6B7280;\n font-size: 12px;\n cursor: pointer;\n margin: 0 auto 8px;\n transition: all 0.15s;\n}\n.csk-clear-btn:hover {\n background: #FEE2E2;\n border-color: #FCA5A5;\n color: #DC2626;\n}\n\n/* ========== 移动端适配 ========== */\n@media (max-width: 480px) {\n .csk-window {\n width: 100vw !important;\n height: 100vh !important;\n bottom: 0 !important;\n right: 0 !important;\n left: 0 !important;\n border-radius: 0;\n }\n .csk-header {\n border-radius: 0;\n }\n}\n`}(n),document.head.appendChild(l))}function p(){return"undefined"!=typeof crypto&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,n=>{const e=16*Math.random()|0;return("x"===n?e:3&e|8).toString(16)})}function g(){return Date.now()}function h(n,e){const t=document.createElement("div");t.id="csk-launcher",t.className="csk-launcher csk-launcher--"+("left-bottom"===n.position?"left":"right"),t.setAttribute("title",n.title),t.setAttribute("aria-label",n.title),t.setAttribute("role","button"),t.setAttribute("tabindex","0"),t.innerHTML=n.launcherIcon;const r=function(n,e){let t=null;return function(...r){null!==t&&clearTimeout(t),t=setTimeout(()=>{n.apply(this,r),t=null},e)}}(e,300);return t.addEventListener("click",r),t.addEventListener("keydown",n=>{"Enter"!==n.key&&" "!==n.key||(n.preventDefault(),r())}),t}function f(n,e,t){const r=document.createElement("div");r.className="csk-msg csk-msg--user";const o=document.createElement("div");o.className="csk-msg__bubble",o.textContent=e;const s=document.createElement("div");return s.className="csk-msg__time",s.textContent=w(t),r.appendChild(o),r.appendChild(s),n.appendChild(r),r}function x(n,e,t){const r=document.createElement("div");r.className="csk-msg csk-msg--ai";const o=document.createElement("div");o.className="csk-msg__bubble",o.textContent=e;const s=document.createElement("div");return s.className="csk-msg__time",s.textContent=w(t),r.appendChild(o),r.appendChild(s),n.appendChild(r),r}function k(n){n.scrollTop=n.scrollHeight}function w(n){const e=new Date(n);return`${String(e.getHours()).padStart(2,"0")}:${String(e.getMinutes()).padStart(2,"0")}`}function b(n){return`csk_history_${n}`}function y(n){try{localStorage.removeItem(b(n))}catch(n){t.warn("清空会话历史失败",n)}}let v=null,I=[],C=null,E=null,_=null,$=null,D=null,L=null,S=!1;function A(n,e){v=n,C=e.messagesContainer,E=e.inputEl,_=e.sendBtn,$=e.clearBtn,D=e.showLoading,L=e.hideLoading,function(){if(!E||!_)return;_.addEventListener("click",()=>{F()}),E.addEventListener("keydown",n=>{"Enter"!==n.key||n.shiftKey||(n.preventDefault(),F())}),E.addEventListener("input",()=>{N()}),$&&$.addEventListener("click",()=>{!function(){if(!v)return;if(!confirm("确定清空所有对话记录?"))return;I=[],C&&(C.innerHTML="");$&&($.style.display="none");y(v.integrateId),t.info(`清空会话 integrateId=${v.integrateId}`)}()})}();const r=function(n){try{const e=localStorage.getItem(b(n));if(!e)return[];const r=JSON.parse(e);return r&&Array.isArray(r.messages)?(t.info(`加载历史消息 integrateId=${n} count=${r.messages.length}`),r.messages):[]}catch(n){return t.warn("加载会话历史失败",n),[]}}(n.integrateId);r.length>0&&(I=r,function(){if(!C)return;C.innerHTML="";for(const n of I)"user"===n.role?f(C,n.content,n.timestamp):x(C,n.content,n.timestamp);k(C),$&&I.length>0&&($.style.display="inline-flex")}())}function N(){if(!_||!E)return;E.value.trim().length>0&&!S?_.removeAttribute("disabled"):_.setAttribute("disabled","true")}async function F(){if(!E||!v||S)return;const n=E.value.trim();if(""===n)return;E.value="",N(),E.style.height="auto",S=!0,N();const e=g();C&&f(C,n,e);const r={id:p(),role:"user",content:n,timestamp:e};I.push(r),$&&I.length>0&&($.style.display="inline-flex"),C&&k(C),D&&D(),C&&k(C);try{let e;const r=g();e=v.streaming?await async function(n,e){return new Promise((t,r)=>{let o=null,s=null,i="",a=!1;d(n,n=>{if(i+=n,!a&&C){L&&L();const{wrapper:n,bubble:t}=function(n,e){const t=document.createElement("div");t.className="csk-msg csk-msg--ai";const r=document.createElement("div");r.className="csk-msg__bubble",r.innerHTML="";const o=document.createElement("div");return o.className="csk-msg__time",o.textContent=w(e),t.appendChild(r),t.appendChild(o),n.appendChild(t),{wrapper:t,bubble:r}}(C,e);s=n,o=t,a=!0}o&&(o.textContent=i),C&&k(C)},()=>{a||""!==i?t(i):c(n).then(n=>t(n)).catch(r)},n=>{i.length>0?(o&&(o.textContent=i+"\n\n[回复被中断]"),t(i)):r(n)})})}(n,r):await c(n),L&&L(),C&&x(C,e,r);const o={id:p(),role:"ai",content:e,timestamp:r};I.push(o),function(n,e){try{let r=e;r.length>200&&(r=r.slice(50),t.warn(`消息数量达到上限,已裁剪最早 50 条,当前 ${r.length} 条`));const o={messages:r,updatedAt:Date.now()};localStorage.setItem(b(n),JSON.stringify(o))}catch(n){n instanceof Error&&"QuotaExceededError"===n.name?t.error("localStorage 空间不足,会话历史保存失败。建议清空历史记录。"):t.error("保存会话历史失败",n)}}(v.integrateId,I),C&&k(C)}catch(n){L&&L();const e=n instanceof i?n.message:"发送失败,请稍后重试";if(C){const n=document.createElement("div");n.className="csk-msg csk-msg--ai";const t=document.createElement("div");t.className="csk-msg__bubble",t.style.color="#DC2626",t.textContent=`⚠ ${e}`,n.appendChild(t),C.appendChild(n)}t.error(`发送失败 integrateId=${v.integrateId}`,n)}finally{S=!1,N()}}let B=null,M=!1,q=null,T=null,H=null,z=null,j=null,U=null,W=null,K=null,O=null;function P(){T&&T.classList.remove("csk-window--hidden")}function R(){T&&T.classList.add("csk-window--hidden")}function J(){T&&(T.classList.contains("csk-window--hidden")?(P(),setTimeout(()=>{z&&z.focus()},100)):R())}const X={init:function(n){if(M)return void t.warn("SDK 已初始化,请先调用 destroy() 再重新初始化");const o=function(n){var e,r,o,s,i,a;if(!n.integrateId||"string"!=typeof n.integrateId||""===n.integrateId.trim())return t.error('integrateId 是必传参数,请检查 init() 调用。示例:ChatbotSDK.init({ integrateId: "my-app", requestDomain: "https://api.example.com" })'),null;if(!n.requestDomain||"string"!=typeof n.requestDomain||""===n.requestDomain.trim())return t.error('requestDomain 是必传参数,请检查 init() 调用。示例:ChatbotSDK.init({ integrateId: "my-app", requestDomain: "https://api.example.com" })'),null;try{new URL(n.requestDomain)}catch(e){return t.error(`requestDomain 不是合法的 URL 格式:${n.requestDomain}。请提供完整的域名,如 https://api.example.com`),null}const c={integrateId:n.integrateId.trim(),requestDomain:n.requestDomain.replace(/\/+$/,""),userId:n.userId,roleId:n.roleId,categoryId:n.categoryId,showCategorySwitch:null!==(e=n.showCategorySwitch)&&void 0!==e&&e,title:n.title||"AI 智能助手",width:null!==(r=n.width)&&void 0!==r?r:380,position:"left-bottom"===n.position?"left-bottom":"right-bottom",primaryColor:n.primaryColor||"#4F46E5",launcherIcon:n.launcherIcon||'\n \n \n',showClear:null===(o=n.showClear)||void 0===o||o,showAdminPanel:null!==(s=n.showAdminPanel)&&void 0!==s&&s,streaming:null===(i=n.streaming)||void 0===i||i,locale:n.locale||"zh-CN",debug:null===(a=n.debug)||void 0===a||a};return t.info(`配置解析完成 integrateId=${c.integrateId} requestDomain=${c.requestDomain}`),c}(n);if(!o)return;var s;B=o,s=B.debug,e=s,function(n){r=n}(B),m(B),q=h(B,J),document.body.appendChild(q);const i=function(n){const e=document.createElement("div");e.id="csk-window",e.className=`csk-root csk-window csk-window--${"left-bottom"===n.position?"left":"right"} csk-window--hidden`;const t=document.createElement("div");t.className="csk-header";const r=document.createElement("span");r.className="csk-header__title",r.textContent=n.title;const o=document.createElement("div");o.className="csk-header__actions";const s=document.createElement("button");s.className="csk-header__btn csk-header__btn--minimize",s.setAttribute("title","最小化"),s.innerHTML='',s.addEventListener("click",()=>{e.classList.add("csk-window--hidden")});const i=document.createElement("button");i.className="csk-header__btn csk-header__btn--close",i.setAttribute("title","关闭"),i.innerHTML='',i.addEventListener("click",()=>{e.classList.add("csk-window--hidden")}),o.appendChild(s),o.appendChild(i),t.appendChild(r),t.appendChild(o);const a=document.createElement("div");a.id="csk-messages",a.className="csk-messages";const c=document.createElement("div");c.className="csk-input-area";const d=document.createElement("textarea");d.id="csk-input",d.className="csk-input",d.setAttribute("placeholder","输入您的问题..."),d.setAttribute("rows","1"),d.setAttribute("autofocus","");const l=document.createElement("button");l.id="csk-send-btn",l.className="csk-send-btn",l.setAttribute("title","发送"),l.setAttribute("disabled","true"),l.innerHTML='',c.appendChild(d),c.appendChild(l),e.appendChild(t),e.appendChild(a),e.appendChild(c);let u=null;n.showClear&&(u=document.createElement("button"),u.className="csk-clear-btn",u.textContent="清空对话",u.style.display="none",e.insertBefore(u,c));let m=null;return{window:e,messagesContainer:a,inputEl:d,sendBtn:l,clearBtn:u,showLoading:function(){if(m)return m.style.display="flex",m;const n=document.createElement("div");return n.className="csk-loading",n.innerHTML='\n
\n
\n
\n ',a.appendChild(n),m=n,n},hideLoading:function(){m&&m.parentNode&&(m.parentNode.removeChild(m),m=null)}}}(B);T=i.window,H=i.messagesContainer,z=i.inputEl,j=i.sendBtn,U=i.clearBtn,W=i.showLoading,K=i.hideLoading,document.body.appendChild(T);const a=T.querySelector(".csk-header");a&&(O=function(n,e){let t=!1,r=0,o=0,s=0,i=0;const a=n=>{t=!0,r=n.clientX,o=n.clientY;const a=e.getBoundingClientRect();s=r-a.left,i=o-a.top,document.addEventListener("mousemove",c),document.addEventListener("mouseup",d)},c=n=>{if(!t)return;const r=n.clientX-s,o=n.clientY-i,a=window.innerWidth-e.offsetWidth,c=window.innerHeight-e.offsetHeight;e.style.right="auto",e.style.bottom="auto",e.style.left=`${Math.max(0,Math.min(r,a))}px`,e.style.top=`${Math.max(0,Math.min(o,c))}px`},d=()=>{t=!1,document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",d)};return n.addEventListener("mousedown",a),()=>{n.removeEventListener("mousedown",a),document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",d)}}(a,T)),A(B,{messagesContainer:H,inputEl:z,sendBtn:j,clearBtn:U,showLoading:W,hideLoading:K}),M=!0,t.info(`初始化完成 integrateId=${B.integrateId} requestDomain=${B.requestDomain}`)},destroy:function(){if(!M)return;q&&q.parentNode&&(q.parentNode.removeChild(q),q=null),T&&T.parentNode&&(T.parentNode.removeChild(T),T=null),O&&(O(),O=null),l&&l.parentNode&&(l.parentNode.removeChild(l),l=null),document.querySelectorAll("style[data-csk-sdk]").forEach(n=>n.remove());const n=null==B?void 0:B.integrateId;B=null,M=!1,H=null,z=null,j=null,U=null,W=null,K=null,t.info(`销毁实例 integrateId=${n}`)},open:P,close:R,toggle:J,clearHistory:function(){B&&(U?U.click():confirm("确定清空所有对话记录?")&&y(B.integrateId))}};return"undefined"!=typeof window&&(window.ChatbotSDK=X),X}(); +var ChatbotSDK=function(){"use strict";const n="[ChatbotSDK]";let e=!0;const t={info(t,r){e&&console.log(n,t,void 0!==r?r:"")},warn(t,r){e&&console.warn(n,t,void 0!==r?r:"")},error(e,t){console.error(n,e,void 0!==t?t:"")}};let r=null;function o(n){if(!r)throw new Error("API 配置未初始化");return`${r.requestDomain.replace(/\/+$/,"")}${n.startsWith("/")?n:`/${n}`}`}function i(n,e,t){null!=t&&("string"==typeof t&&""===t.trim()||n.set(e,String(t)))}async function s(n,e={},t=3e4){const r=new AbortController,o=setTimeout(()=>r.abort(),t);try{return await fetch(n,Object.assign(Object.assign({},e),{signal:r.signal,mode:"cors",credentials:"include"}))}catch(n){if(n instanceof DOMException&&"AbortError"===n.name)throw new a("请求超时,请稍后重试","timeout");if(n instanceof TypeError&&n.message.includes("Failed to fetch"))throw new a("跨域请求被拦截,请联系管理员将当前域名加入 API 白名单","cors");throw new a("网络连接失败,请检查网络","network")}finally{clearTimeout(o)}}class a extends Error{constructor(n,e){super(n),this.name="CskError",this.type=e}}function c(n){switch(n){case 401:return"鉴权失败,请联系管理员";case 403:return"无访问权限,请联系管理员配置";case 404:return"请求的资源不存在";case 429:return"请求过于频繁,请稍后重试";case 500:return"服务器异常,请稍后重试";case 502:case 503:return"服务暂不可用,请稍后重试";default:return`请求失败(状态码 ${n})`}}async function l(n){const e=function(n){const e=new URLSearchParams;return e.set("message",n),e.set("chatId",r.integrateId),i(e,"accountId",r.userId),i(e,"roleId",r.roleId),i(e,"categoryId",r.categoryId),o(`/ai/assistant_app/chat/sync?${e.toString()}`)}(n),l=Date.now();t.info(`发送消息 integrateId=${r.integrateId} length=${n.length}`);try{const n=await s(e);if(!n.ok){const e=c(n.status);throw t.error(`请求失败 integrateId=${r.integrateId} status=${n.status} message=${e}`),new a(e,`http_${n.status}`)}const o=await n.text(),i=Date.now()-l;return t.info(`AI 回复 integrateId=${r.integrateId} length=${o.length} duration=${i}ms`),o}catch(n){if(n instanceof a)throw n;throw t.error(`请求异常 integrateId=${r.integrateId}`,n),new a("请求发生未知错误","unknown")}}async function d(n,e,l,d){var u;const m=function(n){const e=new URLSearchParams;return e.set("message",n),e.set("chatId",r.integrateId),i(e,"accountId",r.userId),i(e,"roleId",r.roleId),i(e,"categoryId",r.categoryId),o(`/ai/assistant_app/chat/sse?${e.toString()}`)}(n),p=Date.now();let g="";t.info(`发送流式消息 integrateId=${r.integrateId} length=${n.length}`);try{const n=await s(m,{},6e4);if(!n.ok){const e=c(n.status);return t.error(`流式请求失败 integrateId=${r.integrateId} status=${n.status} message=${e}`),void d(new a(e,`http_${n.status}`))}const o=null===(u=n.body)||void 0===u?void 0:u.getReader();if(!o)return void d(new a("浏览器不支持流式读取","stream_unsupported"));const i=new TextDecoder("utf-8",{stream:!0});let h="";try{for(;;){const{done:n,value:t}=await o.read();if(n)break;h+=i.decode(t,{stream:!0});const r=h.split("\n");h=r.pop()||"";for(const n of r){const t=n.trim();if(t&&!t.startsWith(":"))if(t.startsWith("data:")){const n=t.substring(5).trim();n&&(g+=n,e(n))}else{if("[DONE]"===t)break;t.startsWith("event:")||t.startsWith("id:")||t.startsWith("retry:")||(g+=t,e(t))}}}if(h.trim()){const n=h.trim();if(n.startsWith("data:")){const t=n.substring(5).trim();t&&(g+=t,e(t))}else"[DONE]"!==n&&(g+=n,e(n))}}catch(n){if(!(g.length>0))throw n;e("\n\n[网络不稳定,内容可能不完整]")}finally{o.releaseLock()}const f=Date.now()-p;t.info(`流式回复完成 integrateId=${r.integrateId} length=${g.length} duration=${f}ms`),l()}catch(n){n instanceof a?d(n):(t.error(`流式请求异常 integrateId=${r.integrateId}`,n),d(new a("网络连接失败,请检查网络","network")))}}let u=null;function m(n){const e=function(n,e){const t=n.match(/^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);if(!t)return n;const r=n=>Math.max(0,Math.min(255,n)),o=r(parseInt(t[1],16)+e),i=r(parseInt(t[2],16)+e),s=r(parseInt(t[3],16)+e);return`#${o.toString(16).padStart(2,"0")}${i.toString(16).padStart(2,"0")}${s.toString(16).padStart(2,"0")}`}(n.primaryColor,-15);return`\n --csk-primary: ${n.primaryColor};\n --csk-primary-hover: ${e};\n --csk-bg-user: var(--csk-primary);\n --csk-bg-ai: #F3F4F6;\n --csk-text-user: #FFFFFF;\n --csk-text-ai: #1F2937;\n --csk-window-width: ${n.width}px;\n `}function p(n){document.querySelector("style[data-csk-sdk]")||(u=document.createElement("style"),u.setAttribute("data-csk-sdk",""),u.textContent=function(n){return`\n/* ChatbotSDK 样式 - csk- 命名空间 */\n.csk-root {\n ${m(n)}\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans SC", sans-serif;\n font-size: 14px;\n line-height: 1.5;\n color: #1F2937;\n}\n\n/* ========== 悬浮按钮 ========== */\n.csk-launcher {\n position: fixed;\n bottom: 20px;\n z-index: 9998;\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: #fff;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n border: none;\n color: var(--csk-primary);\n user-select: none;\n}\n.csk-launcher--right {\n right: 20px;\n}\n.csk-launcher--left {\n left: 20px;\n}\n.csk-launcher:hover {\n transform: scale(1.1);\n box-shadow: 0 6px 24px rgba(0, 0, 0, 0.2);\n}\n.csk-launcher:active {\n transform: scale(0.95);\n}\n\n/* ========== 聊天弹窗 ========== */\n.csk-window {\n position: fixed;\n bottom: 20px;\n z-index: 9999;\n width: var(--csk-window-width);\n height: 560px;\n background: #fff;\n border-radius: 12px;\n box-shadow: 0 8px 40px rgba(0, 0, 0, 0.18);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n transition: opacity 0.2s ease, transform 0.2s ease;\n}\n.csk-window--right {\n right: 20px;\n}\n.csk-window--left {\n left: 20px;\n}\n.csk-window--hidden {\n display: none;\n}\n\n/* ========== 头部 ========== */\n.csk-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 16px;\n height: 48px;\n min-height: 48px;\n background: var(--csk-primary);\n color: #fff;\n border-radius: 12px 12px 0 0;\n cursor: move;\n user-select: none;\n}\n.csk-header__title {\n font-size: 15px;\n font-weight: 600;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.csk-header__actions {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n.csk-header__btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n color: #fff;\n cursor: pointer;\n border-radius: 6px;\n transition: background 0.15s;\n}\n.csk-header__btn:hover {\n background: rgba(255, 255, 255, 0.2);\n}\n\n/* ========== 消息区 ========== */\n.csk-messages {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n background: #FAFAFA;\n scroll-behavior: smooth;\n}\n.csk-messages::-webkit-scrollbar {\n width: 5px;\n}\n.csk-messages::-webkit-scrollbar-track {\n background: transparent;\n}\n.csk-messages::-webkit-scrollbar-thumb {\n background: #D1D5DB;\n border-radius: 3px;\n}\n\n/* 消息气泡 */\n.csk-msg {\n display: flex;\n flex-direction: column;\n margin-bottom: 16px;\n max-width: 85%;\n word-break: break-word;\n}\n.csk-msg--user {\n margin-left: auto;\n align-items: flex-end;\n}\n.csk-msg--ai {\n margin-right: auto;\n align-items: flex-start;\n}\n.csk-msg__bubble {\n padding: 10px 14px;\n border-radius: 12px;\n font-size: 14px;\n line-height: 1.6;\n}\n.csk-msg--user .csk-msg__bubble {\n background: var(--csk-bg-user);\n color: var(--csk-text-user);\n border-radius: 12px 12px 4px 12px;\n}\n.csk-msg--ai .csk-msg__bubble {\n background: var(--csk-bg-ai);\n color: var(--csk-text-ai);\n border-radius: 12px 12px 12px 4px;\n}\n.csk-msg__time {\n font-size: 11px;\n color: #9CA3AF;\n margin-top: 4px;\n padding: 0 4px;\n}\n\n/* ========== Loading 动画 ========== */\n.csk-loading {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 12px 14px;\n margin-bottom: 16px;\n}\n.csk-loading__dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: #D1D5DB;\n animation: csk-bounce 1.4s ease-in-out infinite both;\n}\n.csk-loading__dot:nth-child(1) { animation-delay: 0s; }\n.csk-loading__dot:nth-child(2) { animation-delay: 0.16s; }\n.csk-loading__dot:nth-child(3) { animation-delay: 0.32s; }\n\n@keyframes csk-bounce {\n 0%, 80%, 100% { transform: scale(0.6); }\n 40% { transform: scale(1); }\n}\n\n/* ========== 输入区 ========== */\n.csk-input-area {\n display: flex;\n align-items: center;\n padding: 10px 12px;\n border-top: 1px solid #E5E7EB;\n background: #fff;\n gap: 8px;\n}\n.csk-input {\n flex: 1;\n border: 1px solid #E5E7EB;\n border-radius: 8px;\n padding: 10px 12px;\n font-size: 14px;\n outline: none;\n transition: border-color 0.2s;\n font-family: inherit;\n resize: none;\n min-height: 20px;\n max-height: 100px;\n}\n.csk-input:focus {\n border-color: var(--csk-primary);\n}\n.csk-input::placeholder {\n color: #9CA3AF;\n}\n.csk-send-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n min-width: 40px;\n border: none;\n border-radius: 8px;\n background: var(--csk-primary);\n color: #fff;\n cursor: pointer;\n transition: background 0.2s;\n}\n.csk-send-btn:hover {\n background: var(--csk-primary-hover);\n}\n.csk-send-btn:disabled {\n background: #D1D5DB;\n cursor: not-allowed;\n}\n\n/* ========== 清空按钮 ========== */\n.csk-clear-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 6px 12px;\n border: 1px solid #E5E7EB;\n border-radius: 6px;\n background: #fff;\n color: #6B7280;\n font-size: 12px;\n cursor: pointer;\n margin: 0 auto 8px;\n transition: all 0.15s;\n}\n.csk-clear-btn:hover {\n background: #FEE2E2;\n border-color: #FCA5A5;\n color: #DC2626;\n}\n\n/* ========== 移动端适配 ========== */\n@media (max-width: 480px) {\n .csk-window {\n width: 100vw !important;\n height: 100vh !important;\n bottom: 0 !important;\n right: 0 !important;\n left: 0 !important;\n border-radius: 0;\n }\n .csk-header {\n border-radius: 0;\n }\n}\n`}(n),document.head.appendChild(u))}function g(){return"undefined"!=typeof crypto&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,n=>{const e=16*Math.random()|0;return("x"===n?e:3&e|8).toString(16)})}function h(){return Date.now()}function f(n,e){const t=document.createElement("div");t.id="csk-launcher",t.className="csk-launcher csk-launcher--"+("left-bottom"===n.position?"left":"right"),t.setAttribute("title",n.title),t.setAttribute("aria-label",n.title),t.setAttribute("role","button"),t.setAttribute("tabindex","0"),t.innerHTML=n.launcherIcon;const r=function(n,e){let t=null;return function(...r){null!==t&&clearTimeout(t),t=setTimeout(()=>{n.apply(this,r),t=null},e)}}(e,300);return t.addEventListener("click",r),t.addEventListener("keydown",n=>{"Enter"!==n.key&&" "!==n.key||(n.preventDefault(),r())}),t}function x(n,e,t){const r=document.createElement("div");r.className="csk-msg csk-msg--user";const o=document.createElement("div");o.className="csk-msg__bubble",o.textContent=e;const i=document.createElement("div");return i.className="csk-msg__time",i.textContent=b(t),r.appendChild(o),r.appendChild(i),n.appendChild(r),r}function k(n,e,t){const r=document.createElement("div");r.className="csk-msg csk-msg--ai";const o=document.createElement("div");o.className="csk-msg__bubble",o.textContent=e;const i=document.createElement("div");return i.className="csk-msg__time",i.textContent=b(t),r.appendChild(o),r.appendChild(i),n.appendChild(r),r}function w(n){n.scrollTop=n.scrollHeight}function b(n){const e=new Date(n);return`${String(e.getHours()).padStart(2,"0")}:${String(e.getMinutes()).padStart(2,"0")}`}function y(n){return`csk_history_${n}`}function v(n){try{localStorage.removeItem(y(n))}catch(n){t.warn("清空会话历史失败",n)}}let I=null,C=[],E=null,_=null,$=null,D=null,L=null,A=null,N=!1;function S(n,e){I=n,E=e.messagesContainer,_=e.inputEl,$=e.sendBtn,D=e.clearBtn,L=e.showLoading,A=e.hideLoading,function(){if(!_||!$)return;$.addEventListener("click",()=>{B()}),_.addEventListener("keydown",n=>{"Enter"!==n.key||n.shiftKey||(n.preventDefault(),B())}),_.addEventListener("input",()=>{F()}),D&&D.addEventListener("click",()=>{!function(){if(!I)return;if(!confirm("确定清空所有对话记录?"))return;C=[],E&&(E.innerHTML="");D&&(D.style.display="none");v(I.integrateId),t.info(`清空会话 integrateId=${I.integrateId}`)}()})}();const r=function(n){try{const e=localStorage.getItem(y(n));if(!e)return[];const r=JSON.parse(e);return r&&Array.isArray(r.messages)?(t.info(`加载历史消息 integrateId=${n} count=${r.messages.length}`),r.messages):[]}catch(n){return t.warn("加载会话历史失败",n),[]}}(n.integrateId);r.length>0&&(C=r,function(){if(!E)return;E.innerHTML="";for(const n of C)"user"===n.role?x(E,n.content,n.timestamp):k(E,n.content,n.timestamp);w(E),D&&C.length>0&&(D.style.display="inline-flex")}())}function F(){if(!$||!_)return;_.value.trim().length>0&&!N?$.removeAttribute("disabled"):$.setAttribute("disabled","true")}async function B(){if(!_||!I||N)return;const n=_.value.trim();if(""===n)return;_.value="",F(),_.style.height="auto",N=!0,F();const e=h();E&&x(E,n,e);const r={id:g(),role:"user",content:n,timestamp:e};C.push(r),D&&C.length>0&&(D.style.display="inline-flex"),E&&w(E),L&&L(),E&&w(E);try{let e;const r=h();e=I.streaming?await async function(n,e){return new Promise((t,r)=>{let o=null,i=null,s="",a=!1;d(n,n=>{if(s+=n,!a&&E){A&&A();const{wrapper:n,bubble:t}=function(n,e){const t=document.createElement("div");t.className="csk-msg csk-msg--ai";const r=document.createElement("div");r.className="csk-msg__bubble",r.innerHTML="";const o=document.createElement("div");return o.className="csk-msg__time",o.textContent=b(e),t.appendChild(r),t.appendChild(o),n.appendChild(t),{wrapper:t,bubble:r}}(E,e);i=n,o=t,a=!0}o&&(o.textContent=s),E&&w(E)},()=>{a||""!==s?t(s):l(n).then(n=>t(n)).catch(r)},n=>{s.length>0?(o&&(o.textContent=s+"\n\n[回复被中断]"),t(s)):r(n)})})}(n,r):await l(n),A&&A(),!I.streaming&&E&&k(E,e,r);const o={id:g(),role:"ai",content:e,timestamp:r};C.push(o),function(n,e){try{let r=e;r.length>200&&(r=r.slice(50),t.warn(`消息数量达到上限,已裁剪最早 50 条,当前 ${r.length} 条`));const o={messages:r,updatedAt:Date.now()};localStorage.setItem(y(n),JSON.stringify(o))}catch(n){n instanceof Error&&"QuotaExceededError"===n.name?t.error("localStorage 空间不足,会话历史保存失败。建议清空历史记录。"):t.error("保存会话历史失败",n)}}(I.integrateId,C),E&&w(E)}catch(n){A&&A();const e=n instanceof a?n.message:"发送失败,请稍后重试";if(E){const n=document.createElement("div");n.className="csk-msg csk-msg--ai";const t=document.createElement("div");t.className="csk-msg__bubble",t.style.color="#DC2626",t.textContent=`⚠ ${e}`,n.appendChild(t),E.appendChild(n)}t.error(`发送失败 integrateId=${I.integrateId}`,n)}finally{N=!1,F()}}let M=null,q=!1,T=null,H=null,z=null,j=null,U=null,W=null,K=null,O=null,P=null;function R(){H&&H.classList.remove("csk-window--hidden")}function J(){H&&H.classList.add("csk-window--hidden")}function X(){H&&(H.classList.contains("csk-window--hidden")?(R(),setTimeout(()=>{j&&j.focus()},100)):J())}const Y={init:function(n){if(q)return void t.warn("SDK 已初始化,请先调用 destroy() 再重新初始化");const o=function(n){var e,r,o,i,s,a;if(!n.integrateId||"string"!=typeof n.integrateId||""===n.integrateId.trim())return t.error('integrateId 是必传参数,请检查 init() 调用。示例:ChatbotSDK.init({ integrateId: "my-app", requestDomain: "https://api.example.com" })'),null;if(!n.requestDomain||"string"!=typeof n.requestDomain||""===n.requestDomain.trim())return t.error('requestDomain 是必传参数,请检查 init() 调用。示例:ChatbotSDK.init({ integrateId: "my-app", requestDomain: "https://api.example.com" })'),null;try{new URL(n.requestDomain)}catch(e){return t.error(`requestDomain 不是合法的 URL 格式:${n.requestDomain}。请提供完整的域名,如 https://api.example.com`),null}const c={integrateId:n.integrateId.trim(),requestDomain:n.requestDomain.replace(/\/+$/,""),userId:n.userId,roleId:n.roleId,categoryId:n.categoryId,showCategorySwitch:null!==(e=n.showCategorySwitch)&&void 0!==e&&e,title:n.title||"AI 智能助手",width:null!==(r=n.width)&&void 0!==r?r:380,position:"left-bottom"===n.position?"left-bottom":"right-bottom",primaryColor:n.primaryColor||"#4F46E5",launcherIcon:n.launcherIcon||'\n \n \n',showClear:null===(o=n.showClear)||void 0===o||o,showAdminPanel:null!==(i=n.showAdminPanel)&&void 0!==i&&i,streaming:null===(s=n.streaming)||void 0===s||s,locale:n.locale||"zh-CN",debug:null===(a=n.debug)||void 0===a||a};return t.info(`配置解析完成 integrateId=${c.integrateId} requestDomain=${c.requestDomain}`),c}(n);if(!o)return;var i;M=o,i=M.debug,e=i,function(n){r=n}(M),p(M),T=f(M,X),document.body.appendChild(T);const s=function(n){const e=document.createElement("div");e.id="csk-window",e.className=`csk-root csk-window csk-window--${"left-bottom"===n.position?"left":"right"} csk-window--hidden`;const t=document.createElement("div");t.className="csk-header";const r=document.createElement("span");r.className="csk-header__title",r.textContent=n.title;const o=document.createElement("div");o.className="csk-header__actions";const i=document.createElement("button");i.className="csk-header__btn csk-header__btn--minimize",i.setAttribute("title","最小化"),i.innerHTML='',i.addEventListener("click",()=>{e.classList.add("csk-window--hidden")});const s=document.createElement("button");s.className="csk-header__btn csk-header__btn--close",s.setAttribute("title","关闭"),s.innerHTML='',s.addEventListener("click",()=>{e.classList.add("csk-window--hidden")}),o.appendChild(i),o.appendChild(s),t.appendChild(r),t.appendChild(o);const a=document.createElement("div");a.id="csk-messages",a.className="csk-messages";const c=document.createElement("div");c.className="csk-input-area";const l=document.createElement("textarea");l.id="csk-input",l.className="csk-input",l.setAttribute("placeholder","输入您的问题..."),l.setAttribute("rows","1"),l.setAttribute("autofocus","");const d=document.createElement("button");d.id="csk-send-btn",d.className="csk-send-btn",d.setAttribute("title","发送"),d.setAttribute("disabled","true"),d.innerHTML='',c.appendChild(l),c.appendChild(d),e.appendChild(t),e.appendChild(a),e.appendChild(c);let u=null;n.showClear&&(u=document.createElement("button"),u.className="csk-clear-btn",u.textContent="清空对话",u.style.display="none",e.insertBefore(u,c));let m=null;return{window:e,messagesContainer:a,inputEl:l,sendBtn:d,clearBtn:u,showLoading:function(){if(m)return m.style.display="flex",m;const n=document.createElement("div");return n.className="csk-loading",n.innerHTML='\n
\n
\n
\n ',a.appendChild(n),m=n,n},hideLoading:function(){m&&m.parentNode&&(m.parentNode.removeChild(m),m=null)}}}(M);H=s.window,z=s.messagesContainer,j=s.inputEl,U=s.sendBtn,W=s.clearBtn,K=s.showLoading,O=s.hideLoading,document.body.appendChild(H);const a=H.querySelector(".csk-header");a&&(P=function(n,e){let t=!1,r=0,o=0,i=0,s=0;const a=n=>{t=!0,r=n.clientX,o=n.clientY;const a=e.getBoundingClientRect();i=r-a.left,s=o-a.top,document.addEventListener("mousemove",c),document.addEventListener("mouseup",l)},c=n=>{if(!t)return;const r=n.clientX-i,o=n.clientY-s,a=window.innerWidth-e.offsetWidth,c=window.innerHeight-e.offsetHeight;e.style.right="auto",e.style.bottom="auto",e.style.left=`${Math.max(0,Math.min(r,a))}px`,e.style.top=`${Math.max(0,Math.min(o,c))}px`},l=()=>{t=!1,document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",l)};return n.addEventListener("mousedown",a),()=>{n.removeEventListener("mousedown",a),document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",l)}}(a,H)),S(M,{messagesContainer:z,inputEl:j,sendBtn:U,clearBtn:W,showLoading:K,hideLoading:O}),q=!0,t.info(`初始化完成 integrateId=${M.integrateId} requestDomain=${M.requestDomain}`)},destroy:function(){if(!q)return;T&&T.parentNode&&(T.parentNode.removeChild(T),T=null),H&&H.parentNode&&(H.parentNode.removeChild(H),H=null),P&&(P(),P=null),u&&u.parentNode&&(u.parentNode.removeChild(u),u=null),document.querySelectorAll("style[data-csk-sdk]").forEach(n=>n.remove());const n=null==M?void 0:M.integrateId;M=null,q=!1,z=null,j=null,U=null,W=null,K=null,O=null,t.info(`销毁实例 integrateId=${n}`)},open:R,close:J,toggle:X,clearHistory:function(){M&&(W?W.click():confirm("确定清空所有对话记录?")&&v(M.integrateId))}};return"undefined"!=typeof window&&(window.ChatbotSDK=Y),Y}(); //# sourceMappingURL=chatbot-sdk.min.js.map diff --git a/client/dist/chatbot-sdk.min.js.map b/client/dist/chatbot-sdk.min.js.map index 063a1b7..bba685b 100644 --- a/client/dist/chatbot-sdk.min.js.map +++ b/client/dist/chatbot-sdk.min.js.map @@ -1 +1 @@ -{"version":3,"file":"chatbot-sdk.min.js","sources":["../src/logger.ts","../src/api.ts","../src/styles.ts","../src/utils.ts","../src/dom.ts","../src/storage.ts","../src/chat.ts","../src/index.ts","../src/config.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["PREFIX","debugEnabled","logger","info","msg","data","console","log","undefined","warn","error","currentConfig","buildUrl","path","Error","requestDomain","replace","startsWith","async","safeFetch","url","options","timeout","controller","AbortController","timer","setTimeout","abort","fetch","Object","assign","signal","mode","credentials","err","DOMException","name","CskError","TypeError","message","includes","clearTimeout","constructor","type","super","this","getHttpErrorMessage","status","chatRequest","params","URLSearchParams","set","integrateId","userId","roleId","String","categoryId","toString","buildChatUrl","startTime","Date","now","length","response","ok","errorMsg","text","duration","chatSSERequest","onChunk","onDone","onError","buildChatSSEUrl","totalText","REQUEST_TIMEOUT","reader","_a","body","getReader","decoder","TextDecoder","stream","buffer","done","value","read","decode","lines","split","pop","line","trimmed","trim","substring","readErr","releaseLock","styleElement","cssVars","config","darker","hex","amount","match","clamp","v","Math","max","min","r","parseInt","g","b","padStart","adjustColor","primaryColor","width","injectStyles","document","querySelector","createElement","setAttribute","textContent","getStyles","head","appendChild","uuid","crypto","randomUUID","c","random","createLauncher","onClick","launcher","id","className","position","title","innerHTML","launcherIcon","debouncedClick","fn","delay","args","apply","debounce","addEventListener","e","key","preventDefault","renderUserBubble","container","timestamp","wrapper","bubble","time","formatTime","renderAIBubble","scrollToBottom","scrollTop","scrollHeight","d","getHours","getMinutes","storageKey","clearMessages","localStorage","removeItem","messages","messagesContainer","inputEl","sendBtn","clearBtn","showLoadingFn","hideLoadingFn","isSending","initChat","cfg","dom","showLoading","hideLoading","handleSend","shiftKey","updateSendBtnState","confirm","style","display","handleClear","bindSendEvents","history","raw","getItem","JSON","parse","Array","isArray","loadMessages","role","content","renderHistory","removeAttribute","height","userTimestamp","userMsg","push","aiContent","aiTimestamp","streaming","Promise","resolve","reject","bubbleEl","wrapperEl","accumulated","streamStarted","chunk","createEmptyAIBubble","then","catch","sendStreamMessage","aiMsg","slice","updatedAt","setItem","stringify","saveMessages","errMsg","errorBubble","color","isInitialized","launcherEl","windowEl","dragCleanup","open","classList","remove","close","add","toggle","contains","focus","ChatbotSDK","init","rawConfig","parsed","URL","_g","showCategorySwitch","_b","showClear","_c","showAdminPanel","_d","_e","locale","debug","_f","parseConfig","enabled","setApiConfig","header","titleEl","actions","minimizeBtn","closeBtn","inputArea","insertBefore","loadingEl","window","el","parentNode","removeChild","createChatWindow","headerEl","dragging","startX","startY","offsetX","offsetY","onMouseDown","clientX","clientY","rect","getBoundingClientRect","left","top","onMouseMove","onMouseUp","x","y","maxX","innerWidth","offsetWidth","maxY","innerHeight","offsetHeight","right","bottom","removeEventListener","enableDrag","destroy","querySelectorAll","forEach","oldIntegrateId","clearHistory","click"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"chatbot-sdk.min.js","sources":["../src/logger.ts","../src/api.ts","../src/styles.ts","../src/utils.ts","../src/dom.ts","../src/storage.ts","../src/chat.ts","../src/index.ts","../src/config.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["PREFIX","debugEnabled","logger","info","msg","data","console","log","undefined","warn","error","currentConfig","buildUrl","path","Error","requestDomain","replace","startsWith","setIfPresent","params","key","value","trim","set","String","async","safeFetch","url","options","timeout","controller","AbortController","timer","setTimeout","abort","fetch","Object","assign","signal","mode","credentials","err","DOMException","name","CskError","TypeError","message","includes","clearTimeout","constructor","type","super","this","getHttpErrorMessage","status","chatRequest","URLSearchParams","integrateId","userId","roleId","categoryId","toString","buildChatUrl","startTime","Date","now","length","response","ok","errorMsg","text","duration","chatSSERequest","onChunk","onDone","onError","buildChatSSEUrl","totalText","REQUEST_TIMEOUT","reader","_a","body","getReader","decoder","TextDecoder","stream","buffer","done","read","decode","lines","split","pop","line","trimmed","substring","readErr","releaseLock","styleElement","cssVars","config","darker","hex","amount","match","clamp","v","Math","max","min","r","parseInt","g","b","padStart","adjustColor","primaryColor","width","injectStyles","document","querySelector","createElement","setAttribute","textContent","getStyles","head","appendChild","uuid","crypto","randomUUID","c","random","createLauncher","onClick","launcher","id","className","position","title","innerHTML","launcherIcon","debouncedClick","fn","delay","args","apply","debounce","addEventListener","e","preventDefault","renderUserBubble","container","timestamp","wrapper","bubble","time","formatTime","renderAIBubble","scrollToBottom","scrollTop","scrollHeight","d","getHours","getMinutes","storageKey","clearMessages","localStorage","removeItem","messages","messagesContainer","inputEl","sendBtn","clearBtn","showLoadingFn","hideLoadingFn","isSending","initChat","cfg","dom","showLoading","hideLoading","handleSend","shiftKey","updateSendBtnState","confirm","style","display","handleClear","bindSendEvents","history","raw","getItem","JSON","parse","Array","isArray","loadMessages","role","content","renderHistory","removeAttribute","height","userTimestamp","userMsg","push","aiContent","aiTimestamp","streaming","Promise","resolve","reject","bubbleEl","wrapperEl","accumulated","streamStarted","chunk","createEmptyAIBubble","then","catch","sendStreamMessage","aiMsg","slice","updatedAt","setItem","stringify","saveMessages","errMsg","errorBubble","color","isInitialized","launcherEl","windowEl","dragCleanup","open","classList","remove","close","add","toggle","contains","focus","ChatbotSDK","init","rawConfig","parsed","URL","_g","showCategorySwitch","_b","showClear","_c","showAdminPanel","_d","_e","locale","debug","_f","parseConfig","enabled","setApiConfig","header","titleEl","actions","minimizeBtn","closeBtn","inputArea","insertBefore","loadingEl","window","el","parentNode","removeChild","createChatWindow","headerEl","dragging","startX","startY","offsetX","offsetY","onMouseDown","clientX","clientY","rect","getBoundingClientRect","left","top","onMouseMove","onMouseUp","x","y","maxX","innerWidth","offsetWidth","maxY","innerHeight","offsetHeight","right","bottom","removeEventListener","enableDrag","destroy","querySelectorAll","forEach","oldIntegrateId","clearHistory","click"],"mappings":"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"} \ No newline at end of file diff --git a/client/src/api.ts b/client/src/api.ts index 16fc5c9..ab345c5 100644 --- a/client/src/api.ts +++ b/client/src/api.ts @@ -30,15 +30,9 @@ function buildChatUrl(message: string): string { params.set('message', message); params.set('chatId', currentConfig!.integrateId); - if (currentConfig!.userId) { - params.set('accountId', currentConfig!.userId); - } - if (currentConfig!.roleId) { - params.set('roleId', String(currentConfig!.roleId)); - } - if (currentConfig!.categoryId) { - params.set('categoryId', String(currentConfig!.categoryId)); - } + setIfPresent(params, 'accountId', currentConfig!.userId); + setIfPresent(params, 'roleId', currentConfig!.roleId); + setIfPresent(params, 'categoryId', currentConfig!.categoryId); return buildUrl(`/ai/assistant_app/chat/sync?${params.toString()}`); } @@ -49,19 +43,22 @@ function buildChatSSEUrl(message: string): string { params.set('message', message); params.set('chatId', currentConfig!.integrateId); - if (currentConfig!.userId) { - params.set('accountId', currentConfig!.userId); - } - if (currentConfig!.roleId) { - params.set('roleId', String(currentConfig!.roleId)); - } - if (currentConfig!.categoryId) { - params.set('categoryId', String(currentConfig!.categoryId)); - } + setIfPresent(params, 'accountId', currentConfig!.userId); + setIfPresent(params, 'roleId', currentConfig!.roleId); + setIfPresent(params, 'categoryId', currentConfig!.categoryId); return buildUrl(`/ai/assistant_app/chat/sse?${params.toString()}`); } +/** + * 安全设置可选参数:仅当 value 非空时追加,数字类型直接转字符串 + */ +function setIfPresent(params: URLSearchParams, key: string, value: string | number | undefined): void { + if (value === undefined || value === null) return; + if (typeof value === 'string' && value.trim() === '') return; + params.set(key, String(value)); +} + /** 带超时的 fetch 封装 */ async function safeFetch( url: string, diff --git a/client/src/chat.ts b/client/src/chat.ts index 26a22cf..b998578 100644 --- a/client/src/chat.ts +++ b/client/src/chat.ts @@ -145,18 +145,18 @@ async function handleSend(): Promise { const aiTimestamp = now(); if (config.streaming) { - // 流式输出 + // 流式输出:气泡由 sendStreamMessage 内部的 onChunk 回调创建 aiContent = await sendStreamMessage(text, aiTimestamp); } else { - // 同步请求 + // 同步请求:需要在此渲染 AI 气泡 aiContent = await chatRequest(text); } - // 4. 隐藏 loading + // 4. 隐藏 loading(流式模式在 onChunk 中已隐藏,此处做兜底) if (hideLoadingFn) hideLoadingFn(); - // 5. 渲染 AI 气泡 - if (messagesContainer) { + // 5. 非流式模式:在此渲染 AI 气泡;流式模式气泡已在 stream 回调中创建 + if (!config.streaming && messagesContainer) { renderAIBubble(messagesContainer, aiContent, aiTimestamp); } const aiMsg: ChatMessage = { diff --git a/src/main/java/com/wok/supportbot/config/ChatModelFactory.java b/src/main/java/com/wok/supportbot/config/ChatModelFactory.java index 1598e64..b7aa5c8 100644 --- a/src/main/java/com/wok/supportbot/config/ChatModelFactory.java +++ b/src/main/java/com/wok/supportbot/config/ChatModelFactory.java @@ -1,14 +1,17 @@ package com.wok.supportbot.config; +import com.alibaba.cloud.ai.dashscope.api.DashScopeApi; +import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatModel; +import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatOptions; import com.wok.supportbot.entity.AiModelConfig; import com.wok.supportbot.service.AiModelConfigService; import lombok.extern.slf4j.Slf4j; import org.springframework.ai.chat.model.ChatModel; +import org.springframework.ai.model.tool.ToolCallingManager; import org.springframework.ai.openai.OpenAiChatModel; import org.springframework.ai.openai.OpenAiChatOptions; import org.springframework.ai.openai.api.OpenAiApi; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; import java.util.Map; @@ -17,8 +20,10 @@ import java.util.concurrent.ConcurrentHashMap; /** * ChatModel 工厂 * 按 DB 活跃配置动态创建/缓存 ChatModel 实例,支持运行时切换提供商。 - * - DashScope:复用 spring-ai-alibaba-starter-dashscope 自动配置的 Bean - * - DeepSeek / Kimi / 豆包 / 智谱等:通过 spring-ai-openai 模块 + 自定义 baseUrl 创建 + * - DashScope:手动构造 DashScopeApi + DashScopeChatModel(从 DB 配置读取 modelName/temperature 等) + * - DeepSeek / Kimi / 豆包 / 智谱 / OpenAI 等:通过 spring-ai-openai 模块 + 自定义 baseUrl 创建 + * + * 所有 ChatModel 均通过 DB 配置动态创建,不再复用 application.yml 自动配置的 Bean。 */ @Component @Slf4j @@ -27,12 +32,8 @@ public class ChatModelFactory { @Autowired private AiModelConfigService configService; - /** - * DashScope 自动配置的 ChatModel Bean - * 由 spring-ai-alibaba-starter-dashscope 注册,标记 @Primary - */ @Autowired - private ChatModel dashscopeChatModel; + private ToolCallingManager toolCallingManager; /** * ChatModel 缓存:key = "provider:apiKey:modelName" @@ -52,16 +53,16 @@ public class ChatModelFactory { /** * 按应用类型获取活跃的 ChatModel - * 如果该类型无活跃配置,回退到 DashScope 默认 + * 如果该类型无活跃配置,抛出异常(不应在缺少配置时静默回退) * * @param appType 应用类型:CHAT / PRODUCT_EXTRACT / EMBEDDING / RAG_REWRITE * @return ChatModel 实例 */ public ChatModel getChatModel(String appType) { AiModelConfig config = configService.getActiveConfigWithFullKey(appType); - if (config == null) { - log.warn("应用类型 [{}] 无活跃配置,回退到 DashScope 默认", appType); - return dashscopeChatModel; + if (config == null || config.getApiKey() == null || config.getApiKey().isBlank()) { + throw new IllegalStateException( + "应用类型 [" + appType + "] 无活跃配置,请在管理页面配置该类型的 AI 模型"); } return getOrCreateChatModel(config); } @@ -77,13 +78,32 @@ public class ChatModelFactory { /** * 创建 ChatModel 实例 - * - dashscope:复用自动配置的 Bean + * - dashscope:手动构造 DashScopeApi + DashScopeChatModel,按 DB 配置指定 model/temperature/maxTokens * - 其他提供商:通过 OpenAI 兼容 API 创建 */ private ChatModel createChatModel(AiModelConfig config) { - if ("dashscope".equals(config.getProvider())) { - log.info("复用 DashScope ChatModel Bean: model={}", config.getModelName()); - return dashscopeChatModel; + if ("dashscope".equalsIgnoreCase(config.getProvider())) { + log.info("创建 DashScope ChatModel: model={}, temperature={}, maxTokens={}", + config.getModelName(), config.getTemperature(), config.getMaxTokens()); + + DashScopeApi api = DashScopeApi.builder() + .apiKey(config.getApiKey()) + .build(); + + DashScopeChatOptions.DashscopeChatOptionsBuilder optionsBuilder = DashScopeChatOptions.builder() + .withModel(config.getModelName()); + if (config.getTemperature() != null) { + optionsBuilder.withTemperature(config.getTemperature()); + } + if (config.getMaxTokens() != null) { + optionsBuilder.withMaxToken(config.getMaxTokens()); + } + + return DashScopeChatModel.builder() + .dashScopeApi(api) + .defaultOptions(optionsBuilder.build()) + .toolCallingManager(toolCallingManager) + .build(); } // OpenAI 兼容提供商 diff --git a/src/main/java/com/wok/supportbot/config/DatabaseInitConfig.java b/src/main/java/com/wok/supportbot/config/DatabaseInitConfig.java index 72c749e..e547b92 100644 --- a/src/main/java/com/wok/supportbot/config/DatabaseInitConfig.java +++ b/src/main/java/com/wok/supportbot/config/DatabaseInitConfig.java @@ -21,15 +21,6 @@ public class DatabaseInitConfig { @Value("${spring.ai.dashscope.api-key:}") private String dashscopeApiKey; - @Value("${spring.ai.dashscope.chat.options.model:qwen-turbo}") - private String chatModelName; - - @Value("${spring.ai.dashscope.chat.options.temperature:0.7}") - private Double chatTemperature; - - @Value("${spring.ai.dashscope.embedding.options.model:text-embedding-v2}") - private String embeddingModelName; - @PostConstruct public void init() { try { @@ -401,16 +392,16 @@ public class DatabaseInitConfig { } insertDefaultModelConfig("Chat Default", "CHAT", "dashscope", - dashscopeApiKey, chatModelName, chatTemperature, 2000, - true, 100, "Default chat model config from application.yml"); + dashscopeApiKey, "qwen-turbo", 0.7, 2000, + true, 100, "Default chat model config"); insertDefaultModelConfig("Product Extract Default", "PRODUCT_EXTRACT", "dashscope", - dashscopeApiKey, chatModelName, 0.3, 2000, + dashscopeApiKey, "qwen-turbo", 0.3, 2000, true, 90, "Default product extraction model config"); insertDefaultModelConfig("Embedding Default", "EMBEDDING", "dashscope", - dashscopeApiKey, embeddingModelName, null, null, + dashscopeApiKey, "text-embedding-v2", null, null, true, 80, "Default embedding model config"); insertDefaultModelConfig("RAG Rewrite Default", "RAG_REWRITE", "dashscope", - dashscopeApiKey, chatModelName, 0.5, 1000, + dashscopeApiKey, "qwen-turbo", 0.5, 1000, true, 70, "Default RAG rewrite model config"); } diff --git a/src/main/java/com/wok/supportbot/config/DynamicEmbeddingModel.java b/src/main/java/com/wok/supportbot/config/DynamicEmbeddingModel.java new file mode 100644 index 0000000..98ab449 --- /dev/null +++ b/src/main/java/com/wok/supportbot/config/DynamicEmbeddingModel.java @@ -0,0 +1,58 @@ +package com.wok.supportbot.config; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.ai.document.Document; +import org.springframework.ai.embedding.EmbeddingModel; +import org.springframework.ai.embedding.EmbeddingRequest; +import org.springframework.ai.embedding.EmbeddingResponse; + +import java.util.List; + +/** + * 动态 EmbeddingModel 代理 + * 实现 EmbeddingModel 接口,每次调用委托给 EmbeddingModelFactory 当前活跃的实例。 + * 这样 PgVectorStore / SimpleVectorStore 无需重建即可在运行时切换向量化模型。 + * + * 注意:每次调用都走 factory(factory 内部有缓存,开销很小, + * 仅在配置变更后第一次调用时才触发新实例创建)。 + */ +@Slf4j +public class DynamicEmbeddingModel implements EmbeddingModel { + + private final EmbeddingModelFactory embeddingModelFactory; + + public DynamicEmbeddingModel(EmbeddingModelFactory embeddingModelFactory) { + this.embeddingModelFactory = embeddingModelFactory; + } + + private EmbeddingModel getDelegate() { + return embeddingModelFactory.getEmbeddingModel(); + } + + @Override + public float[] embed(Document document) { + return getDelegate().embed(document); + } + + @Override + public EmbeddingResponse embedForResponse(List texts) { + return getDelegate().embedForResponse(texts); + } + + @Override + public EmbeddingResponse call(EmbeddingRequest request) { + return getDelegate().call(request); + } + + @Override + public int dimensions() { + return getDelegate().dimensions(); + } + + /** + * 返回当前委托的 EmbeddingModel 实例,供调试/日志使用 + */ + public EmbeddingModel getCurrentDelegate() { + return getDelegate(); + } +} diff --git a/src/main/java/com/wok/supportbot/config/EmbeddingConfigFixer.java b/src/main/java/com/wok/supportbot/config/EmbeddingConfigFixer.java new file mode 100644 index 0000000..c49a8c0 --- /dev/null +++ b/src/main/java/com/wok/supportbot/config/EmbeddingConfigFixer.java @@ -0,0 +1,160 @@ +package com.wok.supportbot.config; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.ai.embedding.EmbeddingModel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.ApplicationListener; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * Embedding 配置检查器 + * 在应用启动完成后,检查 EMBEDDING 配置的合理性并记录日志。 + * 注意:不再强制修正非 DashScope 配置,尊重用户在 DB 中配置的提供商和模型。 + * 新增:检测 EmbeddingModel 返回的实际维度与 yml 配置的向量维度是否一致。 + */ +@Component +@Slf4j +public class EmbeddingConfigFixer implements ApplicationListener { + + @Autowired + private JdbcTemplate jdbcTemplate; + + @Autowired + private EmbeddingModelFactory embeddingModelFactory; + + @Value("${spring.ai.dashscope.api-key:}") + private String dashscopeApiKey; + + @Value("${knowledge.vector.dimension:1536}") + private int fallbackDimension; + + @Override + public void onApplicationEvent(ApplicationReadyEvent event) { + try { + checkEmbeddingConfig(); + checkDimensionConsistency(); + } catch (Exception e) { + log.warn("Embedding 配置检查异常(不影响启动): {}", e.getMessage()); + } + } + + private void checkEmbeddingConfig() { + // 打印当前 EMBEDDING 所有配置 + List> allConfigs = jdbcTemplate.queryForList( + "SELECT id, name, provider, model_name, api_key, base_url, is_active, is_delete " + + "FROM ai_model_config WHERE app_type = 'EMBEDDING' ORDER BY is_active DESC"); + log.info("========== EMBEDDING 配置检查 =========="); + for (Map row : allConfigs) { + String apiKey = (String) row.get("api_key"); + String maskedKey = apiKey != null && apiKey.length() > 8 + ? apiKey.substring(0, 4) + "****" + apiKey.substring(apiKey.length() - 4) + : "****"; + log.info(" id={} name={} provider={} model={} apiKey={} baseUrl={} active={} deleted={}", + row.get("id"), row.get("name"), row.get("provider"), + row.get("model_name"), maskedKey, row.get("base_url"), + row.get("is_active"), row.get("is_delete")); + } + + // 查找活跃配置 + Map activeConfig = null; + for (Map row : allConfigs) { + if (Boolean.TRUE.equals(row.get("is_active")) + && Boolean.FALSE.equals(row.get("is_delete"))) { + activeConfig = row; + break; + } + } + + if (activeConfig == null) { + log.warn("EMBEDDING 类型无活跃配置,请在前端管理页面配置"); + return; + } + + String apiKey = (String) activeConfig.get("api_key"); + String modelName = (String) activeConfig.get("model_name"); + String provider = (String) activeConfig.get("provider"); + String baseUrl = (String) activeConfig.get("base_url"); + + // 仅记录警告,不再强制改写(用户可能有意使用非 DashScope 的 Embedding 提供商) + if (!"dashscope".equalsIgnoreCase(provider)) { + log.info("EMBEDDING 使用非 DashScope 提供商 [{}],model={}。" + + "请确保前端「向量维度」与实际模型输出一致,否则需重建 vector_store 表", provider, modelName); + } + + // DashScope 用户的 API Key 一致性提示(不强制修正,尊重用户 DB 配置) + if ("dashscope".equalsIgnoreCase(provider) + && dashscopeApiKey != null && !dashscopeApiKey.isBlank() + && !dashscopeApiKey.equals(apiKey)) { + log.warn("EMBEDDING DashScope 配置的 API Key 与 application.yml 不一致,以 DB 配置为准。" + + "如需统一管理,请在管理页面修改。"); + } + + if (baseUrl != null && !baseUrl.isBlank()) { + log.debug("EMBEDDING 配置了自定义 baseUrl={}", baseUrl); + } + + log.info("EMBEDDING 配置检查完成,当前使用 provider={} model={}", provider, modelName); + } + + /** + * 检测 EmbeddingModel 实际返回的维度与配置的向量维度是否一致。 + * 配置维度优先级:DB extraConfig.dimensions > application.yml knowledge.vector.dimension。 + */ + private void checkDimensionConsistency() { + try { + int configuredDimension = resolveConfiguredDimension(); + EmbeddingModel model = embeddingModelFactory.getEmbeddingModel(); + int actualDimension = model.dimensions(); + if (actualDimension > 0 && actualDimension != configuredDimension) { + log.warn("========== ⚠️ 向量维度不匹配!=========="); + log.warn("Embedding 模型 {} 返回维度: {}", model, actualDimension); + log.warn("当前配置的向量维度: {}", configuredDimension); + log.warn("请执行以下步骤修复:"); + log.warn(" 1. 在前端「AI 大模型配置管理」中修改 EMBEDDING 配置的向量维度为 {}", actualDimension); + log.warn(" 2. 在 PostgreSQL 中执行: DROP TABLE IF EXISTS vector_store CASCADE"); + log.warn(" 3. 重启服务(PgVectorStore 会自动重建表)"); + log.warn(" 4. 重新上传所有知识库文档"); + log.warn("========================================"); + } else { + log.info("向量维度校验通过: Embedding 模型返回 {} 维,配置 {} 维,一致", + actualDimension, configuredDimension); + } + } catch (Exception e) { + log.warn("无法校验向量维度(EmbeddingModel 初始化可能失败): {}", e.getMessage()); + } + } + + /** + * 解析配置维度:DB extraConfig 优先,yml 兜底。 + */ + private int resolveConfiguredDimension() { + try { + List> activeConfigs = jdbcTemplate.queryForList( + "SELECT extra_config FROM ai_model_config WHERE app_type = 'EMBEDDING' AND is_active = true AND is_delete = false LIMIT 1"); + if (!activeConfigs.isEmpty()) { + Map row = activeConfigs.get(0); + String extraConfigJson = (String) row.get("extra_config"); + // 简单解析 JSONB 中的 dimensions 字段 + if (extraConfigJson != null && extraConfigJson.contains("\"dimensions\"")) { + java.util.regex.Pattern p = java.util.regex.Pattern.compile("\"dimensions\"\\s*:\\s*(\\d+)"); + java.util.regex.Matcher m = p.matcher(extraConfigJson); + if (m.find()) { + int dim = Integer.parseInt(m.group(1)); + log.info("从 DB EMBEDDING extraConfig 读取维度: {}", dim); + return dim; + } + } + } + } catch (Exception e) { + log.warn("从 DB 读取 EMBEDDING 维度失败: {}", e.getMessage()); + } + log.info("使用 application.yml fallback 维度: {}", fallbackDimension); + return fallbackDimension; + } +} diff --git a/src/main/java/com/wok/supportbot/config/EmbeddingModelFactory.java b/src/main/java/com/wok/supportbot/config/EmbeddingModelFactory.java new file mode 100644 index 0000000..b897aaf --- /dev/null +++ b/src/main/java/com/wok/supportbot/config/EmbeddingModelFactory.java @@ -0,0 +1,190 @@ +package com.wok.supportbot.config; + +import com.alibaba.cloud.ai.dashscope.api.DashScopeApi; +import com.alibaba.cloud.ai.dashscope.embedding.DashScopeEmbeddingModel; +import com.alibaba.cloud.ai.dashscope.embedding.DashScopeEmbeddingOptions; +import com.wok.supportbot.entity.AiModelConfig; +import com.wok.supportbot.service.AiModelConfigService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.ai.document.MetadataMode; +import org.springframework.ai.embedding.EmbeddingModel; +import org.springframework.ai.openai.OpenAiEmbeddingModel; +import org.springframework.ai.openai.OpenAiEmbeddingOptions; +import org.springframework.ai.openai.api.OpenAiApi; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.retry.backoff.ExponentialBackOffPolicy; +import org.springframework.retry.support.RetryTemplate; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * EmbeddingModel 工厂 + * 按 DB 活跃配置(EMBEDDING 类型)动态创建/缓存 EmbeddingModel 实例,支持运行时切换提供商。 + * - DashScope:手动构造 DashScopeApi + DashScopeEmbeddingModel + * - DeepSeek / Kimi / 豆包 / 智谱 / OpenAI 等:通过 spring-ai-openai 模块 + 自定义 baseUrl 创建 + */ +@Component +@Slf4j +public class EmbeddingModelFactory { + + @Autowired + private AiModelConfigService configService; + + /** + * EmbeddingModel 缓存:key = "provider:apiKey:modelName" + */ + private final ConcurrentHashMap cache = new ConcurrentHashMap<>(); + + /** + * 各提供商默认的 API 基础地址 + */ + private static final Map DEFAULT_BASE_URLS = Map.of( + "deepseek", "https://api.deepseek.com", + "moonshot", "https://api.moonshot.cn/v1", + "volcengine", "https://ark.cn-beijing.volces.com/api/v3", + "zhipu", "https://open.bigmodel.cn/api/paas/v4", + "openai", "https://api.openai.com" + ); + + /** + * 各提供商的 Embedding API 路径(相对于 baseUrl) + * OpenAI 默认是 /v1/embeddings,但许多国产厂商在 baseUrl 中已包含版本号 + * (如 /v1、/api/v3、/api/paas/v4),因此只需 /embeddings 即可。 + * 豆包多模态模型需使用 /embeddings/multimodal(与 OpenAI 请求格式不兼容,另行处理)。 + */ + private static final Map EMBEDDINGS_PATHS = Map.of( + "deepseek", "/v1/embeddings", + "moonshot", "/embeddings", // baseUrl 已含 /v1 + "volcengine", "/embeddings", // baseUrl 已含 /api/v3 + "zhipu", "/embeddings", // baseUrl 已含 /api/paas/v4 + "openai", "/v1/embeddings" + ); + + /** + * 获取当前活跃的 EmbeddingModel + * 查询 DB 中 app_type=EMBEDDING 的活跃配置,无配置时使用 DashScope text-embedding-v2 作为兜底 + * + * @return EmbeddingModel 实例 + */ + public EmbeddingModel getEmbeddingModel() { + AiModelConfig config = configService.getActiveConfigWithFullKey("EMBEDDING"); + if (config == null || config.getApiKey() == null || config.getApiKey().isBlank()) { + log.warn("EMBEDDING 类型无活跃配置,请在管理页面配置向量化模型"); + throw new IllegalStateException("EMBEDDING 类型无活跃配置,请在管理页面配置向量化模型"); + } + log.debug("获取 EMBEDDING 活跃配置: provider={}, modelName={}, apiKey前4位={}", + config.getProvider(), config.getModelName(), + config.getApiKey().substring(0, Math.min(4, config.getApiKey().length()))); + return getOrCreateEmbeddingModel(config); + } + + /** + * 获取或创建 EmbeddingModel(带缓存) + * 缓存 key = provider:apiKey:modelName,配置不变则复用实例 + */ + private EmbeddingModel getOrCreateEmbeddingModel(AiModelConfig config) { + String cacheKey = config.getProvider() + ":" + config.getApiKey() + ":" + config.getModelName(); + return cache.computeIfAbsent(cacheKey, k -> createEmbeddingModel(config)); + } + + /** + * 创建 EmbeddingModel 实例 + * - dashscope:手动构造 DashScopeApi + DashScopeEmbeddingModel + * - volcengine 豆包多模态模型:抛出异常提示选用纯文本模型 + * - 其他提供商:通过 OpenAI 兼容 API 创建 + */ + private EmbeddingModel createEmbeddingModel(AiModelConfig config) { + RetryTemplate retryTemplate = createRetryTemplate(); + + if ("dashscope".equalsIgnoreCase(config.getProvider())) { + log.info("创建 DashScope EmbeddingModel: model={}", config.getModelName()); + DashScopeApi api = DashScopeApi.builder() + .apiKey(config.getApiKey()) + .build(); + DashScopeEmbeddingOptions options = DashScopeEmbeddingOptions.builder() + .withModel(config.getModelName()) + .build(); + return new DashScopeEmbeddingModel(api, MetadataMode.EMBED, options, retryTemplate); + } + + // 豆包多模态模型检测:doubao-embedding-vision* 使用 /embeddings/multimodal 端点, + // 请求/响应格式与 OpenAI 不兼容,无法通过 OpenAiEmbeddingModel 调用。 + // 提示用户改用纯文本模型。 + if ("volcengine".equalsIgnoreCase(config.getProvider()) + && config.getModelName() != null + && config.getModelName().contains("vision")) { + throw new IllegalArgumentException( + "豆包多模态向量模型 (" + config.getModelName() + ") 不支持当前使用的 OpenAI 兼容 API 格式。" + + "请将 EMBEDDING 模型名称改为纯文本模型,如 doubao-embedding-text-240515(2048维)或 doubao-embedding-large(4096维)。" + + "注意:切换向量维度后需调整 PgVectorStoreConfig.dimensions 并重建 vector_store 表。"); + } + + // OpenAI 兼容提供商 + String baseUrl = resolveBaseUrl(config); + String embeddingsPath = resolveEmbeddingsPath(config); + log.info("创建 OpenAI 兼容 EmbeddingModel: provider={}, baseUrl={}, embeddingsPath={}, model={}", + config.getProvider(), baseUrl, embeddingsPath, config.getModelName()); + + // 维度一致性提示 + log.info("⚠ 请确认模型 [{}] 的向量维度与 PgVectorStoreConfig.dimensions(1536) 一致,否则需调整并重建向量表", + config.getModelName()); + + OpenAiApi api = OpenAiApi.builder() + .apiKey(config.getApiKey()) + .baseUrl(baseUrl) + .embeddingsPath(embeddingsPath) + .build(); + + OpenAiEmbeddingOptions options = OpenAiEmbeddingOptions.builder() + .model(config.getModelName()) + .build(); + + return new OpenAiEmbeddingModel(api, MetadataMode.EMBED, options, retryTemplate); + } + + /** + * 解析 API 基础地址:优先使用 DB 配置的 baseUrl,否则使用提供商默认值 + */ + private String resolveBaseUrl(AiModelConfig config) { + if (config.getBaseUrl() != null && !config.getBaseUrl().isBlank()) { + return config.getBaseUrl(); + } + String defaultUrl = DEFAULT_BASE_URLS.get(config.getProvider()); + if (defaultUrl != null) { + return defaultUrl; + } + throw new IllegalArgumentException( + "未知提供商 [" + config.getProvider() + "],请在配置中填写 API 基础地址 (baseUrl)"); + } + + /** + * 解析 Embedding API 路径:优先使用提供商已知路径,否则使用 OpenAI 默认 /v1/embeddings + */ + private String resolveEmbeddingsPath(AiModelConfig config) { + String known = EMBEDDINGS_PATHS.get(config.getProvider()); + return known != null ? known : "/v1/embeddings"; + } + + /** + * 创建简单的重试模板(最多 3 次,指数退避) + */ + private RetryTemplate createRetryTemplate() { + RetryTemplate retryTemplate = new RetryTemplate(); + ExponentialBackOffPolicy backOffPolicy = new ExponentialBackOffPolicy(); + backOffPolicy.setInitialInterval(1000); + backOffPolicy.setMultiplier(2); + backOffPolicy.setMaxInterval(10000); + retryTemplate.setBackOffPolicy(backOffPolicy); + return retryTemplate; + } + + /** + * 清除 EmbeddingModel 缓存(配置变更时调用) + */ + public void clearCache() { + cache.clear(); + log.info("EmbeddingModel 缓存已清除"); + } +} diff --git a/src/main/java/com/wok/supportbot/config/ModelConfigLoader.java b/src/main/java/com/wok/supportbot/config/ModelConfigLoader.java index 9e0ab6b..92b52ad 100644 --- a/src/main/java/com/wok/supportbot/config/ModelConfigLoader.java +++ b/src/main/java/com/wok/supportbot/config/ModelConfigLoader.java @@ -11,7 +11,7 @@ import org.springframework.stereotype.Component; /** * 模型配置加载器 - * 应用启动完成后,从数据库读取活跃配置并与 application.yml 中的配置进行一致性校验 + * 应用启动完成后,校验数据库中各应用类型的活跃配置是否存在 */ @Component @Slf4j @@ -23,20 +23,14 @@ public class ModelConfigLoader implements ApplicationListener doChatWithLoveAppSSE(String message, String chatId, Long roleId, Long accountId, String systemPrompt) { - AccountRoleContext context = resolveAccountRole(accountId, roleId); + public Flux doChatWithLoveAppSSE(String message, String chatId, Long roleId, String accountId, String systemPrompt) { + AccountRoleContext context = resolveAccountRole(toLong(accountId), roleId); bindConversation(chatId, context); RoleScope scope = customerServiceRoleService.getRoleScope(context.roleId()); return assistantApp.doChatByStream(message, chatId, resolveSystemPrompt(scope, systemPrompt)); @@ -103,8 +103,8 @@ public class AiController { * @return */ @GetMapping(value = "/assistant_app/chat/server_sent_event") - public Flux> doChatWithAssistantAppServerSentEvent(String message, String chatId, Long roleId, Long accountId, String systemPrompt) { - AccountRoleContext context = resolveAccountRole(accountId, roleId); + public Flux> doChatWithAssistantAppServerSentEvent(String message, String chatId, Long roleId, String accountId, String systemPrompt) { + AccountRoleContext context = resolveAccountRole(toLong(accountId), roleId); bindConversation(chatId, context); RoleScope scope = customerServiceRoleService.getRoleScope(context.roleId()); return assistantApp.doChatByStream(message, chatId, resolveSystemPrompt(scope, systemPrompt)) @@ -122,8 +122,8 @@ public class AiController { * @return */ @GetMapping(value = "/assistant_app/chat/sse_emitter") - public SseEmitter doChatWithAssistantAppServerSseEmitter(String message, String chatId, Long roleId, Long accountId, String systemPrompt) { - AccountRoleContext context = resolveAccountRole(accountId, roleId); + public SseEmitter doChatWithAssistantAppServerSseEmitter(String message, String chatId, Long roleId, String accountId, String systemPrompt) { + AccountRoleContext context = resolveAccountRole(toLong(accountId), roleId); bindConversation(chatId, context); RoleScope scope = customerServiceRoleService.getRoleScope(context.roleId()); // 创建一个超时时间较长的 SseEmitter @@ -154,8 +154,8 @@ public class AiController { * @return AI 回答 */ @GetMapping("/assistant_app/chat/rag/sync") - public String doChatWithRagSync(String message, String chatId, String rewriteStrategy, Long roleId, Long accountId, Long categoryId, String categoryIds, String systemPrompt) { - AccountRoleContext context = resolveAccountRole(accountId, roleId); + public String doChatWithRagSync(String message, String chatId, String rewriteStrategy, Long roleId, String accountId, Long categoryId, String categoryIds, String systemPrompt) { + AccountRoleContext context = resolveAccountRole(toLong(accountId), roleId); bindConversation(chatId, context); RoleScope scope = customerServiceRoleService.getRoleScope(context.roleId()); String sys = resolveSystemPrompt(scope, systemPrompt); @@ -181,8 +181,8 @@ public class AiController { * @return 流式 AI 回答 */ @GetMapping(value = "/assistant_app/chat/rag/sse", produces = MediaType.TEXT_EVENT_STREAM_VALUE) - public Flux doChatWithRagSSE(String message, String chatId, String rewriteStrategy, Long roleId, Long accountId, Long categoryId, String categoryIds, String systemPrompt) { - AccountRoleContext context = resolveAccountRole(accountId, roleId); + public Flux doChatWithRagSSE(String message, String chatId, String rewriteStrategy, Long roleId, String accountId, Long categoryId, String categoryIds, String systemPrompt) { + AccountRoleContext context = resolveAccountRole(toLong(accountId), roleId); bindConversation(chatId, context); RoleScope scope = customerServiceRoleService.getRoleScope(context.roleId()); String sys = resolveSystemPrompt(scope, systemPrompt); @@ -201,8 +201,8 @@ public class AiController { */ @GetMapping("/assistant_app/rag/sources") public Map getRagSources(String message, String chatId, String rewriteStrategy, - Long roleId, Long accountId, Long categoryId, String categoryIds) { - AccountRoleContext context = resolveAccountRole(accountId, roleId); + Long roleId, String accountId, Long categoryId, String categoryIds) { + AccountRoleContext context = resolveAccountRole(toLong(accountId), roleId); RoleScope scope = customerServiceRoleService.getRoleScope(context.roleId()); if (message == null || message.isBlank() || isKbDenied(scope) || shouldBypassKnowledgeRetrieval(message)) { return Map.of("success", true, "data", List.of()); @@ -315,4 +315,16 @@ public class AiController { private record AccountRoleContext(Long accountId, Long roleId) { } + + /** 将字符串 accountId 安全转为 Long,非数字字符串返回 null */ + private static Long toLong(String value) { + if (value == null || value.isBlank()) { + return null; + } + try { + return Long.valueOf(value.trim()); + } catch (NumberFormatException e) { + return null; + } + } } diff --git a/src/main/java/com/wok/supportbot/controller/AiModelConfigController.java b/src/main/java/com/wok/supportbot/controller/AiModelConfigController.java index d8519de..20c53a5 100644 --- a/src/main/java/com/wok/supportbot/controller/AiModelConfigController.java +++ b/src/main/java/com/wok/supportbot/controller/AiModelConfigController.java @@ -2,6 +2,7 @@ package com.wok.supportbot.controller; import com.wok.supportbot.app.AssistantApp; import com.wok.supportbot.config.ChatModelFactory; +import com.wok.supportbot.config.EmbeddingModelFactory; import com.wok.supportbot.entity.AiModelConfig; import com.wok.supportbot.service.AiModelConfigService; import org.springframework.beans.factory.annotation.Autowired; @@ -23,6 +24,9 @@ public class AiModelConfigController { @Autowired private ChatModelFactory chatModelFactory; + @Autowired + private EmbeddingModelFactory embeddingModelFactory; + @Autowired private AssistantApp assistantApp; @@ -273,6 +277,7 @@ public class AiModelConfigController { */ private void refreshCache() { chatModelFactory.clearCache(); + embeddingModelFactory.clearCache(); assistantApp.clearCache(); } } diff --git a/src/main/java/com/wok/supportbot/controller/ConversationController.java b/src/main/java/com/wok/supportbot/controller/ConversationController.java index de1c08a..75254d0 100644 --- a/src/main/java/com/wok/supportbot/controller/ConversationController.java +++ b/src/main/java/com/wok/supportbot/controller/ConversationController.java @@ -34,10 +34,10 @@ public class ConversationController { @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size, @RequestParam(required = false) String keyword, - @RequestParam(required = false) Long accountId, + @RequestParam(required = false) String accountId, @RequestParam(required = false) Long roleId) { try { - Map result = conversationService.listConversations(page, size, keyword, accountId, roleId); + Map result = conversationService.listConversations(page, size, keyword, toLong(accountId), roleId); Map data = new java.util.HashMap<>(); data.put("success", true); data.put("data", result.get("records")); @@ -201,4 +201,16 @@ public class ConversationController { )); } } + + /** 将字符串 accountId 安全转为 Long,非数字字符串返回 null */ + private static Long toLong(String value) { + if (value == null || value.isBlank()) { + return null; + } + try { + return Long.valueOf(value.trim()); + } catch (NumberFormatException e) { + return null; + } + } } diff --git a/src/main/java/com/wok/supportbot/rag/load/InMemoryVectorStoreConfig.java b/src/main/java/com/wok/supportbot/rag/load/InMemoryVectorStoreConfig.java index 3693b13..1ad4de5 100644 --- a/src/main/java/com/wok/supportbot/rag/load/InMemoryVectorStoreConfig.java +++ b/src/main/java/com/wok/supportbot/rag/load/InMemoryVectorStoreConfig.java @@ -1,20 +1,26 @@ package com.wok.supportbot.rag.load; -import org.springframework.ai.embedding.EmbeddingModel; +import com.wok.supportbot.config.DynamicEmbeddingModel; +import com.wok.supportbot.config.EmbeddingModelFactory; import org.springframework.ai.vectorstore.SimpleVectorStore; import org.springframework.ai.vectorstore.VectorStore; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * 向量数据库配置(初始化基于内存的向量数据库 Bean) + * 使用 DynamicEmbeddingModel 代理,支持运行时切换向量化模型无需重启 */ @Configuration public class InMemoryVectorStoreConfig { + @Autowired + private EmbeddingModelFactory embeddingModelFactory; + @Bean - VectorStore inMemoryVectorStore(EmbeddingModel dashscopeEmbeddingModel) { - SimpleVectorStore simpleVectorStore = SimpleVectorStore.builder(dashscopeEmbeddingModel).build();; - return simpleVectorStore; + VectorStore inMemoryVectorStore() { + DynamicEmbeddingModel dynamicEmbeddingModel = new DynamicEmbeddingModel(embeddingModelFactory); + return SimpleVectorStore.builder(dynamicEmbeddingModel).build(); } } diff --git a/src/main/java/com/wok/supportbot/rag/load/PgVectorStoreConfig.java b/src/main/java/com/wok/supportbot/rag/load/PgVectorStoreConfig.java index 4c6f522..3c64820 100644 --- a/src/main/java/com/wok/supportbot/rag/load/PgVectorStoreConfig.java +++ b/src/main/java/com/wok/supportbot/rag/load/PgVectorStoreConfig.java @@ -1,8 +1,13 @@ package com.wok.supportbot.rag.load; -import org.springframework.ai.embedding.EmbeddingModel; +import com.wok.supportbot.config.DynamicEmbeddingModel; +import com.wok.supportbot.config.EmbeddingModelFactory; +import com.wok.supportbot.entity.AiModelConfig; +import com.wok.supportbot.service.AiModelConfigService; import org.springframework.ai.vectorstore.VectorStore; import org.springframework.ai.vectorstore.pgvector.PgVectorStore; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; @@ -12,15 +17,28 @@ import static org.springframework.ai.vectorstore.pgvector.PgVectorStore.PgDistan import static org.springframework.ai.vectorstore.pgvector.PgVectorStore.PgIndexType.HNSW; /** * 向量数据库配置(初始化基于pgsql的向量数据库 Bean) + * 使用 DynamicEmbeddingModel 代理,支持运行时切换向量化模型无需重启。 + * 向量维度优先级:DB ai_model_config.extra_config.dimensions(用户前端配置) > application.yml knowledge.vector.dimension(默认 1536)。 */ @Configuration public class PgVectorStoreConfig { + @Autowired + private EmbeddingModelFactory embeddingModelFactory; + + @Autowired + private AiModelConfigService configService; + + @Value("${knowledge.vector.dimension:1536}") + private int defaultVectorDimension; + @Bean @Primary // 默认使用pgsql储存向量 - public VectorStore pgVectorVectorStore(JdbcTemplate jdbcTemplate, EmbeddingModel dashscopeEmbeddingModel) { - return PgVectorStore.builder(jdbcTemplate, dashscopeEmbeddingModel) - .dimensions(1536) // Optional: defaults to model dimensions or 1536 + public VectorStore pgVectorVectorStore(JdbcTemplate jdbcTemplate) { + int vectorDimension = resolveVectorDimension(); + DynamicEmbeddingModel dynamicEmbeddingModel = new DynamicEmbeddingModel(embeddingModelFactory); + return PgVectorStore.builder(jdbcTemplate, dynamicEmbeddingModel) + .dimensions(vectorDimension) // 从 DB extraConfig 或 yml 读取 .distanceType(COSINE_DISTANCE) // Optional: defaults to COSINE_DISTANCE .indexType(HNSW) // Optional: defaults to HNSW .initializeSchema(true) // Optional: defaults to false @@ -29,4 +47,30 @@ public class PgVectorStoreConfig { .maxDocumentBatchSize(10000) // Optional: defaults to 10000 .build(); } + + /** + * 解析向量维度:优先从 DB EMBEDDING 活跃配置的 extraConfig.dimensions 读取, + * 无配置时回退到 application.yml 的 knowledge.vector.dimension。 + */ + private int resolveVectorDimension() { + try { + AiModelConfig config = configService.getActiveConfigWithFullKey("EMBEDDING"); + if (config != null && config.getExtraConfig() != null) { + Object dimObj = config.getExtraConfig().get("dimensions"); + if (dimObj instanceof Number) { + int dim = ((Number) dimObj).intValue(); + if (dim > 0) { + log.info("从 DB EMBEDDING 配置 ({}) extraConfig 读取向量维度: {}", config.getModelName(), dim); + return dim; + } + } + } + } catch (Exception e) { + log.warn("读取 DB EMBEDDING 配置维度失败,使用 yml 默认值: {}", e.getMessage()); + } + log.info("使用 yml 默认向量维度: {}", defaultVectorDimension); + return defaultVectorDimension; + } + + private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(PgVectorStoreConfig.class); } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 963913b..8b2d206 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -9,17 +9,11 @@ server: # ==================== Spring AI Alibaba DashScope 配置 ==================== # 注意: 需要替换为你的阿里云 DashScope API Key # 获取地址: https://dashscope.console.aliyun.com/ +# 模型名称、温度等参数已迁移到前端「AI 大模型配置管理」页面,在 ai_model_config 表中管理 spring: ai: dashscope: api-key: sk-ws-H.RPMIMYH.G2gK.MEQCIFQ2aUocl1x5Q8sod1UgcBy0DzC5aJda5J-14thyXERBAiBYwX1k-7lWbEWYPnnDmJ9UV11uxLa13czU4hMMWJzi3A - chat: - options: - model: qwen-turbo - temperature: 0.7 - embedding: - options: - model: text-embedding-v2 # ==================== 数据源配置(PostgreSQL + PGVector) ==================== datasource: @@ -72,6 +66,11 @@ knowledge: min-chunk-size-chars: 10 max-num-chunks: 5000 keep-separator: true + vector: + # 向量维度,需与 Embedding 模型输出维度一致。 + # 千问 text-embedding-v2: 1536 | 豆包 doubao-embedding-text-240515: 2048 | OpenAI text-embedding-3-small: 1536 + # 修改此值后需重建 vector_store 表(PG 不支持直接修改 vector 列维度) + dimension: 1536 role: # 严格隔离:true=角色未绑定知识库分类时禁止检索任何内容;false(默认)=可检索全部知识库 strict-isolation: false diff --git a/src/main/resources/static/components/ModelConfigManager.js b/src/main/resources/static/components/ModelConfigManager.js index f42290f..437950c 100644 --- a/src/main/resources/static/components/ModelConfigManager.js +++ b/src/main/resources/static/components/ModelConfigManager.js @@ -224,6 +224,16 @@ export default { + +
+ + +
+ ⚠️ 修改维度后需重建向量表:DROP TABLE IF EXISTS vector_store CASCADE,然后重启服务并重新上传知识库文档。 + 常用维度:千问 text-embedding-v2=1536 | 豆包 doubao-embedding-text=2048 | OpenAI text-embedding-3-small=1536 +
+
+
@@ -284,6 +294,7 @@ export default { temperature: 0.7, max_tokens: 2000, base_url: '', + embeddingDimensions: 1536, priority: 0, is_active: false, description: '' @@ -350,6 +361,13 @@ export default { } function openEditModal(config) { + // 从 extraConfig 中读取 embeddingDimensions + let extraConfig = {} + if (config.extraConfig) { + try { + extraConfig = typeof config.extraConfig === 'string' ? JSON.parse(config.extraConfig) : config.extraConfig + } catch (e) {} + } editModal.value = { visible: true, mode: 'edit', @@ -363,6 +381,7 @@ export default { temperature: config.temperature, max_tokens: config.max_tokens, base_url: config.base_url || '', + embeddingDimensions: extraConfig.dimensions || 1536, priority: config.priority || 0, is_active: config.is_active || false, description: config.description || '' @@ -378,6 +397,33 @@ export default { // ==================== 保存配置 ==================== + /** + * 将前端表单字段名(snake_case)转换为后端 Java 实体字段名(camelCase) + * 因为 Jackson 默认使用 camelCase 反序列化,前端发送 snake_case 会导致字段无法映射 + */ + function toCamelCase(form) { + const data = { + name: form.name, + appType: form.app_type, + provider: form.provider, + apiKey: form.api_key, + modelName: form.model_name, + temperature: form.temperature, + maxTokens: form.max_tokens, + baseUrl: form.base_url, + priority: form.priority, + isActive: form.is_active, + description: form.description + } + // EMBEDDING 类型:将向量维度写入 extraConfig + if (form.app_type === 'EMBEDDING') { + data.extraConfig = { + dimensions: form.embeddingDimensions || 1536 + } + } + return data + } + async function saveConfig() { const form = editModal.value.form @@ -409,14 +455,16 @@ export default { try { let json + // 转换为 camelCase 后再发送,确保 Jackson 正确反序列化 + const camelData = toCamelCase(form) if (editModal.value.mode === 'add') { - json = await api.createModelConfig(form) + json = await api.createModelConfig(camelData) } else { - const updateData = { ...form } - if (!updateData.api_key || !updateData.api_key.trim()) { - delete updateData.api_key + // 编辑模式:API Key 留空则不发送(不覆盖原值) + if (!camelData.apiKey || !camelData.apiKey.trim()) { + delete camelData.apiKey } - json = await api.updateModelConfig(editModal.value.editId, updateData) + json = await api.updateModelConfig(editModal.value.editId, camelData) } if (json.success) { diff --git a/src/main/resources/static/sdk/chatbot-sdk.js b/src/main/resources/static/sdk/chatbot-sdk.js index c4b3740..23eb255 100644 --- a/src/main/resources/static/sdk/chatbot-sdk.js +++ b/src/main/resources/static/sdk/chatbot-sdk.js @@ -98,15 +98,9 @@ var ChatbotSDK = (function () { const params = new URLSearchParams(); params.set('message', message); params.set('chatId', currentConfig.integrateId); - if (currentConfig.userId) { - params.set('accountId', currentConfig.userId); - } - if (currentConfig.roleId) { - params.set('roleId', String(currentConfig.roleId)); - } - if (currentConfig.categoryId) { - params.set('categoryId', String(currentConfig.categoryId)); - } + setIfPresent(params, 'accountId', currentConfig.userId); + setIfPresent(params, 'roleId', currentConfig.roleId); + setIfPresent(params, 'categoryId', currentConfig.categoryId); return buildUrl(`/ai/assistant_app/chat/sync?${params.toString()}`); } /** 构建 SSE 流式请求 URL */ @@ -114,17 +108,21 @@ var ChatbotSDK = (function () { const params = new URLSearchParams(); params.set('message', message); params.set('chatId', currentConfig.integrateId); - if (currentConfig.userId) { - params.set('accountId', currentConfig.userId); - } - if (currentConfig.roleId) { - params.set('roleId', String(currentConfig.roleId)); - } - if (currentConfig.categoryId) { - params.set('categoryId', String(currentConfig.categoryId)); - } + setIfPresent(params, 'accountId', currentConfig.userId); + setIfPresent(params, 'roleId', currentConfig.roleId); + setIfPresent(params, 'categoryId', currentConfig.categoryId); return buildUrl(`/ai/assistant_app/chat/sse?${params.toString()}`); } + /** + * 安全设置可选参数:仅当 value 非空时追加,数字类型直接转字符串 + */ + function setIfPresent(params, key, value) { + if (value === undefined || value === null) + return; + if (typeof value === 'string' && value.trim() === '') + return; + params.set(key, String(value)); + } /** 带超时的 fetch 封装 */ async function safeFetch(url, options = {}, timeout = REQUEST_TIMEOUT) { const controller = new AbortController(); @@ -1084,18 +1082,18 @@ var ChatbotSDK = (function () { let aiContent; const aiTimestamp = now(); if (config$1.streaming) { - // 流式输出 + // 流式输出:气泡由 sendStreamMessage 内部的 onChunk 回调创建 aiContent = await sendStreamMessage(text, aiTimestamp); } else { - // 同步请求 + // 同步请求:需要在此渲染 AI 气泡 aiContent = await chatRequest(text); } - // 4. 隐藏 loading + // 4. 隐藏 loading(流式模式在 onChunk 中已隐藏,此处做兜底) if (hideLoadingFn$1) hideLoadingFn$1(); - // 5. 渲染 AI 气泡 - if (messagesContainer$1) { + // 5. 非流式模式:在此渲染 AI 气泡;流式模式气泡已在 stream 回调中创建 + if (!config$1.streaming && messagesContainer$1) { renderAIBubble(messagesContainer$1, aiContent, aiTimestamp); } const aiMsg = { diff --git a/src/main/resources/static/sdk/chatbot-sdk.js.map b/src/main/resources/static/sdk/chatbot-sdk.js.map index b5cd0d3..e3a9868 100644 --- a/src/main/resources/static/sdk/chatbot-sdk.js.map +++ b/src/main/resources/static/sdk/chatbot-sdk.js.map @@ -1 +1 @@ -{"version":3,"file":"chatbot-sdk.js","sources":["../src/logger.ts","../src/config.ts","../src/api.ts","../src/styles.ts","../src/utils.ts","../src/dom.ts","../src/storage.ts","../src/chat.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["config","messagesContainer","inputEl","sendBtn","clearBtn","showLoadingFn","hideLoadingFn"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"chatbot-sdk.js","sources":["../src/logger.ts","../src/config.ts","../src/api.ts","../src/styles.ts","../src/utils.ts","../src/dom.ts","../src/storage.ts","../src/chat.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["config","messagesContainer","inputEl","sendBtn","clearBtn","showLoadingFn","hideLoadingFn"],"mappings":"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"} \ No newline at end of file diff --git a/src/main/resources/static/sdk/chatbot-sdk.min.js b/src/main/resources/static/sdk/chatbot-sdk.min.js index b9e1b25..0826a35 100644 --- a/src/main/resources/static/sdk/chatbot-sdk.min.js +++ b/src/main/resources/static/sdk/chatbot-sdk.min.js @@ -1,2 +1,2 @@ -var ChatbotSDK=function(){"use strict";const n="[ChatbotSDK]";let e=!0;const t={info(t,r){e&&console.log(n,t,void 0!==r?r:"")},warn(t,r){e&&console.warn(n,t,void 0!==r?r:"")},error(e,t){console.error(n,e,void 0!==t?t:"")}};let r=null;function o(n){if(!r)throw new Error("API 配置未初始化");return`${r.requestDomain.replace(/\/+$/,"")}${n.startsWith("/")?n:`/${n}`}`}async function s(n,e={},t=3e4){const r=new AbortController,o=setTimeout(()=>r.abort(),t);try{return await fetch(n,Object.assign(Object.assign({},e),{signal:r.signal,mode:"cors",credentials:"include"}))}catch(n){if(n instanceof DOMException&&"AbortError"===n.name)throw new i("请求超时,请稍后重试","timeout");if(n instanceof TypeError&&n.message.includes("Failed to fetch"))throw new i("跨域请求被拦截,请联系管理员将当前域名加入 API 白名单","cors");throw new i("网络连接失败,请检查网络","network")}finally{clearTimeout(o)}}class i extends Error{constructor(n,e){super(n),this.name="CskError",this.type=e}}function a(n){switch(n){case 401:return"鉴权失败,请联系管理员";case 403:return"无访问权限,请联系管理员配置";case 404:return"请求的资源不存在";case 429:return"请求过于频繁,请稍后重试";case 500:return"服务器异常,请稍后重试";case 502:case 503:return"服务暂不可用,请稍后重试";default:return`请求失败(状态码 ${n})`}}async function c(n){const e=function(n){const e=new URLSearchParams;return e.set("message",n),e.set("chatId",r.integrateId),r.userId&&e.set("accountId",r.userId),r.roleId&&e.set("roleId",String(r.roleId)),r.categoryId&&e.set("categoryId",String(r.categoryId)),o(`/ai/assistant_app/chat/sync?${e.toString()}`)}(n),c=Date.now();t.info(`发送消息 integrateId=${r.integrateId} length=${n.length}`);try{const n=await s(e);if(!n.ok){const e=a(n.status);throw t.error(`请求失败 integrateId=${r.integrateId} status=${n.status} message=${e}`),new i(e,`http_${n.status}`)}const o=await n.text(),d=Date.now()-c;return t.info(`AI 回复 integrateId=${r.integrateId} length=${o.length} duration=${d}ms`),o}catch(n){if(n instanceof i)throw n;throw t.error(`请求异常 integrateId=${r.integrateId}`,n),new i("请求发生未知错误","unknown")}}async function d(n,e,c,d){var l;const u=function(n){const e=new URLSearchParams;return e.set("message",n),e.set("chatId",r.integrateId),r.userId&&e.set("accountId",r.userId),r.roleId&&e.set("roleId",String(r.roleId)),r.categoryId&&e.set("categoryId",String(r.categoryId)),o(`/ai/assistant_app/chat/sse?${e.toString()}`)}(n),m=Date.now();let p="";t.info(`发送流式消息 integrateId=${r.integrateId} length=${n.length}`);try{const n=await s(u,{},6e4);if(!n.ok){const e=a(n.status);return t.error(`流式请求失败 integrateId=${r.integrateId} status=${n.status} message=${e}`),void d(new i(e,`http_${n.status}`))}const o=null===(l=n.body)||void 0===l?void 0:l.getReader();if(!o)return void d(new i("浏览器不支持流式读取","stream_unsupported"));const g=new TextDecoder("utf-8",{stream:!0});let h="";try{for(;;){const{done:n,value:t}=await o.read();if(n)break;h+=g.decode(t,{stream:!0});const r=h.split("\n");h=r.pop()||"";for(const n of r){const t=n.trim();if(t&&!t.startsWith(":"))if(t.startsWith("data:")){const n=t.substring(5).trim();n&&(p+=n,e(n))}else{if("[DONE]"===t)break;t.startsWith("event:")||t.startsWith("id:")||t.startsWith("retry:")||(p+=t,e(t))}}}if(h.trim()){const n=h.trim();if(n.startsWith("data:")){const t=n.substring(5).trim();t&&(p+=t,e(t))}else"[DONE]"!==n&&(p+=n,e(n))}}catch(n){if(!(p.length>0))throw n;e("\n\n[网络不稳定,内容可能不完整]")}finally{o.releaseLock()}const f=Date.now()-m;t.info(`流式回复完成 integrateId=${r.integrateId} length=${p.length} duration=${f}ms`),c()}catch(n){n instanceof i?d(n):(t.error(`流式请求异常 integrateId=${r.integrateId}`,n),d(new i("网络连接失败,请检查网络","network")))}}let l=null;function u(n){const e=function(n,e){const t=n.match(/^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);if(!t)return n;const r=n=>Math.max(0,Math.min(255,n)),o=r(parseInt(t[1],16)+e),s=r(parseInt(t[2],16)+e),i=r(parseInt(t[3],16)+e);return`#${o.toString(16).padStart(2,"0")}${s.toString(16).padStart(2,"0")}${i.toString(16).padStart(2,"0")}`}(n.primaryColor,-15);return`\n --csk-primary: ${n.primaryColor};\n --csk-primary-hover: ${e};\n --csk-bg-user: var(--csk-primary);\n --csk-bg-ai: #F3F4F6;\n --csk-text-user: #FFFFFF;\n --csk-text-ai: #1F2937;\n --csk-window-width: ${n.width}px;\n `}function m(n){document.querySelector("style[data-csk-sdk]")||(l=document.createElement("style"),l.setAttribute("data-csk-sdk",""),l.textContent=function(n){return`\n/* ChatbotSDK 样式 - csk- 命名空间 */\n.csk-root {\n ${u(n)}\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans SC", sans-serif;\n font-size: 14px;\n line-height: 1.5;\n color: #1F2937;\n}\n\n/* ========== 悬浮按钮 ========== */\n.csk-launcher {\n position: fixed;\n bottom: 20px;\n z-index: 9998;\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: #fff;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n border: none;\n color: var(--csk-primary);\n user-select: none;\n}\n.csk-launcher--right {\n right: 20px;\n}\n.csk-launcher--left {\n left: 20px;\n}\n.csk-launcher:hover {\n transform: scale(1.1);\n box-shadow: 0 6px 24px rgba(0, 0, 0, 0.2);\n}\n.csk-launcher:active {\n transform: scale(0.95);\n}\n\n/* ========== 聊天弹窗 ========== */\n.csk-window {\n position: fixed;\n bottom: 20px;\n z-index: 9999;\n width: var(--csk-window-width);\n height: 560px;\n background: #fff;\n border-radius: 12px;\n box-shadow: 0 8px 40px rgba(0, 0, 0, 0.18);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n transition: opacity 0.2s ease, transform 0.2s ease;\n}\n.csk-window--right {\n right: 20px;\n}\n.csk-window--left {\n left: 20px;\n}\n.csk-window--hidden {\n display: none;\n}\n\n/* ========== 头部 ========== */\n.csk-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 16px;\n height: 48px;\n min-height: 48px;\n background: var(--csk-primary);\n color: #fff;\n border-radius: 12px 12px 0 0;\n cursor: move;\n user-select: none;\n}\n.csk-header__title {\n font-size: 15px;\n font-weight: 600;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.csk-header__actions {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n.csk-header__btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n color: #fff;\n cursor: pointer;\n border-radius: 6px;\n transition: background 0.15s;\n}\n.csk-header__btn:hover {\n background: rgba(255, 255, 255, 0.2);\n}\n\n/* ========== 消息区 ========== */\n.csk-messages {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n background: #FAFAFA;\n scroll-behavior: smooth;\n}\n.csk-messages::-webkit-scrollbar {\n width: 5px;\n}\n.csk-messages::-webkit-scrollbar-track {\n background: transparent;\n}\n.csk-messages::-webkit-scrollbar-thumb {\n background: #D1D5DB;\n border-radius: 3px;\n}\n\n/* 消息气泡 */\n.csk-msg {\n display: flex;\n flex-direction: column;\n margin-bottom: 16px;\n max-width: 85%;\n word-break: break-word;\n}\n.csk-msg--user {\n margin-left: auto;\n align-items: flex-end;\n}\n.csk-msg--ai {\n margin-right: auto;\n align-items: flex-start;\n}\n.csk-msg__bubble {\n padding: 10px 14px;\n border-radius: 12px;\n font-size: 14px;\n line-height: 1.6;\n}\n.csk-msg--user .csk-msg__bubble {\n background: var(--csk-bg-user);\n color: var(--csk-text-user);\n border-radius: 12px 12px 4px 12px;\n}\n.csk-msg--ai .csk-msg__bubble {\n background: var(--csk-bg-ai);\n color: var(--csk-text-ai);\n border-radius: 12px 12px 12px 4px;\n}\n.csk-msg__time {\n font-size: 11px;\n color: #9CA3AF;\n margin-top: 4px;\n padding: 0 4px;\n}\n\n/* ========== Loading 动画 ========== */\n.csk-loading {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 12px 14px;\n margin-bottom: 16px;\n}\n.csk-loading__dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: #D1D5DB;\n animation: csk-bounce 1.4s ease-in-out infinite both;\n}\n.csk-loading__dot:nth-child(1) { animation-delay: 0s; }\n.csk-loading__dot:nth-child(2) { animation-delay: 0.16s; }\n.csk-loading__dot:nth-child(3) { animation-delay: 0.32s; }\n\n@keyframes csk-bounce {\n 0%, 80%, 100% { transform: scale(0.6); }\n 40% { transform: scale(1); }\n}\n\n/* ========== 输入区 ========== */\n.csk-input-area {\n display: flex;\n align-items: center;\n padding: 10px 12px;\n border-top: 1px solid #E5E7EB;\n background: #fff;\n gap: 8px;\n}\n.csk-input {\n flex: 1;\n border: 1px solid #E5E7EB;\n border-radius: 8px;\n padding: 10px 12px;\n font-size: 14px;\n outline: none;\n transition: border-color 0.2s;\n font-family: inherit;\n resize: none;\n min-height: 20px;\n max-height: 100px;\n}\n.csk-input:focus {\n border-color: var(--csk-primary);\n}\n.csk-input::placeholder {\n color: #9CA3AF;\n}\n.csk-send-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n min-width: 40px;\n border: none;\n border-radius: 8px;\n background: var(--csk-primary);\n color: #fff;\n cursor: pointer;\n transition: background 0.2s;\n}\n.csk-send-btn:hover {\n background: var(--csk-primary-hover);\n}\n.csk-send-btn:disabled {\n background: #D1D5DB;\n cursor: not-allowed;\n}\n\n/* ========== 清空按钮 ========== */\n.csk-clear-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 6px 12px;\n border: 1px solid #E5E7EB;\n border-radius: 6px;\n background: #fff;\n color: #6B7280;\n font-size: 12px;\n cursor: pointer;\n margin: 0 auto 8px;\n transition: all 0.15s;\n}\n.csk-clear-btn:hover {\n background: #FEE2E2;\n border-color: #FCA5A5;\n color: #DC2626;\n}\n\n/* ========== 移动端适配 ========== */\n@media (max-width: 480px) {\n .csk-window {\n width: 100vw !important;\n height: 100vh !important;\n bottom: 0 !important;\n right: 0 !important;\n left: 0 !important;\n border-radius: 0;\n }\n .csk-header {\n border-radius: 0;\n }\n}\n`}(n),document.head.appendChild(l))}function p(){return"undefined"!=typeof crypto&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,n=>{const e=16*Math.random()|0;return("x"===n?e:3&e|8).toString(16)})}function g(){return Date.now()}function h(n,e){const t=document.createElement("div");t.id="csk-launcher",t.className="csk-launcher csk-launcher--"+("left-bottom"===n.position?"left":"right"),t.setAttribute("title",n.title),t.setAttribute("aria-label",n.title),t.setAttribute("role","button"),t.setAttribute("tabindex","0"),t.innerHTML=n.launcherIcon;const r=function(n,e){let t=null;return function(...r){null!==t&&clearTimeout(t),t=setTimeout(()=>{n.apply(this,r),t=null},e)}}(e,300);return t.addEventListener("click",r),t.addEventListener("keydown",n=>{"Enter"!==n.key&&" "!==n.key||(n.preventDefault(),r())}),t}function f(n,e,t){const r=document.createElement("div");r.className="csk-msg csk-msg--user";const o=document.createElement("div");o.className="csk-msg__bubble",o.textContent=e;const s=document.createElement("div");return s.className="csk-msg__time",s.textContent=w(t),r.appendChild(o),r.appendChild(s),n.appendChild(r),r}function x(n,e,t){const r=document.createElement("div");r.className="csk-msg csk-msg--ai";const o=document.createElement("div");o.className="csk-msg__bubble",o.textContent=e;const s=document.createElement("div");return s.className="csk-msg__time",s.textContent=w(t),r.appendChild(o),r.appendChild(s),n.appendChild(r),r}function k(n){n.scrollTop=n.scrollHeight}function w(n){const e=new Date(n);return`${String(e.getHours()).padStart(2,"0")}:${String(e.getMinutes()).padStart(2,"0")}`}function b(n){return`csk_history_${n}`}function y(n){try{localStorage.removeItem(b(n))}catch(n){t.warn("清空会话历史失败",n)}}let v=null,I=[],C=null,E=null,_=null,$=null,D=null,L=null,S=!1;function A(n,e){v=n,C=e.messagesContainer,E=e.inputEl,_=e.sendBtn,$=e.clearBtn,D=e.showLoading,L=e.hideLoading,function(){if(!E||!_)return;_.addEventListener("click",()=>{F()}),E.addEventListener("keydown",n=>{"Enter"!==n.key||n.shiftKey||(n.preventDefault(),F())}),E.addEventListener("input",()=>{N()}),$&&$.addEventListener("click",()=>{!function(){if(!v)return;if(!confirm("确定清空所有对话记录?"))return;I=[],C&&(C.innerHTML="");$&&($.style.display="none");y(v.integrateId),t.info(`清空会话 integrateId=${v.integrateId}`)}()})}();const r=function(n){try{const e=localStorage.getItem(b(n));if(!e)return[];const r=JSON.parse(e);return r&&Array.isArray(r.messages)?(t.info(`加载历史消息 integrateId=${n} count=${r.messages.length}`),r.messages):[]}catch(n){return t.warn("加载会话历史失败",n),[]}}(n.integrateId);r.length>0&&(I=r,function(){if(!C)return;C.innerHTML="";for(const n of I)"user"===n.role?f(C,n.content,n.timestamp):x(C,n.content,n.timestamp);k(C),$&&I.length>0&&($.style.display="inline-flex")}())}function N(){if(!_||!E)return;E.value.trim().length>0&&!S?_.removeAttribute("disabled"):_.setAttribute("disabled","true")}async function F(){if(!E||!v||S)return;const n=E.value.trim();if(""===n)return;E.value="",N(),E.style.height="auto",S=!0,N();const e=g();C&&f(C,n,e);const r={id:p(),role:"user",content:n,timestamp:e};I.push(r),$&&I.length>0&&($.style.display="inline-flex"),C&&k(C),D&&D(),C&&k(C);try{let e;const r=g();e=v.streaming?await async function(n,e){return new Promise((t,r)=>{let o=null,s=null,i="",a=!1;d(n,n=>{if(i+=n,!a&&C){L&&L();const{wrapper:n,bubble:t}=function(n,e){const t=document.createElement("div");t.className="csk-msg csk-msg--ai";const r=document.createElement("div");r.className="csk-msg__bubble",r.innerHTML="";const o=document.createElement("div");return o.className="csk-msg__time",o.textContent=w(e),t.appendChild(r),t.appendChild(o),n.appendChild(t),{wrapper:t,bubble:r}}(C,e);s=n,o=t,a=!0}o&&(o.textContent=i),C&&k(C)},()=>{a||""!==i?t(i):c(n).then(n=>t(n)).catch(r)},n=>{i.length>0?(o&&(o.textContent=i+"\n\n[回复被中断]"),t(i)):r(n)})})}(n,r):await c(n),L&&L(),C&&x(C,e,r);const o={id:p(),role:"ai",content:e,timestamp:r};I.push(o),function(n,e){try{let r=e;r.length>200&&(r=r.slice(50),t.warn(`消息数量达到上限,已裁剪最早 50 条,当前 ${r.length} 条`));const o={messages:r,updatedAt:Date.now()};localStorage.setItem(b(n),JSON.stringify(o))}catch(n){n instanceof Error&&"QuotaExceededError"===n.name?t.error("localStorage 空间不足,会话历史保存失败。建议清空历史记录。"):t.error("保存会话历史失败",n)}}(v.integrateId,I),C&&k(C)}catch(n){L&&L();const e=n instanceof i?n.message:"发送失败,请稍后重试";if(C){const n=document.createElement("div");n.className="csk-msg csk-msg--ai";const t=document.createElement("div");t.className="csk-msg__bubble",t.style.color="#DC2626",t.textContent=`⚠ ${e}`,n.appendChild(t),C.appendChild(n)}t.error(`发送失败 integrateId=${v.integrateId}`,n)}finally{S=!1,N()}}let B=null,M=!1,q=null,T=null,H=null,z=null,j=null,U=null,W=null,K=null,O=null;function P(){T&&T.classList.remove("csk-window--hidden")}function R(){T&&T.classList.add("csk-window--hidden")}function J(){T&&(T.classList.contains("csk-window--hidden")?(P(),setTimeout(()=>{z&&z.focus()},100)):R())}const X={init:function(n){if(M)return void t.warn("SDK 已初始化,请先调用 destroy() 再重新初始化");const o=function(n){var e,r,o,s,i,a;if(!n.integrateId||"string"!=typeof n.integrateId||""===n.integrateId.trim())return t.error('integrateId 是必传参数,请检查 init() 调用。示例:ChatbotSDK.init({ integrateId: "my-app", requestDomain: "https://api.example.com" })'),null;if(!n.requestDomain||"string"!=typeof n.requestDomain||""===n.requestDomain.trim())return t.error('requestDomain 是必传参数,请检查 init() 调用。示例:ChatbotSDK.init({ integrateId: "my-app", requestDomain: "https://api.example.com" })'),null;try{new URL(n.requestDomain)}catch(e){return t.error(`requestDomain 不是合法的 URL 格式:${n.requestDomain}。请提供完整的域名,如 https://api.example.com`),null}const c={integrateId:n.integrateId.trim(),requestDomain:n.requestDomain.replace(/\/+$/,""),userId:n.userId,roleId:n.roleId,categoryId:n.categoryId,showCategorySwitch:null!==(e=n.showCategorySwitch)&&void 0!==e&&e,title:n.title||"AI 智能助手",width:null!==(r=n.width)&&void 0!==r?r:380,position:"left-bottom"===n.position?"left-bottom":"right-bottom",primaryColor:n.primaryColor||"#4F46E5",launcherIcon:n.launcherIcon||'\n \n \n',showClear:null===(o=n.showClear)||void 0===o||o,showAdminPanel:null!==(s=n.showAdminPanel)&&void 0!==s&&s,streaming:null===(i=n.streaming)||void 0===i||i,locale:n.locale||"zh-CN",debug:null===(a=n.debug)||void 0===a||a};return t.info(`配置解析完成 integrateId=${c.integrateId} requestDomain=${c.requestDomain}`),c}(n);if(!o)return;var s;B=o,s=B.debug,e=s,function(n){r=n}(B),m(B),q=h(B,J),document.body.appendChild(q);const i=function(n){const e=document.createElement("div");e.id="csk-window",e.className=`csk-root csk-window csk-window--${"left-bottom"===n.position?"left":"right"} csk-window--hidden`;const t=document.createElement("div");t.className="csk-header";const r=document.createElement("span");r.className="csk-header__title",r.textContent=n.title;const o=document.createElement("div");o.className="csk-header__actions";const s=document.createElement("button");s.className="csk-header__btn csk-header__btn--minimize",s.setAttribute("title","最小化"),s.innerHTML='',s.addEventListener("click",()=>{e.classList.add("csk-window--hidden")});const i=document.createElement("button");i.className="csk-header__btn csk-header__btn--close",i.setAttribute("title","关闭"),i.innerHTML='',i.addEventListener("click",()=>{e.classList.add("csk-window--hidden")}),o.appendChild(s),o.appendChild(i),t.appendChild(r),t.appendChild(o);const a=document.createElement("div");a.id="csk-messages",a.className="csk-messages";const c=document.createElement("div");c.className="csk-input-area";const d=document.createElement("textarea");d.id="csk-input",d.className="csk-input",d.setAttribute("placeholder","输入您的问题..."),d.setAttribute("rows","1"),d.setAttribute("autofocus","");const l=document.createElement("button");l.id="csk-send-btn",l.className="csk-send-btn",l.setAttribute("title","发送"),l.setAttribute("disabled","true"),l.innerHTML='',c.appendChild(d),c.appendChild(l),e.appendChild(t),e.appendChild(a),e.appendChild(c);let u=null;n.showClear&&(u=document.createElement("button"),u.className="csk-clear-btn",u.textContent="清空对话",u.style.display="none",e.insertBefore(u,c));let m=null;return{window:e,messagesContainer:a,inputEl:d,sendBtn:l,clearBtn:u,showLoading:function(){if(m)return m.style.display="flex",m;const n=document.createElement("div");return n.className="csk-loading",n.innerHTML='\n
\n
\n
\n ',a.appendChild(n),m=n,n},hideLoading:function(){m&&m.parentNode&&(m.parentNode.removeChild(m),m=null)}}}(B);T=i.window,H=i.messagesContainer,z=i.inputEl,j=i.sendBtn,U=i.clearBtn,W=i.showLoading,K=i.hideLoading,document.body.appendChild(T);const a=T.querySelector(".csk-header");a&&(O=function(n,e){let t=!1,r=0,o=0,s=0,i=0;const a=n=>{t=!0,r=n.clientX,o=n.clientY;const a=e.getBoundingClientRect();s=r-a.left,i=o-a.top,document.addEventListener("mousemove",c),document.addEventListener("mouseup",d)},c=n=>{if(!t)return;const r=n.clientX-s,o=n.clientY-i,a=window.innerWidth-e.offsetWidth,c=window.innerHeight-e.offsetHeight;e.style.right="auto",e.style.bottom="auto",e.style.left=`${Math.max(0,Math.min(r,a))}px`,e.style.top=`${Math.max(0,Math.min(o,c))}px`},d=()=>{t=!1,document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",d)};return n.addEventListener("mousedown",a),()=>{n.removeEventListener("mousedown",a),document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",d)}}(a,T)),A(B,{messagesContainer:H,inputEl:z,sendBtn:j,clearBtn:U,showLoading:W,hideLoading:K}),M=!0,t.info(`初始化完成 integrateId=${B.integrateId} requestDomain=${B.requestDomain}`)},destroy:function(){if(!M)return;q&&q.parentNode&&(q.parentNode.removeChild(q),q=null),T&&T.parentNode&&(T.parentNode.removeChild(T),T=null),O&&(O(),O=null),l&&l.parentNode&&(l.parentNode.removeChild(l),l=null),document.querySelectorAll("style[data-csk-sdk]").forEach(n=>n.remove());const n=null==B?void 0:B.integrateId;B=null,M=!1,H=null,z=null,j=null,U=null,W=null,K=null,t.info(`销毁实例 integrateId=${n}`)},open:P,close:R,toggle:J,clearHistory:function(){B&&(U?U.click():confirm("确定清空所有对话记录?")&&y(B.integrateId))}};return"undefined"!=typeof window&&(window.ChatbotSDK=X),X}(); +var ChatbotSDK=function(){"use strict";const n="[ChatbotSDK]";let e=!0;const t={info(t,r){e&&console.log(n,t,void 0!==r?r:"")},warn(t,r){e&&console.warn(n,t,void 0!==r?r:"")},error(e,t){console.error(n,e,void 0!==t?t:"")}};let r=null;function o(n){if(!r)throw new Error("API 配置未初始化");return`${r.requestDomain.replace(/\/+$/,"")}${n.startsWith("/")?n:`/${n}`}`}function i(n,e,t){null!=t&&("string"==typeof t&&""===t.trim()||n.set(e,String(t)))}async function s(n,e={},t=3e4){const r=new AbortController,o=setTimeout(()=>r.abort(),t);try{return await fetch(n,Object.assign(Object.assign({},e),{signal:r.signal,mode:"cors",credentials:"include"}))}catch(n){if(n instanceof DOMException&&"AbortError"===n.name)throw new a("请求超时,请稍后重试","timeout");if(n instanceof TypeError&&n.message.includes("Failed to fetch"))throw new a("跨域请求被拦截,请联系管理员将当前域名加入 API 白名单","cors");throw new a("网络连接失败,请检查网络","network")}finally{clearTimeout(o)}}class a extends Error{constructor(n,e){super(n),this.name="CskError",this.type=e}}function c(n){switch(n){case 401:return"鉴权失败,请联系管理员";case 403:return"无访问权限,请联系管理员配置";case 404:return"请求的资源不存在";case 429:return"请求过于频繁,请稍后重试";case 500:return"服务器异常,请稍后重试";case 502:case 503:return"服务暂不可用,请稍后重试";default:return`请求失败(状态码 ${n})`}}async function l(n){const e=function(n){const e=new URLSearchParams;return e.set("message",n),e.set("chatId",r.integrateId),i(e,"accountId",r.userId),i(e,"roleId",r.roleId),i(e,"categoryId",r.categoryId),o(`/ai/assistant_app/chat/sync?${e.toString()}`)}(n),l=Date.now();t.info(`发送消息 integrateId=${r.integrateId} length=${n.length}`);try{const n=await s(e);if(!n.ok){const e=c(n.status);throw t.error(`请求失败 integrateId=${r.integrateId} status=${n.status} message=${e}`),new a(e,`http_${n.status}`)}const o=await n.text(),i=Date.now()-l;return t.info(`AI 回复 integrateId=${r.integrateId} length=${o.length} duration=${i}ms`),o}catch(n){if(n instanceof a)throw n;throw t.error(`请求异常 integrateId=${r.integrateId}`,n),new a("请求发生未知错误","unknown")}}async function d(n,e,l,d){var u;const m=function(n){const e=new URLSearchParams;return e.set("message",n),e.set("chatId",r.integrateId),i(e,"accountId",r.userId),i(e,"roleId",r.roleId),i(e,"categoryId",r.categoryId),o(`/ai/assistant_app/chat/sse?${e.toString()}`)}(n),p=Date.now();let g="";t.info(`发送流式消息 integrateId=${r.integrateId} length=${n.length}`);try{const n=await s(m,{},6e4);if(!n.ok){const e=c(n.status);return t.error(`流式请求失败 integrateId=${r.integrateId} status=${n.status} message=${e}`),void d(new a(e,`http_${n.status}`))}const o=null===(u=n.body)||void 0===u?void 0:u.getReader();if(!o)return void d(new a("浏览器不支持流式读取","stream_unsupported"));const i=new TextDecoder("utf-8",{stream:!0});let h="";try{for(;;){const{done:n,value:t}=await o.read();if(n)break;h+=i.decode(t,{stream:!0});const r=h.split("\n");h=r.pop()||"";for(const n of r){const t=n.trim();if(t&&!t.startsWith(":"))if(t.startsWith("data:")){const n=t.substring(5).trim();n&&(g+=n,e(n))}else{if("[DONE]"===t)break;t.startsWith("event:")||t.startsWith("id:")||t.startsWith("retry:")||(g+=t,e(t))}}}if(h.trim()){const n=h.trim();if(n.startsWith("data:")){const t=n.substring(5).trim();t&&(g+=t,e(t))}else"[DONE]"!==n&&(g+=n,e(n))}}catch(n){if(!(g.length>0))throw n;e("\n\n[网络不稳定,内容可能不完整]")}finally{o.releaseLock()}const f=Date.now()-p;t.info(`流式回复完成 integrateId=${r.integrateId} length=${g.length} duration=${f}ms`),l()}catch(n){n instanceof a?d(n):(t.error(`流式请求异常 integrateId=${r.integrateId}`,n),d(new a("网络连接失败,请检查网络","network")))}}let u=null;function m(n){const e=function(n,e){const t=n.match(/^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);if(!t)return n;const r=n=>Math.max(0,Math.min(255,n)),o=r(parseInt(t[1],16)+e),i=r(parseInt(t[2],16)+e),s=r(parseInt(t[3],16)+e);return`#${o.toString(16).padStart(2,"0")}${i.toString(16).padStart(2,"0")}${s.toString(16).padStart(2,"0")}`}(n.primaryColor,-15);return`\n --csk-primary: ${n.primaryColor};\n --csk-primary-hover: ${e};\n --csk-bg-user: var(--csk-primary);\n --csk-bg-ai: #F3F4F6;\n --csk-text-user: #FFFFFF;\n --csk-text-ai: #1F2937;\n --csk-window-width: ${n.width}px;\n `}function p(n){document.querySelector("style[data-csk-sdk]")||(u=document.createElement("style"),u.setAttribute("data-csk-sdk",""),u.textContent=function(n){return`\n/* ChatbotSDK 样式 - csk- 命名空间 */\n.csk-root {\n ${m(n)}\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans SC", sans-serif;\n font-size: 14px;\n line-height: 1.5;\n color: #1F2937;\n}\n\n/* ========== 悬浮按钮 ========== */\n.csk-launcher {\n position: fixed;\n bottom: 20px;\n z-index: 9998;\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: #fff;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n border: none;\n color: var(--csk-primary);\n user-select: none;\n}\n.csk-launcher--right {\n right: 20px;\n}\n.csk-launcher--left {\n left: 20px;\n}\n.csk-launcher:hover {\n transform: scale(1.1);\n box-shadow: 0 6px 24px rgba(0, 0, 0, 0.2);\n}\n.csk-launcher:active {\n transform: scale(0.95);\n}\n\n/* ========== 聊天弹窗 ========== */\n.csk-window {\n position: fixed;\n bottom: 20px;\n z-index: 9999;\n width: var(--csk-window-width);\n height: 560px;\n background: #fff;\n border-radius: 12px;\n box-shadow: 0 8px 40px rgba(0, 0, 0, 0.18);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n transition: opacity 0.2s ease, transform 0.2s ease;\n}\n.csk-window--right {\n right: 20px;\n}\n.csk-window--left {\n left: 20px;\n}\n.csk-window--hidden {\n display: none;\n}\n\n/* ========== 头部 ========== */\n.csk-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 16px;\n height: 48px;\n min-height: 48px;\n background: var(--csk-primary);\n color: #fff;\n border-radius: 12px 12px 0 0;\n cursor: move;\n user-select: none;\n}\n.csk-header__title {\n font-size: 15px;\n font-weight: 600;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.csk-header__actions {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n.csk-header__btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n color: #fff;\n cursor: pointer;\n border-radius: 6px;\n transition: background 0.15s;\n}\n.csk-header__btn:hover {\n background: rgba(255, 255, 255, 0.2);\n}\n\n/* ========== 消息区 ========== */\n.csk-messages {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n background: #FAFAFA;\n scroll-behavior: smooth;\n}\n.csk-messages::-webkit-scrollbar {\n width: 5px;\n}\n.csk-messages::-webkit-scrollbar-track {\n background: transparent;\n}\n.csk-messages::-webkit-scrollbar-thumb {\n background: #D1D5DB;\n border-radius: 3px;\n}\n\n/* 消息气泡 */\n.csk-msg {\n display: flex;\n flex-direction: column;\n margin-bottom: 16px;\n max-width: 85%;\n word-break: break-word;\n}\n.csk-msg--user {\n margin-left: auto;\n align-items: flex-end;\n}\n.csk-msg--ai {\n margin-right: auto;\n align-items: flex-start;\n}\n.csk-msg__bubble {\n padding: 10px 14px;\n border-radius: 12px;\n font-size: 14px;\n line-height: 1.6;\n}\n.csk-msg--user .csk-msg__bubble {\n background: var(--csk-bg-user);\n color: var(--csk-text-user);\n border-radius: 12px 12px 4px 12px;\n}\n.csk-msg--ai .csk-msg__bubble {\n background: var(--csk-bg-ai);\n color: var(--csk-text-ai);\n border-radius: 12px 12px 12px 4px;\n}\n.csk-msg__time {\n font-size: 11px;\n color: #9CA3AF;\n margin-top: 4px;\n padding: 0 4px;\n}\n\n/* ========== Loading 动画 ========== */\n.csk-loading {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 12px 14px;\n margin-bottom: 16px;\n}\n.csk-loading__dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: #D1D5DB;\n animation: csk-bounce 1.4s ease-in-out infinite both;\n}\n.csk-loading__dot:nth-child(1) { animation-delay: 0s; }\n.csk-loading__dot:nth-child(2) { animation-delay: 0.16s; }\n.csk-loading__dot:nth-child(3) { animation-delay: 0.32s; }\n\n@keyframes csk-bounce {\n 0%, 80%, 100% { transform: scale(0.6); }\n 40% { transform: scale(1); }\n}\n\n/* ========== 输入区 ========== */\n.csk-input-area {\n display: flex;\n align-items: center;\n padding: 10px 12px;\n border-top: 1px solid #E5E7EB;\n background: #fff;\n gap: 8px;\n}\n.csk-input {\n flex: 1;\n border: 1px solid #E5E7EB;\n border-radius: 8px;\n padding: 10px 12px;\n font-size: 14px;\n outline: none;\n transition: border-color 0.2s;\n font-family: inherit;\n resize: none;\n min-height: 20px;\n max-height: 100px;\n}\n.csk-input:focus {\n border-color: var(--csk-primary);\n}\n.csk-input::placeholder {\n color: #9CA3AF;\n}\n.csk-send-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n min-width: 40px;\n border: none;\n border-radius: 8px;\n background: var(--csk-primary);\n color: #fff;\n cursor: pointer;\n transition: background 0.2s;\n}\n.csk-send-btn:hover {\n background: var(--csk-primary-hover);\n}\n.csk-send-btn:disabled {\n background: #D1D5DB;\n cursor: not-allowed;\n}\n\n/* ========== 清空按钮 ========== */\n.csk-clear-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 6px 12px;\n border: 1px solid #E5E7EB;\n border-radius: 6px;\n background: #fff;\n color: #6B7280;\n font-size: 12px;\n cursor: pointer;\n margin: 0 auto 8px;\n transition: all 0.15s;\n}\n.csk-clear-btn:hover {\n background: #FEE2E2;\n border-color: #FCA5A5;\n color: #DC2626;\n}\n\n/* ========== 移动端适配 ========== */\n@media (max-width: 480px) {\n .csk-window {\n width: 100vw !important;\n height: 100vh !important;\n bottom: 0 !important;\n right: 0 !important;\n left: 0 !important;\n border-radius: 0;\n }\n .csk-header {\n border-radius: 0;\n }\n}\n`}(n),document.head.appendChild(u))}function g(){return"undefined"!=typeof crypto&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,n=>{const e=16*Math.random()|0;return("x"===n?e:3&e|8).toString(16)})}function h(){return Date.now()}function f(n,e){const t=document.createElement("div");t.id="csk-launcher",t.className="csk-launcher csk-launcher--"+("left-bottom"===n.position?"left":"right"),t.setAttribute("title",n.title),t.setAttribute("aria-label",n.title),t.setAttribute("role","button"),t.setAttribute("tabindex","0"),t.innerHTML=n.launcherIcon;const r=function(n,e){let t=null;return function(...r){null!==t&&clearTimeout(t),t=setTimeout(()=>{n.apply(this,r),t=null},e)}}(e,300);return t.addEventListener("click",r),t.addEventListener("keydown",n=>{"Enter"!==n.key&&" "!==n.key||(n.preventDefault(),r())}),t}function x(n,e,t){const r=document.createElement("div");r.className="csk-msg csk-msg--user";const o=document.createElement("div");o.className="csk-msg__bubble",o.textContent=e;const i=document.createElement("div");return i.className="csk-msg__time",i.textContent=b(t),r.appendChild(o),r.appendChild(i),n.appendChild(r),r}function k(n,e,t){const r=document.createElement("div");r.className="csk-msg csk-msg--ai";const o=document.createElement("div");o.className="csk-msg__bubble",o.textContent=e;const i=document.createElement("div");return i.className="csk-msg__time",i.textContent=b(t),r.appendChild(o),r.appendChild(i),n.appendChild(r),r}function w(n){n.scrollTop=n.scrollHeight}function b(n){const e=new Date(n);return`${String(e.getHours()).padStart(2,"0")}:${String(e.getMinutes()).padStart(2,"0")}`}function y(n){return`csk_history_${n}`}function v(n){try{localStorage.removeItem(y(n))}catch(n){t.warn("清空会话历史失败",n)}}let I=null,C=[],E=null,_=null,$=null,D=null,L=null,A=null,N=!1;function S(n,e){I=n,E=e.messagesContainer,_=e.inputEl,$=e.sendBtn,D=e.clearBtn,L=e.showLoading,A=e.hideLoading,function(){if(!_||!$)return;$.addEventListener("click",()=>{B()}),_.addEventListener("keydown",n=>{"Enter"!==n.key||n.shiftKey||(n.preventDefault(),B())}),_.addEventListener("input",()=>{F()}),D&&D.addEventListener("click",()=>{!function(){if(!I)return;if(!confirm("确定清空所有对话记录?"))return;C=[],E&&(E.innerHTML="");D&&(D.style.display="none");v(I.integrateId),t.info(`清空会话 integrateId=${I.integrateId}`)}()})}();const r=function(n){try{const e=localStorage.getItem(y(n));if(!e)return[];const r=JSON.parse(e);return r&&Array.isArray(r.messages)?(t.info(`加载历史消息 integrateId=${n} count=${r.messages.length}`),r.messages):[]}catch(n){return t.warn("加载会话历史失败",n),[]}}(n.integrateId);r.length>0&&(C=r,function(){if(!E)return;E.innerHTML="";for(const n of C)"user"===n.role?x(E,n.content,n.timestamp):k(E,n.content,n.timestamp);w(E),D&&C.length>0&&(D.style.display="inline-flex")}())}function F(){if(!$||!_)return;_.value.trim().length>0&&!N?$.removeAttribute("disabled"):$.setAttribute("disabled","true")}async function B(){if(!_||!I||N)return;const n=_.value.trim();if(""===n)return;_.value="",F(),_.style.height="auto",N=!0,F();const e=h();E&&x(E,n,e);const r={id:g(),role:"user",content:n,timestamp:e};C.push(r),D&&C.length>0&&(D.style.display="inline-flex"),E&&w(E),L&&L(),E&&w(E);try{let e;const r=h();e=I.streaming?await async function(n,e){return new Promise((t,r)=>{let o=null,i=null,s="",a=!1;d(n,n=>{if(s+=n,!a&&E){A&&A();const{wrapper:n,bubble:t}=function(n,e){const t=document.createElement("div");t.className="csk-msg csk-msg--ai";const r=document.createElement("div");r.className="csk-msg__bubble",r.innerHTML="";const o=document.createElement("div");return o.className="csk-msg__time",o.textContent=b(e),t.appendChild(r),t.appendChild(o),n.appendChild(t),{wrapper:t,bubble:r}}(E,e);i=n,o=t,a=!0}o&&(o.textContent=s),E&&w(E)},()=>{a||""!==s?t(s):l(n).then(n=>t(n)).catch(r)},n=>{s.length>0?(o&&(o.textContent=s+"\n\n[回复被中断]"),t(s)):r(n)})})}(n,r):await l(n),A&&A(),!I.streaming&&E&&k(E,e,r);const o={id:g(),role:"ai",content:e,timestamp:r};C.push(o),function(n,e){try{let r=e;r.length>200&&(r=r.slice(50),t.warn(`消息数量达到上限,已裁剪最早 50 条,当前 ${r.length} 条`));const o={messages:r,updatedAt:Date.now()};localStorage.setItem(y(n),JSON.stringify(o))}catch(n){n instanceof Error&&"QuotaExceededError"===n.name?t.error("localStorage 空间不足,会话历史保存失败。建议清空历史记录。"):t.error("保存会话历史失败",n)}}(I.integrateId,C),E&&w(E)}catch(n){A&&A();const e=n instanceof a?n.message:"发送失败,请稍后重试";if(E){const n=document.createElement("div");n.className="csk-msg csk-msg--ai";const t=document.createElement("div");t.className="csk-msg__bubble",t.style.color="#DC2626",t.textContent=`⚠ ${e}`,n.appendChild(t),E.appendChild(n)}t.error(`发送失败 integrateId=${I.integrateId}`,n)}finally{N=!1,F()}}let M=null,q=!1,T=null,H=null,z=null,j=null,U=null,W=null,K=null,O=null,P=null;function R(){H&&H.classList.remove("csk-window--hidden")}function J(){H&&H.classList.add("csk-window--hidden")}function X(){H&&(H.classList.contains("csk-window--hidden")?(R(),setTimeout(()=>{j&&j.focus()},100)):J())}const Y={init:function(n){if(q)return void t.warn("SDK 已初始化,请先调用 destroy() 再重新初始化");const o=function(n){var e,r,o,i,s,a;if(!n.integrateId||"string"!=typeof n.integrateId||""===n.integrateId.trim())return t.error('integrateId 是必传参数,请检查 init() 调用。示例:ChatbotSDK.init({ integrateId: "my-app", requestDomain: "https://api.example.com" })'),null;if(!n.requestDomain||"string"!=typeof n.requestDomain||""===n.requestDomain.trim())return t.error('requestDomain 是必传参数,请检查 init() 调用。示例:ChatbotSDK.init({ integrateId: "my-app", requestDomain: "https://api.example.com" })'),null;try{new URL(n.requestDomain)}catch(e){return t.error(`requestDomain 不是合法的 URL 格式:${n.requestDomain}。请提供完整的域名,如 https://api.example.com`),null}const c={integrateId:n.integrateId.trim(),requestDomain:n.requestDomain.replace(/\/+$/,""),userId:n.userId,roleId:n.roleId,categoryId:n.categoryId,showCategorySwitch:null!==(e=n.showCategorySwitch)&&void 0!==e&&e,title:n.title||"AI 智能助手",width:null!==(r=n.width)&&void 0!==r?r:380,position:"left-bottom"===n.position?"left-bottom":"right-bottom",primaryColor:n.primaryColor||"#4F46E5",launcherIcon:n.launcherIcon||'\n \n \n',showClear:null===(o=n.showClear)||void 0===o||o,showAdminPanel:null!==(i=n.showAdminPanel)&&void 0!==i&&i,streaming:null===(s=n.streaming)||void 0===s||s,locale:n.locale||"zh-CN",debug:null===(a=n.debug)||void 0===a||a};return t.info(`配置解析完成 integrateId=${c.integrateId} requestDomain=${c.requestDomain}`),c}(n);if(!o)return;var i;M=o,i=M.debug,e=i,function(n){r=n}(M),p(M),T=f(M,X),document.body.appendChild(T);const s=function(n){const e=document.createElement("div");e.id="csk-window",e.className=`csk-root csk-window csk-window--${"left-bottom"===n.position?"left":"right"} csk-window--hidden`;const t=document.createElement("div");t.className="csk-header";const r=document.createElement("span");r.className="csk-header__title",r.textContent=n.title;const o=document.createElement("div");o.className="csk-header__actions";const i=document.createElement("button");i.className="csk-header__btn csk-header__btn--minimize",i.setAttribute("title","最小化"),i.innerHTML='',i.addEventListener("click",()=>{e.classList.add("csk-window--hidden")});const s=document.createElement("button");s.className="csk-header__btn csk-header__btn--close",s.setAttribute("title","关闭"),s.innerHTML='',s.addEventListener("click",()=>{e.classList.add("csk-window--hidden")}),o.appendChild(i),o.appendChild(s),t.appendChild(r),t.appendChild(o);const a=document.createElement("div");a.id="csk-messages",a.className="csk-messages";const c=document.createElement("div");c.className="csk-input-area";const l=document.createElement("textarea");l.id="csk-input",l.className="csk-input",l.setAttribute("placeholder","输入您的问题..."),l.setAttribute("rows","1"),l.setAttribute("autofocus","");const d=document.createElement("button");d.id="csk-send-btn",d.className="csk-send-btn",d.setAttribute("title","发送"),d.setAttribute("disabled","true"),d.innerHTML='',c.appendChild(l),c.appendChild(d),e.appendChild(t),e.appendChild(a),e.appendChild(c);let u=null;n.showClear&&(u=document.createElement("button"),u.className="csk-clear-btn",u.textContent="清空对话",u.style.display="none",e.insertBefore(u,c));let m=null;return{window:e,messagesContainer:a,inputEl:l,sendBtn:d,clearBtn:u,showLoading:function(){if(m)return m.style.display="flex",m;const n=document.createElement("div");return n.className="csk-loading",n.innerHTML='\n
\n
\n
\n ',a.appendChild(n),m=n,n},hideLoading:function(){m&&m.parentNode&&(m.parentNode.removeChild(m),m=null)}}}(M);H=s.window,z=s.messagesContainer,j=s.inputEl,U=s.sendBtn,W=s.clearBtn,K=s.showLoading,O=s.hideLoading,document.body.appendChild(H);const a=H.querySelector(".csk-header");a&&(P=function(n,e){let t=!1,r=0,o=0,i=0,s=0;const a=n=>{t=!0,r=n.clientX,o=n.clientY;const a=e.getBoundingClientRect();i=r-a.left,s=o-a.top,document.addEventListener("mousemove",c),document.addEventListener("mouseup",l)},c=n=>{if(!t)return;const r=n.clientX-i,o=n.clientY-s,a=window.innerWidth-e.offsetWidth,c=window.innerHeight-e.offsetHeight;e.style.right="auto",e.style.bottom="auto",e.style.left=`${Math.max(0,Math.min(r,a))}px`,e.style.top=`${Math.max(0,Math.min(o,c))}px`},l=()=>{t=!1,document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",l)};return n.addEventListener("mousedown",a),()=>{n.removeEventListener("mousedown",a),document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",l)}}(a,H)),S(M,{messagesContainer:z,inputEl:j,sendBtn:U,clearBtn:W,showLoading:K,hideLoading:O}),q=!0,t.info(`初始化完成 integrateId=${M.integrateId} requestDomain=${M.requestDomain}`)},destroy:function(){if(!q)return;T&&T.parentNode&&(T.parentNode.removeChild(T),T=null),H&&H.parentNode&&(H.parentNode.removeChild(H),H=null),P&&(P(),P=null),u&&u.parentNode&&(u.parentNode.removeChild(u),u=null),document.querySelectorAll("style[data-csk-sdk]").forEach(n=>n.remove());const n=null==M?void 0:M.integrateId;M=null,q=!1,z=null,j=null,U=null,W=null,K=null,O=null,t.info(`销毁实例 integrateId=${n}`)},open:R,close:J,toggle:X,clearHistory:function(){M&&(W?W.click():confirm("确定清空所有对话记录?")&&v(M.integrateId))}};return"undefined"!=typeof window&&(window.ChatbotSDK=Y),Y}(); //# sourceMappingURL=chatbot-sdk.min.js.map diff --git a/src/main/resources/static/sdk/chatbot-sdk.min.js.map b/src/main/resources/static/sdk/chatbot-sdk.min.js.map index 063a1b7..bba685b 100644 --- a/src/main/resources/static/sdk/chatbot-sdk.min.js.map +++ b/src/main/resources/static/sdk/chatbot-sdk.min.js.map @@ -1 +1 @@ -{"version":3,"file":"chatbot-sdk.min.js","sources":["../src/logger.ts","../src/api.ts","../src/styles.ts","../src/utils.ts","../src/dom.ts","../src/storage.ts","../src/chat.ts","../src/index.ts","../src/config.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["PREFIX","debugEnabled","logger","info","msg","data","console","log","undefined","warn","error","currentConfig","buildUrl","path","Error","requestDomain","replace","startsWith","async","safeFetch","url","options","timeout","controller","AbortController","timer","setTimeout","abort","fetch","Object","assign","signal","mode","credentials","err","DOMException","name","CskError","TypeError","message","includes","clearTimeout","constructor","type","super","this","getHttpErrorMessage","status","chatRequest","params","URLSearchParams","set","integrateId","userId","roleId","String","categoryId","toString","buildChatUrl","startTime","Date","now","length","response","ok","errorMsg","text","duration","chatSSERequest","onChunk","onDone","onError","buildChatSSEUrl","totalText","REQUEST_TIMEOUT","reader","_a","body","getReader","decoder","TextDecoder","stream","buffer","done","value","read","decode","lines","split","pop","line","trimmed","trim","substring","readErr","releaseLock","styleElement","cssVars","config","darker","hex","amount","match","clamp","v","Math","max","min","r","parseInt","g","b","padStart","adjustColor","primaryColor","width","injectStyles","document","querySelector","createElement","setAttribute","textContent","getStyles","head","appendChild","uuid","crypto","randomUUID","c","random","createLauncher","onClick","launcher","id","className","position","title","innerHTML","launcherIcon","debouncedClick","fn","delay","args","apply","debounce","addEventListener","e","key","preventDefault","renderUserBubble","container","timestamp","wrapper","bubble","time","formatTime","renderAIBubble","scrollToBottom","scrollTop","scrollHeight","d","getHours","getMinutes","storageKey","clearMessages","localStorage","removeItem","messages","messagesContainer","inputEl","sendBtn","clearBtn","showLoadingFn","hideLoadingFn","isSending","initChat","cfg","dom","showLoading","hideLoading","handleSend","shiftKey","updateSendBtnState","confirm","style","display","handleClear","bindSendEvents","history","raw","getItem","JSON","parse","Array","isArray","loadMessages","role","content","renderHistory","removeAttribute","height","userTimestamp","userMsg","push","aiContent","aiTimestamp","streaming","Promise","resolve","reject","bubbleEl","wrapperEl","accumulated","streamStarted","chunk","createEmptyAIBubble","then","catch","sendStreamMessage","aiMsg","slice","updatedAt","setItem","stringify","saveMessages","errMsg","errorBubble","color","isInitialized","launcherEl","windowEl","dragCleanup","open","classList","remove","close","add","toggle","contains","focus","ChatbotSDK","init","rawConfig","parsed","URL","_g","showCategorySwitch","_b","showClear","_c","showAdminPanel","_d","_e","locale","debug","_f","parseConfig","enabled","setApiConfig","header","titleEl","actions","minimizeBtn","closeBtn","inputArea","insertBefore","loadingEl","window","el","parentNode","removeChild","createChatWindow","headerEl","dragging","startX","startY","offsetX","offsetY","onMouseDown","clientX","clientY","rect","getBoundingClientRect","left","top","onMouseMove","onMouseUp","x","y","maxX","innerWidth","offsetWidth","maxY","innerHeight","offsetHeight","right","bottom","removeEventListener","enableDrag","destroy","querySelectorAll","forEach","oldIntegrateId","clearHistory","click"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"chatbot-sdk.min.js","sources":["../src/logger.ts","../src/api.ts","../src/styles.ts","../src/utils.ts","../src/dom.ts","../src/storage.ts","../src/chat.ts","../src/index.ts","../src/config.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["PREFIX","debugEnabled","logger","info","msg","data","console","log","undefined","warn","error","currentConfig","buildUrl","path","Error","requestDomain","replace","startsWith","setIfPresent","params","key","value","trim","set","String","async","safeFetch","url","options","timeout","controller","AbortController","timer","setTimeout","abort","fetch","Object","assign","signal","mode","credentials","err","DOMException","name","CskError","TypeError","message","includes","clearTimeout","constructor","type","super","this","getHttpErrorMessage","status","chatRequest","URLSearchParams","integrateId","userId","roleId","categoryId","toString","buildChatUrl","startTime","Date","now","length","response","ok","errorMsg","text","duration","chatSSERequest","onChunk","onDone","onError","buildChatSSEUrl","totalText","REQUEST_TIMEOUT","reader","_a","body","getReader","decoder","TextDecoder","stream","buffer","done","read","decode","lines","split","pop","line","trimmed","substring","readErr","releaseLock","styleElement","cssVars","config","darker","hex","amount","match","clamp","v","Math","max","min","r","parseInt","g","b","padStart","adjustColor","primaryColor","width","injectStyles","document","querySelector","createElement","setAttribute","textContent","getStyles","head","appendChild","uuid","crypto","randomUUID","c","random","createLauncher","onClick","launcher","id","className","position","title","innerHTML","launcherIcon","debouncedClick","fn","delay","args","apply","debounce","addEventListener","e","preventDefault","renderUserBubble","container","timestamp","wrapper","bubble","time","formatTime","renderAIBubble","scrollToBottom","scrollTop","scrollHeight","d","getHours","getMinutes","storageKey","clearMessages","localStorage","removeItem","messages","messagesContainer","inputEl","sendBtn","clearBtn","showLoadingFn","hideLoadingFn","isSending","initChat","cfg","dom","showLoading","hideLoading","handleSend","shiftKey","updateSendBtnState","confirm","style","display","handleClear","bindSendEvents","history","raw","getItem","JSON","parse","Array","isArray","loadMessages","role","content","renderHistory","removeAttribute","height","userTimestamp","userMsg","push","aiContent","aiTimestamp","streaming","Promise","resolve","reject","bubbleEl","wrapperEl","accumulated","streamStarted","chunk","createEmptyAIBubble","then","catch","sendStreamMessage","aiMsg","slice","updatedAt","setItem","stringify","saveMessages","errMsg","errorBubble","color","isInitialized","launcherEl","windowEl","dragCleanup","open","classList","remove","close","add","toggle","contains","focus","ChatbotSDK","init","rawConfig","parsed","URL","_g","showCategorySwitch","_b","showClear","_c","showAdminPanel","_d","_e","locale","debug","_f","parseConfig","enabled","setApiConfig","header","titleEl","actions","minimizeBtn","closeBtn","inputArea","insertBefore","loadingEl","window","el","parentNode","removeChild","createChatWindow","headerEl","dragging","startX","startY","offsetX","offsetY","onMouseDown","clientX","clientY","rect","getBoundingClientRect","left","top","onMouseMove","onMouseUp","x","y","maxX","innerWidth","offsetWidth","maxY","innerHeight","offsetHeight","right","bottom","removeEventListener","enableDrag","destroy","querySelectorAll","forEach","oldIntegrateId","clearHistory","click"],"mappings":"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"} \ No newline at end of file diff --git a/src/main/resources/static/sdk/test.html b/src/main/resources/static/sdk/test.html index 36f35b5..91b8688 100644 --- a/src/main/resources/static/sdk/test.html +++ b/src/main/resources/static/sdk/test.html @@ -1,482 +1,726 @@ - - - ChatbotSDK 验证测试 - + + +ChatbotSDK 测试面板 + -
-

🧪 ChatbotSDK 验证测试

-

P0 核心链路验证:初始化 → DOM 挂载 → 配置校验 → API 通信 → 缓存读写 → 销毁清理

- - -
-

📋 SDK 配置

-
+
+ +
+
+

🧪 ChatbotSDK 测试面板

+

P0 核心链路 · 交互式验证

+
+
+ +
+ ⭕ SDK 未加载 + ⭕ API 未测 +
+ +
- +
-
+
- +
-
+
- +
-
- - -
-
- - +
+
+ + +
+
+ + +
-
-
+
+
- +
-
- - +
+ +
-
-
- - +
+
+ +
-
- - -
-
+
- +
-
- - +
+
-
- - -
-

📊 运行状态

-
- ⭕ 全局挂载:未检测 - ⭕ 配置校验:未检测 - ⭕ DOM 挂载:未检测 - ⭕ API 通信:未检测 - ⭕ 缓存读写:未检测 +
+ + +
-
- - - - - +
+ + +
-
- -
-

📝 测试日志

-
-等待测试开始... -
-
- +
+
+ 💡 操作提示
+ 1. 点击「初始化 SDK」→ 右下角出现悬浮按钮
+ 2. 点击悬浮按钮 → 打开聊天弹窗
+ 3. 在弹窗里输入问题 → 回车发送
+ 4. 观察 AI 回复(流式/同步)
+ 5. 等待 30s 后刷新页面 → 历史恢复
- - + +
+
+

📋 测试用例

+ +
- + + + // 检测后端是否可达 + fetch(window.location.origin + '/ai/assistant_app/chat/sync?message=' + encodeURIComponent('test') + '&chatId=__probe__', { + signal: AbortSignal.timeout(5000) + }).then(r => { + const tag = getLog('tag-api'); + if (r.ok || r.status < 500) { + tag.className = 'tag tag--pass'; + tag.textContent = '✅ 后端连通'; + setEl('footer-info', 'ChatbotSDK v1.0.0-P0 | 后端:在线 ✅'); + } + }).catch(() => { + const tag = getLog('tag-api'); + tag.className = 'tag tag--fail'; + tag.textContent = '⚠ 后端离线'; + }); + })(); +})(); +