From 0546b773db868158f53e3c103dbaf6243a3c4700 Mon Sep 17 00:00:00 2001
From: tanlianwang
Date: Wed, 4 Mar 2026 10:57:37 +0800
Subject: [PATCH] =?UTF-8?q?feat(ui):=20=E6=B7=BB=E5=8A=A0=E7=B3=BB?=
=?UTF-8?q?=E7=BB=9F=E7=AE=A1=E7=90=86=E8=8F=9C=E5=8D=95=E5=8A=9F=E8=83=BD?=
=?UTF-8?q?=E5=B9=B6=E4=BC=98=E5=8C=96=E6=A8=A1=E5=9E=8B=E7=9B=B8=E5=85=B3?=
=?UTF-8?q?=E6=96=87=E6=A1=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 新增系统管理菜单,包含用户管理、资源授权和系统设置功能
- 实现资源授权下拉菜单,支持应用、知识库、工具和模型的授权管理
- 实现系统设置下拉菜单,支持邮件设置等功能
- 将模型相关文案中的"供应商"统一修改为"模型",提升表述准确性
- 更新模型表单和API中的字段名称和提示信息
- 修复前端国际化文件中模型相关的翻译内容
---
apps/common/forms/base_field.py | 4 +-
apps/local_model/models/model_management.py | 2 +-
apps/locales/zh_CN/LC_MESSAGES/django.po | 4 +-
.../migrations/0001_initial.py | 2 +-
.../models/model_management.py | 2 +-
apps/models_provider/tools.py | 18 ++--
static/admin/assets/admin-BkqzSx7d.js | 2 +-
ui/src/api/model/provider.ts | 6 +-
ui/src/api/type/model.ts | 12 +--
ui/src/components/dynamics-form/type.ts | 2 +-
ui/src/layout/components/sidebar/index.vue | 84 ++++++++++++++++++-
ui/src/layout/layout-header/SystemHeader.vue | 38 ++-------
.../layout/layout-template/SimpleLayout.vue | 42 +++++++++-
ui/src/locales/lang/zh-CN/views/model.ts | 4 +-
14 files changed, 160 insertions(+), 62 deletions(-)
diff --git a/apps/common/forms/base_field.py b/apps/common/forms/base_field.py
index b0cf0f202..5ebd35417 100644
--- a/apps/common/forms/base_field.py
+++ b/apps/common/forms/base_field.py
@@ -134,8 +134,8 @@ class BaseExecField(BaseField):
:param label: 提示
:param text_field: 文本字段
:param value_field: 值字段
- :param provider: 指定供应商
- :param method: 执行供应商函数 method
+ :param provider: 指定模型
+ :param method: 执行模型函数 method
:param required: 是否必填
:param default_value: 默认值
:param relation_show_field_dict: {field:field_value_list} 表示在 field有值 ,并且值在field_value_list中才显示
diff --git a/apps/local_model/models/model_management.py b/apps/local_model/models/model_management.py
index ff3c0bf4e..77a01cc50 100644
--- a/apps/local_model/models/model_management.py
+++ b/apps/local_model/models/model_management.py
@@ -35,7 +35,7 @@ class Model(AppModelMixin):
user = models.ForeignKey(User, on_delete=models.SET_NULL, db_constraint=False, blank=True, null=True)
- provider = models.CharField(max_length=128, verbose_name='供应商', db_index=True)
+ provider = models.CharField(max_length=128, verbose_name='模型', db_index=True)
credential = models.CharField(max_length=102400, verbose_name="模型认证信息")
diff --git a/apps/locales/zh_CN/LC_MESSAGES/django.po b/apps/locales/zh_CN/LC_MESSAGES/django.po
index a6d99bb84..c4e82c79b 100644
--- a/apps/locales/zh_CN/LC_MESSAGES/django.po
+++ b/apps/locales/zh_CN/LC_MESSAGES/django.po
@@ -3272,7 +3272,7 @@ msgstr "基础模型"
#: apps/shared/api/shared_model.py:39
#: apps/shared/serializers/shared_model.py:114
msgid "provider"
-msgstr "供应商"
+msgstr "模型"
#: apps/models_provider/api/model.py:65
#: apps/models_provider/serializers/model_serializer.py:322
@@ -5115,7 +5115,7 @@ msgstr "重新排序文档"
#: apps/models_provider/views/provide.py:22
#: apps/models_provider/views/provide.py:23
msgid "Get a list of model suppliers"
-msgstr "获取模型供应商列表"
+msgstr "获取模型模型列表"
#: apps/models_provider/views/provide.py:43
#: apps/models_provider/views/provide.py:44
diff --git a/apps/models_provider/migrations/0001_initial.py b/apps/models_provider/migrations/0001_initial.py
index 04e3f6314..cad9ce5e6 100644
--- a/apps/models_provider/migrations/0001_initial.py
+++ b/apps/models_provider/migrations/0001_initial.py
@@ -46,7 +46,7 @@ class Migration(migrations.Migration):
('status', models.CharField(choices=[('SUCCESS', '成功'), ('ERROR', '失败'), ('DOWNLOAD', '下载中'), ('PAUSE_DOWNLOAD', '暂停下载')], db_index=True, default='SUCCESS', max_length=20, verbose_name='设置类型')),
('model_type', models.CharField(db_index=True, max_length=128, verbose_name='模型类型')),
('model_name', models.CharField(db_index=True, max_length=128, verbose_name='模型名称')),
- ('provider', models.CharField(db_index=True, max_length=128, verbose_name='供应商')),
+ ('provider', models.CharField(db_index=True, max_length=128, verbose_name='模型')),
('credential', models.CharField(max_length=102400, verbose_name='模型认证信息')),
('meta', models.JSONField(default=dict, verbose_name='模型元数据,用于存储下载,或者错误信息')),
('model_params_form', models.JSONField(default=list, verbose_name='模型参数配置')),
diff --git a/apps/models_provider/models/model_management.py b/apps/models_provider/models/model_management.py
index 43d1bd9aa..0f630a075 100644
--- a/apps/models_provider/models/model_management.py
+++ b/apps/models_provider/models/model_management.py
@@ -35,7 +35,7 @@ class Model(AppModelMixin):
user = models.ForeignKey(User, on_delete=models.SET_NULL, db_constraint=False, blank=True, null=True)
- provider = models.CharField(max_length=128, verbose_name='供应商', db_index=True)
+ provider = models.CharField(max_length=128, verbose_name='模型', db_index=True)
credential = models.CharField(max_length=102400, verbose_name="模型认证信息")
diff --git a/apps/models_provider/tools.py b/apps/models_provider/tools.py
index 9b94d7800..1d52e5c4b 100644
--- a/apps/models_provider/tools.py
+++ b/apps/models_provider/tools.py
@@ -24,12 +24,12 @@ from models_provider.constants.model_provider_constants import ModelProvideConst
def get_model_(provider, model_type, model_name, credential, model_id, use_local=False, **kwargs):
"""
获取模型实例
- @param provider: 供应商
+ @param provider: 模型
@param model_type: 模型类型
@param model_name: 模型名称
@param credential: 认证信息
@param model_id: 模型id
- @param use_local: 是否调用本地模型 只适用于本地供应商
+ @param use_local: 是否调用本地模型 只适用于本地模型
@return: 模型实例
"""
model = get_provider(provider).get_model(model_type, model_name,
@@ -52,9 +52,9 @@ def get_model(model, **kwargs):
def get_provider(provider):
"""
- 获取供应商实例
- @param provider: 供应商字符串
- @return: 供应商实例
+ 获取模型实例
+ @param provider: 模型字符串
+ @return: 模型实例
"""
return ModelProvideConstants[provider].value
@@ -62,7 +62,7 @@ def get_provider(provider):
def get_model_list(provider, model_type):
"""
获取模型列表
- @param provider: 供应商字符串
+ @param provider: 模型字符串
@param model_type: 模型类型
@return: 模型列表
"""
@@ -72,7 +72,7 @@ def get_model_list(provider, model_type):
def get_model_credential(provider, model_type, model_name):
"""
获取模型认证实例
- @param provider: 供应商字符串
+ @param provider: 模型字符串
@param model_type: 模型类型
@param model_name: 模型名称
@return: 认证实例对象
@@ -83,7 +83,7 @@ def get_model_credential(provider, model_type, model_name):
def get_model_type_list(provider):
"""
获取模型类型列表
- @param provider: 供应商字符串
+ @param provider: 模型字符串
@return: 模型类型列表
"""
return get_provider(provider).get_model_type_list()
@@ -93,7 +93,7 @@ def is_valid_credential(provider, model_type, model_name, model_credential: Dict
raise_exception=False):
"""
校验模型认证参数
- @param provider: 供应商字符串
+ @param provider: 模型字符串
@param model_type: 模型类型
@param model_name: 模型名称
@param model_credential: 模型认证数据
diff --git a/static/admin/assets/admin-BkqzSx7d.js b/static/admin/assets/admin-BkqzSx7d.js
index c1b8a0e96..85fb277c1 100644
--- a/static/admin/assets/admin-BkqzSx7d.js
+++ b/static/admin/assets/admin-BkqzSx7d.js
@@ -96,7 +96,7 @@ You are a master of problem optimization, adept at accurately inferring user int
1. Enable HTTPS;
2. If HTTPS is not available, adjust browser security settings. For Chrome:
(1) Enter chrome://flags/#unsafely-treat-insecure-origin-as-secure in the address bar;
-(2) Add your HTTP site, e.g., http://127.0.0.1:8080.
`,recorderError:"Recording Failed",confirm:"Got it",requiredMessage:"Please fill in all required fields",inputParamMessage1:"Please specify a parameter in the URL",inputParamMessage2:"value",prologueMessage:"Sorry, the service is currently under maintenance. Please try again later!"},inputPlaceholder:{speaking:"Speaking",recorderLoading:"Transcribing",default:"Type your question"},uploadFile:{label:"Upload File",most:"Maximum",limit:"files allowed, each up to",fileType:"File Type",tipMessage:"Please select allowed file types in the upload settings",limitMessage1:"You can upload up to",limitMessage2:"files",sizeLimit:"Each file must not exceed",sizeLimit2:"Empty files are not supported for upload",imageMessage:"Please process the image content",documentMessage:"Please understand the content of the document",audioMessage:"Please understand the audio content",videoMessage:"Please understand the video content",otherMessage:"Please understand the file content",errorMessage:"Upload Failed",fileMessage:"Please process the file content",fileRepeat:"File already exists"},executionDetails:{title:"Execution Details",paramOutputTooltip:"Each document supports previewing up to 500 characters",audioFile:"Audio File",searchContent:"Search Query",searchResult:"Search Results",conditionResult:"Condition Evaluation",currentChat:"Current Chat",answer:"AI Response",replyContent:"Reply Content",textContent:"Text Content",input:"Input",output:"Output",rerankerContent:"Re-ranked Content",rerankerResult:"Re-ranking Results",paragraph:"Segment",noSubmit:"No submission from user",errMessage:"Error Log",knowedMessage:"Known Information"},KnowledgeSource:{title:"Knowledge Source",referenceParagraph:"Cited Segment",consume:"Tokens",consumeTime:"Runtime",noSource:"No source found"},paragraphSource:{title:"Knowledge Quote",question:"User Question",optimizationQuestion:"Optimized Question",questionPadded:"Padded Question"},editTitle:"Edit Title"},index$8={lang:"English",layout:layout$6,views:views$2,theme:theme$4,components:components$3,en:English,common:common$3,dynamicsForm:dynamicsForm$3,chat:chat$5},__vite_glob_0_0$5=Object.freeze(Object.defineProperty({__proto__:null,default:index$8},Symbol.toStringTag,{value:"Module"})),components$2={quickCreatePlaceholder:"快速创建空白文档",quickCreateName:"文档名称",noData:"无匹配数据",loading:"加载中",noMore:"到底啦!",selectParagraph:{title:"选择分段",error:"仅执行未成功分段",all:"全部分段"},noDesc:"暂无描述",folder:{addFolder:"添加文件夹",addChildFolder:"添加子文件夹",editFolder:"编辑文件夹",folderNamePlaceholder:"请输入名称",requiredMessage:"请选择文件夹",deleteConfirmMessage:"文件夹下的资源会被删除,请谨慎操作。"}},login$3={title:"账号登录",loginForm:{username:{label:"用户名",placeholder:"请输入用户名",requiredMessage:"请输入用户名",lengthMessage:"长度在 4 到 20 个字符"},password:{label:"登录密码",placeholder:"请输入密码",requiredMessage:"请输入密码",lengthMessage:"长度在 6 到 20 个字符"},captcha:{label:"验证码",placeholder:"请输入验证码",requiredMessage:"请输入验证码",validatorMessage:"验证码不正确"},new_password:{label:"新密码",placeholder:"请输入新密码",requiredMessage:"请输入新密码"},re_password:{label:"确认密码",placeholder:"请输入确认密码",requiredMessage:"请输入确认密码",validatorMessage:"密码不一致"},email:{label:"邮箱",placeholder:"请输入邮箱",requiredMessage:"请输入邮箱",validatorEmail:"请输入有效邮箱格式!"}},jump_tip:"即将跳转至认证源页面进行认证",jump:"跳转",resetPassword:"修改密码",forgotPassword:"忘记密码",userRegister:"用户注册",buttons:{login:"登录",register:"注册",backLogin:"返回登录",checkCode:"立即验证"},newPassword:"新密码",enterPassword:"请输入修改密码",useEmail:"使用邮箱",moreMethod:"更多登录方式",verificationCode:{placeholder:"请输入验证码",getVerificationCode:"获取验证码",successMessage:"验证码发送成功",resend:"重新发送"}},model$1={title:"模型",provider:"供应商",providerPlaceholder:"选择供应商",addModel:"添加模型",delete:{confirmTitle:"是否删除:",confirmMessage:"模型删除后将影响正在使用该模型的资源,请谨慎操作。"},tip:{createSuccessMessage:"创建模型成功",createErrorMessage:"基础信息填写错误",errorMessage:"变量已存在: ",emptyMessage1:"请先选择基础信息的模型类型和基础模型",emptyMessage2:"所选模型不支持参数设置",updateSuccessMessage:"修改模型成功",saveSuccessMessage:"模型参数保存成功",downloadError:"下载失败",noModel:"模型在Ollama不存在"},modelType:{allModel:"全部模型",publicModel:"公有模型",privateModel:"私有模型",LLM:"大语言模型",EMBEDDING:"向量模型",RERANKER:"重排模型",STT:"语音识别",TTS:"语音合成",IMAGE:"视觉模型",TTI:"图片生成",TTV:"文生视频",ITV:"图生视频"},modelForm:{title:{baseInfo:"基础信息",advancedInfo:"高级设置",modelParams:"模型参数",paramSetting:"模型参数设置",apiParamPassing:"接口传参"},modeName:{label:"模型名称",placeholder:"请给基础模型设置一个名称",tooltip:"MaxKB 中自定义的模型名称",requiredMessage:"模型名称不能为空"},permissionType:{label:"权限",privateDesc:"仅当前用户使用",publicDesc:"所有用户都可使用",requiredMessage:"权限不能为空"},model_type:{label:"模型类型",placeholder:"请选择模型类型",tooltip1:"大语言模型:在应用中与AI对话的推理模型。",tooltip2:"向量模型:在知识库中对文档内容进行向量化的模型。",tooltip3:"语音识别:在应用中开启语音识别后用于语音转文字的模型。",tooltip4:"语音合成:在应用中开启语音播放后用于文字转语音的模型。",tooltip5:"重排模型:在高级编排应用中使用多路召回时,对候选分段进行重新排序的模型。",tooltip6:"视觉模型:在高级编排应用中用于图片理解的视觉模型。",tooltip7:"图片生成:在高级编排应用中用于图片生成的视觉模型。",tooltip8:"文生视频:在高级编排应用中用于文生视频的模型。",tooltip9:"图生视频:在高级编排应用中用于图生视频的模型。",requiredMessage:"模型类型不能为空"},base_model:{label:"基础模型",tooltip:"列表中未列出的模型,直接输入模型名称,回车即可添加",placeholder:"自定义输入基础模型后回车即可",requiredMessage:"基础模型不能为空"}},download:{downloading:"正在下载中",cancelDownload:"取消下载"}},knowledge$1={title:"知识库",document_count:"文档数",relatedApp_count:"关联应用",setting:{vectorization:"向量化",sync:"同步"},tip:{professionalMessage:"社区版最多支持 50 个知识库,如需拥有更多知识库,请升级为专业版。",syncSuccess:"同步任务发送成功",updateModeMessage:"修改知识库向量模型后,需要对知识库向量化,是否继续保存?"},delete:{confirmTitle:"是否删除知识库:",confirmMessage1:"此知识库关联",confirmMessage2:"个应用,删除后无法恢复,请谨慎操作。"},knowledgeType:{label:"知识库类型",generalKnowledge:"通用知识库",webKnowledge:"web知识库",larkKnowledge:"飞书知识库",yuqueKnowledge:"语雀知识库",generalInfo:"通过上传文件或手动录入构建知识库",webInfo:"通过网站链接构建知识库",larkInfo:"通过飞书文档构建知识库",yuqueInfo:"通过语雀文档构建知识库",createGeneralKnowledge:"创建通用知识库",createWebKnowledge:"创建 web 知识库",createLarkKnowledge:"创建飞书知识库",createYuqueKnowledge:"创建语雀知识库"},form:{knowledgeName:{label:"知识库名称",placeholder:"请输入知识库名称",requiredMessage:"请输入知识库名称"},knowledgeDescription:{label:"知识库描述",placeholder:"描述知识库的内容,详尽的描述将帮助AI能深入理解该知识库的内容,能更准确的检索到内容,提高该知识库的命中率。",requiredMessage:"请输入知识库描述"},EmbeddingModel:{label:"向量模型",placeholder:"请选择向量模型",requiredMessage:"请选择向量模型"},source_url:{label:"Web 根地址",placeholder:"请输入 Web 根地址",requiredMessage:" 请输入 Web 根地址"},user_id:{requiredMessage:"请输入User ID"},token:{requiredMessage:"请输入Token"},selector:{label:"选择器",placeholder:"默认为 body,可输入 .classname/#idname/tagname"},file_count_limit:{label:"每次上传最多文件数"},file_size_limit:{label:"上传的每个文档最大(MB)",placeholder:"建议根据服务器配置调整,否则可能会造成服务宕机"}},ResultSuccess:{title:"知识库创建成功",paragraph:"分段",paragraph_count:"个分段",documentList:"文档列表",loading:"导入中",buttons:{toKnowledge:"返回知识库列表",toDocument:"前往文档"}},syncWeb:{title:"同步知识库",syncMethod:"同步方式",replace:"替换同步",replaceText:"重新获取 Web 站点文档,覆盖替换本地知识库中的文档",complete:"整体同步",completeText:"先删除本地知识库所有文档,重新获取 Web 站点文档",tip:"注意:所有同步都会删除已有数据重新获取新数据,请谨慎操作。"}},tool$1={title:"工具",all:"全部",createTool:"创建工具",editTool:"编辑工具",createMcpTool:"创建MCP",editMcpTool:"编辑MCP",copyTool:"复制工具",importTool:"导入工具",settingTool:"设置工具",mcpConfig:"MCP服务配置",toolStore:{title:"工具商店",createFromToolStore:"从工具商店创建",internal:"系统内置",recommend:"推荐",webSearch:"联网搜索",databaseQuery:"数据库查询",image:"图像",developer:"开发者",communication:"通信",searchResult:"的搜索结果 {count} 个",confirmTip:"是否更新工具:",updateStoreToolMessage:"更新工具可能会影响正在使用的资源,请谨慎操作。"},delete:{confirmTitle:"是否刪除工具",confirmMessage:"删除后,引用了该工具的应用提问时会报错 ,请谨慎操作。"},disabled:{confirmTitle:"是否禁用工具:",confirmMessage:"禁用后,引用了该工具的应用提问时会报错 ,请谨慎操作。"},tip:{saveMessage:"当前的更改尚未保存,确认退出吗?"},form:{toolName:{label:"名称",name:"工具名称",placeholder:"请输入工具名称",requiredMessage:"请输入工具名称"},mcpName:{label:"名称",name:"MCP名称",placeholder:"请输入MCP名称",requiredMessage:"请输入MCP名称"},toolDescription:{placeholder:"请输入工具的描述"},mcpDescription:{placeholder:"请输入MCP的描述"},paramName:{label:"参数名",placeholder:"请输入参数名",requiredMessage:"请输入参数名"},dataType:{label:"数据类型"},source:{label:"来源",reference:"引用参数"},required:{label:"是否必填"},param:{paramInfo1:"使用工具时显示",paramInfo2:"使用工具时不显示",code:"工具内容(Python)",selectPlaceholder:"请选择参数",inputPlaceholder:"请输入参数值"},mcp:{title:"MCP 服务",label:"MCP Server Config",placeholder:"请输入MCP Server配置",tip:"仅支持SSE、Streamable HTTP调用方式",requiredMessage:"请输入 MCP Server Config"},debug:{run:"运行",output:"输出",runResult:"运行结果",runSuccess:"运行成功",runFailed:"运行失败"}}},document$2={uploadDocument:"上传文档",importDocument:"导入文档",syncDocument:"同步文档",items:"项",migrateDocument:"文档迁移到",searchBar:{placeholder:"按 文档名称 搜索"},setting:{migration:"迁移",cancelGenerateQuestion:"取消生成问题",cancelVectorization:"取消向量化",cancelGenerate:"取消生成",export:"导出",download:"下载原文档",replace:"替换原文档"},tip:{saveMessage:"当前的更改尚未保存,确认退出吗?",cancelSuccess:"批量取消成功",sendMessage:"发送成功",vectorizationSuccess:"批量向量化成功",nameMessage:"文件名称不能为空!",importMessage:"导入成功",migrationSuccess:"迁移成功",fileLimitCountTip1:"每次最多上传",fileLimitCountTip2:"个文件",fileLimitSizeTip1:"每个文件不超过"},upload:{selectFile:"选择文件",selectFiles:"选择文件夹",uploadMessage:"拖拽文件至此上传或",formats:"支持格式:",requiredMessage:"请上传文件",errorMessage2:"文件格式不支持",errorMessage3:"文件不能为空",template:"模版",download:"下载"},fileType:{txt:{label:"文本文件",tip1:"1、文件上传前,建议规范文件的分段标识"},table:{label:"表格",tip1:"1、点击下载对应模版并完善信息:",tip2:"2、第一行必须是列标题,且列标题必须是有意义的术语,表中每条记录将作为一个分段",tip3:"3、上传的表格文件中每个 sheet 会作为一个文档,sheet名称为文档名称"},QA:{label:"QA 问答对",tip1:"1、点击下载对应模版并完善信息",tip2:"2、上传的表格文件中每个 sheet 会作为一个文档,sheet名称为文档名称"},lark:{}},setRules:{title:{setting:"设置分段规则",preview:"分段预览"},intelligent:{label:"智能分段(推荐)",text:"不了解如何设置分段规则推荐使用智能分段"},advanced:{label:"高级分段",text:"用户可根据文档规范自行设置分段标识符、分段长度以及清洗规则"},patterns:{label:"分段标识",tooltip:"按照所选符号先后顺序做递归分割,分割结果超出分段长度将截取至分段长度。",placeholder:"请选择"},limit:{label:"分段长度"},with_filter:{label:"自动清洗",text:"去掉重复多余符号空格、空行、制表符"},checkedConnect:{label:"导入时添加分段标题为关联问题(适用于标题为问题的问答对)"}},buttons:{prev:"上一步",next:"下一步",import:"开始导入",preview:"生成预览"},tag:{label:"标签管理",key:"标签",value:"标签值",addTag:"添加标签",addValue:"添加标签值",setting:"标签设置",create:"创建标签",createValue:"创建标签值",edit:"编辑标签",editValue:"编辑标签值",deleteConfirm:"是否删除标签: ",deleteTip:"删除后使用该标签的资源将会删除该标签,请谨慎操作!",requiredMessage1:"请输入标签",requiredMessage2:"请输入标签值",requiredMessage3:"请输入标签或标签值"},table:{name:"文件名称",char_length:"字符数",paragraph:"分段",all:"全部",updateTime:"更新时间"},fileStatus:{label:"文件状态",SUCCESS:"成功",FAILURE:"失败",EMBEDDING:"索引中",PENDING:"排队中",GENERATE:"生成中",SYNC:"同步中",REVOKE:"取消中",finish:"完成"},enableStatus:{label:"启用状态",enable:"开启",close:"关闭"},sync:{label:"同步",confirmTitle:"确认同步文档?",confirmMessage1:"同步将删除已有数据重新获取新数据,请谨慎操作。",confirmMessage2:"无法同步,请先去设置文档 URL地址",successMessage:"同步文档成功"},delete:{confirmTitle1:"是否批量删除",confirmTitle2:"个文档?",confirmMessage:"所选文档中的分段会跟随删除,请谨慎操作。",successMessage:"批量删除成功",confirmTitle3:"是否删除文档:",confirmMessage1:"此文档下的",confirmMessage2:"个分段都会被删除,请谨慎操作。"},form:{source_url:{label:"文档地址",placeholder:"请输入文档地址,一行一个,地址不正确文档会导入失败。",requiredMessage:"请输入文档地址"},selector:{label:"选择器",placeholder:"默认为 body,可输入 .classname/#idname/tagname"},hit_handling_method:{label:"命中处理方式",tooltip:"用户提问时,命中文档下的分段时按照设置的方式进行处理。"},similarity:{label:"相似度高于",placeholder:"直接返回分段内容",requiredMessage:"请输入相似度"},allow_download:{label:"允许在知识库来源中下载"}},hitHandlingMethod:{optimization:"模型优化",directly_return:"直接回答"},movePosition:{title:"移动位置",moveUp:"上移",moveDown:"下移"},generateQuestion:{title:"生成问题",successMessage:"生成问题成功",tip1:"提示词中的 {data} 为分段内容的占位符,执行时替换为分段内容发送给 AI 模型;",tip2:"AI 模型根据分段内容生成相关问题,请将生成的问题放至",tip3:"标签中,系统会自动关联标签中的问题;",tip4:"生成效果依赖于所选模型和提示词,用户可自行调整至最佳效果。",prompt1:`内容:{data}
+(2) Add your HTTP site, e.g., http://127.0.0.1:8080.`,recorderError:"Recording Failed",confirm:"Got it",requiredMessage:"Please fill in all required fields",inputParamMessage1:"Please specify a parameter in the URL",inputParamMessage2:"value",prologueMessage:"Sorry, the service is currently under maintenance. Please try again later!"},inputPlaceholder:{speaking:"Speaking",recorderLoading:"Transcribing",default:"Type your question"},uploadFile:{label:"Upload File",most:"Maximum",limit:"files allowed, each up to",fileType:"File Type",tipMessage:"Please select allowed file types in the upload settings",limitMessage1:"You can upload up to",limitMessage2:"files",sizeLimit:"Each file must not exceed",sizeLimit2:"Empty files are not supported for upload",imageMessage:"Please process the image content",documentMessage:"Please understand the content of the document",audioMessage:"Please understand the audio content",videoMessage:"Please understand the video content",otherMessage:"Please understand the file content",errorMessage:"Upload Failed",fileMessage:"Please process the file content",fileRepeat:"File already exists"},executionDetails:{title:"Execution Details",paramOutputTooltip:"Each document supports previewing up to 500 characters",audioFile:"Audio File",searchContent:"Search Query",searchResult:"Search Results",conditionResult:"Condition Evaluation",currentChat:"Current Chat",answer:"AI Response",replyContent:"Reply Content",textContent:"Text Content",input:"Input",output:"Output",rerankerContent:"Re-ranked Content",rerankerResult:"Re-ranking Results",paragraph:"Segment",noSubmit:"No submission from user",errMessage:"Error Log",knowedMessage:"Known Information"},KnowledgeSource:{title:"Knowledge Source",referenceParagraph:"Cited Segment",consume:"Tokens",consumeTime:"Runtime",noSource:"No source found"},paragraphSource:{title:"Knowledge Quote",question:"User Question",optimizationQuestion:"Optimized Question",questionPadded:"Padded Question"},editTitle:"Edit Title"},index$8={lang:"English",layout:layout$6,views:views$2,theme:theme$4,components:components$3,en:English,common:common$3,dynamicsForm:dynamicsForm$3,chat:chat$5},__vite_glob_0_0$5=Object.freeze(Object.defineProperty({__proto__:null,default:index$8},Symbol.toStringTag,{value:"Module"})),components$2={quickCreatePlaceholder:"快速创建空白文档",quickCreateName:"文档名称",noData:"无匹配数据",loading:"加载中",noMore:"到底啦!",selectParagraph:{title:"选择分段",error:"仅执行未成功分段",all:"全部分段"},noDesc:"暂无描述",folder:{addFolder:"添加文件夹",addChildFolder:"添加子文件夹",editFolder:"编辑文件夹",folderNamePlaceholder:"请输入名称",requiredMessage:"请选择文件夹",deleteConfirmMessage:"文件夹下的资源会被删除,请谨慎操作。"}},login$3={title:"账号登录",loginForm:{username:{label:"用户名",placeholder:"请输入用户名",requiredMessage:"请输入用户名",lengthMessage:"长度在 4 到 20 个字符"},password:{label:"登录密码",placeholder:"请输入密码",requiredMessage:"请输入密码",lengthMessage:"长度在 6 到 20 个字符"},captcha:{label:"验证码",placeholder:"请输入验证码",requiredMessage:"请输入验证码",validatorMessage:"验证码不正确"},new_password:{label:"新密码",placeholder:"请输入新密码",requiredMessage:"请输入新密码"},re_password:{label:"确认密码",placeholder:"请输入确认密码",requiredMessage:"请输入确认密码",validatorMessage:"密码不一致"},email:{label:"邮箱",placeholder:"请输入邮箱",requiredMessage:"请输入邮箱",validatorEmail:"请输入有效邮箱格式!"}},jump_tip:"即将跳转至认证源页面进行认证",jump:"跳转",resetPassword:"修改密码",forgotPassword:"忘记密码",userRegister:"用户注册",buttons:{login:"登录",register:"注册",backLogin:"返回登录",checkCode:"立即验证"},newPassword:"新密码",enterPassword:"请输入修改密码",useEmail:"使用邮箱",moreMethod:"更多登录方式",verificationCode:{placeholder:"请输入验证码",getVerificationCode:"获取验证码",successMessage:"验证码发送成功",resend:"重新发送"}},model$1={title:"模型",provider:"模型",providerPlaceholder:"选择模型",addModel:"添加模型",delete:{confirmTitle:"是否删除:",confirmMessage:"模型删除后将影响正在使用该模型的资源,请谨慎操作。"},tip:{createSuccessMessage:"创建模型成功",createErrorMessage:"基础信息填写错误",errorMessage:"变量已存在: ",emptyMessage1:"请先选择基础信息的模型类型和基础模型",emptyMessage2:"所选模型不支持参数设置",updateSuccessMessage:"修改模型成功",saveSuccessMessage:"模型参数保存成功",downloadError:"下载失败",noModel:"模型在Ollama不存在"},modelType:{allModel:"全部模型",publicModel:"公有模型",privateModel:"私有模型",LLM:"大语言模型",EMBEDDING:"向量模型",RERANKER:"重排模型",STT:"语音识别",TTS:"语音合成",IMAGE:"视觉模型",TTI:"图片生成",TTV:"文生视频",ITV:"图生视频"},modelForm:{title:{baseInfo:"基础信息",advancedInfo:"高级设置",modelParams:"模型参数",paramSetting:"模型参数设置",apiParamPassing:"接口传参"},modeName:{label:"模型名称",placeholder:"请给基础模型设置一个名称",tooltip:"MaxKB 中自定义的模型名称",requiredMessage:"模型名称不能为空"},permissionType:{label:"权限",privateDesc:"仅当前用户使用",publicDesc:"所有用户都可使用",requiredMessage:"权限不能为空"},model_type:{label:"模型类型",placeholder:"请选择模型类型",tooltip1:"大语言模型:在应用中与AI对话的推理模型。",tooltip2:"向量模型:在知识库中对文档内容进行向量化的模型。",tooltip3:"语音识别:在应用中开启语音识别后用于语音转文字的模型。",tooltip4:"语音合成:在应用中开启语音播放后用于文字转语音的模型。",tooltip5:"重排模型:在高级编排应用中使用多路召回时,对候选分段进行重新排序的模型。",tooltip6:"视觉模型:在高级编排应用中用于图片理解的视觉模型。",tooltip7:"图片生成:在高级编排应用中用于图片生成的视觉模型。",tooltip8:"文生视频:在高级编排应用中用于文生视频的模型。",tooltip9:"图生视频:在高级编排应用中用于图生视频的模型。",requiredMessage:"模型类型不能为空"},base_model:{label:"基础模型",tooltip:"列表中未列出的模型,直接输入模型名称,回车即可添加",placeholder:"自定义输入基础模型后回车即可",requiredMessage:"基础模型不能为空"}},download:{downloading:"正在下载中",cancelDownload:"取消下载"}},knowledge$1={title:"知识库",document_count:"文档数",relatedApp_count:"关联应用",setting:{vectorization:"向量化",sync:"同步"},tip:{professionalMessage:"社区版最多支持 50 个知识库,如需拥有更多知识库,请升级为专业版。",syncSuccess:"同步任务发送成功",updateModeMessage:"修改知识库向量模型后,需要对知识库向量化,是否继续保存?"},delete:{confirmTitle:"是否删除知识库:",confirmMessage1:"此知识库关联",confirmMessage2:"个应用,删除后无法恢复,请谨慎操作。"},knowledgeType:{label:"知识库类型",generalKnowledge:"通用知识库",webKnowledge:"web知识库",larkKnowledge:"飞书知识库",yuqueKnowledge:"语雀知识库",generalInfo:"通过上传文件或手动录入构建知识库",webInfo:"通过网站链接构建知识库",larkInfo:"通过飞书文档构建知识库",yuqueInfo:"通过语雀文档构建知识库",createGeneralKnowledge:"创建通用知识库",createWebKnowledge:"创建 web 知识库",createLarkKnowledge:"创建飞书知识库",createYuqueKnowledge:"创建语雀知识库"},form:{knowledgeName:{label:"知识库名称",placeholder:"请输入知识库名称",requiredMessage:"请输入知识库名称"},knowledgeDescription:{label:"知识库描述",placeholder:"描述知识库的内容,详尽的描述将帮助AI能深入理解该知识库的内容,能更准确的检索到内容,提高该知识库的命中率。",requiredMessage:"请输入知识库描述"},EmbeddingModel:{label:"向量模型",placeholder:"请选择向量模型",requiredMessage:"请选择向量模型"},source_url:{label:"Web 根地址",placeholder:"请输入 Web 根地址",requiredMessage:" 请输入 Web 根地址"},user_id:{requiredMessage:"请输入User ID"},token:{requiredMessage:"请输入Token"},selector:{label:"选择器",placeholder:"默认为 body,可输入 .classname/#idname/tagname"},file_count_limit:{label:"每次上传最多文件数"},file_size_limit:{label:"上传的每个文档最大(MB)",placeholder:"建议根据服务器配置调整,否则可能会造成服务宕机"}},ResultSuccess:{title:"知识库创建成功",paragraph:"分段",paragraph_count:"个分段",documentList:"文档列表",loading:"导入中",buttons:{toKnowledge:"返回知识库列表",toDocument:"前往文档"}},syncWeb:{title:"同步知识库",syncMethod:"同步方式",replace:"替换同步",replaceText:"重新获取 Web 站点文档,覆盖替换本地知识库中的文档",complete:"整体同步",completeText:"先删除本地知识库所有文档,重新获取 Web 站点文档",tip:"注意:所有同步都会删除已有数据重新获取新数据,请谨慎操作。"}},tool$1={title:"工具",all:"全部",createTool:"创建工具",editTool:"编辑工具",createMcpTool:"创建MCP",editMcpTool:"编辑MCP",copyTool:"复制工具",importTool:"导入工具",settingTool:"设置工具",mcpConfig:"MCP服务配置",toolStore:{title:"工具商店",createFromToolStore:"从工具商店创建",internal:"系统内置",recommend:"推荐",webSearch:"联网搜索",databaseQuery:"数据库查询",image:"图像",developer:"开发者",communication:"通信",searchResult:"的搜索结果 {count} 个",confirmTip:"是否更新工具:",updateStoreToolMessage:"更新工具可能会影响正在使用的资源,请谨慎操作。"},delete:{confirmTitle:"是否刪除工具",confirmMessage:"删除后,引用了该工具的应用提问时会报错 ,请谨慎操作。"},disabled:{confirmTitle:"是否禁用工具:",confirmMessage:"禁用后,引用了该工具的应用提问时会报错 ,请谨慎操作。"},tip:{saveMessage:"当前的更改尚未保存,确认退出吗?"},form:{toolName:{label:"名称",name:"工具名称",placeholder:"请输入工具名称",requiredMessage:"请输入工具名称"},mcpName:{label:"名称",name:"MCP名称",placeholder:"请输入MCP名称",requiredMessage:"请输入MCP名称"},toolDescription:{placeholder:"请输入工具的描述"},mcpDescription:{placeholder:"请输入MCP的描述"},paramName:{label:"参数名",placeholder:"请输入参数名",requiredMessage:"请输入参数名"},dataType:{label:"数据类型"},source:{label:"来源",reference:"引用参数"},required:{label:"是否必填"},param:{paramInfo1:"使用工具时显示",paramInfo2:"使用工具时不显示",code:"工具内容(Python)",selectPlaceholder:"请选择参数",inputPlaceholder:"请输入参数值"},mcp:{title:"MCP 服务",label:"MCP Server Config",placeholder:"请输入MCP Server配置",tip:"仅支持SSE、Streamable HTTP调用方式",requiredMessage:"请输入 MCP Server Config"},debug:{run:"运行",output:"输出",runResult:"运行结果",runSuccess:"运行成功",runFailed:"运行失败"}}},document$2={uploadDocument:"上传文档",importDocument:"导入文档",syncDocument:"同步文档",items:"项",migrateDocument:"文档迁移到",searchBar:{placeholder:"按 文档名称 搜索"},setting:{migration:"迁移",cancelGenerateQuestion:"取消生成问题",cancelVectorization:"取消向量化",cancelGenerate:"取消生成",export:"导出",download:"下载原文档",replace:"替换原文档"},tip:{saveMessage:"当前的更改尚未保存,确认退出吗?",cancelSuccess:"批量取消成功",sendMessage:"发送成功",vectorizationSuccess:"批量向量化成功",nameMessage:"文件名称不能为空!",importMessage:"导入成功",migrationSuccess:"迁移成功",fileLimitCountTip1:"每次最多上传",fileLimitCountTip2:"个文件",fileLimitSizeTip1:"每个文件不超过"},upload:{selectFile:"选择文件",selectFiles:"选择文件夹",uploadMessage:"拖拽文件至此上传或",formats:"支持格式:",requiredMessage:"请上传文件",errorMessage2:"文件格式不支持",errorMessage3:"文件不能为空",template:"模版",download:"下载"},fileType:{txt:{label:"文本文件",tip1:"1、文件上传前,建议规范文件的分段标识"},table:{label:"表格",tip1:"1、点击下载对应模版并完善信息:",tip2:"2、第一行必须是列标题,且列标题必须是有意义的术语,表中每条记录将作为一个分段",tip3:"3、上传的表格文件中每个 sheet 会作为一个文档,sheet名称为文档名称"},QA:{label:"QA 问答对",tip1:"1、点击下载对应模版并完善信息",tip2:"2、上传的表格文件中每个 sheet 会作为一个文档,sheet名称为文档名称"},lark:{}},setRules:{title:{setting:"设置分段规则",preview:"分段预览"},intelligent:{label:"智能分段(推荐)",text:"不了解如何设置分段规则推荐使用智能分段"},advanced:{label:"高级分段",text:"用户可根据文档规范自行设置分段标识符、分段长度以及清洗规则"},patterns:{label:"分段标识",tooltip:"按照所选符号先后顺序做递归分割,分割结果超出分段长度将截取至分段长度。",placeholder:"请选择"},limit:{label:"分段长度"},with_filter:{label:"自动清洗",text:"去掉重复多余符号空格、空行、制表符"},checkedConnect:{label:"导入时添加分段标题为关联问题(适用于标题为问题的问答对)"}},buttons:{prev:"上一步",next:"下一步",import:"开始导入",preview:"生成预览"},tag:{label:"标签管理",key:"标签",value:"标签值",addTag:"添加标签",addValue:"添加标签值",setting:"标签设置",create:"创建标签",createValue:"创建标签值",edit:"编辑标签",editValue:"编辑标签值",deleteConfirm:"是否删除标签: ",deleteTip:"删除后使用该标签的资源将会删除该标签,请谨慎操作!",requiredMessage1:"请输入标签",requiredMessage2:"请输入标签值",requiredMessage3:"请输入标签或标签值"},table:{name:"文件名称",char_length:"字符数",paragraph:"分段",all:"全部",updateTime:"更新时间"},fileStatus:{label:"文件状态",SUCCESS:"成功",FAILURE:"失败",EMBEDDING:"索引中",PENDING:"排队中",GENERATE:"生成中",SYNC:"同步中",REVOKE:"取消中",finish:"完成"},enableStatus:{label:"启用状态",enable:"开启",close:"关闭"},sync:{label:"同步",confirmTitle:"确认同步文档?",confirmMessage1:"同步将删除已有数据重新获取新数据,请谨慎操作。",confirmMessage2:"无法同步,请先去设置文档 URL地址",successMessage:"同步文档成功"},delete:{confirmTitle1:"是否批量删除",confirmTitle2:"个文档?",confirmMessage:"所选文档中的分段会跟随删除,请谨慎操作。",successMessage:"批量删除成功",confirmTitle3:"是否删除文档:",confirmMessage1:"此文档下的",confirmMessage2:"个分段都会被删除,请谨慎操作。"},form:{source_url:{label:"文档地址",placeholder:"请输入文档地址,一行一个,地址不正确文档会导入失败。",requiredMessage:"请输入文档地址"},selector:{label:"选择器",placeholder:"默认为 body,可输入 .classname/#idname/tagname"},hit_handling_method:{label:"命中处理方式",tooltip:"用户提问时,命中文档下的分段时按照设置的方式进行处理。"},similarity:{label:"相似度高于",placeholder:"直接返回分段内容",requiredMessage:"请输入相似度"},allow_download:{label:"允许在知识库来源中下载"}},hitHandlingMethod:{optimization:"模型优化",directly_return:"直接回答"},movePosition:{title:"移动位置",moveUp:"上移",moveDown:"下移"},generateQuestion:{title:"生成问题",successMessage:"生成问题成功",tip1:"提示词中的 {data} 为分段内容的占位符,执行时替换为分段内容发送给 AI 模型;",tip2:"AI 模型根据分段内容生成相关问题,请将生成的问题放至",tip3:"标签中,系统会自动关联标签中的问题;",tip4:"生成效果依赖于所选模型和提示词,用户可自行调整至最佳效果。",prompt1:`内容:{data}
请总结上面的内容,并根据内容总结生成 5 个问题。
回答要求:
diff --git a/ui/src/api/model/provider.ts b/ui/src/api/model/provider.ts
index 9376b7d63..685a30bda 100644
--- a/ui/src/api/model/provider.ts
+++ b/ui/src/api/model/provider.ts
@@ -7,14 +7,14 @@ import type {KeyValue} from '../type/common'
const prefix_provider = '/provider'
/**
- * 获得供应商列表
+ * 获得模型列表
*/
const getProvider: (loading?: Ref) => Promise>> = (loading) => {
return get(`${prefix_provider}`, {}, loading)
}
/**
- * 获得供应商列表
+ * 获得模型列表
*/
const getProviderByModelType: (
model_type: string,
@@ -42,7 +42,7 @@ const getModelCreateForm: (
/**
* 获取模型类型列表
- * @param provider 供应商
+ * @param provider 模型
* @param loading 加载器
* @returns 模型类型列表
*/
diff --git a/ui/src/api/type/model.ts b/ui/src/api/type/model.ts
index 09a0092e3..7e6cccf30 100644
--- a/ui/src/api/type/model.ts
+++ b/ui/src/api/type/model.ts
@@ -7,15 +7,15 @@ interface modelRequest {
interface Provider {
/**
- * 供应商代号
+ * 模型代号
*/
provider: string
/**
- * 供应商名称
+ * 模型名称
*/
name: string
/**
- * 供应商icon
+ * 模型icon
*/
icon: string
}
@@ -34,7 +34,7 @@ interface ListModelRequest {
*/
model_name?: string
/**
- * 供应商
+ * 模型
*/
provider?: string
@@ -66,7 +66,7 @@ interface Model {
*/
credential: any
/**
- * 供应商
+ * 模型
*/
provider: string
/**
@@ -100,7 +100,7 @@ interface CreateModelRequest {
*/
credential: any
/**
- * 供应商
+ * 模型
*/
provider: string
}
diff --git a/ui/src/components/dynamics-form/type.ts b/ui/src/components/dynamics-form/type.ts
index 88a3af373..907a3dbe3 100644
--- a/ui/src/components/dynamics-form/type.ts
+++ b/ui/src/components/dynamics-form/type.ts
@@ -163,7 +163,7 @@ interface FormField {
*/
option_list?: Array
/**
- * 供应商
+ * 模型
*/
provider?: string
/**
diff --git a/ui/src/layout/components/sidebar/index.vue b/ui/src/layout/components/sidebar/index.vue
index 3085a33ab..e23c6c42a 100644
--- a/ui/src/layout/components/sidebar/index.vue
+++ b/ui/src/layout/components/sidebar/index.vue
@@ -5,9 +5,10 @@
AI-RAG
-
+
-
+
+
应用
@@ -21,6 +22,48 @@
模型
+
+
+
+
+ 用户管理
+
+
+
+
+
+ 资源授权
+ {{ resourceAuthExpanded ? '▼' : '▶' }}
+
+
+
+ 应用
+
+
+ 知识库
+
+
+ 工具
+
+
+ 模型
+
+
+
+
+
+
+
+ 系统设置
+ {{ systemSettingsExpanded ? '▼' : '▶' }}
+
+
+
+ 邮件设置
+
+
+
+
@@ -31,12 +74,19 @@
@@ -28,7 +53,22 @@ const isShared = computed(() => {
-
+
+
+
+
+
AI-RAG | 系统管理
+
+
+
+ ←
+ 返回工作空间
+
+
+
+
+
+
diff --git a/ui/src/locales/lang/zh-CN/views/model.ts b/ui/src/locales/lang/zh-CN/views/model.ts
index 5066ca4ca..149dec7a5 100644
--- a/ui/src/locales/lang/zh-CN/views/model.ts
+++ b/ui/src/locales/lang/zh-CN/views/model.ts
@@ -1,7 +1,7 @@
export default {
title: '模型',
- provider: '供应商',
- providerPlaceholder: '选择供应商',
+ provider: '模型',
+ providerPlaceholder: '选择模型',
addModel: '添加模型',
delete: {
confirmTitle: '是否删除:',