[번역] LangChain.js: Conceptual Guide: Chat model



LangChain.js 의 주요 구성요소 및 개념(concept)들이 LangChain.js conceptual guide 페이지에 나열되어 있습니다. 이 포스트는 LangChain.js 의 concept 중 하나를 번역했습니다.



채팅 모델


개요

대형 언어 모델(LLM)은 텍스트 생성, 번역, 요약, 질문 답변 등 다양한 언어 관련 작업에서 뛰어난 성능을 발휘하는 고급 머신러닝 모델입니다. 특정 작업마다 별도의 조정 없이도 광범위한 시나리오에 적용할 수 있습니다.

현대의 LLM은 일반적으로 메시지 목록을 입력으로 받고 메시지를 출력으로 반환하는 채팅 모델 인터페이스를 통해 접근됩니다.

최신 채팅 모델은 다음과 같은 추가 기능을 제공합니다:

  • 도구 호출(Tool calling): 많은 인기 있는 채팅 모델은 기본 도구 호출 API를 제공합니다. 이 API를 통해 개발자는 AI가 외부 서비스, API, 데이터베이스와 상호작용할 수 있는 풍부한 애플리케이션을 구축할 수 있습니다. 도구 호출은 비정형 데이터에서 구조화된 정보를 추출하거나 다양한 작업을 수행하는 데에도 사용될 수 있습니다.
  • 구조화된 출력(Structured output): 채팅 모델이 지정된 스키마와 일치하는 JSON과 같은 구조화된 형식으로 응답하도록 하는 기술입니다.
  • 멀티모달리티(Multimodality): 텍스트 외에도 이미지, 오디오, 비디오 등의 데이터를 처리할 수 있는 기능입니다.



기능

LangChain은 다양한 제공업체의 채팅 모델과 작업하기 위한 일관된 인터페이스를 제공하며, LLM을 사용하는 애플리케이션의 성능 모니터링, 디버깅, 최적화를 위한 추가 기능을 지원합니다.

  • 다양한 채팅 모델 제공업체 통합 (예: Anthropic, OpenAI, Ollama, Microsoft Azure, Google Vertex, Amazon Bedrock, Hugging Face, Cohere, Groq). 지원되는 모델의 최신 목록은 채팅 모델 통합 문서를 참조하세요.
  • LangChain 메시지 형식 또는 OpenAI 형식 사용 가능
  • 표준 도구 호출 API: 모델에 도구를 바인딩하고, 모델이 요청한 도구 호출에 접근하며, 도구 결과를 모델에 다시 전송하기 위한 표준 인터페이스입니다.
  • withStructuredOutput 메서드를 통한 구조화된 출력 표준 API (구조화된 출력 개념 문서 참조).
  • LangSmith와의 통합을 통해 LLM 기반 프로덕션급 애플리케이션 모니터링 및 디버깅 가능.
  • 표준화된 토큰 사용량, 속도 제한, 캐싱 등 추가 기능.


통합

LangChain은 다양한 제공업체의 모델을 사용할 수 있도록 여러 채팅 모델 통합을 지원합니다. 이 통합은 두 가지 유형으로 구분됩니다:

  • 공식 모델: LangChain 및/또는 모델 제공업체에서 공식 지원하는 모델입니다. 이 모델은 @langchain/<provider> 패키지에서 찾을 수 있습니다.
  • 커뮤니티 모델: 주로 커뮤니티에서 기여하고 지원하는 모델입니다. 이 모델은 @langchain/community 패키지에서 찾을 수 있습니다.

LangChain 채팅 모델은 클래스 이름에 “Chat” 접두사를 붙이는 규칙을 따릅니다 (예: ChatOllamaChatAnthropicChatOpenAI 등). 지원되는 모델 목록은 채팅 모델 통합 문서를 참조하세요.

참고
이름에 “Chat” 접두사가 없거나 “LLM” 접미사가 있는 모델은 일반적으로 채팅 모델 인터페이스를 따르지 않으며 문자열을 입력으로 받고 문자열을 출력으로 반환하는 구형 모델을 의미합니다.


인터페이스

LangChain 채팅 모델은 BaseChatModel 인터페이스를 구현합니다. BaseChatModel은 Runnable 인터페이스도 구현하므로 채팅 모델은 표준 스트리밍 인터페이스와 최적화된 배치 처리 등을 지원합니다. 자세한 내용은 Runnable 인터페이스 문서를 참조하세요.

채팅 모델의 주요 메서드는 메시지를 입력으로 받고 메시지를 출력으로 반환합니다. 채팅 모델은 출력의 임의성 조절(temperature), 응답의 최대 토큰 수(maxTokens), 응답 대기 최대 시간(timeout) 등 모델의 동작을 구성하는 표준 매개변수를 제공합니다. 자세한 내용은 표준 매개변수 섹션을 참조하세요.

참고
문서에서는 “LLM”과 “채팅 모델”을 혼용하여 사용할 수 있습니다. 대부분의 현대 LLM이 채팅 모델 인터페이스를 통해 제공되기 때문입니다.
그러나 LangChain은 채팅 모델 인터페이스 대신 문자열을 입력/출력으로 사용하는 구형 LLM 구현체도 포함하고 있습니다. 이러한 모델은 일반적으로 “Chat” 접두사 없이 이름이 지정되며 (예: OllamaAnthropicOpenAI), BaseLLM 인터페이스를 구현합니다. 일반적으로 사용자는 이러한 모델을 사용하지 않는 것이 좋습니다.


주요 메서드

채팅 모델의 주요 메서드는 다음과 같습니다:

  • invoke: 채팅 모델과 상호작용하는 주요 메서드. 메시지 목록을 입력으로 받고 메시지 목록을 출력으로 반환합니다.
  • stream: 채팅 모델의 출력을 실시간으로 스트리밍하는 메서드.
  • batch: 여러 요청을 일괄 처리하여 효율적으로 실행하는 메서드.
  • bindTools: 모델 실행 컨텍스트에서 사용할 도구를 바인딩하는 메서드.
  • withStructuredOutput: 구조화된 출력을 기본적으로 지원하는 모델을 위한 invoke 메서드의 래퍼.

기타 주요 메서드는 BaseChatModel API 참조에서 확인할 수 있습니다.


입력 및 출력

현대 LLM은 일반적으로 메시지를 입력으로 받고 메시지를 출력으로 반환하는 채팅 모델 인터페이스를 통해 접근됩니다. 메시지는 일반적으로 역할(예: “system”, “human”, “assistant”)과 텍스트 또는 멀티모달 데이터(예: 이미지, 오디오, 비디오)를 포함하는 하나 이상의 콘텐츠 블록과 연결됩니다.

LangChain은 채팅 모델과 상호작용하기 위해 두 가지 메시지 형식을 지원합니다:

  1. LangChain 메시지 형식: 기본적으로 사용되며 LangChain 내부에서 사용되는 형식입니다.
  2. OpenAI 메시지 형식: OpenAI의 메시지 형식입니다.


표준 매개변수

많은 채팅 모델에서 표준화된 매개변수를 사용하여 모델을 구성할 수 있습니다:

매개변수설명
model사용할 특정 AI 모델의 이름 또는 식별자 (예: “gpt-3.5-turbo”, “gpt-4”).
temperature모델 출력의 임의성을 제어. 높은 값(예: 1.0)은 창의적인 응답을, 낮은 값(예: 0.1)은 결정적이고 집중된 응답을 생성.
timeout모델 응답을 기다릴 최대 시간(초). 요청이 무기한 지연되는 것을 방지.
maxTokens응답의 총 토큰 수(단어 및 구두점)를 제한. 출력 길이를 제어.
stop모델이 토큰 생성을 중지해야 하는 시퀀스를 지정. 예: 특정 문자열로 응답 종료 신호.
maxRetries네트워크 타임아웃 또는 속도 제한 등 문제로 요청이 실패할 경우 재시도 최대 횟수.
apiKey모델 제공업체와의 인증에 필요한 API 키. 일반적으로 모델 접근 권한을 얻을 때 발급.
baseUrl요청을 전송할 API 엔드포인트의 URL. 모델 제공업체가 제공.

중요 사항:

  • 표준 매개변수는 해당 기능을 제공하는 모델에만 적용됩니다. 예를 들어, 일부 제공업체는 최대 출력 토큰 수를 구성할 수 없으므로 maxTokens를 지원하지 않을 수 있습니다.
  • 표준 매개변수는 현재 자체 통합 패키지(예: @langchain/openai@langchain/anthropic)가 있는 통합에만 적용되며, @langchain/community의 모델에는 적용되지 않습니다.

특정 채팅 모델이 지원하는 모든 매개변수를 확인하려면 해당 모델의 API 참조 문서를 참조하세요.


도구 호출

채팅 모델은 데이터베이스에서 데이터를 가져오거나 API 요청을 실행하는 등의 작업을 수행하기 위해 도구를 호출할 수 있습니다. 자세한 내용은 도구 호출 가이드를 참조하세요.


구조화된 출력

채팅 모델은 특정 형식(예: JSON 또는 특정 스키마)으로 응답하도록 요청받을 수 있습니다. 이 기능은 정보 추출 작업에 매우 유용합니다. 자세한 내용은 구조화된 출력 가이드를 참조하세요.


멀티모달리티

대형 언어 모델(LLM)은 텍스트 외에도 이미지, 오디오, 비디오 등의 데이터를 처리할 수 있습니다. 이를 멀티모달리티라고 합니다.

현재 일부 LLM만 멀티모달 입력을 지원하며, 출력을 멀티모달로 지원하는 모델은 거의 없습니다. 자세한 내용은 특정 모델 문서를 참조하세요.


컨텍스트 창

채팅 모델의 컨텍스트 창(Context Window)은 모델이 한 번에 처리할 수 있는 입력 시퀀스의 최대 크기를 의미합니다. 현대 LLM의 컨텍스트 창은 매우 크지만, 여전히 개발자가 주의해야 하는 제한 사항입니다.

입력이 컨텍스트 창을 초과하면 모델이 전체 입력을 처리하지 못하고 오류를 발생시킬 수 있습니다. 대화형 애플리케이션에서는 컨텍스트 창이 모델이 대화 중 “기억”할 수 있는 정보의 양을 결정하므로 특히 중요합니다. 개발자는 종종 컨텍스트 창 내에서 입력을 관리해야 합니다. 대화 메모리 관리에 대한 자세한 내용은 메모리 문서를 참조하세요.

입력 크기는 모델이 처리하는 단위인 **토큰(Token)**으로 측정됩니다.


고급 주제

캐싱(Caching)
채팅 모델 API는 느릴 수 있으므로 이전 대화 결과를 캐싱하는 것이 자연스러운 질문입니다. 이론적으로 캐싱은 모델 제공업체에 대한 요청 수를 줄여 성능을 향상시킬 수 있습니다. 그러나 실제로 채팅 모델 응답을 캐싱하는 것은 복잡한 문제이며 신중하게 접근해야 합니다.

정확한 입력에 의존하는 캐싱의 경우 대화의 첫 번째 또는 두 번째 상호작용 이후 캐시 적중이 어려울 수 있습니다. 예를 들어, 정확히 동일한 메시지로 시작하는 여러 대화의 가능성은 얼마나 될까요? 정확히 동일한 세 개의 메시지는 어떨까요?

대안으로 **의미적 캐싱(Semantic Caching)**을 사용할 수 있습니다. 이는 정확한 입력 대신 입력의 의미를 기반으로 응답을 캐싱하는 방식입니다. 이는 일부 상황에서는 효과적일 수 있지만 항상 그렇지는 않습니다.

의미적 캐싱은 애플리케이션의 주요 경로에 다른 모델(예: 임베딩 모델)에 대한 의존성을 추가하며, 입력의 의미를 정확하게 포착한다는 보장이 없습니다.

그러나 자주 묻는 질문에 답변하는 채팅 모델을 사용하는 경우와 같이 캐싱이 유용한 상황이 있을 수 있습니다. 이 경우 응답을 캐싱하면 모델 제공업체의 부하를 줄이고 응답 시간을 개선할 수 있습니다.

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

This site uses Akismet to reduce spam. Learn how your comment data is processed.