OpenAI Completions API

2026-11-09 16:25 更新

gpt-3.5-turbo-instruct、babbage-002及davinci-002已于2026年9月28日停止服务。babbage-002和davinci-002的微调版本已于2026年10月23日停止服务。以下示例仅供了解旧版/v1/completions请求格式;使用当前模型应迁移到Responses API或Chat Completions。

Completions端点于2023年7月完成最后一次更新,接口与较新的Chat Completions不同。其输入不是消息列表,而是称为prompt的自由格式文本字符串。

旧版调用示例:

来源示例 1(javascript):

代码内提示词/文本译释:

  • Write a tagline for an ice cream shop.:为一家冰淇淋店写一句宣传语。

// [中文] 历史Completions示例:向已停止服务的gpt-3.5-turbo-instruct发送prompt;用于说明旧请求结构,不能作为当前可运行模型示例。
const completion = await openai.completions.create({
  model: "gpt-3.5-turbo-instruct",
  prompt: "Write a tagline for an ice cream shop.",
});

来源示例 2(python):

代码内提示词/文本译释:

  • Write a tagline for an ice cream shop.:为一家冰淇淋店写一句宣传语。

## [中文] 历史Completions示例:向已停止服务的gpt-3.5-turbo-instruct发送prompt;用于说明旧请求结构,不能作为当前可运行模型示例。
from openai import OpenAI

client = OpenAI()

response = client.completions.create(
    model="gpt-3.5-turbo-instruct", prompt="Write a tagline for an ice cream shop."
)

来源示例 3(go):

代码内提示词/文本译释:

  • Write a tagline for an ice cream shop.:为一家冰淇淋店写一句宣传语。

// [中文] 历史Completions示例:向已停止服务的gpt-3.5-turbo-instruct发送prompt;用于说明旧请求结构,不能作为当前可运行模型示例。
package main

import (
    "context"
    "fmt"

    "github.com/openai/openai-go/v3"
)

func main() {
    client := openai.NewClient()
    response, err := client.Completions.New(context.Background(), openai.CompletionNewParams{
        Model:  "gpt-3.5-turbo-instruct",
        Prompt: openai.CompletionNewParamsPromptUnion{OfString: openai.String("Write a tagline for an ice cream shop.")},
    })
    if err != nil {
        panic(err)
    }
    fmt.Println(response.Choices[0].Text)
}

来源示例 4(java):

代码内提示词/文本译释:

  • Write a tagline for an ice cream shop.:为一家冰淇淋店写一句宣传语。

// [中文] 历史Completions示例:向已停止服务的gpt-3.5-turbo-instruct发送prompt;用于说明旧请求结构,不能作为当前可运行模型示例。
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.completions.CompletionCreateParams;

var completion =
    client
        .completions()
        .create(
            CompletionCreateParams.builder()
                .model("gpt-3.5-turbo-instruct")
                .prompt("Write a tagline for an ice cream shop.")
                .build());
completion.choices().forEach(choice -> System.out.println(choice.text()));

来源示例 5(ruby):

代码内提示词译释:

  • Write a tagline for a bakery.:为一家烘焙店写一句宣传语。

## [中文] 历史Completions示例:向已停止服务的gpt-3.5-turbo-instruct发送prompt;用于说明旧请求结构,不能作为当前可运行模型示例。
require "openai"

client = OpenAI::Client.new
completion = client.completions.create(model: "gpt-3.5-turbo-instruct", prompt: "Write a tagline for a bakery.", max_tokens: 24)
puts(completion.choices.fetch(0).text)

更多内容见完整API参考。

插入文本

除了作为前缀的常规prompt,Completions还支持提供suffix(后缀)来插入文本。这适用于长文写作、段落衔接、按提纲写作,或引导结尾;也可用于在函数或代码文件中间插入内容。

例如,“今天我决定做一个重大改变。”可以有很多后续写法。如果补充故事结尾“我的新发型获得了很多称赞!”,预期补全方向就更清楚。原文随后另给出以下前后缀示例:

我在波士顿大学读书。取得学位后,我决定作出改变。一个重大改变!

我收拾行李,搬到了美国西海岸。

现在,我对太平洋百看不厌!

提供额外上下文能更好地引导生成,但也使任务约束更强、更有难度。原文给出以下建议:

设置max_tokens > 256。模型更擅长插入较长补全。上限太小,可能尚未连接到后缀就被截断。即便设置较大的上限,也只按实际生成的词元数收费。

优先选择finish_reason == "stop"。模型在自然停止点或用户指定的停止序列处结束时,将原因设为stop。这通常说明补全与后缀衔接良好,也是质量信号;在n > 1或重采样后挑选结果时尤其有用。

重采样3—5次。补全通常能接上前缀,但困难情形下未必能顺利连接后缀。可以重采样3次或5次,或使用best_of且令k=3,5,选择以stop结束的结果。重采样时通常提高温度以增加多样性。

如果所有结果的finish_reason均为length,很可能是max_tokens太小,模型尚未自然连接前后缀就耗尽预算;应先增大上限,再重采样。

提供更多线索。可以给出几个模式示例,帮助模型找到自然停止位置:

如何制作美味热巧克力:

1. 烧开水。
2. 把热巧克力放进杯子。
3. 往杯子加入开水。
4. 享用热巧克力。

  1. 狗是忠诚的动物。
    2. 狮子是凶猛的动物。
    3. 海豚是活泼好动的动物。
    4. 马是雄壮的动物。

Completions响应格式

响应示例:

来源示例 6():

中文译释:这是旧Completions响应JSON,choices[0].text为生成文本,finish_reason为length表示因长度限制结束;生成文案意为“在我们的奶油冰淇淋小屋,尽情释放你对甜食的渴望”。

{
  "choices": [
    {
      "finish_reason": "length",
      "index": 0,
      "logprobs": null,
      "text": "\n\n\"Let Your Sweet Tooth Run Wild at Our Creamy Ice Cream Shack"
    }
  ],
  "created": 1683130927,
  "id": "cmpl-7C9Wxi9Du4j1lQjdjhxBlO22M61LD",
  "model": "gpt-3.5-turbo-instruct",
  "object": "text_completion",
  "usage": {
    "completion_tokens": 16,
    "prompt_tokens": 10,
    "total_tokens": 26
  }
}

Python中可用response['choices'][0]['text']提取输出。

响应格式与Chat Completions的格式相近。

插入文本

除了作为前缀的常规prompt,Completions还支持提供suffix(后缀)来插入文本。这适用于长文写作、段落衔接、按提纲写作,或引导结尾;也可用于在函数或代码文件中间插入内容。

例如,“今天我决定做一个重大改变。”可以有很多后续写法。如果补充故事结尾“我的新发型获得了很多称赞!”,预期补全方向就更清楚。原文随后另给出以下前后缀示例:

我在波士顿大学读书。取得学位后,我决定作出改变。一个重大改变!

我收拾行李,搬到了美国西海岸。

现在,我对太平洋百看不厌!

提供额外上下文能更好地引导生成,但也使任务约束更强、更有难度。原文给出以下建议:

设置max_tokens > 256。模型更擅长插入较长补全。上限太小,可能尚未连接到后缀就被截断。即便设置较大的上限,也只按实际生成的词元数收费。

优先选择finish_reason == "stop"。模型在自然停止点或用户指定的停止序列处结束时,将原因设为stop。这通常说明补全与后缀衔接良好,也是质量信号;在n > 1或重采样后挑选结果时尤其有用。

重采样3—5次。补全通常能接上前缀,但困难情形下未必能顺利连接后缀。可以重采样3次或5次,或使用best_of且令k=3,5,选择以stop结束的结果。重采样时通常提高温度以增加多样性。

如果所有结果的finish_reason均为length,很可能是max_tokens太小,模型尚未自然连接前后缀就耗尽预算;应先增大上限,再重采样。

提供更多线索。可以给出几个模式示例,帮助模型找到自然停止位置:

如何制作美味热巧克力:

1. 烧开水。
2. 把热巧克力放进杯子。
3. 往杯子加入开水。
4. 享用热巧克力。

  1. 狗是忠诚的动物。
    2. 狮子是凶猛的动物。
    3. 海豚是活泼好动的动物。
    4. 马是雄壮的动物。

Chat Completions与Completions比较

通过构建只含单个用户消息的请求,可以使Chat Completions格式接近Completions。例如,以下Completions提示词将英文译成法文:

来源示例 7():

中文译释:提示词完整译文:

将以下英文文本翻译成法文:“{text}”

{text}为待替换文本占位符。

Translate the following English text to French: "{text}"

等价的聊天提示词如下:

来源示例 8():

中文译释:这是单个user消息的结构示意,content意为“将以下英文文本翻译成法文:{text}”。原文混用单双引号,并非严格JSON;不将其当成JSON解析通过。

[{"role": "user", "content": 'Translate the following English text to French: "{text}"'}]

同理,按照相应方式组织输入,也能用旧Completions模拟用户与助手对话。

两个API的区别还在于各自可用的底层模型。Chat Completions支持gpt-6-astra等当前GPT模型,以及成本较低的gpt-5.6-terra等选项。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号