美文网首页
【OpenAI API】Chat

【OpenAI API】Chat

作者: MasonChan | 来源:发表于2023-03-11 22:58 被阅读0次

Chat

Given a chat conversation, the model will return a chat completion response.

例子

请求

curl

curl https://api.openai.com/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -d '{
  "model": "gpt-3.5-turbo",
  "messages": [{"role": "user", "content": "Hello!"}]
}'

Python

import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")

completion = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "user", "content": "Hello!"}
  ]
)

print(completion.choices[0].message)

Node

const { Configuration, OpenAIApi } = require("openai");

const configuration = new Configuration({
  apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);

const completion = await openai.createChatCompletion({
  model: "gpt-3.5-turbo",
  messages: [{role: "user", content: "Hello world"}],
});
console.log(completion.data.choices[0].message);

响应

{
  "id": "chatcmpl-123",
  "object": "chat.completion",
  "created": 1677652288,
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "\n\nHello there, how may I assist you today?",
    },
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 9,
    "completion_tokens": 12,
    "total_tokens": 21
  }
}

Create chat completion

POST https://api.openai.com/v1/chat/completions

Creates a completion for the chat message

Request body

model

  • string
  • Required

ID of the model to use. Currently, only gpt-3.5-turbo and gpt-3.5-turbo-0301 are supported.

messages

  • array
  • Required

The messages to generate chat completions for, in the chat format.

聊天模型将一系列的消息作为输入,并返回一个由模型生成的消息作为输出。

尽管聊天格式的设计旨在使多轮对话容易进行,但它同样适用于没有任何对话的单轮任务(例如以前由指令跟随模型(如text-davinci-003)服务的任务)。

Input format

# Note: you need to be using OpenAI Python v0.27.0 for the code below to work
import openai

openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Who won the world series in 2020?"},
        {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
        {"role": "user", "content": "Where was it played?"}
    ]
)

系统消息有助于设置助手的行为。在上面的例子中,助手被指示为"You are a helpful assistant."(“你是一个有用的助手”)。

消息必须是消息对象的数组,其中每个对象都有角色(可以是“系统”、“用户”或“助手”)和内容(消息内容)。对话可能很短,仅有1条消息,也可能填满很多页面。

一般情况下,对话的格式是先显示系统消息,然后是用户和助手的交替消息。

系统消息有助于设置助手的行为方式。在上面的示例中,使用“你是一个有用的助手”进行指导。

gpt-3.5-turbo-0301 并不总是对系统消息给予足够的关注。未来的模型将会接受更强的训练来关注系统消息。

用户信息有助于指导助手。它们可以由应用程序的最终用户生成,也可以由开发人员设置为指导。

助手信息有助于存储先前的回复。它们也可以由开发人员编写,以帮助给出所需行为的示例。

包括对话历史记录有助于用户指令涉及先前的消息时。在上面的例子中,“它是在哪里播放的?”用户的最终问题只有在2020年世界大赛的先前消息的背景下才有意义。由于模型没有记录过去的请求,所有相关信息必须通过对话提供。如果对话不能适应模型的令牌限制,它将需要以某种方式缩短。

Response format

An example API response looks as follows:

{
 'id': 'chatcmpl-6p9XYPYSTTRi0xEviKjjilqrWU2Ve',
 'object': 'chat.completion',
 'created': 1677649420,
 'model': 'gpt-3.5-turbo',
 'usage': {'prompt_tokens': 56, 'completion_tokens': 31, 'total_tokens': 87},
 'choices': [
   {
    'message': {
      'role': 'assistant',
      'content': 'The 2020 World Series was played in Arlington, Texas at the Globe Life Field, which was the new home stadium for the Texas Rangers.'},
    'finish_reason': 'stop',
    'index': 0
   }
  ]
}

在Python中,助手的回复可以使用 response['choices'][0]['message']['content'] 来提取。

每个回复都会包括一个 finish_reason。finish_reason的可能值如下:

  • stop: API返回完整的模型输出
  • length: 由于max_tokens参数或标记限制而导致模型输出不完整
  • content_filter: 由于我们内容过滤器中的一个标志而省略的内容
  • null: API响应仍在进行或不完整

temperature

  • number
  • Optional
  • Defaults to 1

采样温度在0和2之间,应选择何种值?像0.8这样较高的值会使输出更加随机,而较低的值,例如0.2,则会使其更加集中和确定性。

我们通常建议更改此值或 top_p,但不要同时更改两个值。

top_p

  • number
  • Optional
  • Defaults to 1

一种替代使用温度进行取样的方法叫做"核心取样"(nucleus sampling),在这种方法中,模型只考虑具有 top_p 概率质量的令牌的结果。例如,当 top_p 设置为 0.1 时,意味着只有占前 10% 概率质量的令牌被考虑。

我们通常建议只改变这两种方法中的一种,而不是同时改变两种。

n

  • integer
  • Optional
  • Defaults to 1

为每条输入消息生成多少条聊天选项。

stream

  • boolean
  • Optional
  • Defaults to false

如果设置了,将会发送部分消息增量,就像 ChatGPT 一样。令牌将作为仅数据的服务器推送事件在可用时发送,通过数据:[DONE] 消息终止流。

stop

  • string or array
  • Optional
  • Defaults to null

API 最多生成4个序列,将停止生成的令牌。

max_tokens

  • integer
  • Optional
  • Defaults to inf

生成的答案允许的最大令牌数。默认情况下,模型可以返回的令牌数为(4096-提示令牌数)。

presence_penalty

  • number
  • Optional
  • Defaults to 0

-2.0和2.0之间的数字。正数惩罚基于在文本中出现的新标记,增加模型谈论新主题的可能性。

请参阅有关频率和存在惩罚的更多信息。

frequency_penalty

  • number
  • Optional
  • Defaults to 0

在-2.0和2.0之间的数字。正值会根据单词在文本中的现有频率对新单词进行惩罚,降低模型重复完全相同语句的可能性。

See more information about frequency and presence penalties.

logit_bias

  • map
  • Optional
  • Defaults to null

修改完成时特定标记出现的可能性。

接受一个json对象,将标记(通过标记器中的标记ID指定)映射到从-100到100的相关偏差值。数学上,在采样之前,模型生成的logits会增加偏差。具体效果因模型而异,但-1到1之间的值应该会降低或增加选择的可能性;像-100或100这样的值应该会导致相关标记被禁止或者是唯一的选择。

user

  • string
  • Optional

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse. Learn more

End-user IDs

在您的请求中发送最终用户 ID 可能是一个有用的工具,帮助 OpenAI 监测和检测滥用。这使得 OpenAI 可以在我们检测到您的应用程序中有任何政策违规时,向您的团队提供更具操作性的反馈。

这些 ID 应该是一个能唯一标识每个用户的字符串。我们建议对他们的用户名或电子邮件地址进行哈希处理,以避免向我们发送任何识别信息。如果您向非登录用户提供产品预览,您可以发送会话 ID。

您可以通过 user 参数在您的 API 请求中包含最终用户 ID,如下所示:

curl https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
  "model": "text-davinci-003",
  "prompt": "This is a test",
  "max_tokens": 5,
  "user": "user123456"
}'

相关文章

网友评论

      本文标题:【OpenAI API】Chat

      本文链接:https://www.haomeiwen.com/subject/nskfrdtx.html