场景人设切换
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 2m30s

This commit is contained in:
Song367 2025-08-04 18:29:25 +08:00
parent c96c49ff3f
commit 9d4bbc182c
5 changed files with 49 additions and 11 deletions

View File

@ -85,6 +85,7 @@ app.delete('/api/messages/clear', async (req, res) => {
// 存储连接的客户端和他们的视频流状态
const connectedClients = new Map();
// 场景轮询系统
// 场景轮询系统
let currentSceneIndex = 0;
const scenes = [
@ -92,19 +93,22 @@ const scenes = [
name: '起床',
defaultVideo: '8-4-bd-2.mp4',
interactionVideo: '8-4-sh.mp4',
tag: 'wakeup'
tag: 'wakeup',
apiKey: 'bot-20250724150616-xqpz8' // 起床场景的API key
},
{
name: '开车',
defaultVideo: '8-4-kc-bd.mp4', // 根据您的视频文件调整
defaultVideo: '8-4-kc-bd.mp4',
interactionVideo: '8-4-kc-sh.mp4',
tag: 'driving'
tag: 'driving',
apiKey: 'bot-20250623140339-r8f8b' // 开车场景的API key
},
{
name: '喝茶',
defaultVideo: '8-4-hc-bd.mp4',
interactionVideo: '8-4-hc-sh.mp4',
tag: 'tea'
tag: 'tea',
apiKey: 'bot-20250804180724-4dgtk' // 喝茶场景的API key
}
];
@ -167,6 +171,18 @@ app.get('/api/videos', (req, res) => {
});
});
// 获取当前场景信息的API接口
app.get('/api/current-scene', (req, res) => {
const scene = getCurrentScene();
res.json({
name: scene.name,
tag: scene.tag,
apiKey: scene.apiKey,
defaultVideo: scene.defaultVideo,
interactionVideo: scene.interactionVideo
});
});
// 获取视频映射
app.get('/api/video-mapping', (req, res) => {
// videoMapping = getCurrentScene()

View File

@ -2,7 +2,7 @@
import { requestLLMStream } from './llm_stream.js';
import { requestMinimaxi } from './minimaxi_stream.js';
import { getLLMConfig, getMinimaxiConfig, getAudioConfig, validateConfig } from './config.js';
import { getLLMConfig, getLLMConfigByScene, getMinimaxiConfig, getAudioConfig, validateConfig } from './config.js';
// 防止重复播放的标志
let isPlaying = false;
@ -114,11 +114,14 @@ async function chatWithAudioStream(userInput) {
console.log('用户输入:', userInput);
// 获取配置
const llmConfig = getLLMConfig();
// 获取当前场景对应的配置
const llmConfig = await getLLMConfigByScene();
const minimaxiConfig = getMinimaxiConfig();
const audioConfig = getAudioConfig();
console.log(`当前场景: ${llmConfig.sceneName} (${llmConfig.sceneTag})`);
console.log(`使用API Key: ${llmConfig.model.substring(0, 8)}...`);
// 清空音频队列
audioQueue = [];

View File

@ -70,13 +70,32 @@ export function validateConfig() {
}
// 获取配置的便捷方法
export function getLLMConfig() {
export function getLLMConfig(sceneApiKey = null) {
return {
apiKey: config.llm.apiKey,
model: config.llm.model,
apiKey: config.llm.apiKey, // 如果提供了场景API key则使用它
model: sceneApiKey || config.llm.model,
};
}
// 新增根据场景获取LLM配置
export async function getLLMConfigByScene() {
try {
const response = await fetch('/api/current-scene');
const sceneData = await response.json();
return {
apiKey: config.llm.apiKey,
model: sceneData.apiKey,
sceneTag: sceneData.tag,
sceneName: sceneData.name
};
} catch (error) {
console.warn('获取场景配置失败,使用默认配置:', error);
return getLLMConfig(); // 回退到默认配置
}
}
export function getMinimaxiConfig() {
return {
apiKey: config.minimaxi.apiKey,

Binary file not shown.

BIN
videos/8-4-sh-3.mp4 Normal file

Binary file not shown.