Completions API

Completions API

Completions API 엔드포인트는 2023년 7월에 마지막 업데이트를 받았고, 새 Chat Completions 엔드포인트와는 다른 인터페이스를 가지고 있어요. 입력이 메시지 목록이 아니라 prompt라는 자유 형식 텍스트 문자열이에요.

출처: 문서

본문

레거시 Completions API 호출 예시는 다음과 같아요:

const completion = await openai.completions.create({
  model: "gpt-3.5-turbo-instruct",
  prompt: "Write a tagline for an ice cream shop.",
});
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."
)
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)
}
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 레퍼런스 문서를 참고하세요.

Completions 응답 형식 (Completions response format)

Completions API 응답 예시는 다음과 같아요:

{
  "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 API의 응답 형식과 유사해요.

텍스트 삽입하기 (Inserting text)

completions 엔드포인트는 표준 프롬프트(접두사로 처리됨) 외에 suffix를 제공해 텍스트 삽입도 지원해요. 이 필요는 긴 형식의 텍스트를 쓸 때, 문단 사이를 넘어갈 때, 개요를 따를 때, 모델을 결말로 이끌 때 자연스럽게 생겨요. 코드에서도 작동하며 함수나 파일 중간에 삽입하는 데 사용할 수 있어요.

suffix 컨텍스트가 생성 텍스트에 어떻게 영향을 미치는지 설명하기 위해 "오늘 나는 큰 변화를 만들기로 결심했다"는 프롬프트를 생각해 보세요. 문장을 완성하는 방법은 여러 가지로 상상할 수 있어요. 하지만 이제 이야기의 결말인 "새 머리 스타일에 칭찬을 많이 받았다!"를 제공하면 의도한 완성이 분명해져요.

나는 보스턴 대학교에 다녔다. 학위를 받은 뒤 변화를 만들기로 결심했다**. 큰 변화를!**

나는 짐을 싸서 미국 서부 해안으로 이사했다.

이제 태평양을 아무리 봐도 질리지 않는다!

모델에 추가 컨텍스트를 제공하면 훨씬 더 조종할 수 있어요. 하지만 이것은 모델에게 더 제한적이고 어려운 과제예요. 최상의 결과를 얻으려면 다음을 권장해요:

max_tokens > 256을 사용하세요. 모델은 더 긴 completions 삽입에 더 능숙해요. max_tokens가 너무 작으면 모델이 suffix에 연결하기 전에 잘릴 수 있어요. 더 큰 max_tokens를 써도 생성된 토큰 수만 청구된다는 점을 기억하세요.

finish_reason == "stop"을 선호하세요. 모델이 자연스러운 정지 지점이나 사용자가 제공한 정지 시퀀스에 도달하면 finish_reason을 "stop"으로 설정해요. 이것은 모델이 suffix에 잘 연결됐다는 것을 나타내며 completion 품질의 좋은 신호예요. 특히 n > 1이거나 리샘플링(다음 항목 참고)할 때 여러 completions 중에서 고르는 데 특히 관련이 있어요.

3~5회 리샘플링하세요. 거의 모든 completions가 접두사에 연결되지만, 모델은 더 어려운 경우에 suffix를 연결하는 데 어려움을 겪을 수 있어요. 3회 또는 5회 리샘플링하고(또는 best_of에 k=3,5 사용) finish_reason이 "stop"인 샘플을 고르는 것이 그런 경우 효과적인 방법임을 발견했어요. 리샘플링할 때는 다양성을 높이기 위해 일반적으로 더 높은 온도를 원할 거예요.

참고: 반환된 모든 샘플의 finish_reason이 "length"라면 max_tokens가 너무 작아서 모델이 프롬프트와 suffix를 자연스럽게 연결하기 전에 토큰이 소진됐을 가능성이 커요. 리샘플링 전에 max_tokens를 늘리는 것을 고려하세요.

더 많은 단서를 주세요. 어떤 경우에는 모델이 멈추기 좋은 자연스러운 지점을 결정할 수 있도록 따를 수 있는 패턴 예시 몇 개를 주면 생성에 도움이 될 수 있어요.

맛있는 핫초코 만드는 법:

1.** 물을 끓인다** 2. 컵에 핫초코를 넣는다 3. 컵에 끓는 물을 붓는다 4. 핫초코를 즐긴다

  1. 개는 충성스러운 동물이다.
  2. 사자는 사나운 동물이다.
  3. 돌고래는 장난기 많은 동물이다.
  4. 말은 위엄 있는 동물이다.

Chat Completions vs. Completions

단일 사용자 메시지를 사용하는 요청을 구성해 Chat Completions 형식을 completions 형식과 유사하게 만들 수 있어요. 예를 들어 다음 completions 프롬프트로 영어를 프랑스어로 번역할 수 있어요:

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

동등한 채팅 프롬프트는 다음과 같아요:

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

마찬가지로 completions API를 사용해 입력을 그에 맞게 형식화하면 사용자와 어시스턴트 사이의 채팅을 시뮬레이션할 수 있어요.

이 API들의 차이는 각각에서 사용할 수 있는 기본 모델이에요. Chat Completions API는 gpt-6-astra 같은 최신 GPT 모델과 gpt-5.6-terra 같은 저비용 옵션을 지원해요.

더 알아보기 (Learn more)