diff --git a/astrbot/core/config/default.py b/astrbot/core/config/default.py index 1055723ed7..1937a3fd01 100644 --- a/astrbot/core/config/default.py +++ b/astrbot/core/config/default.py @@ -3294,6 +3294,7 @@ "agent_runner.config.dify_api_key": { "description": "API Key", "type": "string", + "secret": True, }, "agent_runner.config.dify_api_base": { "description": "API Base URL", @@ -3332,6 +3333,7 @@ "agent_runner.config.coze_api_key": { "description": "API Key", "type": "string", + "secret": True, }, "agent_runner.config.bot_id": { "description": "Bot ID", @@ -3371,6 +3373,7 @@ "agent_runner.config.dashscope_api_key": { "description": "API Key", "type": "string", + "secret": True, }, "agent_runner.config.dashscope_app_id": { "description": "应用 ID", @@ -3419,10 +3422,12 @@ "agent_runner.config.deerflow_api_key": { "description": "API Key", "type": "string", + "secret": True, }, "agent_runner.config.deerflow_auth_header": { "description": "Authorization Header", "type": "string", + "secret": True, }, "agent_runner.config.deerflow_assistant_id": { "description": "Assistant ID", @@ -3468,7 +3473,7 @@ "type": "object", "items": { "agent_runner.config.model.provider_id": { - "description": "默认对话模型", + "description": "对话模型", "type": "string", "_special": "select_provider", "hint": "留空时使用第一个模型", @@ -3477,7 +3482,7 @@ }, }, "agent_runner.config.model.fallback_provider_ids": { - "description": "回退对话模型列表", + "description": "回退对话模型", "type": "list", "items": {"type": "string"}, "_special": "select_providers", @@ -3487,7 +3492,7 @@ }, }, "agent_runner.config.model.request_max_retries": { - "description": "请求最大重试次数", + "description": "异常重试次数", "type": "int", "hint": "单次模型请求遇到可重试错误时的最大尝试次数。", "condition": { @@ -3495,15 +3500,15 @@ }, }, "provider_settings.default_image_caption_provider_id": { - "description": "默认图片转述模型", + "description": "图片转述模型", "type": "string", "_special": "select_provider", "hint": "留空代表不使用,可用于非多模态模型", }, "provider_stt_settings.enable": { - "description": "启用语音转文本", + "description": "语音识别", "type": "bool", - "hint": "STT 总开关", + "hint": "使用语音转文字模型将用户语音转述为文本,方便模型理解。", }, "provider_stt_settings.provider_id": { "description": "默认语音转文本模型", @@ -3515,9 +3520,9 @@ }, }, "provider_tts_settings.enable": { - "description": "启用文本转语音", + "description": "语音回复", "type": "bool", - "hint": "TTS 总开关", + "hint": "使用文字转语音模型将文字转为语音回复。", }, "provider_tts_settings.provider_id": { "description": "默认文本转语音模型", @@ -3538,6 +3543,7 @@ "provider_settings.image_caption_prompt": { "description": "图片转述提示词", "type": "text", + "collapsed": True, }, }, "condition": { @@ -3562,6 +3568,7 @@ "agent_runner.config.persona.safety_mode_strategy": { "description": "健康模式策略", "type": "string", + "invisible": True, "options": ["system_prompt"], "hint": "选择健康模式的实现策略。", "condition": { @@ -4050,16 +4057,16 @@ }, }, "provider_settings.show_tool_use_status": { - "description": "输出函数调用状态", + "description": "输出工具调用信息", "type": "bool", "condition": { "agent_runner.runner_type": "local", }, }, "provider_settings.show_tool_call_result": { - "description": "输出函数调用返回结果", + "description": "输出工具调用结果", "type": "bool", - "hint": "仅在输出函数调用状态启用时生效,展示结果前 70 个字符。", + "hint": "仅在输出工具调用信息启用时生效,展示结果前 70 个字符。", "condition": { "agent_runner.runner_type": "local", "provider_settings.show_tool_use_status": True, @@ -4107,7 +4114,7 @@ }, }, "provider_settings.wake_prefix": { - "description": "LLM 聊天额外唤醒前缀 ", + "description": "额外唤醒前缀", "type": "string", "hint": "如果唤醒前缀为 /, 额外聊天唤醒前缀为 chat,则需要 /chat 才会触发 LLM 请求", }, @@ -4541,7 +4548,7 @@ "description": "群聊图片转述模型", "type": "string", "_special": "select_provider", - "hint": "用于群聊记录注入上下文的图片理解,与默认图片转述模型分开配置。", + "hint": "用于群聊记录注入上下文的图片理解,与图片转述模型分开配置。", "condition": { "provider_ltm_settings.group_icl_enable": True, "provider_ltm_settings.image_caption": True, diff --git a/dashboard/src/assets/mdi-subset/materialdesignicons-subset.css b/dashboard/src/assets/mdi-subset/materialdesignicons-subset.css index c4681523a1..bde62e93c0 100644 --- a/dashboard/src/assets/mdi-subset/materialdesignicons-subset.css +++ b/dashboard/src/assets/mdi-subset/materialdesignicons-subset.css @@ -1,4 +1,4 @@ -/* Auto-generated MDI subset – 269 icons */ +/* Auto-generated MDI subset – 272 icons */ /* Do not edit manually. Run: pnpm run subset-icons */ @font-face { @@ -96,6 +96,10 @@ content: "\F19B2"; } +.mdi-auto-fix::before { + content: "\F0068"; +} + .mdi-backup-restore::before { content: "\F006F"; } @@ -544,10 +548,6 @@ content: "\F02D1"; } -.mdi-help-circle::before { - content: "\F02D7"; -} - .mdi-help-circle-outline::before { content: "\F0625"; } @@ -680,6 +680,10 @@ content: "\F0349"; } +.mdi-magnify-close::before { + content: "\F0980"; +} + .mdi-memory::before { content: "\F035B"; } @@ -888,6 +892,10 @@ content: "\F16A7"; } +.mdi-robot-off-outline::before { + content: "\F167B"; +} + .mdi-robot-outline::before { content: "\F167A"; } @@ -984,6 +992,10 @@ content: "\F0721"; } +.mdi-swap-horizontal::before { + content: "\F04E1"; +} + .mdi-sync::before { content: "\F04E6"; } diff --git a/dashboard/src/assets/mdi-subset/materialdesignicons-webfont-subset.woff b/dashboard/src/assets/mdi-subset/materialdesignicons-webfont-subset.woff index 22430a2068..7a31dd05c8 100644 Binary files a/dashboard/src/assets/mdi-subset/materialdesignicons-webfont-subset.woff and b/dashboard/src/assets/mdi-subset/materialdesignicons-webfont-subset.woff differ diff --git a/dashboard/src/assets/mdi-subset/materialdesignicons-webfont-subset.woff2 b/dashboard/src/assets/mdi-subset/materialdesignicons-webfont-subset.woff2 index 0e1a25a3f5..5602b50fa3 100644 Binary files a/dashboard/src/assets/mdi-subset/materialdesignicons-webfont-subset.woff2 and b/dashboard/src/assets/mdi-subset/materialdesignicons-webfont-subset.woff2 differ diff --git a/dashboard/src/components/chat/ProviderModelMenu.vue b/dashboard/src/components/chat/ProviderModelMenu.vue index 53f75d6623..79832e4c54 100644 --- a/dashboard/src/components/chat/ProviderModelMenu.vue +++ b/dashboard/src/components/chat/ProviderModelMenu.vue @@ -1,158 +1,23 @@ - - diff --git a/dashboard/src/components/config/AiConfigPanel.vue b/dashboard/src/components/config/AiConfigPanel.vue new file mode 100644 index 0000000000..213988b9eb --- /dev/null +++ b/dashboard/src/components/config/AiConfigPanel.vue @@ -0,0 +1,636 @@ + + + + + diff --git a/dashboard/src/components/config/AstrBotCoreConfigWrapper.vue b/dashboard/src/components/config/AstrBotCoreConfigWrapper.vue index b485a783fe..3fc2906da2 100644 --- a/dashboard/src/components/config/AstrBotCoreConfigWrapper.vue +++ b/dashboard/src/components/config/AstrBotCoreConfigWrapper.vue @@ -1,55 +1,118 @@ - diff --git a/dashboard/src/components/config/ConfigProfileMenu.vue b/dashboard/src/components/config/ConfigProfileMenu.vue new file mode 100644 index 0000000000..445784e5a3 --- /dev/null +++ b/dashboard/src/components/config/ConfigProfileMenu.vue @@ -0,0 +1,302 @@ + + + + + diff --git a/dashboard/src/components/shared/PluginSetSelector.vue b/dashboard/src/components/shared/PluginSetSelector.vue index 8ab83b8e0e..594bb8d26d 100644 --- a/dashboard/src/components/shared/PluginSetSelector.vue +++ b/dashboard/src/components/shared/PluginSetSelector.vue @@ -1,5 +1,72 @@ + + diff --git a/dashboard/src/components/shared/ProviderSelector.vue b/dashboard/src/components/shared/ProviderSelector.vue index 0de8bc7ce0..f26c2639d9 100644 --- a/dashboard/src/components/shared/ProviderSelector.vue +++ b/dashboard/src/components/shared/ProviderSelector.vue @@ -1,597 +1,35 @@ - - diff --git a/dashboard/src/components/shared/StyledMenu.vue b/dashboard/src/components/shared/StyledMenu.vue index 01c58099bf..ea9f43f943 100644 --- a/dashboard/src/components/shared/StyledMenu.vue +++ b/dashboard/src/components/shared/StyledMenu.vue @@ -35,10 +35,15 @@ withDefaults(defineProps<{ .styled-menu-card { min-width: 100px; width: fit-content; - border: 0 !important; + border: 1px solid rgba(var(--v-theme-on-surface), 0.09) !important; background: rgba(var(--v-theme-surface), 0.98) !important; backdrop-filter: blur(10px); - box-shadow: var(--astrbot-menu-shadow, 0 12px 28px rgba(0, 0, 0, 0.08)) !important; + box-shadow: 0 6px 16px rgba(0, 0, 0, 0.07) !important; +} + +.v-overlay.v-menu .v-overlay__content > .styled-menu-card:not(.styled-menu-card-borderless) { + border: 1px solid rgba(var(--v-theme-on-surface), 0.09) !important; + box-shadow: 0 6px 16px rgba(0, 0, 0, 0.07) !important; } .styled-menu-card-borderless { @@ -71,7 +76,7 @@ withDefaults(defineProps<{ /* 深色模式下的下拉框样式 - 需要全局样式才能检测主题 */ .v-theme--PurpleThemeDark .styled-menu-card { background: rgba(var(--v-theme-surface), 0.98) !important; - border: 0 !important; + border: 1px solid rgba(var(--v-theme-on-surface), 0.09) !important; } .v-theme--PurpleThemeDark .styled-menu-card-borderless { diff --git a/dashboard/src/i18n/locales/en-US/core/shared.json b/dashboard/src/i18n/locales/en-US/core/shared.json index 87f62ed611..d54ae63165 100644 --- a/dashboard/src/i18n/locales/en-US/core/shared.json +++ b/dashboard/src/i18n/locales/en-US/core/shared.json @@ -14,6 +14,12 @@ "chunkCount": "{count} chunk(s)" }, "pluginSetSelector": { + "title": "Plugins", + "subtitle": "Choose which plugins this profile can use.", + "preset": "Preset", + "searchPlaceholder": "Search plugins", + "selectAll": "Select all", + "noSearchResults": "No matching plugins", "notSelected": "No plugins enabled", "allPlugins": "All plugins enabled (*)", "selectedCount": "{count} plugin(s) selected", @@ -34,6 +40,9 @@ }, "providerSelector": { "notSelected": "Not selected", + "defaultModel": "Default model", + "model": "Model", + "searchPlaceholder": "Search models", "buttonText": "Select Provider...", "dialogTitle": "Select Provider", "loading": "Loading...", @@ -46,6 +55,7 @@ "createProvider": "Create Provider", "manageProviders": "Provider Management", "selectProviderPool": "Select Provider Pool...", + "selectedModelCount": "{count} model(s) selected", "selectedCount": "{count} provider(s) selected" }, "personaSelector": { diff --git a/dashboard/src/i18n/locales/en-US/features/config-metadata.json b/dashboard/src/i18n/locales/en-US/features/config-metadata.json index 89133e0f59..c1410e658d 100644 --- a/dashboard/src/i18n/locales/en-US/features/config-metadata.json +++ b/dashboard/src/i18n/locales/en-US/features/config-metadata.json @@ -85,21 +85,21 @@ "hint": "Configure the built-in Agent's chat models and shared image caption and speech models.", "agent_runner": { "config": { "model": { "provider_id": { - "description": "Default Chat Model", + "description": "Chat Model", "hint": "Uses the first model when left empty" }, "fallback_provider_ids": { - "description": "Fallback Chat Model IDs", + "description": "Fallback Chat Models", "hint": "Try these chat models in order when the primary model request fails." }, "request_max_retries": { - "description": "Request Max Retries", + "description": "Retries on Error", "hint": "Maximum attempts for a single model request when retryable errors occur." } } } }, "provider_settings": { "default_image_caption_provider_id": { - "description": "Default Image Caption Model", + "description": "Image Caption Model", "hint": "Leave empty to disable; useful for non-multimodal models" }, "image_caption_prompt": { @@ -108,8 +108,8 @@ }, "provider_stt_settings": { "enable": { - "description": "Enable Speech-to-Text", - "hint": "Master switch for STT" + "description": "Speech Recognition", + "hint": "Use a speech-to-text model to transcribe user voice messages into text for the model to understand." }, "provider_id": { "description": "Default Speech-to-Text Model", @@ -118,8 +118,8 @@ }, "provider_tts_settings": { "enable": { - "description": "Enable Text-to-Speech", - "hint": "Master switch for TTS" + "description": "Voice Replies", + "hint": "Use a text-to-speech model to turn text into voice replies." }, "provider_id": { "description": "Default Text-to-Speech Model" @@ -380,11 +380,11 @@ "hint": "When enabled, current time information will be appended to the system prompt." }, "show_tool_use_status": { - "description": "Output Function Call Status" + "description": "Show Tool Call Information" }, "show_tool_call_result": { "description": "Output Tool Call Results", - "hint": "Only takes effect when \"Output Function Call Status\" is enabled, and shows at most 70 characters." + "hint": "Only takes effect when \"Show Tool Call Information\" is enabled, and shows at most 70 characters." }, "buffer_intermediate_messages": { "description": "Merge Agent Intermediate Messages", @@ -424,7 +424,7 @@ ] }, "wake_prefix": { - "description": "Additional LLM Chat Wake Prefix", + "description": "Additional Wake Prefix", "hint": "If the wake prefix is / and the additional chat wake prefix is chat, then /chat is required to trigger LLM requests" }, "prompt_prefix": { diff --git a/dashboard/src/i18n/locales/en-US/features/config.json b/dashboard/src/i18n/locales/en-US/features/config.json index 3d5e52feec..d045814ef3 100644 --- a/dashboard/src/i18n/locales/en-US/features/config.json +++ b/dashboard/src/i18n/locales/en-US/features/config.json @@ -45,6 +45,73 @@ "notification": "Notification Settings", "moreConfig": "More Settings" }, + "aiSettings": { + "title": "AI", + "enable": "Enable AI", + "more": "More actions", + "changeRunner": "Change execution mode", + "localSettingsTitle": "AstrBot Built-in AI", + "settingsSuffix": "Settings", + "tabs": { + "model": "Model", + "persona": "Persona", + "capabilities": "Capabilities", + "advanced": "Advanced" + }, + "groups": { + "model": "Model", + "modelHint": "Choose the chat models and retry policy used by built-in AI.", + "execution": "Execution", + "executionHint": "Configure the tool-call loop and execution process.", + "media": "Image and Voice", + "mediaHint": "Configure image understanding, speech-to-text, and text-to-speech.", + "behavior": "Message Handling", + "behaviorHint": "These settings apply to every execution mode in this profile." + }, + "common": { + "title": "Common Settings", + "subtitle": "These settings remain unchanged when the execution mode changes." + }, + "disabled": { + "title": "AI is disabled", + "subtitle": "Enable AI to process messages that require a model." + }, + "runnerDialog": { + "title": "Change Execution Mode", + "subtitle": "Change this only when connecting an external AI application. Built-in AI is suitable for most users.", + "warningPrefix": "Switching will use the new execution mode's default configuration. The current execution mode's configuration ", + "warningEmphasis": "will not be retained", + "warningSuffix": ".", + "confirm": "Use This Mode" + }, + "runners": { + "local": { + "title": "Built-in AI", + "summary": "Configure AstrBot's AI capabilities, including models, personas, knowledge bases, and tools.", + "description": "Use AstrBot's built-in AI with models, personas, knowledge bases, and tools." + }, + "dify": { + "title": "Dify", + "summary": "AI conversations are currently handled by a Dify application.", + "description": "Connect a Dify application and configure its access parameters." + }, + "coze": { + "title": "Coze", + "summary": "AI conversations are currently handled by a Coze Bot.", + "description": "Connect a Coze Bot and configure its access parameters." + }, + "dashscope": { + "title": "Alibaba Cloud Model Studio", + "summary": "AI conversations are currently handled by a Model Studio application.", + "description": "Connect an Alibaba Cloud Model Studio application and configure its access parameters." + }, + "deerflow": { + "title": "DeerFlow", + "summary": "AI conversations are currently handled by DeerFlow.", + "description": "Connect DeerFlow and configure its runtime parameters." + } + } + }, "general": { "botName": "Bot Name", "language": "Interface Language", @@ -67,6 +134,9 @@ }, "configSelection": { "selectConfig": "Select Configuration", + "defaultConfig": "Default Configuration", + "search": "Search configurations", + "noResults": "No matching configurations", "normalConfig": "Basic", "systemConfig": "System" }, @@ -76,7 +146,7 @@ }, "configManagement": { "title": "Configuration Management", - "description": "AstrBot supports separate configuration files for different bots. The `default` configuration is used by default.", + "description": "AstrBot supports separate configuration files for different bots. The default configuration is used when none is specified.", "newConfig": "New Configuration", "copyConfig": "Copy Configuration", "editConfig": "Edit Configuration", diff --git a/dashboard/src/i18n/locales/ru-RU/core/shared.json b/dashboard/src/i18n/locales/ru-RU/core/shared.json index 2a4e9874d4..017aea85bc 100644 --- a/dashboard/src/i18n/locales/ru-RU/core/shared.json +++ b/dashboard/src/i18n/locales/ru-RU/core/shared.json @@ -14,6 +14,12 @@ "chunkCount": "Фрагментов: {count}" }, "pluginSetSelector": { + "title": "Плагины", + "subtitle": "Выберите плагины, доступные этому профилю.", + "preset": "Встроенный", + "searchPlaceholder": "Поиск плагинов", + "selectAll": "Выбрать все", + "noSearchResults": "Подходящие плагины не найдены", "notSelected": "Плагины не включены", "allPlugins": "Включить все плагины (*)", "selectedCount": "Выбрано плагинов: {count}", @@ -34,6 +40,9 @@ }, "providerSelector": { "notSelected": "Не выбрано", + "defaultModel": "Модель по умолчанию", + "model": "Модель", + "searchPlaceholder": "Поиск моделей", "buttonText": "Выбрать провайдера...", "dialogTitle": "Выбор провайдера", "loading": "Загрузка...", @@ -46,6 +55,7 @@ "createProvider": "Создать провайдера", "manageProviders": "Управление провайдерами", "selectProviderPool": "Выбрать пул провайдеров...", + "selectedModelCount": "Выбрано моделей: {count}", "selectedCount": "Выбрано провайдеров: {count}" }, "personaSelector": { diff --git a/dashboard/src/i18n/locales/ru-RU/features/config-metadata.json b/dashboard/src/i18n/locales/ru-RU/features/config-metadata.json index f70e3be3e6..7c3b9ae407 100644 --- a/dashboard/src/i18n/locales/ru-RU/features/config-metadata.json +++ b/dashboard/src/i18n/locales/ru-RU/features/config-metadata.json @@ -36,13 +36,31 @@ "ai": { "description": "Модель", "hint": "При использовании сторонних сред запуска модель чата и модель описания изображений могут не работать напрямую, но некоторые плагины всё равно зависят от этих настроек.", + "agent_runner": { + "config": { + "model": { + "provider_id": { + "description": "Модель чата", + "hint": "Если поле пустое, используется первая доступная модель" + }, + "fallback_provider_ids": { + "description": "Резервные модели чата", + "hint": "Если запрос к основной модели завершится ошибкой, эти модели будут использоваться по порядку." + }, + "request_max_retries": { + "description": "Повторы при ошибках", + "hint": "Максимальное число попыток одного запроса модели при повторяемых ошибках." + } + } + } + }, "provider_settings": { "default_provider_id": { - "description": "Модель чата по умолчанию", + "description": "Модель чата", "hint": "Если пусто, используется первая доступная модель" }, "fallback_chat_models": { - "description": "Резервные модели чата (ID)", + "description": "Резервные модели чата", "hint": "Если текущая модель недоступна, запрос будет перенаправлен на эти модели по порядку." }, "request_max_retries": { @@ -59,8 +77,8 @@ }, "provider_stt_settings": { "enable": { - "description": "Включить преобразование речи в текст (STT)", - "hint": "Главный переключатель для STT" + "description": "Распознавание речи", + "hint": "Преобразует голосовые сообщения пользователей в текст с помощью модели распознавания речи, чтобы модель могла их понять." }, "provider_id": { "description": "Модель STT по умолчанию", @@ -69,8 +87,8 @@ }, "provider_tts_settings": { "enable": { - "description": "Включить преобразование текста в речь (TTS)", - "hint": "Главный переключатель для TTS" + "description": "Голосовые ответы", + "hint": "Преобразует текст в голосовые ответы с помощью модели синтеза речи." }, "provider_id": { "description": "Модель TTS по умолчанию" @@ -346,11 +364,11 @@ "hint": "Если включено, информация о текущем времени будет добавлена в системный промпт." }, "show_tool_use_status": { - "description": "Выводить статус вызова функций" + "description": "Показывать информацию о вызовах инструментов" }, "show_tool_call_result": { "description": "Выводить результаты работы инструментов", - "hint": "Работает только при включенном статусе вызова функций. Показывает макс. 70 символов." + "hint": "Работает только при включенном выводе информации о вызовах инструментов. Показывает макс. 70 символов." }, "buffer_intermediate_messages": { "description": "Объединять промежуточные сообщения Agent", @@ -390,7 +408,7 @@ ] }, "wake_prefix": { - "description": "Дополнительный префикс пробуждения LLM", + "description": "Дополнительный префикс пробуждения", "hint": "Если префикс пробуждения '/', а дополнительные — 'chat', то потребуется '/chat' для активации LLM." }, "prompt_prefix": { diff --git a/dashboard/src/i18n/locales/ru-RU/features/config.json b/dashboard/src/i18n/locales/ru-RU/features/config.json index 1da815bc57..bfa71b7573 100644 --- a/dashboard/src/i18n/locales/ru-RU/features/config.json +++ b/dashboard/src/i18n/locales/ru-RU/features/config.json @@ -45,6 +45,73 @@ "notification": "Уведомления", "moreConfig": "Дополнительные настройки" }, + "aiSettings": { + "title": "ИИ", + "enable": "Включить ИИ", + "more": "Другие действия", + "changeRunner": "Изменить режим выполнения", + "localSettingsTitle": "Встроенный ИИ AstrBot", + "settingsSuffix": "Настройки", + "tabs": { + "model": "Модель", + "persona": "Персона", + "capabilities": "Возможности", + "advanced": "Расширенные" + }, + "groups": { + "model": "Модель", + "modelHint": "Выберите модели чата и стратегию повторных попыток для встроенного ИИ.", + "execution": "Выполнение", + "executionHint": "Настройте цикл вызова инструментов и процесс выполнения.", + "media": "Изображения и речь", + "mediaHint": "Настройте распознавание изображений, речи и синтез речи.", + "behavior": "Обработка сообщений", + "behaviorHint": "Эти настройки применяются ко всем режимам выполнения в профиле." + }, + "common": { + "title": "Общие настройки", + "subtitle": "Эти настройки не меняются при смене режима выполнения." + }, + "disabled": { + "title": "ИИ отключён", + "subtitle": "Включите ИИ для обработки сообщений с помощью модели." + }, + "runnerDialog": { + "title": "Изменить режим выполнения", + "subtitle": "Изменяйте этот параметр только при подключении внешнего ИИ-приложения. Для большинства пользователей подходит встроенный ИИ.", + "warningPrefix": "После переключения будут применены настройки нового режима. Конфигурация текущего режима ", + "warningEmphasis": "не сохранится", + "warningSuffix": ".", + "confirm": "Использовать режим" + }, + "runners": { + "local": { + "title": "Встроенный ИИ", + "summary": "Настройте возможности ИИ AstrBot, включая модели, персоны, базы знаний и инструменты.", + "description": "Встроенный ИИ AstrBot поддерживает модели, персоны, базы знаний и инструменты." + }, + "dify": { + "title": "Dify", + "summary": "Диалоги ИИ обрабатываются приложением Dify.", + "description": "Подключите приложение Dify и настройте параметры доступа." + }, + "coze": { + "title": "Coze", + "summary": "Диалоги ИИ обрабатываются ботом Coze.", + "description": "Подключите Coze Bot и настройте параметры доступа." + }, + "dashscope": { + "title": "Alibaba Cloud Model Studio", + "summary": "Диалоги ИИ обрабатываются приложением Model Studio.", + "description": "Подключите приложение Model Studio и настройте параметры доступа." + }, + "deerflow": { + "title": "DeerFlow", + "summary": "Диалоги ИИ обрабатываются DeerFlow.", + "description": "Подключите DeerFlow и настройте параметры выполнения." + } + } + }, "general": { "botName": "Имя бота", "language": "Язык интерфейса", @@ -67,6 +134,9 @@ }, "configSelection": { "selectConfig": "Выбор конфигурации", + "defaultConfig": "Конфигурация по умолчанию", + "search": "Поиск конфигураций", + "noResults": "Подходящие конфигурации не найдены", "normalConfig": "Обычная", "systemConfig": "Системная" }, @@ -76,7 +146,7 @@ }, "configManagement": { "title": "Управление конфигурациями", - "description": "AstrBot поддерживает несколько конфигураций для разных ботов. По умолчанию используется «default».", + "description": "AstrBot поддерживает несколько конфигураций для разных ботов. Если конфигурация не указана, используется конфигурация по умолчанию.", "newConfig": "Новая конфигурация", "copyConfig": "Копировать конфигурацию", "editConfig": "Изменить конфигурацию", diff --git a/dashboard/src/i18n/locales/zh-CN/core/shared.json b/dashboard/src/i18n/locales/zh-CN/core/shared.json index 19ef659a26..5c5cc066ec 100644 --- a/dashboard/src/i18n/locales/zh-CN/core/shared.json +++ b/dashboard/src/i18n/locales/zh-CN/core/shared.json @@ -14,6 +14,12 @@ "chunkCount": "{count} 个块" }, "pluginSetSelector": { + "title": "插件", + "subtitle": "选择当前配置文件可以使用的插件。", + "preset": "预置", + "searchPlaceholder": "搜索插件", + "selectAll": "全选", + "noSearchResults": "没有匹配的插件", "notSelected": "未启用任何插件", "allPlugins": "启用所有插件 (*)", "selectedCount": "已选择 {count} 个插件", @@ -34,6 +40,9 @@ }, "providerSelector": { "notSelected": "未选择", + "defaultModel": "默认模型", + "model": "模型", + "searchPlaceholder": "搜索模型", "buttonText": "选择提供商...", "dialogTitle": "选择提供商", "loading": "加载中...", @@ -46,6 +55,7 @@ "createProvider": "创建提供商", "manageProviders": "提供商管理", "selectProviderPool": "选择提供商池...", + "selectedModelCount": "已选择 {count} 个模型", "selectedCount": "已选择 {count} 个提供商" }, "personaSelector": { diff --git a/dashboard/src/i18n/locales/zh-CN/features/config-metadata.json b/dashboard/src/i18n/locales/zh-CN/features/config-metadata.json index ba79e23d3f..e630d556cc 100644 --- a/dashboard/src/i18n/locales/zh-CN/features/config-metadata.json +++ b/dashboard/src/i18n/locales/zh-CN/features/config-metadata.json @@ -95,15 +95,15 @@ "config": { "model": { "provider_id": { - "description": "默认对话模型", + "description": "对话模型", "hint": "留空时使用第一个模型" }, "fallback_provider_ids": { - "description": "回退对话模型列表", + "description": "回退对话模型", "hint": "主对话模型请求失败时,按顺序切换到这些对话模型。" }, "request_max_retries": { - "description": "请求最大重试次数", + "description": "异常重试次数", "hint": "单次模型请求遇到可重试错误时的最大尝试次数。" } } @@ -111,7 +111,7 @@ }, "provider_settings": { "default_image_caption_provider_id": { - "description": "默认图片转述模型", + "description": "图片转述模型", "hint": "留空代表不使用,可用于非多模态模型" }, "image_caption_prompt": { @@ -120,8 +120,8 @@ }, "provider_stt_settings": { "enable": { - "description": "启用语音转文本", - "hint": "STT 总开关" + "description": "语音识别", + "hint": "使用语音转文字模型将用户语音转述为文本,方便模型理解。" }, "provider_id": { "description": "默认语音转文本模型", @@ -130,8 +130,8 @@ }, "provider_tts_settings": { "enable": { - "description": "启用文本转语音", - "hint": "TTS 总开关" + "description": "语音回复", + "hint": "使用文字转语音模型将文字转为语音回复。" }, "provider_id": { "description": "默认文本转语音模型" @@ -403,11 +403,11 @@ "hint": "启用后,会在系统提示词中附带当前时间信息。" }, "show_tool_use_status": { - "description": "输出函数调用状态" + "description": "输出工具调用信息" }, "show_tool_call_result": { - "description": "输出函数调用返回结果", - "hint": "仅在启用“输出函数调用状态”时生效,且最多展示 70 个字符。" + "description": "输出工具调用结果", + "hint": "仅在启用“输出工具调用信息”时生效,且最多展示 70 个字符。" }, "buffer_intermediate_messages": { "description": "合并 Agent 中间消息", @@ -447,7 +447,7 @@ ] }, "wake_prefix": { - "description": "LLM 聊天额外唤醒前缀", + "description": "额外唤醒前缀", "hint": "如果唤醒前缀为 /, 额外聊天唤醒前缀为 chat,则需要 /chat 才会触发 LLM 请求" }, "prompt_prefix": { @@ -1141,7 +1141,7 @@ }, "image_caption_provider_id": { "description": "群聊图片转述模型", - "hint": "用于群聊记录注入上下文的图片理解,与默认图片转述模型分开配置。" + "hint": "用于群聊记录注入上下文的图片理解,与图片转述模型分开配置。" }, "group_message_history_enable": { "description": "持久化群聊消息记录", diff --git a/dashboard/src/i18n/locales/zh-CN/features/config.json b/dashboard/src/i18n/locales/zh-CN/features/config.json index 3eb5fc265d..d06713cfd7 100644 --- a/dashboard/src/i18n/locales/zh-CN/features/config.json +++ b/dashboard/src/i18n/locales/zh-CN/features/config.json @@ -45,6 +45,73 @@ "notification": "通知设置", "moreConfig": "更多配置" }, + "aiSettings": { + "title": "AI", + "enable": "启用 AI", + "more": "更多操作", + "changeRunner": "更换执行方式", + "localSettingsTitle": "AstrBot 内置 AI", + "settingsSuffix": "设置", + "tabs": { + "model": "模型", + "persona": "人格", + "capabilities": "能力", + "advanced": "高级" + }, + "groups": { + "model": "模型", + "modelHint": "选择内置 AI 使用的对话模型和失败重试策略。", + "execution": "执行设置", + "executionHint": "配置工具调用循环和执行过程。", + "media": "图像与语音", + "mediaHint": "配置图片理解、语音识别和语音合成。", + "behavior": "消息处理", + "behaviorHint": "这些设置适用于当前配置文件中的所有执行方式。" + }, + "common": { + "title": "通用设置", + "subtitle": "这些设置不随执行方式切换。" + }, + "disabled": { + "title": "AI 已停用", + "subtitle": "启用后才会处理需要模型参与的消息。" + }, + "runnerDialog": { + "title": "更换执行方式", + "subtitle": "只有在接入外部 AI 应用时才需要更改。大多数用户使用内置 AI 即可。", + "warningPrefix": "切换后会使用新执行方式的默认配置,当前执行方式的配置", + "warningEmphasis": "不会保留", + "warningSuffix": "。", + "confirm": "使用此方式" + }, + "runners": { + "local": { + "title": "内置 AI", + "summary": "配置 AstrBot 的 AI 能力,包括模型、人格、知识库和工具。", + "description": "使用 AstrBot 内置 AI,支持模型、人格、知识库和工具能力。" + }, + "dify": { + "title": "Dify", + "summary": "当前由 Dify 应用处理 AI 对话。", + "description": "连接 Dify 应用并配置它的访问参数。" + }, + "coze": { + "title": "Coze", + "summary": "当前由 Coze Bot 处理 AI 对话。", + "description": "连接 Coze Bot 并配置它的访问参数。" + }, + "dashscope": { + "title": "阿里云百炼", + "summary": "当前由阿里云百炼应用处理 AI 对话。", + "description": "连接阿里云百炼应用并配置它的访问参数。" + }, + "deerflow": { + "title": "DeerFlow", + "summary": "当前由 DeerFlow 处理 AI 对话。", + "description": "连接 DeerFlow 服务并配置它的运行参数。" + } + } + }, "general": { "botName": "机器人名称", "language": "界面语言", @@ -67,6 +134,9 @@ }, "configSelection": { "selectConfig": "选择配置文件", + "defaultConfig": "默认配置文件", + "search": "搜索配置文件", + "noResults": "没有匹配的配置文件", "normalConfig": "普通", "systemConfig": "系统" }, @@ -76,7 +146,7 @@ }, "configManagement": { "title": "配置文件管理", - "description": "AstrBot 支持针对不同机器人分别设置配置文件。默认会使用 `default` 配置。", + "description": "AstrBot 支持针对不同机器人分别设置配置文件。未指定时使用默认配置文件。", "newConfig": "新建配置文件", "copyConfig": "复制配置文件", "editConfig": "编辑配置文件", diff --git a/dashboard/src/views/ConfigPage.vue b/dashboard/src/views/ConfigPage.vue index fcde3dd460..fa2446ee2f 100644 --- a/dashboard/src/views/ConfigPage.vue +++ b/dashboard/src/views/ConfigPage.vue @@ -1,34 +1,68 @@