我正在尝试使用OpenAI PHP SDK的completion()方法来保持对话。
- 提示符#1:"How Are You?">
- 提示#2:"我之前问你什么?">
但AI似乎忘记了我之前的要求。然后对第二个提示进行随机回复。
我为这2个调用使用的代码是:
$call1 = $open_ai->completion([
'model' => 'text-davinci-003',
'prompt' => 'How Are You?',
]);
$call2 = $open_ai->completion([
'model' => 'text-davinci-003',
'prompt' => 'What i asked you before?',
]);
我错过了什么?为了让AI记住我之前问过的问题,我该如何在这两个调用之间保持会话存活?
第二个答案,因为第一个没有回答OP的问题。
基于这个OpenAI Playground的例子,一个'对话'只能通过发送命令给API来'请求'。
不要认为在获得回复后还有办法让对话继续。
考虑这个例子,如果我们发送以下文本:
The following is a conversation with an AI assistant.
Human: Hello
Human: What is 3 * 3?
AI:
Human: What did I just asked?
AI:
我得到的响应是:
You asked me what 3 * 3 is. The answer is 9.
用于此的代码:
<?php
require __DIR__ . '/vendor/autoload.php';
use OrhanerdayOpenAiOpenAi;
$open_ai_key = getenv('OPENAI_API_KEY');
$open_ai = new OpenAi($open_ai_key);
function ask($ai, $question, $model = 'text-davinci-003') {
$res = $ai->completion([
'model' => $model,
'prompt' => $question,
'temperature' => 0.9,
'max_tokens' => 150,
'frequency_penalty' => 0,
'presence_penalty' => 0.6,
'stop' => ["nHuman:", "nAI:"]
]);
try {
$json = @json_decode($res);
foreach ($json->choices as $choice) {
echo $choice->text . PHP_EOL;
}
} catch (Exception $e) {
var_dump($e);
return NULL;
}
}
$text = <<<EOL
The following is a conversation with an AI assistant.
Human: Hello
Human: What is 3 * 3?
AI:
Human: What did I just asked?
AI:
EOL;
$res = ask($open_ai, $text);
注意stop
数组,引用自文档:
最多4个序列,API将停止生成进一步的令牌。返回的文本将不包含停止序列。
这似乎让AI知道哪里"读"和哪里"写">
如果您从请求中删除该参数,则返回时不包含答案:
You asked what 3 times 3 is.
自2023年3月起,聊天完成可用,您可以提供早期消息的内容。看到
https://platform.openai.com/docs/guides/chat
当用户指令引用先前的消息时,包含会话历史记录有助于。在上面的例子中,用户的最后一个问题是"在哪里播放?"只有在之前关于2020年世界大赛的信息的背景下才有意义。因为模型没有过去请求的记忆,所以所有相关信息都必须通过对话提供。如果一个会话不能满足模型的令牌限制,它将需要以某种方式缩短。
同样的问题在这里:(有点梦想与人工智能建立关系以保持对话,但显然,每个请求都会触发一个新的会话,根据我的经验,你必须向人工智能发送全文(达芬奇现在对我来说)才能得到你想要的。
openai.api_key = key
response = openai.Completion.create(
model="text-davinci-003",
prompt="Human: Hello AI, how can we save our session to talk future? nAI:",
temperature=0.9,
max_tokens=150,
top_p=1,
frequency_penalty=0.0,
presence_penalty=0.6,
stop=[" Human:", " AI:"]
)
代表:
"text": " You can save the session by saving the conversation logs to a file or capturing screenshots of the conversation. Additionally, you can create an account with a chatbot service provider in order to save and continue conversations at any time."}