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. 핫초코를 즐긴다
- 개는 충성스러운 동물이다.
- 사자는 사나운 동물이다.
- 돌고래는 장난기 많은 동물이다.
- 말은 위엄 있는 동물이다.
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)
- API 레퍼런스에서 Completions 엔드포인트의 전체 필드를 확인하세요.
- suffix 매개변수에 대해 자세히 알아보세요.