修复智能体音色设置
This commit is contained in:
parent
4a4553eb48
commit
2e89188b69
@ -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)
|
||||
|
||||
@ -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,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user