【大模型应用开发极简入门】使用GPT-4和ChatGPT的编程起点:ChatCompletion详解

本文讨论如何使用GPT-4和ChatGPT背后的模型,以及OpenAI Python库。

目前,GPT-3.5 Turbo是最便宜且功能最多的模型。因此,它也是大多数用例的最佳选择。

一. 多轮对话


import openai
# 对GPT-3.5 Turbo来说,端点是ChatCompletion
openai.ChatCompletion.create(
    # 对GPT-3.5 Turbo来说,模型是gpt-3.5-turbo
    model="gpt-3.5-turbo",
    # 消息列表形式的对话
    messages=[
        {
    
    "role": "system", "content": "You are a helpful teacher."},
        {
    
    
            "role": "user",
            "content": "Are there other measures than time \
            complexity for an algorithm?",
        },
        {
    
    
            "role": "assistant",
            "content": "Yes, there are other measures besides time \
            complexity for an algorithm, such as space complexity.",
        },
        {
    
    "role": "user", "content": "What is it?"},
    ],
)


在hello world的例子中,我们使用了最少数量的参数,来用于预测的LLM和输入消息。

现在我们关注,输入消息中的对话格式允许模型进行多轮对话。

请注意,API不会在其上下文中存储先前的消息。问题“What is it?”问的是先前的回答,这只有在模型知道答案的情况下才有意义。每次模拟聊天会话时,都必须发送整段对话。 ing

GPT-3.5 Turbo模型和GPT-4模型针对聊天会话进行了优化,但这并非强制要求。

这两个模型可用于多轮对话和单轮任务。如果你在提示词中请求模型补全文本,那么它们也可以很好地完成传统的文本补全任务。

二. 使用起点: ChatCompletion

GPT-4和ChatGPT都使用起点是:openai.ChatCompletion
开发人员可以通过更改模型ID来在GPT-3.5Turbo和GPT-4之间切换,而无须修改其他代码。

三. 调用模型:create方法

ChatCompletion的create方法让用户能够调用OpenAI的模型。

当然,还有其他方法可用,但它们对与模型的交互没有帮助。你可以在OpenAI Python库的GitHub代码仓库中查看代码。

1. 主要的输入参数:model、message

ChatCompletion端点及其create方法有多个输入参数,但只有两个是必需的,如下表

参数名 类型 描述
model string 可以使用openai.Model.list()列出目前可以用模型
message list 表示对话的消息对象数组。消息对象有两个属性:role(user、system、assistant)和content(包含对话消息的字符串)
  • 对话以可选的system content开始,然后是交替出现的user content和assistant content。
  • system content帮助设置assistant的行为。(prompt?)
  • user content相当于是用户在ChatGPT网页界面中键入的问题或句子。它既可以由应用程序的用户生成,也可以作为指令设置。
  • assistant content有两个作用:要么存储先前的回复以继续对话,要么设置为指令,以提供所需行为的示例。由于模型没有任何关于历史请求的“记忆”,因此存储先前的消息对于给出对话上下文和提供所有相关信息是必要的。

2. 对话长度和token数量管理

如前所述,对话的总长度与token的总数相关。这将影响以下方面。

  • 成本定价基于标记计算。
  • 时间
  • 标记越多,响应所需的时间就越长——最长可能需要几分钟。
  • 模型是否工作

管理token数量

  • 标记总数必须小于模型的上限。
  • 所以我们需要控制对话的长度。你可以通过管理消息的长度(prompt去引导)来控制输入标记的数量,并通过max_tokens参数来控制输出标记的数量。
  • OpenAI提供了一个名为tiktoken的库,让开发人员能够计算文本字符串中的标记数。我们强烈建议在调用端点之前使用此库来估算成本。

3. 可选参数

OpenAI提供了其他几个选项来微调用户与库的交互方式。如下几个常见参数

参数名 类型 描述
functions list 由可用函数组成的数组
function_call string/object 控制模型的响应方式
- none:模型必须以标准方式响应用户
- {“name”:“my_function”}表示模型必须给出使用指定函数的回答
- auto:表示模型可以在以标准方式响应用户和functions数据定义的函数之间进行选择
temperature 数值(默认为1;可接受介于0和2之间的值) - 0:表示对于给定的输入,对模型的调用很可能返回相同的结果,尽管响应结果会高度一致,但OpenAI不做保证。
- 温度越高,结果的随机性就越强,LLM通过预测一系列token来生成回答。根据输入上下文,LLM为每个潜在的标记分配概率。
- 当温度=0时,LLM将始终选择概率最高的标记,较高的温度可以产生更多样化,更具有创造性的输出
n int(默认1) 参数可以为给定消息生成多个回答。不过当温度=0时,虽然可以得到多个回答,但都相同或非常相似。
stream Boolean(默认false) 回答以流的形式呈现。当回答内容较长时,可以提供更好的用户体验。
max_tokens int - 参数指定在聊天中生成的最大标记数。虽然为可选值,强烈建议设置为合适的值,以控制成本,但是当设置的过大时,那么可能会被OpenAI忽略。
- 输入和生成的标记总数不能超过模型的上限。

四. ChatCompletion端点的输出格式

你已经知道如何使用基于聊天模式的模型,让我们看看如何使用模型给出的结果。

以下是Hello World示例程序的完整响应:

{
    
    
    "choices": [
        {
    
    
            "finish_reason": "stop",
            "index": 0,
            "message": {
    
    
                "content": "Hello there! How may I assist you today?",
                "role": "assistant",
            },
        }
    ],
    "created": 1681134595,
    "id": "chatcmpl-73mC3tbOlMNHGci3gyy9nAxIP2vsU",
    "model": "gpt-3.5-turbo",
    "object": "chat.completion",
    "usage": {
    
    "completion_tokens": 10, "prompt_tokens": 11,
        "total_tokens": 21},
}

现在说明下各字段的含义

字段名称 类型 描述
choices 对象数组 包含模型实际响应的数组,默认情况如下,该数组只有一个元素,可以通过入参n进行修改。该元素包含以下内容:
1. finish_reson:回答结束的原因。在hello world的事例中,finish_reason是stop,也就是我们从模型中得到到完整的响应。如果在输出过程中出现错误,那么将体现在该字段中;
2. index:从choices中选择对象的索引
3. message:包含role、content或function_call,role的值始终是assistant,content包含模型生成的文本。一般这样调用:response[ ‘choices’ ][ 0 ][‘message’][‘content’]。
created timestamp 生成的时间戳
id string OpenAI内部使用的技术标识符
object string 对于GPT-4模型和GPT-3.5模型,为chat.completion
usage string 提供有关在此查询中使用的标记数的信息,从而为你提供费用信息。
- prompt_tokens表示输入中的标记数
- completion_tokens表示输出中的标记数
这里有:total_tokens = prompt_tokens + completion_tokens

猜你喜欢

转载自blog.csdn.net/hiliang521/article/details/139103083