0°

使用 Python 调教 OpenAI ,让 AI 回答的更完美

  在这个快速发展的数字时代,AI 人工智慧已经渐渐成为我们日常生活的一部分。而 OpenAI,作为 AI 研究的机构之一,提供了强大的工具和 LLM 模型,如 GPT-3.5、GPT-4,来帮助我们更好地理解和使用 AI。

  在本文中,将以简单明了的方式来说明如何控制 OpenAI 模型的一些关键设定。从生成多样回复的 n 参数,到控制回答长度的 max_tokens ,再到建立词汇黑名单的 stop 参数,以及最后的 temperature 参数,这些都是让 AI 生成的内容更加贴合我们需求的实用工具。让我们一起探索这个令人兴奋的 AI 世界。

  如何用 OpenAI 获得多个答案?

  使用参数 n 可选择多个答案。

  当我们使用 ChatGPT 时,通常我们会得到一个答案。但如果你对这个答案不太满意怎么办?有时候,我们希望能看到不同的答案,从中选择一个最适合的。这时候你需要在答案的下方按下「重新生成」按钮,让 ChatGPT 重新生成一组新的回答。

  ChatGPT 的状况

  好消息是在 OpenAI,我们可以让它一次给我们好几个答案作为选择。这就是 n 这个参数的作用。通过设置 n 参数,我们可以告诉 OpenAI 一次生成多少个答案。比如说,设置 n = 3 就会一次得到三个不同的答案。

  但要注意,这些答案都是针对同一个问题,回答的不同回答,而不是一来一回的连续对话。

  如何做?

  假设你使用 Python 语言来跟 OpenAI 沟通,可以这样写:

  openai<=1.0.0 时

  reply = openai.ChatCompletion.create(

  model= “gpt-3.5-turbo”,

  messages = [{“role”: “user”, “content”: “今天是个晴朗的天气吧”}],

  n = 2

  )

  print(reply)

  for choice in reply[“choices”]:

  print(choice[“index”], choice[“messages”][“content”])

  openai>=1.0.0 时

  reply = client.chat.completions.create(

  model=”gpt-3.5-turbo”,

  messages=[{“role”: “user”, “content”: “今天是个晴朗的天气吧”}],

  n=2

  )

  pprint(reply)

  for choice in reply.choices:

  print(choice.index, choice.message.content)

  这段程序会让 OpenAI 给我们两个不同的回答。我们透过一个 for loop 回圈把这些回答一个一个显示出来。每个回答都有一个编号,从 0 开始。

  这样你就可以看到两个不同的答案了。不过,这里必需要记得的一点是,当我们要求更多的答案时,使用的 token 数量也会增加。token 是 OpenAI 计算使用量的单位,所以多个答案意味着可能需要付出更多费用。

  如何设定 OpenAI 回答的长度限制?

  使用 max_tokens 参数,控制回复内容长度

  回答的答案越长,所用到的 token 数越多,连带的费用也会越高。因此,有时候我们在使用 OpenAI 时不希望模型给我们太长的回答,以便于节省成本。这时,我们可以使用一个叫做 max_tokens 的设定来限制回复的长度,控制 token 的使用数量。以下用两个例子说明:

  举例 1

  比如说,我们只想要一个很短的回答,可以这样设定:

  openai<=1.0.0 时

  reply = openai.ChatCompletion.create(

  model= “gpt-3.5-turbo”,

  messages = [{“role”: “user”, “content”: “冬天为何会下雪?”}],

  max_tokens = 10

  )

  print(reply[“choices”][0][“message”][“content”])

  print(reply[“choices”][0][“finish_reason”])

  print(reply[“usage”][“completion_tokens”])

  openai>=1.0.0 时

  reply = client.chat.completions.create(

  model = “gpt-3.5-turbo”,

  messages = [

  {“role”:”user”, “content”: “冬天为何会下雪?”}

  ],

  max_tokens = 10

  )

  print(reply.choices[0].message.content)

  print(reply.choices[0].finish_reason)

  print(reply.usage.completion_tokens)

  这样设定后,OpenAI 只会回答一个很短的句子,大概 10 个词(tokens)左右。显然,这个回答不可能完整,因为 max_tokens 限制了它的长度。我们可以看到 finish_reason 的结果为 length,就可以得知,这次的回答是因为长度受到限制而停止,回答并不完整。

  举例 2

  还有,我们必须注意不要设定一个太大的 max_tokens 值。例如,gpt-3.5-turbo 模型最多能处理 4097 个 token 。如果设定的 max_tokens 太大,超过这个范围,API 就会出现错误,因为它超出了模型的处理能力。

  openai<=1.0.0 时

  reply = openai.ChatCompletion.create(

  model= “gpt-3.5-turbo”,

  messages = [{“role”: “user”, “content”: “冬天为何会下雪?”}],

  max_tokens = 4090

  )

  print(reply[“choices”][0][“message”][“content”])

  print(reply[“choices”][0][“finish_reason”])

  print(reply[“usage”][“completion_tokens”])

  openai>=1.0.0 时

  reply = client.chat.completions.create(

  model = “gpt-3.5-turbo”,

  messages = [

  {“role”:”user”, “content”: “冬天为何会下雪?”}

  ],

  max_tokens = 4090

  )

  print(reply.choices[0].message.content)

  print(reply.choices[0].finish_reason)

  print(reply.usage.completion_tokens)

  执行这个例子,会产生如下的结果。告诉我们这个模型最多只能处理 4097 个 token ,但是我们却设定了超过这个限制的 token 数( This model’s maximum context length is 4097 tokens. However, you requested 4110 tokens (20 in the messages, 4090 in the completion)

  总体来说, max_tokens 是一个很有用的设定,可以帮我们控制回答的长度,进而控制用量与成本。反之,由于它的默认值为无限大,若没有特别设定 max_tokens 的话,就没有任何限制。因此要记得,设定得太高或太低都可能会影响回答的质量。

  如何设定 OpenAI 模型回答的禁用语?

  stop 参数,可建立词汇黑名单

  当我们使用 OpenAI 的时候,可能会担心它的回答中出现一些我们不想要的词汇。那么,我们怎么才能避免这种情况呢?这时候,OpenAI 提供我们一个叫做 stop 的参数来设定黑名单。

  stop 参数可以让我们指定一些不想让 AI 使用的词汇。默认情况下,这个 list 列表是空的,这也就意味着没有任何词汇被禁止。

  我们最多可以在这个列表中设定四个词汇。一旦 AI 在回答中遇到这些词汇时,就会立刻停止回答,并返回目前的结果。以下举例说明:

  举例

  假如我们不希望回答中出现「好」这个字词,我们可以透过下面方式设定:

  openai<=1.0.0 时

  reply = openai.ChatCompletion.create(

  model= “gpt-3.5-turbo”,

  messages = [{“role”: “user”, “content”: “我很好,您好吗?”}],

  stop = [“好”]

  )

  print(reply[“choices”][0][“message”][“content”])

  print(reply[“choices”][0][“finish_reason”])

  openai>=1.0.0 时

  reply = client.chat.completions.create(

  model=”gpt-3.5-turbo”,

  messages=[{“role”: “user”, “content”: “我很好,您好吗?”}],

  stop=[‘好’]

  )

  print(reply.choices[0].message.content)

  print(reply.choices[0].finish_reason)

  我们将 stop 参数设定为「好」( stop = [“好”] )。这样一来,如果 AI 的回答中包含了「好」这个字词,它就会立即停止回答。这个功能对于控制 AI 回答的内容非常有用,可以确保不会出现不适当或不想看到的词汇。

0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论