비용이나 지연 시간(Latency)을 망가뜨리지 않고 제품에 LLM을 도입하는 방법

AI 데모를 만드는 것은 쉽습니다. API 키를 받고, 프롬프트를 작성한 뒤 팀원들에게 보여주기만 하면 됩니다.

그러고 나서 제품을 출시합니다. 트래픽이 몰려옵니다. 비용은 폭발하고 지연 시간은 급증합니다.

데모에서 실제 제품으로 넘어가려면 비용 및 지연 시간 엔지니어링이 필요합니다. 그 방법을 소개합니다.

출력 제어하기

대부분의 API는 토큰 단위로 과금합니다. 출력 토큰은 입력 토큰보다 비용이 더 많이 듭니다.

사람들은 프롬프트를 다듬는 데 시간을 쓰면서도 모델이 횡설수설하게 내버려 둡니다. 이는 실수입니다.

비용과 시간을 아끼려면 출력을 제한하세요:

  • JSON 형식을 요청하세요.
  • 한 문장으로 요청하세요.
  • max_tokens 제한을 설정하세요.
  • 모델에게 간결하게 답변하도록 지시하세요.

짧은 답변이 더 빠르고 저렴합니다.

불필요한 호출 줄이기

비용을 아끼는 가장 좋은 방법은 모델을 아예 호출하지 않는 것입니다.

  • 캐싱(Caching) 사용: 자주 묻는 질문에 대한 응답을 저장하세요. 질문이 완전히 같지는 않더라도 유사하다면 시맨틱 캐시(semantic cache)가 도움이 될 수 있습니다.
  • 라우팅(Routing) 사용: 단순한 작업에 가장 성능이 좋은 모델을 사용하지 마세요. 분류(classification) 작업에는 작고 저렴한 모델을 사용하세요. 비싼 모델은 복잡한 작업용으로 남겨두세요.

사용자 경험 개선하기

응답에 시간이 걸린다면, 빠르게 느껴지도록 만드세요.

  • 토큰 스트리밍(Stream tokens): 단어가 생성되는 대로 보여주세요. 이는 체감 대기 시간을 줄여줍니다.
  • 진행 상황 표시: 작업이 여러 단계로 나뉘어 있다면 사용자에게 무엇이 일어나고 있는지 알려주세요. 아무 반응 없는 스피너 대신 "문서 검색 중..."과 같은 텍스트를 사용하세요.

"꼬리(tail)" 지연 시간 관리하기

어떤 요청은 항상 느릴 수밖에 없습니다. 그런 요청 때문에 제품이 망가지게 두지 마세요.

  • 타임아웃(Timeout) 설정: 요청이 멈췄을 때 어떻게 할지 결정하세요. 폴백(fallback)을 사용하거나 더 작은 모델을 사용하세요.
  • 재시도(Retry) 사용: 작은 오류에 대해서는 재시도를 추가하되, 횟수를 제한하세요.
  • 서킷 브레이커(Circuit breaker) 사용: 제공업체에 문제가 생기면 긴 대기를 피하기 위해 즉시 요청 전송을 중단하세요.

데이터 추적하기

측정하지 않으면 고칠 수 없습니다. 모든 요청에 대해 다음 세 가지 수치를 기록하세요:

  • 입력 토큰(Input tokens).
  • 출력 토큰(Output tokens).
  • 총 지연 시간(Total latency).

성공적인 사용자 결과당 비용을 확인하세요. 제대로 작동하는 기능이 실패하는 저렴한 기능보다 훨씬 낫습니다.

LLM을 마법처럼 취급하지 마세요. 관리해야 할 느리고 비싼 의존성(dependency)으로 취급하세요.

Source: https://dev.to/muhammadzainnaseer/how-to-put-an-llm-in-your-product-without-wrecking-your-costs-or-your-latency-89a

Optional learning community: https://t.me/GyaanSetuAi