Node.js 聊天机器人错误:GoogleGenerativeAIError - 内容应具有包含 Parts 数组的“parts”属性

问题描述 投票:0回答:1

我正在使用 @google/generative-ai 库构建 Node.js 聊天机器人。我在处理用户和模型之间的聊天历史记录时遇到错误。

以下是问题的细分:

  • 首次查询成功:初始用户查询工作正常,可能是因为发送到模型的历史记录为空。
  • 第二次查询错误:后续用户查询会出现以下错误: GoogleGenerativeAIError:[GoogleGenerativeAI 错误]:内容应具有包含 Parts 数组的“parts”属性

这表明模型需要历史对象的特定格式,该格式可能无法正确发送。

相关代码片段:

App.js(客户端):

const getResponse = async () => {
    if (!value) {
      setError("Please enter something!");
      return;
    }
    try {
      const options = {
        method: "POST",
        body: JSON.stringify({
          history: chatHistory,
          message: value,
        }),
        headers: {
          "Content-Type": "application/json",
        },
      };
      const response = await fetch("http://localhost:8000/gemini", options);
      const data = await response.text();
      console.log(data);
      setChatHistory((oldChatHistory) => [
        ...oldChatHistory,
        {
          role: "user",
          parts: value,
        },
        {
          role: "model",
          parts: data,
        },
      ]);
      setValue("");
    } catch (error) {
      console.log(error);
      setError("Something went wrong!");
    }
  };

server.js(服务器端):


app.post("/gemini", async (req, res) => {
  const model = genAI.getGenerativeModel({ model: "gemini-pro" });
  const chat = model.startChat({
    history: req.body.history,
  });
  const msg = req.body.message;
  const result = await chat.sendMessage(msg);
  const response = await result.response;
  const text = response.text();
  res.send(text);
});

附加信息:

Node.js 版本:18.17.0 @google/generative-ai 版本:0.3.1

我要问的是:

  • 如何确保发送到模型的历史对象的格式正确,其中 parts 属性为 Parts 数组?
  • 在服务器端处理空历史记录有什么具体注意事项吗?
  • 解决“内容应具有包含零件数组的‘零件’属性”错误的任何其他建议。
node.js artificial-intelligence chatbot google-generativeai
1个回答
0
投票

我也有同样的问题。我修复了,但我不太了解 Node.js。 :D

我所做的改变:

setChatHistory((oldChatHistory) => [
        ...oldChatHistory,
        {
          role: "user",
          parts: [{ text: value }],
        },
        {
          role: "model",
          parts: [{ text: data }],
        },
      ]);

在上面的代码中,我检查了 Google Gemini 文档,看到了部分字段。 parts 字段是文档中的一个数组,我像文档一样更改了我的代码。然后..

{chatItem.role} : {chatItem.parts[0].text}

在上面的代码中,我得到了答案,并将答案写在我的项目上。

我希望,我一直在帮助你。

© www.soinside.com 2019 - 2024. All rights reserved.