使用@google/generative-ai构建Node.js聊天机器人时,聊天历史格式错误导致GoogleGenerativeAIError问题咨询
@google/generative-ai构建Node.js聊天机器人时,聊天历史格式错误导致GoogleGenerativeAIError问题咨询
看起来你遇到的问题核心是聊天历史的格式不符合Gemini API的要求——每个消息条目里的parts必须是一个数组,而不是单个字符串。我们一步步来解决这个问题:
1. 修正客户端聊天历史的存储格式
你在客户端更新chatHistory的时候,把parts直接赋值成了字符串(value和data),但Gemini要求parts是一个Part对象的数组(哪怕只有一条内容)。修改客户端的setChatHistory逻辑:
setChatHistory((oldChatHistory) => [ ...oldChatHistory, { role: "user", parts: [value], // 改成数组形式,直接传字符串元素即可,API会自动处理 }, { role: "model", parts: [data], }, ]);
这样客户端传递给服务器的history里,每个条目都符合{role: string, parts: Array<string|{text:string}>}的格式,就能满足API的要求了。
2. 服务器端的空历史处理
其实model.startChat()在接收空数组或者不传递history参数时,都会正常初始化聊天会话,不需要额外处理空历史的情况。不过为了让代码更健壮,你可以给history设置一个默认值,避免客户端传递undefined:
const chat = model.startChat({ history: req.body.history || [], // 确保history始终是数组类型 });
3. 额外的错误预防建议
- 服务器端可以加一层格式验证,确保接收到的history每个条目都包含合法的
role和parts数组,避免异常数据导致报错:const validHistory = (req.body.history || []).filter(item => ["user", "model"].includes(item.role) && Array.isArray(item.parts) && item.parts.length > 0 ); const chat = model.startChat({ history: validHistory }); - 考虑升级
@google/generative-ai到最新版本(你当前用的0.3.1比较旧),新版本有更完善的类型提示和错误处理能力,执行npm install @google/generative-ai@latest即可完成升级。
备注:内容来源于stack exchange,提问作者Ranjeet Bhosale
相关产品推荐
相关产品推荐

