LiteLLM에서 completion 배치 호출하기

LiteLLM에서 completion 배치 호출하기

LLM 애플리케이션을 만들다 보면 '여러 프롬프트를 한 번에 처리하고 싶다'거나 '여러 모델에 같은 질문을 던져 가장 빠른 답을 고르고 싶다'는 고민이 생겨요. LiteLLM의 batch_completion 계열 함수들은 이런 '여러 호출을 묶어서 처리'하는 패턴을 아주 간단하게 만들어 줘요. 언제 어느 함수를 쓰면 되는지, 코드와 함께 살펴볼게요.

출처: 공식문서

여러 completion 호출을 한 모델로 보내기

여러 개의 프롬프트를 하나의 모델로 보내야 할 때는 batch_completion을 써요. 메시지의 리스트를 넘기면, 각 하위 리스트가 각각 litellm.completion()을 통해 처리돼요. 여러 프롬프트를 한 번의 API 호출로 효율적으로 처리할 수 있죠.

import litellm
import os
from litellm import batch_completion

os.environ['ANTHROPIC_API_KEY'] = ""


responses = batch_completion(
    model="claude-sonnet-5",
    messages = [
        [
            {
                "role": "user",
                "content": "good morning? "
            }
        ],
        [
            {
                "role": "user",
                "content": "what's the time? "
            }
        ]
    ]
)

한 completion 호출을 여러 모델로: 가장 빠른 응답 받기

같은 질문을 여러 모델에 병렬로 보내고, 가장 먼저 돌아온 응답 하나만 쓰고 싶을 때가 있어요. 예컨대 지연 시간(latency)이 중요한 실시간 서비스라면, 여러 모델에 동시에 물어보고 제일 빠른 걸 고르는 전략이 유용하죠.

batch_completion_models는 지정한 모델들로 병렬 호출을 만들고, 첫 번째로 오는 응답을 반환하며 나머지 LLM API 호출은 취소해요.

import litellm
import os
from litellm import batch_completion_models

os.environ['ANTHROPIC_API_KEY'] = ""
os.environ['OPENAI_API_KEY'] = ""
os.environ['COHERE_API_KEY'] = ""

response = batch_completion_models(
    models=["gpt-5.6-luna", "claude-sonnet-5", "command-nightly"],
    messages=[{"role": "user", "content": "Hey, how's it going"}]
)
print(result)

출력은 표준 OpenAI 형식으로 반환돼요. 어느 모델이 먼저 응답했는지는 model 필드로 확인할 수 있어요.

{
  "object": "chat.completion",
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": " I'm doing well, thanks for asking! I'm an AI assistant created by Anthropic to be helpful, harmless, and honest.",
        "role": "assistant",
        "logprobs": null
      }
    }
  ],
  "id": "chatcmpl-23273eed-e351-41be-a492-bafcf5cf3274",
  "created": 1695154628.2076092,
  "model": "command-nightly",
  "usage": {
    "prompt_tokens": 6,
    "completion_tokens": 14,
    "total_tokens": 20
  }
}

한 completion 호출을 여러 모델로: 모든 응답 받기

여러 모델의 응답을 전부 원할 때가 있어요. 예컨대 응답을 서로 비교하거나, 여러 모델의 관점을 종합하고 싶다면 batch_completion_models_all_responses를 쓰면 돼요. 지정한 모든 모델에 병렬로 호출을 보내고 응답을 전부 반환해요.

import litellm
import os
from litellm import batch_completion_models_all_responses

os.environ['ANTHROPIC_API_KEY'] = ""
os.environ['OPENAI_API_KEY'] = ""
os.environ['COHERE_API_KEY'] = ""

responses = batch_completion_models_all_responses(
    models=["gpt-5.6-luna", "claude-sonnet-5", "command-nightly"],
    messages=[{"role": "user", "content": "Hey, how's it going"}]
)
print(responses)
[<ModelResponse chat.completion id=chatcmpl-e673ec8e-4e8f-4c9e-bf26-bf9fa7ee52b9 at 0x103a62160> JSON: {
  "object": "chat.completion",
  ...
  "model": "claude-sonnet-5",
  ...
}, <ModelResponse chat.completion id=chatcmpl-ab6c5bd3-b5d9-4711-9697-e28d9fb8a53c ...> JSON: {
  ...
  "model": "command-nightly",
  ...
}, <OpenAIObject chat.completion id=chatcmpl-80szFnKHzCxObW0RqCMw1hWW1Icrq ...> JSON: {
  ...
  "model": "gpt-5.6-luna",
  ...
}]

언제 무엇을 쓸까

  • 같은 모델로 프롬프트 여러 개batch_completion
  • 여러 모델로 같은 질문, 가장 빠른 응답 하나batch_completion_models
  • 여러 모델로 같은 질문, 모든 응답batch_completion_models_all_responses

batch_completion_models 계열은 지연 시간 최적화에, batch_completion은 처리량(throughput)을 올릴 때 어울려요.

더 알아보기

  • LiteLLM Proxy에서 배치 completion을 쓰는 방법은 공식 문서의 user keys 페이지를 참고해요.
  • completion 함수의 입력 파라미터 전반이 궁금하다면 completion 입력 페이지를 함께 봐요.