为什么Gemini API在接收到新提示时还会返回旧提示的结果?

我使用Flask创建了一个Web应用程序,可以选择特定文本并使用Gemini API进行改写。改写功能正常工作,但假设我首先请求它改写字符串A,并且它成功完成了。现在,当我请求它改写字符串B时,它返回了改写结果(字符串A + 字符串B),这是我不想要的。

我使用JavaScript按钮获取当前选中的文本

var selectedText = window.getSelection().toString();

并将其发送到Flask,Flask中的实现代码如下

@app.route('/paraphrase', methods=['POST'])def paraphrase():    genai.configure(api_key=API_KEY)    try:        text = request.get_json().get('text')        contents_ = contents.copy()        #contents_[0]['parts'].append({'text': text})        contents_[0]['parts'].append({'text': ' '})        contents_[0]['parts'][-1]['text'] = "paraphrase : " + text        gemini = genai.GenerativeModel(model_name=model)        response = gemini.generate_content(            contents_,            generation_config=generation_config,            safety_settings=safety_settings,            stream=False)        return response.candidates[0].content.parts[0].text    except:        return text

这里的’contents’包含了初始提示

contents = [{'parts': [{'text': 'Your job is to paraphrase the given texts into easier language. Also remove any spelling and grammar mistakes if you find one. You will be given input in form of paraphrase: {text}, and your output should only contain the paraphrased text, no other text, not a thing unrelated'}]}]

如您所见,从Flask代码中,我尝试在每次API调用开始时创建’contents’的副本,尝试删除’contents_’变量,最后尝试替换文本,但没有任何变化。它仍然会给出所有先前调用的文本以及新文本的改写结果。


回答:

听起来copy()函数是创建了一个浅拷贝。因此,虽然它创建了一个新列表,但该列表的所有成员都是原始列表中的相同成员。它没有对它们进行复制。

因此,当您创建contents_时,content中的字典是同一个字典。然后当您向其中添加内容时——您实际上是在向两者都添加内容。(这对于数组也是成立的。)

您需要一个创建深拷贝而不是浅拷贝的版本。您可以从copy模块的deepcopy()函数中获得这个功能。因此,您可以这样做

import copy...contents_ = copy.deepcopy(contents)

这样contents_将获得contents的一个干净的、深层次的副本,而对contents_的后续更改不会影响原始内容。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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