【OpenAI API】Chat

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"
}'
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容