未获取到有效的AI回复 at InputRouter.llmHandler (E:\neuro\my-neuro-main\live-2d\js\ai\llm-...
错误信息
Error: 未获取到有效的AI回复
at InputRouter.llmHandler (E:\neuro\my-neuro-main\live-2d\js\ai\llm-handler.js:596:27)
at async InputRouter.handleVoiceInput (E:\neuro\my-neuro-main\live-2d\js\ai\conversation\InputRouter.js:69:13)
at async ASRProcessor.onSpeechRecognized (E:\neuro\my-neuro-main\live-2d\js\ai\conversation\ASRController.js:54:17)
AI 解决方案
代码报错分析报告
1. 错误翻译
原文:Error: 未获取到有效的AI回复
译文:Error: 未能获取到有效的AI回复
2. 原因分析
这个错误表明,在程序的AI对话处理链中,语音输入经过路由处理后,调用大语言模型(LLM)接口时,未能获得一个结构正确或内容有效的回复。错误发生在:
- 错误位置:
llm-handler.js文件第596行的llmHandler函数。 - 触发流程:
ASRController.js→InputRouter.js→llm-handler.js。 - 根本原因:最可能的情况是:
1. API调用失败:连接大语言模型API(如GPT、Claude等)时网络超时、认证失败或服务不可用。
2. 响应解析错误:API返回了数据,但格式不符合预期(例如,非JSON格式、缺少特定字段),导致解析时认为“无效”。
3. 内容无效:API返回了空回复、错误信息,或一个无法被后续逻辑处理的响应体。
3. 解决方案
需要在
llm-handler.js 的 llmHandler 函数中添加更健壮的错误处理和日志记录。// 文件:E:\neuro\my-neuro-main\live-2d\js\ai\llm-handler.js
// 在 llmHandler 函数中,调用AI API和解析响应的部分进行改造
async function llmHandler(inputData) {
try {
// 1. 调用AI API
const response = await fetch('YOUR_LLM_API_ENDPOINT', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.API_KEY}`
},
body: JSON.stringify({
// ... 你的请求参数
message: inputData.text,
// ...
}),
timeout: 15000 // 可选:设置超时
});
// 2. 检查HTTP响应状态
if (!response.ok) {
const errorBody = await response.text();
console.error(`LLM API HTTP Error: ${response.status}`, errorBody);
throw new Error(`AI服务请求失败: ${response.statusText}`);
}
// 3. 解析响应体
const result = await response.json();
// 4. 验证响应结构是否有效
if (!result || typeof result !== 'object') {
console.error('无效的API响应格式:', result);
throw new Error('AI返回了无效的数据结构');
}
// 5. 检查你期望的有效回复字段(例如 `result.choices[0].message.content` 或 `result.reply`)
const aiReply = extractValidReply(result); // 请根据你的API实际响应格式实现此函数
if (!aiReply || aiReply.trim() === '') {
console.error('AI回复内容为空:', result);
throw new Error('AI回复内容为空');
}
// 6. 返回有效的回复
return aiReply;
} catch (error) {
console.error('llmHandler 处理失败:', error.message);
// 此处可以返回一个友好的默认回复,而不是让整个链条崩溃
// return "抱歉,我暂时无法回答这个问题。";
// 或者,重新抛出错误,但包装得更清晰
throw new Error(`未获取到有效的AI回复: ${error.message}`);
}
}
// 辅助函数:根据你的API响应格式提取有效回复
function extractValidReply(apiResult) {
// 示例:适配OpenAI格式
// if (apiResult.choices && apiResult.choices[0]?.message?.content) {
// return apiResult.choices[0].message.content;
// }
// 示例:适配你的自定义格式
// if (apiResult.reply) {
// return apiResult.reply;
// }
// 请根据实际情况修改
return null;
}
4. ️ 预防措施
llmHandler 中记录详细的错误日志(包括API响应状态码、原始响应体),以便快速定位是网络、认证还是响应格式问题。extractValidReply 函数能正确解析所有预期的成功和错误格式。