loading...

랭체인(LangChain)의 개념과 이해

이 글은 IDG의 아티클을 전재하여 제공합니다.
[원문보기] : https://www.itworld.co.kr/techlibrary/327277

LLM(Large Language Model, 대규모 언어 모델)은 최신 소프트웨어 스택의 한 요소로 빠르게 부상했습니다. 그러나 오픈AI와 같은 서비스업체가 제공하는 모델 API를 사용하든, 오픈소스 모델을 앱에 포함하든, LLM 기반 애플리케이션을 구축하려면 프롬프트를 보내고 응답을 기다리는 것 이상의 작업이 필요합니다. 매개변수 조정부터 프롬프트 보강, 응답 조정에 이르기까지 개발자가 고려해야 할 요소는 매우 많습니다.

LLM은 상태를 저장하지 않으므로 이전 대화 내용을 기억하지 못합니다. 기록을 유지하고 LLM에 컨텍스트를 제공하는 것은 개발자의 책임입니다. 새로운 대화에서 이전에 사용한 컨텍스트를 다시 가져오기 위해 영구 데이터베이스에 저장해야 할 수도 있습니다. 이렇듯 LLM에 장단기 메모리를 추가하는 것은 개발자의 주요 임무입니다.

또 다른 문제는 LLM에 대한 일률적인 규칙이 없다는 점입니다. 감정 분석, 분류, 질문 답변과 요약 등 서로 다른 시나리오에 특화된 다양한 모델을 사용해야 할 수도 있습니다. 여러 LLM을 처리하는 작업은 복잡하며, 상당한 노력을 필요로 합니다.

LLM을 효과적으로 사용할 수 있는 프롬프트 작성에는 어느 정도 기술이 필요하지만, LLM 사용법은 대체로 간단합니다. 반면 언어 모델을 사용한 프로그래밍은 어려울 수 있습니다. 그럴 때는 랭체인을 사용하면 됩니다.

랭체인(LangChain)은 언어 모델 기반의 애플리케이션을 개발하는 프레임워크입니다. 랭체인을 사용해 챗봇 또는 개인 비서를 만들고, 문서 또는 구조화된 데이터에 대한 Q&A를 요약, 분석, 생성하고, 코드를 쓰거나 이해하고, API와 상호작용하고, 생성형 AI를 활용하는 여러 애플리케이션을 만들 수 있습니다. 현재 랭체인은 파이썬과 타입스크립트/자바스크립트 두 가지 버전이 있습니다.

언어 모델은 랭체인을 통해 데이터 소스와 연결되고 해당 환경과 상호작용합니다. 랭체인의 주요 요소는 모듈식 추상화 및 추상화 구현의 모음으로 구성됩니다. 랭체인 기성형(off-the-shelf) 체인은 특정 상위 수준의 작업을 수행하기 위한 구성 요소(component)의 구조화된 어셈블리입니다. 구성 요소를 사용해 기존 체인을 맞춤설정하고 새 체인을 만들 수 있습니다.

언어 모델에는 LLM과 채팅 모델, 두 종류가 있습니다. LLM은 문자열을 입력으로 받고 문자열을 반환합니다. 채팅 모델은 메시지 목록을 입력으로 받고 채팅 메시지를 반환합니다. 채팅 메시지에는 내용과 역할, 두 가지 구성 요소가 포함됩니다. 역할은 내용의 출처를 사람, AI, 시스템, 함수 호출 또는 일반 입력 등으로 지정합니다.

일반적으로 LLM은 입력에 프롬프트 템플릿을 사용합니다. 프롬프트 템플릿을 사용해 LLM 또는 채팅 모델이 수행할 역할, 예를 들어 “영어를 프랑스어로 번역하는 유용한 비서” 등을 지정할 수 있습니다. 또한 프롬프트 템플릿을 이용하면 번역할 구문 목록과 같은 다양한 내용 인스턴스에 해당 템플릿을 적용할 수 있습니다.

랭체인의 작동 방식

랭체인에는 6개의 모듈이 있습니다.

  • 모델 I/O : 언어 모델과의 인터페이스
  • 데이터 연결 : 애플리케이션별 데이터와의 인터페이스
  • 체인 : 호출 시퀀스 구축
  • 에이전트 : 상위 지시문이 주어지면 체인이 사용할 툴을 선택할 수 있도록 함
  • 메모리 : 체인 실행 간 애플리케이션 상태 유지
  • 콜백 : 체인의 중간 단계를 기록 및 스트리밍


모델 I/O에서 프롬프트를 관리하고 공통 인터페이스를 통해 언어 모델을 호출하고 모델 출력에서 정보를 추출할 수 있습니다.

Model I/O
  • Format x = "foo", y = "bar" "Does {x} like {y}, and why?" "Does foo like bar, + and why?"
  • Predict LLM Chat Model "Foo does..."
  • Parse { "likes": True, "reason": "Because..." }

데이터 연결은 데이터를 로드, 변환, 저장 및 쿼리하기 위한 빌딩 블록을 제공합니다.

Data connection
  • Source
  • Load
  • Transform
  • Embed
  • Store
  • Retrieve

복잡한 애플리케이션은 LLM을 상호, 또는 다른 구성요소와 체인으로 연결해야 합니다. 랭체인은 이렇게 ‘체인으로 연결된’ 애플리케이션을 위한 체인 인터페이스를 제공합니다.

시퀀스를 하드 코딩하는 체인과 달리, 에이전트는 언어 모델을 추론 엔진으로 사용해 어떤 작업을 어느 순서에 따라 수행할지를 결정합니다.

대화형 시스템은 어느 정도 기간의 과거 메시지에 직접 액세스할 수 있어야 합니다. 랭체인에서는 이 기능을 메모리로 합니다.

콜백은 LLM 애플리케이션의 다양한 단계에 연결할 수 있게 해준다. 로깅, 모니터링, 스트리밍 등의 작업에 유용합니다.

랭스미스를 사용한 디버깅

랭스미스(LangSmith)는 프로토타입에서 프로덕션으로 이전하기 위해 랭체인 언어 모델 애플리케이션 및 지능형 에이전트를 추적하고 평가하는 데 유용합니다. 2024년 2월 초 기준 비공개 베타 단계입니다. 랭스미스 안내 자료와 문서는 베타 테스트에 참여하지 않아도 홈페이지(https://python.langchain.com/docs/langsmith/)에서 볼 수 있습니다.

랭체인 사용례 (https://python.langchain.com/docs/use_cases/)
랭체인 사용례를 보면 문서에 대한 Q&A, API와의 통합, SQL, 챗봇, 코드 작성, 추출, 그래프 데이터 분석, 자가 검사, 요약, 태깅 등이 포함돼 있습니다. 일부 사용례에는 많은 예제가 있습니다. 예를 들어, Q&A에는 17개 정도가 있습니다. 웹 스크랩과 같이 예제가 하나인 경우도 있습니다.

랭체인 통합 (https://python.langchain.com/docs/integrations/platforms/)
현재 약 657개의 랭체인 통합(integration)이 있습니다. 문서 로더 163개, 벡터 저장소 65개, 텍스트 임베딩 모델 52개, 챗 모델 29개, LLM 80개, 콜백 27개, 툴 112개, 툴킷 21개, 메시지 히스토리 17개입니다. 통합은 공급업체별 그룹으로도 제공됩니다. 랭체인은 기본적으로 이런 모든 통합 기능을 위한 중립적 허브 역할을 합니다.

랭체인식 언어 (https://blog.langchain.dev/langchain-expression-language/)
랭체인식 언어(LangChain Expression Language, LCEL)는 체인을 구성하고 스트리밍, 배치 및 비동기 지원을 기본적으로 제공하는 선언적 방법입니다. LCEL은 랭체인을 더 쉽게 사용할 수 있게 해줍니다. LCEL은 기본적으로 파이썬 또는 타입스크립트/자바스크립트를 사용한 체인 만들기의 고수준 대안이므로 코드를 사용해 구성할 때 사용하는 모든 기존 랭체인 생성자를 그대로 사용해 체인을 만들 수 있습니다.

IDG logo

▶   해당 콘텐츠는 저작권법에 의하여 보호받는 저작물로 기고자에게 저작권이 있습니다.
▶   해당 콘텐츠는 사전 동의 없이 2차 가공 및 영리적인 이용을 금하고 있습니다.


이 글이 좋으셨다면 구독&좋아요

여러분의 “구독”과 “좋아요”는
저자에게 큰 힘이 됩니다.

subscribe

구독하기

subscribe

Martin Heller
Martin Heller

InfoWorld의 Contributing Editor

공유하기