채팅 완성(Chat Completion)

채팅 완성(Chat Completion)

이 문서는 채팅 완성(chat completion) 서비스의 개념과 Semantic Kernel에서 이를 구성하고 사용하는 방법을 설명합니다.

출처: 공식 문서 — Chat Completion

채팅 완성 API는 채팅 기반 대화에서 AI 모델과 상호작용하는 데 쓰입니다. 대화의 채팅 기록(chat history)을 보존하기 위해 설계됐어요. 각 상호작용마다 사용자의 메시지가 모델에 제출되고, 모델은 시스템 프롬프트와 대화 지침(조용히 또는 특정 형식으로)을 따르는 응답을 생성합니다.

Semantic Kernel에선 채팅 완성 서비스가 프롬프트와 채팅 기록을 AI 모델로 전송하고 완성(completion) 응답을 수신합니다.

AI 모델에서 스트리밍 사용

OpenAI, Google, Mistral, Facebook 등이 제공하는 기본 모델은 채팅 기록에서 메시지를 한 번에 모두 생성하지 않아요. 대신 토큰 스트림을 생성합니다. 그런 다음 스트리밍(streaming) 기능으로 이 토큰 스트림을 사용자에게 점진적으로 전달할 수 있어요. 첫 번째 토큰이 생성되는 즉시, 사용자는 단어가 타이핑되는 과정을 실시간으로 볼 수 있습니다. 이렇게 하면 첫 번째 토큰의 도착과 사용자에게 첫 응답이 표시되는 사이의 대기 시간을 크게 줄여줍니다.

채팅 완성을 위한 토큰 예산 관리

대부분의 채팅 완성은 두 개의 사용자 입력(시스템 프롬프트와 사용자 프롬프트)과 하나의 모델 응답으로 구성됩니다. 추가 컨텍스트(주로 RAG(검색 증강 생성)로 검색된 데이터)를 포함하면 토큰 사용량이 빠르게 늘어날 수 있어요. 이는 두 가지 문제를 일으킬 수 있습니다.

  1. 대화가 모델의 컨텍스트 창을 초과할 수 있습니다. 고급 챗봇은 많은 정보를 기억하거나 잊어버리지 않기 위해 컨텍스트 창이 큽니다.
  2. 토큰당 비용을 부과하는 모델에서는 토큰 수가 늘어나는 게 비용 증가로 이어집니다.

토큰 예산을 설정해 총 사용을 제어하고 필요한 만큼만 지불하게 할 수 있습니다. Semantic Kernel은 토큰 예산 관리 표시줄(TokenUsage)을 지원합니다.

추가 리소스 (Additional resources)