在使用Google Gemini API的generateContent方法时遇到”TypeError: request is not iterable”错误

我在一个React项目中使用Google Gemini API来根据表单收集的输入信息获取数据。然而,当我调用generateContent方法时,出现了以下错误:

Error generating content: TypeError: request is not iterable    at formatNewContent (index.mjs:881:36)    at formatGenerateContentInput (index.mjs:962:25)    at GenerativeModel.generateContent (index.mjs:1309:33)    at run (gemini.jsx:32:36)    at onSent (Context.jsx:59:64)    at handleSubmit (Main.jsx:20:5)    at HTMLUnknownElement.callCallback2 (react-dom.development.js:4164:14)    at Object.invokeGuardedCallbackDev (react-dom.development.js:4213:16)    at invokeGuardedCallback (react-dom.development.js:4277:31)    at invokeGuardedCallbackAndCatchFirstError (react-dom.development.js:4291:25)

错误背景这个错误似乎表明请求对象的格式不正确,或者Gemini API方法期望不同的输入格式。以下是我尝试根据表单输入生成内容的相关代码部分。

import {    GoogleGenerativeAI,    HarmCategory,    HarmBlockThreshold,} from "@google/generative-ai";const apiKey = process.env.REACT_APP_GEN_AI_API_KEY; // 确保在环境中设置了这个const genAI = new GoogleGenerativeAI(apiKey);const model = genAI.getGenerativeModel({    model: "gemini-1.5-flash",});const generationConfig = {    temperature: 1,    topP: 0.95,    topK: 64,    maxOutputTokens: 8192,    responseMimeType: "text/plain",};export async function run({ education, technologies, level, projects, firstCourse }) {    try {        // 调试时记录输入        console.log("Inputs for career suggestion:", { education, technologies, level, projects, firstCourse });        // 职业建议        const prompt = `Education: ${education}, skills: ${technologies}, Level: ${level}, Projects_done: ${projects}. Based on my education, skills, and level, which career should I opt for ${firstCourse}? Just tell me one branch in one word.`;        console.log("Prompt for career suggestion:", prompt);                // 确保对generateContent的调用具有正确的结构        const result = await model.generateContent({             prompt,             generationConfig         });        if (!result || typeof result.text !== 'string') {            throw new Error("Invalid response from model for career suggestion");        }        const decision = result.text.trim() || "Unable to determine";        // 最佳课程        const prompt_2 = `${decision} was suggested by a friend. Give me the 5 best free courses with links to master this field, ordered from beginner to advanced. Only list 5 links, no description.`;        console.log("Prompt for courses:", prompt_2);                const result_2 = await model.generateContent({             prompt: prompt_2,             generationConfig         });        if (!result_2 || typeof result_2.text !== 'string') {            throw new Error("Invalid response from model for courses");        }        const courseDisplay = result_2.text.trim() || "No courses found";        // 热门项目        const prompt_3 = `For a ${decision} career, suggest 5 trending projects to build my skills at ${level} level.`;        console.log("Prompt for projects:", prompt_3);                const result_3 = await model.generateContent({             prompt: prompt_3,             generationConfig         });        if (!result_3 || typeof result_3.text !== 'string') {            throw new Error("Invalid response from model for projects");        }        const project = result_3.text.trim() || "No projects available";        return { decision, courseDisplay, project };    } catch (error) {        console.error("Error generating content:", error);        return { decision: "Error", courseDisplay: "Error fetching courses", project: "Error fetching projects" };    }} export default run;

我希望能得到关于职业建议、课程和项目的三种响应,请帮助我解决这个错误。

我尝试过的方法我已经验证了我的REACT_APP_GEN_AI_API_KEY在环境变量中设置正确。检查了generateContent是否接收到了prompt和generationConfig。将prompt和generationConfig打印到控制台,它们看起来格式正确。


回答:

修改点:

  • 在你的脚本中,在const result = await model.generateContent({prompt, generationConfig});处,属性prompt不存在。我猜这可能是你当前问题的根本原因。
  • generationConfig可以包含在genAI.getGenerativeModel的参数中。
  • 此外,result.text返回undefined

当这些点简单地反映在你展示的脚本中时,它将变成如下所示。

修改后的脚本:

import {  GoogleGenerativeAI,  HarmCategory,  HarmBlockThreshold,} from "@google/generative-ai";const apiKey = process.env.REACT_APP_GEN_AI_API_KEY; // 确保在环境中设置了这个const genAI = new GoogleGenerativeAI(apiKey);const generationConfig = {  temperature: 1,  topP: 0.95,  topK: 64,  maxOutputTokens: 8192,  responseMimeType: "text/plain",};const model = genAI.getGenerativeModel({  model: "gemini-1.5-flash",  generationConfig,});export async function run({ education, technologies, level, projects, firstCourse }) {  try {    // 调试时记录输入    console.log("Inputs for career suggestion:", { education, technologies, level, projects, firstCourse });    // 职业建议    const prompt = `Education: ${education}, skills: ${technologies}, Level: ${level}, Projects_done: ${projects}. Based on my education, skills, and level, which career should I opt for ${firstCourse}? Just tell me one branch in one word.`;    console.log("Prompt for career suggestion:", prompt);    // 确保对generateContent的调用具有正确的结构    const result = await model.generateContent(prompt);    if (!result || typeof result.response.text() !== "string") {      throw new Error("Invalid response from model for career suggestion");    }    const decision = result.response.text().trim() || "Unable to determine";    // 最佳课程    const prompt_2 = `${decision} was suggested by a friend. Give me the 5 best free courses with links to master this field, ordered from beginner to advanced. Only list 5 links, no description.`;    console.log("Prompt for courses:", prompt_2);    const result_2 = await model.generateContent(prompt_2);    if (!result_2 || typeof result_2.response.text() !== "string") {      throw new Error("Invalid response from model for courses");    }    const courseDisplay = result_2.response.text().trim() || "No courses found";    // 热门项目    const prompt_3 = `For a ${decision} career, suggest 5 trending projects to build my skills at ${level} level.`;    console.log("Prompt for projects:", prompt_3);    const result_3 = await model.generateContent(prompt_3);    if (!result_3 || typeof result_3.response.text() !== "string") {      throw new Error("Invalid response from model for projects");    }    const project = result_3.response.text().trim() || "No projects available";    return { decision, courseDisplay, project };  } catch (error) {    console.error("Error generating content:", error);    return {      decision: "Error",      courseDisplay: "Error fetching courses",      project: "Error fetching projects",    };  }}export default run;
  • 当我测试这个修改后的脚本时,我确认它可以无错误地工作。

参考:

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注