diff --git a/.image/common/ai-feature.png b/.image/common/ai-feature.png index b4a55f547c85650d1b34e0bf0852a40634ecc99f..552ed59b424610bf8438003a1c839e197bda7eed 100644 Binary files a/.image/common/ai-feature.png and b/.image/common/ai-feature.png differ diff --git a/README.md b/README.md index 6ca2dbf96d105abb931e9556e9b37f62d36113fa..099692fb860e6335d842810ff694a26a4da52e98 100644 --- a/README.md +++ b/README.md @@ -81,16 +81,13 @@ 系统内置多种多种业务功能,可以用于快速你的业务系统: -* 系统功能 -* 基础设施 -* 工作流程 -* 支付系统 -* 会员中心 -* 数据报表 -* 商城系统 -* 微信公众号 -* ERP 系统 -* CRM 系统 +系统内置多种多种业务功能,可以用于快速你的业务系统: + +![功能分层](/.image/common/ruoyi-vue-pro-biz.png) + +* 通用模块(必选):系统功能、基础设施 +* 通用模块(可选):工作流程、支付系统、数据报表、会员中心 +* 业务系统(按需):ERP 系统、CRM 系统、商城系统、微信公众号、AI 大模型 ### 系统功能 @@ -213,6 +210,14 @@ ps:核心功能已经实现,正在对接微信小程序中... ![功能图](/.image/common/crm-feature.png) +### AI 大模型 + +演示地址: + +![功能图](/.image/common/ai-feature.png) + +![功能图](/.image/common/ai-preview.gif) + ## 🐷 演示图 ### 系统功能 diff --git a/src/api/ai/chat/message/index.ts b/src/api/ai/chat/message/index.ts index ef1196aca94a90eeb97f5d9592ab4ae2d141b5dc..69d9f123e019019af39c020bd7f51dc925a76e4f 100644 --- a/src/api/ai/chat/message/index.ts +++ b/src/api/ai/chat/message/index.ts @@ -14,9 +14,16 @@ export interface ChatMessageVO { modelId: number // 模型编号 content: string // 聊天内容 tokens: number // 消耗 Token 数量 + segmentIds?: number[] // 段落编号 + segments?: { + id: number // 段落编号 + content: string // 段落内容 + documentId: number // 文档编号 + documentName: string // 文档名称 + }[] createTime: Date // 创建时间 roleAvatar: string // 角色头像 - userAvatar: string // 创建时间 + userAvatar: string // 用户头像 } // AI chat 聊天 diff --git a/src/api/ai/image/index.ts b/src/api/ai/image/index.ts index 2f276c7e208871c289eb8340f6174da9f054fa5d..ab2bcf7243cbafb15d2e3624a43f17d7d8a89f5a 100644 --- a/src/api/ai/image/index.ts +++ b/src/api/ai/image/index.ts @@ -20,9 +20,8 @@ export interface ImageVO { } export interface ImageDrawReqVO { - platform: string // 平台 prompt: string // 提示词 - model: string // 模型 + modelId: number // 模型 style: string // 图像生成的风格 width: string // 图片宽度 height: string // 图片高度 @@ -31,7 +30,7 @@ export interface ImageDrawReqVO { export interface ImageMidjourneyImagineReqVO { prompt: string // 提示词 - model: string // 模型 mj nijj + modelId: number // 模型 base64Array: string[] // size不能为空 width: string // 图片宽度 height: string // 图片高度 diff --git a/src/api/ai/knowledge/document/index.ts b/src/api/ai/knowledge/document/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..62c24d5bb1a60a4ace76d4108fa7d7b5acd1cbee --- /dev/null +++ b/src/api/ai/knowledge/document/index.ts @@ -0,0 +1,54 @@ +import request from '@/config/axios' + +// AI 知识库文档 VO +export interface KnowledgeDocumentVO { + id: number // 编号 + knowledgeId: number // 知识库编号 + name: string // 文档名称 + contentLength: number // 字符数 + tokens: number // token 数 + segmentMaxTokens: number // 分片最大 token 数 + retrievalCount: number // 召回次数 + status: number // 是否启用 +} + +// AI 知识库文档 API +export const KnowledgeDocumentApi = { + // 查询知识库文档分页 + getKnowledgeDocumentPage: async (params: any) => { + return await request.get({ url: `/ai/knowledge/document/page`, params }) + }, + + // 查询知识库文档详情 + getKnowledgeDocument: async (id: number) => { + return await request.get({ url: `/ai/knowledge/document/get?id=` + id }) + }, + + // 新增知识库文档(单个) + createKnowledgeDocument: async (data: any) => { + return await request.post({ url: `/ai/knowledge/document/create`, data }) + }, + + // 新增知识库文档(多个) + createKnowledgeDocumentList: async (data: any) => { + return await request.post({ url: `/ai/knowledge/document/create-list`, data }) + }, + + // 修改知识库文档 + updateKnowledgeDocument: async (data: any) => { + return await request.put({ url: `/ai/knowledge/document/update`, data }) + }, + + // 修改知识库文档状态 + updateKnowledgeDocumentStatus: async (data: any) => { + return await request.put({ + url: `/ai/knowledge/document/update-status`, + data + }) + }, + + // 删除知识库文档 + deleteKnowledgeDocument: async (id: number) => { + return await request.delete({ url: `/ai/knowledge/document/delete?id=` + id }) + } +} diff --git a/src/api/ai/knowledge/knowledge/index.ts b/src/api/ai/knowledge/knowledge/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..f9d368375e81925c38c3adedef503e00bd1ea8d5 --- /dev/null +++ b/src/api/ai/knowledge/knowledge/index.ts @@ -0,0 +1,44 @@ +import request from '@/config/axios' + +// AI 知识库 VO +export interface KnowledgeVO { + id: number // 编号 + name: string // 知识库名称 + description: string // 知识库描述 + embeddingModelId: number // 嵌入模型编号,高质量模式时维护 + topK: number // topK + similarityThreshold: number // 相似度阈值 +} + +// AI 知识库 API +export const KnowledgeApi = { + // 查询知识库分页 + getKnowledgePage: async (params: any) => { + return await request.get({ url: `/ai/knowledge/page`, params }) + }, + + // 查询知识库详情 + getKnowledge: async (id: number) => { + return await request.get({ url: `/ai/knowledge/get?id=` + id }) + }, + + // 新增知识库 + createKnowledge: async (data: KnowledgeVO) => { + return await request.post({ url: `/ai/knowledge/create`, data }) + }, + + // 修改知识库 + updateKnowledge: async (data: KnowledgeVO) => { + return await request.put({ url: `/ai/knowledge/update`, data }) + }, + + // 删除知识库 + deleteKnowledge: async (id: number) => { + return await request.delete({ url: `/ai/knowledge/delete?id=` + id }) + }, + + // 获取知识库简单列表 + getSimpleKnowledgeList: async () => { + return await request.get({ url: `/ai/knowledge/simple-list` }) + } +} diff --git a/src/api/ai/knowledge/segment/index.ts b/src/api/ai/knowledge/segment/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..d234d99738f5a14869174af416ccc68515dee6c5 --- /dev/null +++ b/src/api/ai/knowledge/segment/index.ts @@ -0,0 +1,75 @@ +import request from '@/config/axios' + +// AI 知识库分段 VO +export interface KnowledgeSegmentVO { + id: number // 编号 + documentId: number // 文档编号 + knowledgeId: number // 知识库编号 + vectorId: string // 向量库编号 + content: string // 切片内容 + contentLength: number // 切片内容长度 + tokens: number // token 数量 + retrievalCount: number // 召回次数 + status: number // 文档状态 + createTime: number // 创建时间 +} + +// AI 知识库分段 API +export const KnowledgeSegmentApi = { + // 查询知识库分段分页 + getKnowledgeSegmentPage: async (params: any) => { + return await request.get({ url: `/ai/knowledge/segment/page`, params }) + }, + + // 查询知识库分段详情 + getKnowledgeSegment: async (id: number) => { + return await request.get({ url: `/ai/knowledge/segment/get?id=` + id }) + }, + + // 删除知识库分段 + deleteKnowledgeSegment: async (id: number) => { + return await request.delete({ url: `/ai/knowledge/segment/delete?id=` + id }) + }, + + // 新增知识库分段 + createKnowledgeSegment: async (data: KnowledgeSegmentVO) => { + return await request.post({ url: `/ai/knowledge/segment/create`, data }) + }, + + // 修改知识库分段 + updateKnowledgeSegment: async (data: KnowledgeSegmentVO) => { + return await request.put({ url: `/ai/knowledge/segment/update`, data }) + }, + + // 修改知识库分段状态 + updateKnowledgeSegmentStatus: async (data: any) => { + return await request.put({ + url: `/ai/knowledge/segment/update-status`, + data + }) + }, + + // 切片内容 + splitContent: async (url: string, segmentMaxTokens: number) => { + return await request.get({ + url: `/ai/knowledge/segment/split`, + params: { url, segmentMaxTokens } + }) + }, + + // 获取文档处理列表 + getKnowledgeSegmentProcessList: async (documentIds: number[]) => { + return await request.get({ + url: `/ai/knowledge/segment/get-process-list`, + params: { documentIds: documentIds.join(',') } + }) + }, + + // 搜索知识库分段 + searchKnowledgeSegment: async (params: any) => { + return await request.get({ + url: `/ai/knowledge/segment/search`, + params + }) + } +} diff --git a/src/api/ai/model/chatModel/index.ts b/src/api/ai/model/chatModel/index.ts deleted file mode 100644 index c2ef4c8d308ac26d5a735a744695ec0a2db74745..0000000000000000000000000000000000000000 --- a/src/api/ai/model/chatModel/index.ts +++ /dev/null @@ -1,53 +0,0 @@ -import request from '@/config/axios' - -// AI 聊天模型 VO -export interface ChatModelVO { - id: number // 编号 - keyId: number // API 秘钥编号 - name: string // 模型名字 - model: string // 模型标识 - platform: string // 模型平台 - sort: number // 排序 - status: number // 状态 - temperature: number // 温度参数 - maxTokens: number // 单条回复的最大 Token 数量 - maxContexts: number // 上下文的最大 Message 数量 -} - -// AI 聊天模型 API -export const ChatModelApi = { - // 查询聊天模型分页 - getChatModelPage: async (params: any) => { - return await request.get({ url: `/ai/chat-model/page`, params }) - }, - - // 获得聊天模型列表 - getChatModelSimpleList: async (status?: number) => { - return await request.get({ - url: `/ai/chat-model/simple-list`, - params: { - status - } - }) - }, - - // 查询聊天模型详情 - getChatModel: async (id: number) => { - return await request.get({ url: `/ai/chat-model/get?id=` + id }) - }, - - // 新增聊天模型 - createChatModel: async (data: ChatModelVO) => { - return await request.post({ url: `/ai/chat-model/create`, data }) - }, - - // 修改聊天模型 - updateChatModel: async (data: ChatModelVO) => { - return await request.put({ url: `/ai/chat-model/update`, data }) - }, - - // 删除聊天模型 - deleteChatModel: async (id: number) => { - return await request.delete({ url: `/ai/chat-model/delete?id=` + id }) - } -} diff --git a/src/api/ai/model/chatRole/index.ts b/src/api/ai/model/chatRole/index.ts index a9fce13c685675d2d8702b38323bc46e161c1663..6c5511a5414e06059e9508ed866629ca7e1338ad 100644 --- a/src/api/ai/model/chatRole/index.ts +++ b/src/api/ai/model/chatRole/index.ts @@ -13,6 +13,8 @@ export interface ChatRoleVO { welcomeMessage: string // 角色设定 publicStatus: boolean // 是否公开 status: number // 状态 + knowledgeIds?: number[] // 引用的知识库 ID 列表 + toolIds?: number[] // 引用的工具 ID 列表 } // AI 聊天角色 分页请求 vo diff --git a/src/api/ai/model/model/index.ts b/src/api/ai/model/model/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..7c485a0aaa2ab231dfa78751121e92413e5dd01c --- /dev/null +++ b/src/api/ai/model/model/index.ts @@ -0,0 +1,54 @@ +import request from '@/config/axios' + +// AI 模型 VO +export interface ModelVO { + id: number // 编号 + keyId: number // API 秘钥编号 + name: string // 模型名字 + model: string // 模型标识 + platform: string // 模型平台 + type: number // 模型类型 + sort: number // 排序 + status: number // 状态 + temperature?: number // 温度参数 + maxTokens?: number // 单条回复的最大 Token 数量 + maxContexts?: number // 上下文的最大 Message 数量 +} + +// AI 模型 API +export const ModelApi = { + // 查询模型分页 + getModelPage: async (params: any) => { + return await request.get({ url: `/ai/model/page`, params }) + }, + + // 获得模型列表 + getModelSimpleList: async (type?: number) => { + return await request.get({ + url: `/ai/model/simple-list`, + params: { + type + } + }) + }, + + // 查询模型详情 + getModel: async (id: number) => { + return await request.get({ url: `/ai/model/get?id=` + id }) + }, + + // 新增模型 + createModel: async (data: ModelVO) => { + return await request.post({ url: `/ai/model/create`, data }) + }, + + // 修改模型 + updateModel: async (data: ModelVO) => { + return await request.put({ url: `/ai/model/update`, data }) + }, + + // 删除模型 + deleteModel: async (id: number) => { + return await request.delete({ url: `/ai/model/delete?id=` + id }) + } +} diff --git a/src/api/ai/model/tool/index.ts b/src/api/ai/model/tool/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..bfb896a9f55611b1d33e7c805f0f95affdd45eb2 --- /dev/null +++ b/src/api/ai/model/tool/index.ts @@ -0,0 +1,42 @@ +import request from '@/config/axios' + +// AI 工具 VO +export interface ToolVO { + id: number // 工具编号 + name: string // 工具名称 + description: string // 工具描述 + status: number // 状态 +} + +// AI 工具 API +export const ToolApi = { + // 查询工具分页 + getToolPage: async (params: any) => { + return await request.get({ url: `/ai/tool/page`, params }) + }, + + // 查询工具详情 + getTool: async (id: number) => { + return await request.get({ url: `/ai/tool/get?id=` + id }) + }, + + // 新增工具 + createTool: async (data: ToolVO) => { + return await request.post({ url: `/ai/tool/create`, data }) + }, + + // 修改工具 + updateTool: async (data: ToolVO) => { + return await request.put({ url: `/ai/tool/update`, data }) + }, + + // 删除工具 + deleteTool: async (id: number) => { + return await request.delete({ url: `/ai/tool/delete?id=` + id }) + }, + + // 获取工具简单列表 + getToolSimpleList: async () => { + return await request.get({ url: `/ai/tool/simple-list` }) + } +} diff --git a/src/router/modules/remaining.ts b/src/router/modules/remaining.ts index a5a7e449d6d22a78403f4e79bc9d23443c8938ad..c9107cc5551b97cee99f6baefbdd6bf5b151e629 100644 --- a/src/router/modules/remaining.ts +++ b/src/router/modules/remaining.ts @@ -633,6 +633,65 @@ const remainingRouter: AppRouteRecordRaw[] = [ icon: 'ep:home-filled', noCache: false } + }, + { + path: 'knowledge/document', + component: () => import('@/views/ai/knowledge/document/index.vue'), + name: 'AiKnowledgeDocument', + meta: { + title: '知识库文档', + icon: 'ep:document', + noCache: false, + activeMenu: '/ai/knowledge' + } + }, + { + path: 'knowledge/document/create', + component: () => import('@/views/ai/knowledge/document/form/index.vue'), + name: 'AiKnowledgeDocumentCreate', + meta: { + title: '创建文档', + icon: 'ep:plus', + noCache: true, + hidden: true, + activeMenu: '/ai/knowledge' + } + }, + { + path: 'knowledge/document/update', + component: () => import('@/views/ai/knowledge/document/form/index.vue'), + name: 'AiKnowledgeDocumentUpdate', + meta: { + title: '修改文档', + icon: 'ep:edit', + noCache: true, + hidden: true, + activeMenu: '/ai/knowledge' + } + }, + { + path: 'knowledge/retrieval', + component: () => import('@/views/ai/knowledge/knowledge/retrieval/index.vue'), + name: 'AiKnowledgeRetrieval', + meta: { + title: '文档召回测试', + icon: 'ep:search', + noCache: true, + hidden: true, + activeMenu: '/ai/knowledge' + } + }, + { + path: 'knowledge/segment', + component: () => import('@/views/ai/knowledge/segment/index.vue'), + name: 'AiKnowledgeSegment', + meta: { + title: '知识库分段', + icon: 'ep:tickets', + noCache: true, + hidden: true, + activeMenu: '/ai/knowledge' + } } ] }, diff --git a/src/utils/dict.ts b/src/utils/dict.ts index 1134152b69ffc40cf0ffb55682bff11f76b4babe..f572bbe70a23880ebc3a024a7a1306e00f8716e0 100644 --- a/src/utils/dict.ts +++ b/src/utils/dict.ts @@ -219,6 +219,7 @@ export enum DICT_TYPE { // ========== AI - 人工智能模块 ========== AI_PLATFORM = 'ai_platform', // AI 平台 + AI_MODEL_TYPE = 'ai_model_type', // AI 模型类型 AI_IMAGE_STATUS = 'ai_image_status', // AI 图片状态 AI_MUSIC_STATUS = 'ai_music_status', // AI 音乐状态 AI_GENERATE_MODE = 'ai_generate_mode', // AI 生成模式 diff --git a/src/utils/index.ts b/src/utils/index.ts index 7e56e8bedc52efaa0862a808b7537c19748036bf..502ae60211e52579ed299c99a944c7a7198ac332 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -116,6 +116,64 @@ export function toAnyString() { return str } +/** + * 根据支持的文件类型生成 accept 属性值 + * + * @param supportedFileTypes 支持的文件类型数组,如 ['PDF', 'DOC', 'DOCX'] + * @returns 用于文件上传组件 accept 属性的字符串 + */ +export const generateAcceptedFileTypes = (supportedFileTypes: string[]): string => { + const allowedExtensions = supportedFileTypes.map((ext) => ext.toLowerCase()) + const mimeTypes: string[] = [] + + // 添加常见的 MIME 类型映射 + if (allowedExtensions.includes('txt')) { + mimeTypes.push('text/plain') + } + if (allowedExtensions.includes('pdf')) { + mimeTypes.push('application/pdf') + } + if (allowedExtensions.includes('html') || allowedExtensions.includes('htm')) { + mimeTypes.push('text/html') + } + if (allowedExtensions.includes('csv')) { + mimeTypes.push('text/csv') + } + if (allowedExtensions.includes('xlsx') || allowedExtensions.includes('xls')) { + mimeTypes.push('application/vnd.ms-excel') + mimeTypes.push('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') + } + if (allowedExtensions.includes('docx') || allowedExtensions.includes('doc')) { + mimeTypes.push('application/msword') + mimeTypes.push('application/vnd.openxmlformats-officedocument.wordprocessingml.document') + } + if (allowedExtensions.includes('pptx') || allowedExtensions.includes('ppt')) { + mimeTypes.push('application/vnd.ms-powerpoint') + mimeTypes.push('application/vnd.openxmlformats-officedocument.presentationml.presentation') + } + if (allowedExtensions.includes('xml')) { + mimeTypes.push('application/xml') + mimeTypes.push('text/xml') + } + if (allowedExtensions.includes('md') || allowedExtensions.includes('markdown')) { + mimeTypes.push('text/markdown') + } + if (allowedExtensions.includes('epub')) { + mimeTypes.push('application/epub+zip') + } + if (allowedExtensions.includes('eml')) { + mimeTypes.push('message/rfc822') + } + if (allowedExtensions.includes('msg')) { + mimeTypes.push('application/vnd.ms-outlook') + } + + // 添加文件扩展名 + const extensions = allowedExtensions.map((ext) => `.${ext}`) + + return [...mimeTypes, ...extensions].join(',') +} + /** * 首字母大写 */ diff --git a/src/views/ai/chat/index/components/conversation/ConversationUpdateForm.vue b/src/views/ai/chat/index/components/conversation/ConversationUpdateForm.vue index bff094fb6f24db0090d860205eff4d7182d5a8c3..90f68c6679398d463509e0feffef158d4089f3d5 100644 --- a/src/views/ai/chat/index/components/conversation/ConversationUpdateForm.vue +++ b/src/views/ai/chat/index/components/conversation/ConversationUpdateForm.vue @@ -11,17 +11,17 @@ @@ -32,6 +32,7 @@ :min="0" :max="2" :precision="2" + class="!w-1/1" /> @@ -39,7 +40,8 @@ v-model="formData.maxTokens" placeholder="请输入回复数 Token 数" :min="0" - :max="4096" + :max="8192" + class="!w-1/1" /> @@ -48,6 +50,7 @@ placeholder="请输入上下文数量" :min="0" :max="20" + class="!w-1/1" /> @@ -58,9 +61,9 @@ diff --git a/src/views/ai/chat/index/components/message/MessageList.vue b/src/views/ai/chat/index/components/message/MessageList.vue index b7402a9e021dec7784d097be9c54c81aba3c09d5..2840bf9444ad9889e6f93f2f34d8eaea7f89c0b0 100644 --- a/src/views/ai/chat/index/components/message/MessageList.vue +++ b/src/views/ai/chat/index/components/message/MessageList.vue @@ -12,6 +12,7 @@
+
@@ -62,6 +63,7 @@ import { PropType } from 'vue' import { formatDate } from '@/utils/formatTime' import MarkdownView from '@/components/MarkdownView/index.vue' +import MessageKnowledge from './MessageKnowledge.vue' import { useClipboard } from '@vueuse/core' import { ArrowDownBold, Edit, RefreshRight } from '@element-plus/icons-vue' import { ChatMessageApi, ChatMessageVO } from '@/api/ai/chat/message' diff --git a/src/views/ai/chat/index/components/role/RoleList.vue b/src/views/ai/chat/index/components/role/RoleList.vue index b148b220e7a7e883133cd0bcba39cbe012cd050c..e0388d09b44c27d0389633a49220334ef46811bb 100644 --- a/src/views/ai/chat/index/components/role/RoleList.vue +++ b/src/views/ai/chat/index/components/role/RoleList.vue @@ -41,9 +41,9 @@ diff --git a/src/views/ai/knowledge/document/form/index.vue b/src/views/ai/knowledge/document/form/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..722f57cf96b1f7ecb5af5a7d95ac6a3933c6c956 --- /dev/null +++ b/src/views/ai/knowledge/document/form/index.vue @@ -0,0 +1,193 @@ + + + + + diff --git a/src/views/ai/knowledge/document/index.vue b/src/views/ai/knowledge/document/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..e8ba711c1ea9f0a2666dfb46725f4b6e7b2fec4c --- /dev/null +++ b/src/views/ai/knowledge/document/index.vue @@ -0,0 +1,236 @@ + + + diff --git a/src/views/ai/knowledge/knowledge/KnowledgeForm.vue b/src/views/ai/knowledge/knowledge/KnowledgeForm.vue new file mode 100644 index 0000000000000000000000000000000000000000..d72f37caf06e1cb8280753e13a070d68bdb4e3ff --- /dev/null +++ b/src/views/ai/knowledge/knowledge/KnowledgeForm.vue @@ -0,0 +1,162 @@ + + diff --git a/src/views/ai/knowledge/knowledge/index.vue b/src/views/ai/knowledge/knowledge/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..a768c6b8012a8ce44b5c9c0c686a79bd57d6ceaf --- /dev/null +++ b/src/views/ai/knowledge/knowledge/index.vue @@ -0,0 +1,221 @@ + + + diff --git a/src/views/ai/knowledge/knowledge/retrieval/index.vue b/src/views/ai/knowledge/knowledge/retrieval/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..aca521a34d87d4c4b18b8e38e9bb63a5862b1c52 --- /dev/null +++ b/src/views/ai/knowledge/knowledge/retrieval/index.vue @@ -0,0 +1,163 @@ + + + diff --git a/src/views/ai/knowledge/segment/KnowledgeSegmentForm.vue b/src/views/ai/knowledge/segment/KnowledgeSegmentForm.vue new file mode 100644 index 0000000000000000000000000000000000000000..4818de0104bc57eae150020db7437da3d409fe07 --- /dev/null +++ b/src/views/ai/knowledge/segment/KnowledgeSegmentForm.vue @@ -0,0 +1,101 @@ + + diff --git a/src/views/ai/knowledge/segment/index.vue b/src/views/ai/knowledge/segment/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..e2f8a67f398c03190c00b35260a6445730a5d25d --- /dev/null +++ b/src/views/ai/knowledge/segment/index.vue @@ -0,0 +1,242 @@ + + + diff --git a/src/views/ai/mindmap/index/components/Left.vue b/src/views/ai/mindmap/index/components/Left.vue index e684b887463c57bad95a9def1fe9a93869d16ceb..5c3dbf0d1756081367cb7e499ad516383024f3f3 100644 --- a/src/views/ai/mindmap/index/components/Left.vue +++ b/src/views/ai/mindmap/index/components/Left.vue @@ -8,7 +8,7 @@ + + + + @@ -32,6 +32,21 @@ + + + + + + + + + + { @@ -128,7 +150,11 @@ const open = async (type: string, id?: number, title?: string) => { } } // 获得下拉数据 - chatModelList.value = await ChatModelApi.getChatModelSimpleList(CommonStatusEnum.ENABLE) + models.value = await ModelApi.getModelSimpleList(AiModelTypeEnum.CHAT) + // 获取知识库列表 + knowledgeList.value = await KnowledgeApi.getSimpleKnowledgeList() + // 获取工具列表 + toolList.value = await ToolApi.getToolSimpleList() } defineExpose({ open }) // 提供 open 方法,用于打开弹窗 @@ -176,7 +202,9 @@ const resetForm = () => { description: undefined, systemMessage: undefined, publicStatus: true, - status: CommonStatusEnum.ENABLE + status: CommonStatusEnum.ENABLE, + knowledgeIds: [], + toolIds: [] } formRef.value?.resetFields() } diff --git a/src/views/ai/model/chatRole/index.vue b/src/views/ai/model/chatRole/index.vue index e870a5563a307d52dabdae748452e89eb53fa19f..0ba0d79dff3c77598be6abfccbf5512ab48c309d 100644 --- a/src/views/ai/model/chatRole/index.vue +++ b/src/views/ai/model/chatRole/index.vue @@ -1,4 +1,6 @@