提示:如果你认为本文对你有帮助,请点一下关注,后面会有更多人工智能方面的文章。

如果有问题可以联系我**:https://gitee.com/xiaoyuren/gpt3


前言

上一篇介绍了chatgpt的 接口和使用方法。其中用到了2个参数 model和messages,实际上官方提供

的参数不止这2个,本文介绍一下其他的参数。


`

一、示例代码

import openai
openai.api_key = 'sk-xxxxxxxxxxx'
messages=[]
messages.append({'role': 'system', 'content': "我希望你扮演一个小说家。您将提出富有创意和引人入胜的故事"})
messages.append({'role': 'user', 'content': "你好"})
messages.append({'role': 'assistant', 'content': "你好,请问我能为你做些什么?"})
messages.append({'role': 'user', 'content': "帮我写一篇关于冒险的小说"})
response = openai.ChatCompletion.create(
    model='gpt-3.5-turbo',
    messages=messages,
    #其他参数
)
ai_response = response.choices[0].message['content']
print(ai_response)

# gpt-4
# gpt-4-0314
# gpt-4-32k
# gpt-4-32k-0314

二、参数说明

  • model

模型ID,值可以是:gpt-4, gpt-4-0314, gpt-4-32k, gpt-4-32k-0314, gpt-3.5-turbo, gpt-3.5-turbo-0301

  • messages

需要提交给chatgpt的内容,聊天的格式,参考上面的代码。messages必须是一个对象数组,其中每个对象都有一个角色(“system”、“user”或“assistant”)和内容(消息的内容)。对话可以很短,也可以很长。一般情况,messages内容先是system消息,然后是交替出现的user和assistant。

类型作用
system设置chatgpt的角色。
user消息是 给chatgpt提交的我们的问题。
assistant消息 是chatgpt给返回的消息。

其中system消息有助于设置助手的行为。通俗点讲就是可以给chatgpt设定一个角色让它取扮演,例如我上面代码是,指定让chatgpt“扮演一个小说家”。这样我们后面的问答都是在这个前提下进行的,就是chatgpt会一直扮演一个小说家和我们对话。system不是必须的,也可以不设置。注意我上面代码使用了4条消息,分别是“system”、“user” 、“assistant”、“user”。其中system是设定的角色,后面的“user” 、“assistant”是历史记录 就是曾经我问过chatgpt的内容和他回答我的内容。最后一个user才是本次我要问他的内容。为什么要这样呢,因为chatgpt官方没有提供给我们数据存储的功能,所以只能我们自己存储数据每次需要把历史记录提交给他,chatgpt才能有上下文的功能。当然这样也会浪费更多的tokens。

  • temperature
类型默认值取值范围是否必填
浮点数10 - 2

控制生成的文本与提示的相似程度。例如,较高的temperature值将使输出更加随机,而较低的值将使输出更加集中和确定。这在目标是生成与给定输入相似但具有一定程度变化或“创造性”的文本的情况下很有用。除了控制生成文本和提示之间的相似度外,temperature还可以用来控制生成文本的连贯性和流畅性。较低的temperature值往往会产生更连贯和流畅的文本,而较高的temperature值可能会产生更多无意义或脱节的文本。这使得temperature成为微调 ChatGPT 输出以满足给定应用程序特定需求的强大参数。在使用API时,建议修改 temperature 或 top_p 参数中的一个,而不是同时修改两个。如果同时修改两个参数,可能会导致生成的文本不可控或不符合预期。因此,为了获得更好的结果,建议仅修改其中一个参数。

  • top_p
类型默认值取值范围是否必填
浮点数10 - 1

通俗的讲,“top p”参数就像一个过滤器,用于控制GPT在尝试预测下一个单词时考虑的不同单词或短语的数量。如果将“top p”值设置为 0.5,语言模型将只考虑接下来可能出现的 50 个最有可能的单词或短语。但如果将“top p”值设置为 0.9,语言模型将考虑 90 个最有可能的单词或短语。因此使用top_p可以控制生成文本的多样性,较小的top_p值会生成更加确定性的文本,而较大的top_p值会生成更加多样化的文本。建议使用top_p和temperature中的其中一个参数来调节生成文本的多样性和可预测性。

  • n
类型默认值取值范围是否必填
整数1大于等于1

当使用API生成聊天文本时,如果将参数n设置为2,则API将为每个输入消息生成两个不同的聊天选项。这两个选项将是模型生成的不同文本序列,用户可以从中选择一个作为聊天的文本。通过生成多个聊天结果,用户可以得到不同的文本输出,并可以根据自己的喜好或应用场景选择其中一个作为最终的聊天文本。

如果有问题可以联系我**:https://gitee.com/xiaoyuren/gpt3

  • stream
类型默认值取值范围是否必填
布尔型falsefalse 或 true

是否开启流式传输(stream),默认不开启,就是提交内容后chatgpt会一次性把结果返回过来。提交后需要等待长。如果设置为true,则会有像官方页面中的打字机效果,逐渐的把内容传输过来。后面会专门讲一下如何使用。下面看一个简单的示例代码。

response = openai.ChatCompletion.create(
    model='gpt-3.5-turbo',
    messages=[
        {'role': 'user', 'content': "What's 1+1? Answer in one word."}
    ],
    temperature=0,
    stream=True  # this time, we set stream=True
)

for chunk in response:
    print(chunk)

返回的内容如下:

{
  "choices": [
    {
      "delta": {
        "role": "assistant"
      },
      "finish_reason": null,
      "index": 0
    }
  ],
  "created": 1677825464,
  "id": "chatcmpl-6ptKyqKOGXZT6iQnqiXAH8adNLUzD",
  "model": "gpt-3.5-turbo-0301",
  "object": "chat.completion.chunk"
}
{
  "choices": [
    {
      "delta": {
        "content": "\n\n"
      },
      "finish_reason": null,
      "index": 0
    }
  ],
  "created": 1677825464,
  "id": "chatcmpl-6ptKyqKOGXZT6iQnqiXAH8adNLUzD",
  "model": "gpt-3.5-turbo-0301",
  "object": "chat.completion.chunk"
}
{
  "choices": [
    {
      "delta": {},
      "finish_reason": "stop",
      "index": 0
    }
  ],
  "created": 1677825464,
  "id": "chatcmpl-6ptKyqKOGXZT6iQnqiXAH8adNLUzD",
  "model": "gpt-3.5-turbo-0301",
  "object": "chat.completion.chunk"
}
  • stop
类型默认值取值范围是否必填
字符串或数组null-

stop是API用于控制自然语言生成终止条件的一种参数。它可以是一个字符串或一个数组,用于指定一个或多个文本序列。当API在生成文本时遇到这些序列时,就会停止继续生成更多的内容。
例如,当stop设置为"thank you"时,API将在生成的文本序列中遇到"thank you"时停止生成更多的标记。如果指定了多个序列,API将在遇到其中任何一个序列时停止生成更多的标记。
需要注意的是,stop参数的取值范围最多可以包含四个序列。如果不需要停止生成的序列,则可以将stop参数设置为null。使用stop参数可以更好地控制生成的文本的长度和内容,使其更符合特定的应用场景需求。

  • max_tokens
类型默认值取值范围是否必填
整数inf(最大值)大于0

用于控制生成文本的最大token数量。生成的文本将在达到设置的数量时停止,这样可以控制生成文本的长度。如果不指定该参数,默认值为inf,表示没有最大标记数量的限制。例如,设置max_tokens为50时,API将在生成的文本中最多包含50个token。

  • presence_penalty
类型默认值取值范围是否必填
整数0-2.0 - 2.0

presence_penalty用于惩罚新生成的token是否出现在已有的文本中,从而影响模型生成的可能性。如果设置了正值,则会增加模型谈论新话题的可能性;如果设置了负值,则会减少模型谈论新话题的可能性。举个例子,如果你希望生成的对话内容更加连贯,可以设置一个较小的presence_penalty,以减少新词的出现概率;如果你希望生成的对话内容更加开放多样,可以设置一个较大的presence_penalty,以增加新词的出现概率。

  • frequency_penalty
类型默认值取值范围是否必填
整数0-2.0 - 2.0

当使用GPT模型生成文本时,有时我们需要控制生成的文本是否重复出现已经在之前生成的文本中出现过的词语。这就需要使用 frequency_penalty 参数。它可以帮助我们降低在生成的文本中出现重复词语的可能性。
具体来说,frequency_penalty 是一个介于 -2.0 到 2.0 之间的数字,其中正值会对新的token进行惩罚,降低模型生成与之前出现的词语相同的概率,负值则会提高其生成概率。
例如,如果我们将 frequency_penalty 设置为1.5,模型将更有可能生成不同于先前生成的文本中的单词。如果我们将其设置为-1.5,模型则会更有可能生成与之前生成的文本中相同的单词。
需要注意的是,frequency_penalty 和 presence_penalty 的作用类似,但是前者用于控制生成的文本中出现重复词语的可能性,而后者用于控制模型是否继续生成某些主题或话题。

  • logit_bias
类型默认值取值范围是否必填
json 对象null-100 到 100

logit_bias参数是用来调整模型生成特定标记的概率的,以便更好地控制模型的输出。当需要让模型更
倾向于生成特定的标记时,我们可以将该标记的logit_bias值设为正数。相反,如果需要减少模型生成特定标记的概率,可以将该标记的logit_bias值设为负数。如果希望模型完全避免生成某些标记,则可以将其logit_bias值设为非常负的数值(例如-100)。
举个例子,假设我们要让模型在生成文本时更倾向于使用“机器人”这个词汇,我们可以使用logit_bias参数来调整模型生成“机器人”的概率。例如,我们可以将“机器人”这个标记的logit_bias值设为1,这样模型生成“机器人”的概率就会相应地增加。这样就可以让模型更倾向于生成与“机器人”相关的文本,从而更好地控制生成的文本质量。
在实际应用中,logit_bias参数可以用于多种场景,例如:
在生成文本时增加特定关键词的出现概率,以达到更好的文本流畅度和相关性。
降低模型生成某些敏感词汇的概率,以确保生成的文本符合道德标准。
防止模型生成一些无意义的词汇,从而提高文本质量。
需要注意的是,logit_bias参数的具体效果可能会因模型的不同而异,因此需要进行适当的调整和实验。。
以下是一个示例,用于增加"pizza"和"ice cream"在生成的聊天完成中出现的概率

"logit_bias": {
    "3732": 1.0,
    "6528": 0.5
}
  • user
类型默认值取值范围是否必填
字符串nullstring

在 OpenAI API 中它是表示您的终端用户的唯一标识符。如果您使用该参数,OpenAI 可以更好地监控和检测 API 的滥用行为。可以随时查看与您账户相关联的 API 使用数据,包括 API 调用次数、使用量等。这样,当 OpenAI 监测到滥用行为时,可以更轻松地识别哪些用户是问题所在,并采取适当的措施。

总结

这两篇介绍了一下chatgpt的参数以及基本的使用方法,后面会介绍更多的chatgpt在实际中的应用,已经其他一些开源模型的搭建以及微调等

如果有问题可以联系我**:https://gitee.com/xiaoyuren/gpt3

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐