OpenAI API 详解

OpenAI API 核心参数详解

接口文档:

https://platform.openai.com/docs/api-reference/introduction

  1. max_completion_tokens 最大token数

  • 定义:An upper bound for the number of tokens that can be generated for a completion, including visible output tokens and reasoning tokens.
  • 描述:指令生成的回答中包含的最大token数。例如,如果设置为100,那么模型生成的回答中token数不会超过100个。
  • 适用场景:用来控制生成内容的长度。特别是在需要简短回答或有限字数情况下,这个参数非常实用。
  • 特别提示:在与 ChatGPT 进行对话时,也可以在对话内容中直接指定参数,控制生成的内容。
  • 举例:

picture.image

picture.image

  1. temperature 温度

  • 定义:What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. We generally recommend altering this or top_p but not both.
  • 描述:控制文本生成的随机性。值范围通常在 [0,2] ,默认值=1。该值越大,生成文本越随机,创造性越强;值越小,生成文本越确定,严谨性越强。
  • 适用场景:用来调整模型回答的创造性。高温度适合创造性任务;低温度适合需要确定性高的回答。
  • 举例:

picture.image

  1. n 生成回复数量

  • 定义:How many chat completion choices to generate for each input message. Note that you will be charged based on the number of generated tokens across all of the choices. Keep n as 1 to minimize costs.
  • 描述:模型对每个输入生成的回答数量。设置为n就会生成n个独立的回答。
  • 适用场景:用来生成多个备选回答,并根据自定义的业务规则进行选择。
  1. top_p 核采样率

  • 定义:An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.
  • 描述:控制生成文本时考虑 token 的概率,如设置为 0.1,则生成内容仅包含概率为前 10% 的 token。默认值=1 。
  • 适用场景:控制生成内容的多样性,top_p 越大,生成的内容越随机。
  1. presence_penalty 存在惩罚

  • 定义:Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics.
  • 描述:影响模型生成新主题内容的倾向。值范围通常在 [-2.0, 2.0]。较高的值鼓励模型生成前面未出现过的新内容。默认值= 0 。
  • 适用场景:在多轮聊天对话中,可以用来避免重复内容,增加回复的多样性。
  1. frequency_penalty 频率惩罚

  • 定义:Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim.
  • 描述:影响模型是否重复使用某些词或短语。值范围通常在 [-2.0, 2.0]。较高的值会减少模型重复使用某些词或短语的频率。
  • 适用场景:用来减少重复词语,提高输出的流畅度和多样性。
  1. stream 流式响应

  • 定义:Whether to stream back partial progress. If set, tokens will be sent as data-only server-sent events as they become available, with the stream terminated by a data: [DONE] message.
  • 描述:如果采用流式响应,则服务端会利用 SSE 技术,将生成的内容逐个 token 发送给客户端,而不是一次性全部发送。结尾会以 [DONE] 作为表示。默认值为 false。
  • 示例代码:

import os

import dotenv
from openai import OpenAI

加载环境变量

dotenv.load_dotenv()

创建OpenAI客户端

client = OpenAI(base_url=os.getenv("OPENAI_API_BASE"))

resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "帮我解释一下量子力学"}
],
stream=True, # 采用流式响应
)

逐个token打印流式消息

for chunk in resp:
print(chunk.choices[0].delta.content, flush=True, end="")

print()

总结

  • max_completion_tokens:控制生成内容的长度。

  • temperature:控制生成内容的随机性和创造性。

  • n:生成多个回答供选择。

  • top_p:通过概率控制生成内容的多样性。

  • presence_penalty:鼓励生成新内容,避免重复。

  • frequency_penalty:减少词语重复,提高多样性。

  • stream:是否采用流式响应

理解这些参数可以帮助我们更有效地定制和使用ChatGPT以满足各种需求。

实战中可以多个组合使用,比如

temperature:0.7 至 1,以获得最大的创意和多样性。

frequency_penalty:1 至 2,用于产生各种独特的短语和想法。

max_completion_tokens:根据你所需的故事长度或场景进行设置。

OpenAI 模型定价

模型定价文档:

https://openai.com/api/pricing/

picture.image

Token

  • 定义:在自然语言处理中,token是输入文本被分割成的小单元。一个token可以是一个单词、一个子词,甚至是一个字符。这取决于文本的具体分割方式。
  • 举例:在GPT模型中,"Hello, world!" 可能被分割成几个token,比如 ['Hello', ',', ' world', '!']。

计费方式

  • 计费是按百万个输入token(1M input tokens)来计算的,
  • input 和 output 的 token 独立计费,通常 output 价格是 input 价格的 3~4倍。
  • 这意味着我们调用 API 时,输入的 Prompt 越长、生成的内容越多,费用也会随之增加。

Tokenizer

  • Token 长度计算:

https://platform.openai.com/tokenizer

  • OpenAI 采用 tiktoken 库,来对文本进行编解码,并计算 token 长度。
  • 不同的大模型,使用了不同的编码器,因此针对相同的文本,可能编码成不同的 token 序列。
  • 举例:

picture.image

picture.image

picture.image

应用场景

成本控制

  • 成本优化:如果业务对于成本非常敏感,可以通过优化输入文本的长度和复杂度来控制费用。
  • 批量处理:对于需要处理大量文本的应用,可以进行成本效益分析,确定最佳的使用策略。

商业应用

  • 对话系统:在客户服务、技术支持等应用中,可以根据对话量估算成本。
  • 内容生成:对于需要生成大量内容的应用(如文章写作或编程助手),可以根据每百万个token的费用来预算项目成本。

总结

“US$5.00/1M input tokens”在GPT-4o中表示按百万个输入token来计费,每百万个输入token的计算费用为5美元。这种计费方式让用户能够更透明地了解和管理使用这些高级自然语言处理模型的成本。通过理解token的分割方式和具体的使用范例,用户可以更有效地计划和控制使用成本。GPT-4 可能提供两种不同的定价模式,分别为标准定价和批量API(Batch API)定价。下面我们来详细解释这些定价模式及其区别,以及为什么价格不同。

标准定价 vs 批量定价

标准定价

  • 文档:

https://openai.com/api/pricing/

  • 适用场景:这种定价通常适用于常规使用,比如单次请求或小规模的交互。这适用于大多数开发者和小型应用。

批量定价

  • 文档:

      https://platform.openai.com/docs/guides/batch
    
  • 适用场景:这种较低价格通常适用于大量处理或批量操作场景。大型企业、需要处理大量数据的应用或者需要高频调用的场景更适合这种模式。

为什么价格不一样?

规模效应

  • 批量折扣:批量API定价反映了经济规模效应,即大量使用云计算资源可以分摊固定成本。因此,服务提供商通过较低的批量价格吸引大客户,用户通过批量使用享受折扣。
  • 优化资源利用率:批量请求可以优化资源分配,使提供商能更高效地利用计算资源,从而降低整体成本。

使用模式不同

  • 标准请求:标准定价适用于散布在较长时间内的单次请求或小规模的互动场景,这些场景下的调用可能更分散,资源利用率较低,需要更高的单价以覆盖运营和支持成本。
  • 批量请求:批量API允许在短时间内处理大量请求,提升了资源利用率,同时减少了单次请求的管理和通信开销。这使服务提供商可以通过降低单价来吸引更多批量用户。

选择的考虑因素

调用量

  • 小规模:对于不频繁或小规模调用的开发者,标准定价可能更加适合,因为他们不会达到批量使用的门槛。
  • 大规模:对于频繁调用或大规模数据处理的场景,批量API定价更加经济实惠。

预算与成本控制

  • 成本敏感:如果项目预算紧张,选择批量API可以显著降低成本。
  • 方便性:标准定价可能提供更灵活的调用方式,并且不需要批量请求的规划。

技术实现

  • 批量处理:需要考虑如何将调用合并成批量请求,这可能需要一些额外的开发工作。
  • 实时性:标准定价可能更适合需要实时响应的应用,而批量处理适用于可以延迟处理的任务。

总结

两个不同的定价方案主要区别在于使用模式和规模的不同。标准定价适用于小规模和分散调用;而批量API定价更适合大规模、批量处理的场景。

价格差异反映了规模效应效应和资源利用的优化,当选择哪种定价方式时,需要根据具体的使用场景和需求进行考虑。

0
0
0
0
评论
未登录
暂无评论