修复智能体音色设置

This commit is contained in:
taiyi 2026-04-12 17:40:37 +08:00
parent 4a4553eb48
commit 2e89188b69
2 changed files with 53 additions and 59 deletions

View File

@ -1148,6 +1148,7 @@ export default {
console.log('[ChatView] Final petPosition:', petPosition.value)
cacheSelectedPet(currentPet.value)
saveChatConfig()
syncStoreState()
// ElMessage.success('')
@ -1257,6 +1258,11 @@ export default {
}
}
const cacheSelectedPet = (pet) => {
if (!pet || !pet.id) return
localStorage.setItem('selectedPet', JSON.stringify(pet))
}
const selectPet = (pet) => {
currentPet.value = pet
const petBinding = backgroundPets.value.find(binding => binding.pet.id === pet.id)
@ -1268,6 +1274,7 @@ export default {
scale: petBinding.scale || 1
}
}
cacheSelectedPet(currentPet.value)
showPetSelector.value = false
chatHistory.value = []
historyTotal.value = 0
@ -1363,10 +1370,11 @@ export default {
// keep_alive
await chatStore.startVoiceSession({
speaker: 'zh_male_yunzhou_jupiter_bigtts',
model: 'O',
bot_name: currentPet.value?.name || 'AI助手',
system_role: currentPet.value?.prompt || '',
speaker: currentPet.value?.volcano_voice_id || 'zh_female_vv_jupiter_bigtts',
model: currentPet.value?.volcano_model_version || 'O',
bot_name: currentPet.value?.volcano_bot_name || currentPet.value?.name || 'AI助手',
system_role: currentPet.value?.volcano_system_role || currentPet.value?.global_prompt || '',
character_manifest: currentPet.value?.volcano_character_manifest || '',
input_mod: 'keep_alive'
})
}
@ -1424,12 +1432,13 @@ export default {
isInCall.value = true
const callConfig = {
speaker: 'zh_male_yunzhou_jupiter_bigtts',
model: 'O',
bot_name: currentPet.value?.name || 'AI助手',
system_role: currentPet.value?.prompt || '你是一个友善的AI助手用简洁自然的语言和用户交流。',
speaker: currentPet.value?.volcano_voice_id || 'zh_female_vv_jupiter_bigtts',
model: currentPet.value?.volcano_model_version || 'O',
bot_name: currentPet.value?.volcano_bot_name || currentPet.value?.name || 'AI助手',
system_role: currentPet.value?.volcano_system_role || currentPet.value?.global_prompt || '你是一个友善的AI助手用简洁自然的语言和用户交流。',
character_manifest: currentPet.value?.volcano_character_manifest || '',
speaking_style: '语气自然亲切,回复简洁',
hello_text: `你好!我是${currentPet.value?.name || 'AI助手'},有什么可以帮助你的吗?`
hello_text: `你好!我是${currentPet.value?.volcano_bot_name || currentPet.value?.name || 'AI助手'},有什么可以帮助你的吗?`
}
const success = await chatStore.enterRealtimeCallMode(callConfig)

View File

@ -65,14 +65,14 @@
</el-tooltip>
</template>
</el-table-column>
<el-table-column prop="speed" label="语速" width="80">
<el-table-column prop="volcano_speed" label="语速" width="80">
<template #default="{ row }">
{{ row.speed || 1.0 }}
{{ row.volcano_speed || 1.0 }}
</template>
</el-table-column>
<el-table-column prop="volume" label="音量" width="80">
<el-table-column prop="volcano_volume" label="音量" width="80">
<template #default="{ row }">
{{ row.volume || 1.0 }}
{{ row.volcano_volume || 1.0 }}
</template>
</el-table-column>
<el-table-column prop="volcano_model_version" label="语音模型" width="100">
@ -170,45 +170,6 @@
</el-form-item>
</el-tab-pane>
<el-tab-pane label="腾讯云TTS" name="tts">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="TTS音色">
<el-input v-model="petForm.voice_id" placeholder="101001" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="声音类型">
<el-input v-model="petForm.voice_type" placeholder="甜美女声/..." />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="语速">
<el-slider
v-model="petForm.speed"
:min="0.5"
:max="2.0"
:step="0.1"
show-input
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="音量">
<el-slider
v-model="petForm.volume"
:min="0"
:max="2.0"
:step="0.1"
show-input
/>
</el-form-item>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane label="火山引擎实时语音" name="volcano">
<el-alert
@ -337,8 +298,8 @@
<el-descriptions-item label="名称">{{ selectedPet.name }}</el-descriptions-item>
<el-descriptions-item label="类型">{{ getTypeText(selectedPet.type) }}</el-descriptions-item>
<el-descriptions-item label="声音类型">{{ selectedPet.voice_type }}</el-descriptions-item>
<el-descriptions-item label="语速">{{ selectedPet.speed }}</el-descriptions-item>
<el-descriptions-item label="音量">{{ selectedPet.volume }}</el-descriptions-item>
<el-descriptions-item label="语速">{{ selectedPet.volcano_speed || 1.0 }}</el-descriptions-item>
<el-descriptions-item label="音量">{{ selectedPet.volcano_volume || 1.0 }}</el-descriptions-item>
<el-descriptions-item label="性格特点">{{ selectedPet.personality }}</el-descriptions-item>
<el-descriptions-item label="火山引擎模型">
<el-tag v-if="selectedPet.volcano_model_version" type="success">
@ -408,8 +369,33 @@ export default {
const loadSpeakers = async () => {
try {
const response = await adminApi.getRealtimeVoiceSpeakers()
if (response && response.data && response.data.success && response.data.data?.length > 0) {
speakers.value = response.data.data
if (response && response.data && response.data.success && response.data.data) {
const speakerData = response.data.data
const merged = []
if (speakerData.O) {
Object.entries(speakerData.O).forEach(([id, info]) => {
merged.push({
id,
name: info?.name || id,
description: info?.description || '',
gender: info?.gender || ''
})
})
}
if (speakerData.SC) {
Object.entries(speakerData.SC).forEach(([id, info]) => {
merged.push({
id,
name: info?.name || id,
description: info?.description || '',
gender: info?.gender || ''
})
})
}
speakers.value = merged.length > 0 ? merged : defaultOSpeakers
} else {
speakers.value = defaultOSpeakers
}
@ -557,11 +543,10 @@ export default {
name: petForm.name,
type: petForm.type,
avatar_url: petForm.avatar_url,
voice_id: petForm.voice_id,
voice_type: petForm.voice_type,
global_prompt: petForm.global_prompt,
speed: petForm.speed,
volume: petForm.volume,
speed: petForm.volcano_speed,
volume: petForm.volcano_volume,
personality: petForm.personality,
status: petForm.status === 'active' ? 1 : 0,
show_avatar: petForm.show_avatar,