diff --git a/main/manager-api/src/main/java/xiaozhi/modules/config/service/impl/ConfigServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/config/service/impl/ConfigServiceImpl.java
index f7c06fdb..36aa6bed 100644
--- a/main/manager-api/src/main/java/xiaozhi/modules/config/service/impl/ConfigServiceImpl.java
+++ b/main/manager-api/src/main/java/xiaozhi/modules/config/service/impl/ConfigServiceImpl.java
@@ -291,7 +291,7 @@ public class ConfigServiceImpl implements ConfigService {
result.put("selected_module", selectedModule);
if (StringUtils.isNotBlank(prompt)) {
- prompt = prompt.replace("{{assistant_name}}", "小智");
+ prompt = prompt.replace("{{assistant_name}}", StringUtils.isBlank(assistantName) ? "小智" : assistantName);
}
result.put("prompt", prompt);
}
diff --git a/main/manager-api/src/main/resources/db/changelog/202504211118.sql b/main/manager-api/src/main/resources/db/changelog/202504211118.sql
new file mode 100644
index 00000000..6bbdc183
--- /dev/null
+++ b/main/manager-api/src/main/resources/db/changelog/202504211118.sql
@@ -0,0 +1,19 @@
+-- 删除无用模型供应器
+delete from `ai_model_provider` where id = 'SYSTEM_LLM_doubao';
+delete from `ai_model_provider` where id = 'SYSTEM_LLM_chatglm';
+delete from `ai_model_provider` where id = 'SYSTEM_TTS_302ai';
+delete from `ai_model_provider` where id = 'SYSTEM_TTS_gizwits';
+
+-- 添加模型供应器
+delete from `ai_model_provider` where id = 'SYSTEM_ASR_TencentASR';
+INSERT INTO `ai_model_provider` (`id`, `model_type`, `provider_code`, `name`, `fields`, `sort`, `creator`, `create_date`, `updater`, `update_date`) VALUES
+('SYSTEM_ASR_TencentASR', 'ASR', 'tencent', '腾讯语音识别', '[{"key":"appid","label":"应用ID","type":"string"},{"key":"secret_id","label":"Secret ID","type":"string"},{"key":"secret_key","label":"Secret Key","type":"string"},{"key":"output_dir","label":"输出目录","type":"string"}]', 4, 1, NOW(), 1, NOW());
+
+-- 添加腾讯语音合成模型供应器
+delete from `ai_model_provider` where id = 'SYSTEM_TTS_TencentTTS';
+INSERT INTO `ai_model_provider` (`id`, `model_type`, `provider_code`, `name`, `fields`, `sort`, `creator`, `create_date`, `updater`, `update_date`) VALUES
+('SYSTEM_TTS_TencentTTS', 'TTS', 'tencent', '腾讯语音合成', '[{"key":"appid","label":"应用ID","type":"string"},{"key":"secret_id","label":"Secret ID","type":"string"},{"key":"secret_key","label":"Secret Key","type":"string"},{"key":"output_dir","label":"输出目录","type":"string"},{"key":"region","label":"区域","type":"string"},{"key":"voice","label":"音色ID","type":"string"}]', 5, 1, NOW(), 1, NOW());
+
+-- 添加腾讯语音合成音色
+delete from `ai_tts_voice` where id = 'TTS_TencentTTS0001';
+INSERT INTO `ai_tts_voice` VALUES ('TTS_TencentTTS0001', 'TTS_TencentTTS', '智瑜', '101001', '中文', NULL, NULL, 1, NULL, NULL, NULL, NULL);
diff --git a/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml b/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml
index 09136dc4..b84a6225 100755
--- a/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml
+++ b/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml
@@ -65,3 +65,10 @@ databaseChangeLog:
- sqlFile:
encoding: utf8
path: classpath:db/changelog/202504181536.sql
+ - changeSet:
+ id: 202504211118
+ author: John
+ changes:
+ - sqlFile:
+ encoding: utf8
+ path: classpath:db/changelog/202504211118.sql
\ No newline at end of file
diff --git a/main/manager-web/src/components/DeviceItem.vue b/main/manager-web/src/components/DeviceItem.vue
index 80f64f2c..2ac0bbac 100644
--- a/main/manager-web/src/components/DeviceItem.vue
+++ b/main/manager-web/src/components/DeviceItem.vue
@@ -23,12 +23,6 @@
配置角色
-
-
-
-
-
-
设备管理({{ device.deviceCount }})
@@ -80,7 +74,7 @@ export default {
.settings-btn {
font-weight: 500;
- font-size: 10px;
+ font-size: 12px;
color: #5778ff;
background: #e6ebff;
width: auto;
@@ -95,7 +89,7 @@ export default {
display: flex;
justify-content: space-between;
margin-top: 15px;
- font-size: 10px;
+ font-size: 12px;
color: #979db1;
font-weight: 400;
}
diff --git a/main/manager-web/src/components/HeaderBar.vue b/main/manager-web/src/components/HeaderBar.vue
index 5ddcee55..c67362ea 100644
--- a/main/manager-web/src/components/HeaderBar.vue
+++ b/main/manager-web/src/components/HeaderBar.vue
@@ -170,7 +170,7 @@ export default {
.header {
background: #f6fcfe66;
border: 1px solid #fff;
- height: 53px !important;
+ height: 63px !important;
min-width: 900px;
/* 设置最小宽度防止过度压缩 */
overflow: hidden;
@@ -197,7 +197,7 @@ export default {
}
.brand-img {
- height: 18px;
+ height: 20px;
}
.header-center {
@@ -219,13 +219,13 @@ export default {
.equipment-management {
padding: 0 9px;
- width: 82px;
- height: 24px;
- border-radius: 12px;
+ width: px;
+ height: 30px;
+ border-radius: 15px;
background: #deeafe;
display: flex;
justify-content: center;
- font-size: 10px;
+ font-size: 14px;
font-weight: 500;
gap: 7px;
color: #3d4566;
@@ -235,6 +235,7 @@ export default {
cursor: pointer;
flex-shrink: 0;
/* 防止导航按钮被压缩 */
+ padding: 0px 15px;
}
.equipment-management.active-tab {
diff --git a/main/manager-web/src/views/ModelConfig.vue b/main/manager-web/src/views/ModelConfig.vue
index 294a6ed8..8add3398 100644
--- a/main/manager-web/src/views/ModelConfig.vue
+++ b/main/manager-web/src/views/ModelConfig.vue
@@ -58,8 +58,8 @@
:header-cell-class-name="headerCellClassName"
@selection-change="handleSelectionChange">
+
-
{{ scope.row.configJson.type || '未知' }}
@@ -96,41 +96,37 @@
@@ -607,12 +603,12 @@ export default {
transition: border-color 0.2s;
}
-::v-deep .page-size-select{
+::v-deep .page-size-select {
width: 100px;
margin-right: 8px;
}
-::v-deep .page-size-select .el-input__inner{
+::v-deep .page-size-select .el-input__inner {
height: 32px;
line-height: 32px;
border-radius: 4px;
@@ -621,7 +617,8 @@ export default {
color: #606266;
font-size: 14px;
}
-::v-deep .page-size-select .el-input__suffix{
+
+::v-deep .page-size-select .el-input__suffix {
right: 6px;
width: 15px;
height: 20px;
@@ -632,13 +629,14 @@ export default {
border-radius: 4px;
}
-::v-deep .page-size-select .el-input__suffix-inner{
+::v-deep .page-size-select .el-input__suffix-inner {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
}
-::v-deep .page-size-select .el-icon-arrow-up:before{
+
+::v-deep .page-size-select .el-icon-arrow-up:before {
content: "";
display: inline-block;
border-left: 6px solid transparent;
@@ -899,7 +897,7 @@ export default {
}
}
-.model-card{
+.model-card {
background: white;
flex: 1;
display: flex;
@@ -909,7 +907,7 @@ export default {
overflow: hidden;
}
-.model-card ::v-deep .el-card__body{
+.model-card ::v-deep .el-card__body {
padding: 0;
display: flex;
flex-direction: column;
diff --git a/main/manager-web/src/views/home.vue b/main/manager-web/src/views/home.vue
index 65a5687a..8091b8bb 100644
--- a/main/manager-web/src/views/home.vue
+++ b/main/manager-web/src/views/home.vue
@@ -237,7 +237,7 @@ export default {
.hi-hint {
font-weight: 400;
- font-size: 10px;
+ font-size: 12px;
text-align: left;
color: #818cae;
margin-left: 75px;
@@ -258,7 +258,7 @@ export default {
border-radius: 17px;
background: #5778ff;
color: #fff;
- font-size: 10px;
+ font-size: 14px;
font-weight: 500;
text-align: center;
line-height: 34px;
@@ -361,5 +361,4 @@ export default {
);
animation: shimmer 1.5s infinite;
}
-
\ No newline at end of file
diff --git a/main/xiaozhi-server/config/settings.py b/main/xiaozhi-server/config/settings.py
index 78338b6f..535a81ed 100644
--- a/main/xiaozhi-server/config/settings.py
+++ b/main/xiaozhi-server/config/settings.py
@@ -43,6 +43,14 @@ def check_config_file():
missing_keys = find_missing_keys(new_config, old_config)
read_config_from_api = old_config.get("read_config_from_api", False)
if read_config_from_api:
+ old_config_origin = read_config(old_config_file)
+ if old_config_origin.get("selected_module") is not None:
+ missing_keys_str = "\n".join(f"- {key}" for key in missing_keys)
+ error_msg = "您的配置文件好像既包含智控台的配置又包含本地配置:\n"
+ error_msg += "\n建议您:\n"
+ error_msg += "1、将根目录的config_from_api.yaml文件复制到data下,重命名为.config.yaml\n"
+ error_msg += "2、按教程配置好接口地址和密钥\n"
+ raise ValueError(error_msg)
return
if missing_keys:
diff --git a/main/xiaozhi-server/core/providers/tts/doubao.py b/main/xiaozhi-server/core/providers/tts/doubao.py
index 0051d53e..968399cc 100644
--- a/main/xiaozhi-server/core/providers/tts/doubao.py
+++ b/main/xiaozhi-server/core/providers/tts/doubao.py
@@ -15,7 +15,10 @@ logger = setup_logging()
class TTSProvider(TTSProviderBase):
def __init__(self, config, delete_audio_file):
super().__init__(config, delete_audio_file)
- self.appid = config.get("appid")
+ if config.get("appid"):
+ self.appid = int(config.get("appid"))
+ else:
+ self.appid = ""
self.access_token = config.get("access_token")
self.cluster = config.get("cluster")
diff --git a/main/xiaozhi-server/core/providers/tts/ttson.py b/main/xiaozhi-server/core/providers/tts/ttson.py
index c2b78557..047d7a67 100644
--- a/main/xiaozhi-server/core/providers/tts/ttson.py
+++ b/main/xiaozhi-server/core/providers/tts/ttson.py
@@ -5,6 +5,10 @@ import requests
import shutil
from datetime import datetime
from core.providers.tts.base import TTSProviderBase
+from config.logger import setup_logging
+
+TAG = __name__
+logger = setup_logging()
class TTSProvider(TTSProviderBase):
@@ -54,6 +58,7 @@ class TTSProvider(TTSProviderBase):
resp = requests.request("POST", url, data=payload)
if resp.status_code != 200:
+ logger.bind(tag=TAG).error(f"TTS请求失败: {resp.text}")
return None
resp_json = resp.json()
try:
diff --git a/main/xiaozhi-server/docker-compose_all.yml b/main/xiaozhi-server/docker-compose_all.yml
index eac7bef5..51bb4e68 100644
--- a/main/xiaozhi-server/docker-compose_all.yml
+++ b/main/xiaozhi-server/docker-compose_all.yml
@@ -59,7 +59,7 @@ services:
networks:
- default
expose:
- - "3306:3306"
+ - "3306"
volumes:
- ./mysql/data:/var/lib/mysql
environment:
diff --git a/main/xiaozhi-server/requirements.txt b/main/xiaozhi-server/requirements.txt
index 66128cff..e0faf0a3 100755
--- a/main/xiaozhi-server/requirements.txt
+++ b/main/xiaozhi-server/requirements.txt
@@ -25,3 +25,4 @@ sherpa_onnx==1.11.0
mcp==1.4.1
cnlunar==0.2.0
PySocks==1.7.1
+dashscope=1.23.1