You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用@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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 12:50:32