分享

ChatGPT开发向导

阿飞 2023-5-5 03:25:44 发表于 总结型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 900

ChatGPT由gpt-3.5-turbo提供支持,这是OpenAI最先进的语言模型。
使用OpenAI API,您可以使用gpt-3.5-turbo构建自己的应用程序,例如:

  • 起草电子邮件或其他写作内容
  • 编写Python代码
  • 回答有关一组文档的问题
  • 创建对话代理
  • 为您的软件提供自然语言接口
  • 在各种学科中进行辅导
  • 翻译语言
  • 为视频、游戏等场景创建虚拟角色

本指南介绍了如何针对基于聊天的语言模型进行API调用,并分享了获取良好结果的技巧。还可以在OpenAI Playground中尝试新的聊天格式。

简介
聊天模型接收一系列消息作为输入,并返回模型生成的消息作为输出。
尽管聊天格式旨在使多轮对话变得简单,但对于没有任何对话的单轮任务(例如以前由指令跟随模型(如text-davinci-003)提供服务的任务),它同样有用。

一个示例API调用如下:

  1. # Note: you need to be using OpenAI Python v0.27.0 for the code below to work
  2. import openai
  3. openai.ChatCompletion.create(
  4.   model="gpt-3.5-turbo",
  5.   messages=[
  6.         {"role": "system", "content": "You are a helpful assistant."},
  7.         {"role": "user", "content": "Who won the world series in 2020?"},
  8.         {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
  9.         {"role": "user", "content": "Where was it played?"}
  10.     ]
  11. )
复制代码
主要输入是消息参数。消息必须是一个消息对象数组,其中每个对象都有一个角色(“system”,“user”或“assistant”)和内容(消息的内容)。对话可以只有一个消息,也可以填满很多页面。

通常,一次对话以系统消息开头,然后是交替的用户和助手消息。

系统消息有助于设置助手的行为。在上面的示例中,助手被指示为“您是一个有用的助手”。
用户消息有助于指导助手。它们可以由应用程序的终端用户生成,也可以由开发人员设置为指令。
助手消息有助于存储先前的响应。它们也可以由开发人员编写,以帮助提供所需行为的示例。
包括对话历史记录有助于当用户指令涉及之前的消息时。在上面的示例中,用户的最后一个问题“它是在哪里播放的?”只有在关于2020年世界大赛的先前消息的情况下才有意义。因为模型没有过去请求的记忆,所有相关信息都必须通过对话提供。如果对话无法适应模型的令牌限制,它将需要以某种方式缩短。

响应格式

响应示例如下:
  1. {
  2. 'id': 'chatcmpl-6p9XYPYSTTRi0xEviKjjilqrWU2Ve',
  3. 'object': 'chat.completion',
  4. 'created': 1677649420,
  5. 'model': 'gpt-3.5-turbo',
  6. 'usage': {'prompt_tokens': 56, 'completion_tokens': 31, 'total_tokens': 87},
  7. 'choices': [
  8.    {
  9.     'message': {
  10.       'role': 'assistant',
  11.       '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.'},
  12.     'finish_reason': 'stop',
  13.     'index': 0
  14.    }
  15.   ]
  16. }
复制代码

在Python中,可以使用response['choices'][0]['message']['content']提取助手的回复。
每个响应都包括一个finish_reason。finish_reason的可能值包括:
stop:API返回完整的模型输出
length:由于max_tokens参数或令牌限制,模型输出不完整
content_filter:由于我们的内容过滤器的标志而省略内容
null:API响应仍在进行中或不完整

管理令牌

语言模型会将文本分成称为令牌的块。在英语中,令牌的长度可以短至一个字符或长至一个单词(例如,a或apple),而在某些语言中,令牌甚至可以比一个字符更短或比一个单词更长。

例如,字符串“ChatGPT is great!”被编码为六个令牌:["Chat", "G", "PT", " is", " great", "!"]。
API调用中的令牌总数会影响以下方面:API调用的成本,因为您每个令牌付费;API调用的时间,因为编写更多令牌需要更多时间;API调用是否有效,因为总令牌必须低于模型的最大限制(gpt-3.5-turbo-0301的最大限制为4096个令牌)。

输入和输出令牌都计入这些数量。例如,如果您的API调用在消息输入中使用了10个令牌,并且您在消息输出中收到了20个令牌,那么您将被收取30个令牌的费用。

要查看API调用使用了多少令牌,请检查API响应中的使用情况字段(例如,response['usage']['total_tokens'])。
要在不进行API调用的情况下查看文本字符串中有多少令牌,请使用OpenAI的tiktoken Python库。在OpenAI Cookbook的指南中,可以找到有关如何使用tiktoken计算令牌数的示例代码。

传递给API的每个消息都会使用内容、角色和其他字段中的令牌数量,以及一些用于幕后格式化的额外令牌。这可能会在未来略微改变。
如果对话的令牌太多,无法适应模型的最大限制(例如,gpt-3.5-turbo的令牌超过4096个),则必须缩短、省略或以其他方式缩小文本,以使其适应。请注意,如果从消息输入中删除消息,则模型将失去对它的所有了解。

还要注意,非常长的对话更有可能收到不完整的回复。例如,长度为4090个令牌的gpt-3.5-turbo对话将在仅6个令牌后被截断。


指导聊天模型

从一个版本到另一个版本,指导模型的最佳实践可能会发生变化。以下建议适用于gpt-3.5-turbo-0301,可能不适用于未来的模型。
许多对话以系统消息开始,以温和地指导助手。例如,下面是用于ChatGPT的系统消息之一:

您是由OpenAI训练的大型语言模型ChatGPT。请尽可能简洁地回答。知识截止日期:{knowledge_cutoff} 当前日期:{current_date}
通常情况下,gpt-3.5-turbo-0301不会特别注意系统消息,因此重要的指令通常最好放在用户消息中。

如果模型没有生成您想要的输出,请随时迭代并尝试潜在的改进。您可以尝试以下方法:
使您的指令更明确 指定您想要的答案格式 要求模型在确定答案之前逐步思考或辩论利弊 有关更多提示工程思路,请阅读OpenAI Cookbook指南中有关如何提高可靠性的技术。

除了系统消息外,温度和最大令牌是开发人员可以影响聊天模型输出的许多选项之一。对于温度,较高的值(例如0.8)会使输出更随机,而较低的值(例如0.2)会使其更集中和确定性。在最大令牌的情况下,如果您想将响应限制为特定长度,则可以将最大令牌设置为任意数字。例如,如果将最大令牌值设置为5,则可能会出现问题,因为输出将被截断,结果对于用户来说没有意义。


聊天与完成

由于gpt-3.5-turbo的性能与text-davinci-003相似,但每个令牌的价格仅为后者的10%,因此我们建议在大多数情况下使用gpt-3.5-turbo。
对于许多开发人员来说,过渡就像重新编写和重新测试提示一样简单。
例如,如果您使用以下完成提示将英语翻译为法语:

  1. Translate the following English text to French: “{text}”
复制代码
类似的对话可能如下:
  1. [
  2.   {“role”: “system”, “content”: “You are a helpful assistant that translates English to French.”},
  3.   {“role”: “user”, “content”: ‘Translate the following English text to French: “{text}”’}
  4. ]
复制代码
仅用户信息:
  1. [
  2.   {“role”: “user”, “content”: ‘Translate the following English text to French: “{text}”’}
  3. ]
复制代码




常见问题解答(FAQ)


GPT-3.5-turbo是否支持微调(Fine-tuning)?
不支持。截至2023年3月1日,您只能微调基础的GPT-3模型。有关如何使用微调模型的更多详细信息,请参阅微调指南。

您是否存储传递到API的数据?
截至2023年3月1日,我们会保留您的API数据30天,但不再使用通过API发送的数据来改进我们的模型。请在我们的数据使用政策中了解更多信息。

添加审核层
如果您想向聊天API的输出添加审核层,可以按照我们的审核指南进行操作,以防止显示违反OpenAI使用政策的内容。


最新经典文章,欢迎关注公众号



中文版ChatGPT
https://chat.aboutyun.com/

加微信赠送Chat GPT教程:





获取更多资源:
领取100本书+1T资源
http://www.aboutyun.com/forum.php?mod=viewthread&tid=26480

大数据5个项目视频
http://www.aboutyun.com/forum.php?mod=viewthread&tid=25235

名企资源、名企面试题、最新BAT面试题、专题面试题等资源汇总
https://www.aboutyun.com/forum.php?mod=viewthread&tid=27732

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条