我尝试过使用官方的OpenAI npm依赖项,用Javascript在OpenAI中实现聊天机器人。
我解决这个问题的方法是,我有一个聊天消息数组,通过换行符连接,并作为提示发送到API。
示例:
arr.push("This is a conversation between you and an AI")
arr.push("You: Hello, how are you doing")
arr.push("AI: I'm great, how about you?")
arr.push("You: I'm good, thanks!")
然后,我将下一个问题推送到数组,再推一个空的"AI:"字符串,让OpenAI端点完成。
API完成后的提示如下所示
This is a conversation between you and an AI
You: Hello, how are you doing
AI: I'm great, how about you?
You: I'm good, thanks!
You: How's the weather today?
AI:
然后,响应也将被推送到阵列,因此对话可以继续...(此时我只发送数组中的最后~20行)然而,我遇到的问题是"机器人"会开始重复自己,似乎是随机的时候它会开始回答类似"太好了,你呢?"的问题,无论你在提示中作为最后一个问题发送什么,那都将是答案"
示例:
This is a conversation between you and an AI
You: Hello, how are you doing
AI: I'm great, how about you?
You: I'm good, thanks!
You: How's the weather today?
AI: It is looking great!
You: That's nice, any plans for today?
AI: It is looking great!
You: What are you talking about?
AI: It is looking great!
我在文档中找到的唯一相关的东西似乎是frequency_penalty和presence_penalty。然而,更改这些似乎没有多大作用。
这是用于以上示例的参数:
const completion = await openai.createCompletion("text-davinci-001", {
prompt: p,
max_tokens: 200,
temperature: 0.6,
frequency_penalty: 1.5,
presence_penalty: 1.2,
});
return completion.data.choices[0].text.trim()
我当然也尝试过不同的温度和处罚组合,这只是一个已知的问题,还是我误解了什么?
1条答案
按热度按时间7d7tgy0s1#
频率和存在惩罚的最大值为1 -我不知道API如何处理超过这个值。
试试
text-davinci-003
,最新版本(截至2023年1月19日)--这是聊天机器人提示的official example,温度设置为.9
是为了创造力,在线惩罚为.6
是为了避免主题重复。而not recommended,您可以尝试基本系列型号
davinci
,这是一个有点松散的佳能。