场景人设切换
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 2m30s
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 2m30s
This commit is contained in:
parent
c96c49ff3f
commit
9d4bbc182c
26
server.js
26
server.js
@ -85,6 +85,7 @@ app.delete('/api/messages/clear', async (req, res) => {
|
|||||||
// 存储连接的客户端和他们的视频流状态
|
// 存储连接的客户端和他们的视频流状态
|
||||||
const connectedClients = new Map();
|
const connectedClients = new Map();
|
||||||
|
|
||||||
|
// 场景轮询系统
|
||||||
// 场景轮询系统
|
// 场景轮询系统
|
||||||
let currentSceneIndex = 0;
|
let currentSceneIndex = 0;
|
||||||
const scenes = [
|
const scenes = [
|
||||||
@ -92,19 +93,22 @@ const scenes = [
|
|||||||
name: '起床',
|
name: '起床',
|
||||||
defaultVideo: '8-4-bd-2.mp4',
|
defaultVideo: '8-4-bd-2.mp4',
|
||||||
interactionVideo: '8-4-sh.mp4',
|
interactionVideo: '8-4-sh.mp4',
|
||||||
tag: 'wakeup'
|
tag: 'wakeup',
|
||||||
|
apiKey: 'bot-20250724150616-xqpz8' // 起床场景的API key
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '开车',
|
name: '开车',
|
||||||
defaultVideo: '8-4-kc-bd.mp4', // 根据您的视频文件调整
|
defaultVideo: '8-4-kc-bd.mp4',
|
||||||
interactionVideo: '8-4-kc-sh.mp4',
|
interactionVideo: '8-4-kc-sh.mp4',
|
||||||
tag: 'driving'
|
tag: 'driving',
|
||||||
|
apiKey: 'bot-20250623140339-r8f8b' // 开车场景的API key
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '喝茶',
|
name: '喝茶',
|
||||||
defaultVideo: '8-4-hc-bd.mp4',
|
defaultVideo: '8-4-hc-bd.mp4',
|
||||||
interactionVideo: '8-4-hc-sh.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) => {
|
app.get('/api/video-mapping', (req, res) => {
|
||||||
// videoMapping = getCurrentScene()
|
// videoMapping = getCurrentScene()
|
||||||
@ -373,4 +389,4 @@ server.listen(PORT, '0.0.0.0', async () => {
|
|||||||
|
|
||||||
// 导出消息历史管理器供其他模块使用
|
// 导出消息历史管理器供其他模块使用
|
||||||
module.exports = { messageHistory };
|
module.exports = { messageHistory };
|
||||||
console.log(`访问 http://localhost:${PORT} 开始使用`);
|
console.log(`访问 http://localhost:${PORT} 开始使用`);
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import { requestLLMStream } from './llm_stream.js';
|
import { requestLLMStream } from './llm_stream.js';
|
||||||
import { requestMinimaxi } from './minimaxi_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;
|
let isPlaying = false;
|
||||||
@ -114,11 +114,14 @@ async function chatWithAudioStream(userInput) {
|
|||||||
|
|
||||||
console.log('用户输入:', userInput);
|
console.log('用户输入:', userInput);
|
||||||
|
|
||||||
// 获取配置
|
// 获取当前场景对应的配置
|
||||||
const llmConfig = getLLMConfig();
|
const llmConfig = await getLLMConfigByScene();
|
||||||
const minimaxiConfig = getMinimaxiConfig();
|
const minimaxiConfig = getMinimaxiConfig();
|
||||||
const audioConfig = getAudioConfig();
|
const audioConfig = getAudioConfig();
|
||||||
|
|
||||||
|
console.log(`当前场景: ${llmConfig.sceneName} (${llmConfig.sceneTag})`);
|
||||||
|
console.log(`使用API Key: ${llmConfig.model.substring(0, 8)}...`);
|
||||||
|
|
||||||
// 清空音频队列
|
// 清空音频队列
|
||||||
audioQueue = [];
|
audioQueue = [];
|
||||||
|
|
||||||
|
|||||||
@ -70,13 +70,32 @@ export function validateConfig() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 获取配置的便捷方法
|
// 获取配置的便捷方法
|
||||||
export function getLLMConfig() {
|
export function getLLMConfig(sceneApiKey = null) {
|
||||||
return {
|
return {
|
||||||
apiKey: config.llm.apiKey,
|
apiKey: config.llm.apiKey, // 如果提供了场景API key,则使用它
|
||||||
model: config.llm.model,
|
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() {
|
export function getMinimaxiConfig() {
|
||||||
return {
|
return {
|
||||||
apiKey: config.minimaxi.apiKey,
|
apiKey: config.minimaxi.apiKey,
|
||||||
|
|||||||
Binary file not shown.
BIN
videos/8-4-sh-3.mp4
Normal file
BIN
videos/8-4-sh-3.mp4
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user