archive

LangChain이란?

jylee00 2025. 4. 10. 12:47

이 글은 개인 공부를 위해 작성한 글로 계속 수정이 이뤄질 예정입니다.


<출처> https://python.langchain.com/docs/introduction/

 LangChain 개념부터 활용까지! (ChatGPT 한계 극복)

 

인공지능 기술의 눈부신 발전과 함께, 자연어 처리(NLP) 분야에서 거대 언어 모델(LLM)의 활용이 폭발적으로 증가하고 있습니다. 특히 OpenAI의 ChatGPT는 그 뛰어난 성능으로 많은 주목을 받았지만, 몇 가지 명확한 한계 또한 가지고 있습니다.

이러한 LLM의 잠재력을 극대화하고, 현실 세계의 다양한 문제 해결에 적용할 수 있도록 등장한 강력한 프레임워크가 바로 LangChain입니다! 오늘은 LangChain의 핵심 개념부터 특징, 그리고 ChatGPT의 한계를 어떻게 극복하는지 자세히 알아보겠습니다.

 

 LangChain이란 무엇일까요?

LangChain은 언어 모델로 구동되는 애플리케이션을 개발하기 위한 오픈소스 프레임워크입니다. 마치 레고 블록처럼 다양한 컴포넌트를 조립하여, LLM의 능력을 확장하고 특정 목적에 맞게 커스터마이징할 수 있도록 설계되었습니다.

주요 기능:

  • 데이터 인식 (Data Awareness): LLM을 외부 데이터 소스(문서, 데이터베이스, 웹 등)와 연결하여, 질문에 대한 답변의 정확성을 높이고 최신 정보를 활용할 수 있도록 합니다.
  • 에이전트 기능 (Agent Capabilities): LLM이 단순히 텍스트를 생성하는 것을 넘어, 외부 도구(검색 엔진, 계산기, API 등)를 활용하여 특정 작업을 수행할 수 있도록 합니다.

 

 LangChain의 매력적인 특징 3가지

  1.  추상화 (Abstraction): LangChain은 다양한 LLM(GPT-3.5, LLAMA, PaLM 2 등)과 데이터 형식을 일관된 인터페이스로 추상화합니다. 이를 통해 개발자는 특정 모델이나 데이터 형식에 종속되지 않고, 유연하게 애플리케이션을 구축할 수 있습니다. 마치 여러 종류의 렌즈를 하나의 카메라에 바꿔 끼우듯, 다양한 LLM의 기능을 손쉽게 통합할 수 있습니다.
  2.  표준화 (Standardization): LangChain은 개발 과정을 효율적으로 만들어주는 다양한 표준화된 컴포넌트를 제공합니다.
    • ChatModel: 각기 다른 LLM을 ChatModel이라는 통일된 형식으로 다루어, 모델 간의 전환 및 통합을 용이하게 합니다. 마치 여러 회사의 스마트폰 앱이 안드로이드/iOS라는 표준 플랫폼 위에서 작동하는 것과 유사합니다.
    • Document: 다양한 형태의 원본 데이터(텍스트 파일, PDF, 웹 페이지 등)를 Document라는 표준화된 형태로 표현합니다. Document는 실제 텍스트 내용을 담는 page_content와 데이터의 출처나 생성 시점 등의 부가 정보를 담는 metadata로 구성됩니다. 이는 마치 여러 종류의 문서 포맷을 하나의 통일된 전자 문서 형태로 관리하는 것과 같습니다.
  3.  체이닝 (Chaining): LangChain의 가장 강력한 특징 중 하나는 컴포넌트를 마치 사슬처럼 쉽게 연결하여 복잡한 처리 로직을 구축할 수 있다는 점입니다.
    • 일반적으로 데이터 input이 들어오면, 하나 이상의 컴포넌트를 거쳐 원하는 output을 생성하는 형태로 작동합니다.
    • 여러 개의 컴포넌트를 연쇄적으로 연결하여, 데이터 변환, 정보 검색, LLM 호출 등 다양한 작업을 순차적으로 수행할 수 있습니다. 마치 공장의 조립 라인처럼, 각 컴포넌트가 특정 작업을 수행하고 그 결과를 다음 단계로 전달하는 방식입니다.
    📌Tip:
    • 애플리케이션의 input과 최종 output을 명확히 파악하는 것이 Chain 설계를 위한 첫걸음입니다.
    • 복잡한 Chain은 작은 단위로 나누어 생각하고, 각 컴포넌트의 역할을 명확히 정의하는 것이 중요합니다.
    • LangChain은 다양한 내장 컴포넌트를 제공하지만, 필요한 경우 특정 로직만 부분적으로 활용하여 커스터마이징할 수 있습니다.

 

 ChatGPT의 한계를 넘어, LangChain의 혁신적인 개선 방안

뛰어난 성능에도 불구하고, ChatGPT와 같은 기본적인 LLM은 다음과 같은 몇 가지 중요한 제약을 가지고 있습니다. LangChain은 이러한 한계를 극복하고, LLM의 활용 범위를 획기적으로 넓혀줍니다.

  1. 정보 접근 제한: ChatGPT는 학습 데이터에 포함되지 않은 최신 정보나 특정 내부 데이터에 직접 접근할 수 없습니다.
    • LangChain의 해결책:
      • Vectorstore 기반 정보 탐색: 외부 문서를 벡터 형태로 저장하고, 질문과 관련된 정보를 효율적으로 검색하여 LLM에게 제공합니다. 마치 도서관에서 질문과 관련된 책을 빠르게 찾아주는 사서와 같습니다.
      • Agent 활용: 검색 엔진과 같은 외부 도구를 활용하여 실시간으로 정보를 검색하고, 이를 바탕으로 답변을 생성합니다. 마치 여러 분야의 전문가에게 질문하여 종합적인 답변을 얻는 것과 유사합니다.
  2. 토큰 제한: LLM은 한 번에 처리할 수 있는 텍스트의 양(토큰 수)에 제한이 있습니다. 긴 문서를 처리하거나 많은 정보를 요약해야 할 때 어려움이 발생할 수 있습니다.
    • LangChain의 해결책:
      • TextSplitter 활용: 긴 문서를 의미 단위로 분할하여 LLM이 처리 가능한 크기로 나누어줍니다. 마치 큰 퍼즐을 작은 조각으로 나누어 맞추는 것과 같습니다.
  3. 환각 현상 (Hallucination): LLM은 때때로 사실과 다르거나 맥락에 맞지 않는 텍스트를 생성할 수 있습니다. 특히 정보가 부족하거나 모호한 질문에 대해 이러한 현상이 두드러집니다.
    • LangChain의 해결책:
      • 주어진 문서에 대해서만 답변하도록 Prompt 입력: LLM에게 특정 문서나 정보만을 참고하여 답변하도록 명시적인 지시(Prompt)를 제공하여, 환각 현상을 줄이고 답변의 신뢰성을 높입니다. 마치 참고 자료를 제한하여 시험 문제의 정답률을 높이는 것과 같습니다.

 

 LangChain의 핵심 구조

LangChain 프레임워크는 다양한 기능을 제공하는 모듈들로 구성되어 있습니다. 주요 구조는 다음과 같습니다.

  • LLM (Large Language Model): 초거대 언어 모델 자체를 의미하며, 텍스트 생성, 이해, 추론 등 다양한 자연어 처리 작업을 수행하는 엔진과 같은 핵심 구성 요소입니다. (예시: GPT-3.5, LLAMA, PaLM 2 등)
  • Prompts: LLM에게 어떤 방식으로 응답해야 할지 지시하는 명령문입니다. 효과적인 Prompt 설계는 LLM의 성능을 극대화하는 데 매우 중요합니다. (요소: Prompt Templates, Chat Prompt Template, Example Selectors 등)
  • Index: LLM이 외부 문서나 데이터를 효율적으로 탐색하고 참조할 수 있도록 구조화하는 모듈입니다. (예시: Document Loaders, Vectorstores 등)
  • Memory: LLM과의 대화 이력을 저장하고 관리하여, 이전 대화 내용을 바탕으로 맥락 있는 대화를 이어갈 수 있도록 하는 모듈입니다. 마치 사람의 기억처럼, 이전의 상호작용을 바탕으로 더 자연스러운 대화를 가능하게 합니다.
  • Chain: 하나 이상의 LLM 호출과 다른 유틸리티를 연결하여, 특정 작업을 수행하는 end-to-end 파이프라인을 구축하는 핵심 구성 요소입니다. 마치 여러 기능을 수행하는 자동화된 작업 흐름과 같습니다.
  • Agents: 미리 정의된 Prompt Template으로는 수행하기 어려운 복잡한 작업을 LLM이 스스로 판단하여 수행할 수 있도록 하는 모듈입니다. Agent는 도구를 선택하고 실행하며, 그 결과를 바탕으로 다음 행동을 결정하는 자율적인 개체입니다. 마치 스스로 문제를 해결해 나가는 지능적인 에이전트와 같습니다.

 

 LangChain의 "Runnable" 프로토콜 (동기 vs 비동기)

LangChain의 Runnable 프로토콜은 Chain을 실행하는 방식을 정의합니다. 동기 방식과 비동기 방식을 모두 지원하여, 개발자는 애플리케이션의 요구 사항에 따라 적절한 방식을 선택할 수 있습니다.

  • 동기 (Synchronous): 작업이 순차적으로 실행되며, 이전 작업이 완료될 때까지 다음 작업이 시작되지 않습니다.
    • invoke: 주어진 단일 입력에 대해 Chain을 호출하고, 결과가 반환될 때까지 기다립니다. 마치 전화를 걸어 상대방이 받을 때까지 기다리는 것과 같습니다.
    • batch: 입력 리스트에 대해 Chain을 일괄적으로 호출하고, 모든 입력에 대한 결과가 리스트 형태로 반환될 때까지 기다립니다. 마치 여러 사람에게 동시에 편지를 보내고 모든 답장을 기다리는 것과 같습니다.
    • stream: 입력에 대해 Chain을 호출하고, 결과의 각 조각(토큰)을 순차적으로 스트리밍합니다. 사용자에게 실시간으로 응답 내용을 보여줄 때 유용합니다. 마치 유튜브 영상이 로딩되는 동안 부분적으로 먼저 보여지는 것과 같습니다.
  • 비동기 (Asynchronous): 여러 작업을 동시에 실행할 수 있으며, 특정 작업이 완료될 때까지 기다리지 않고 다른 작업을 계속 수행할 수 있습니다. 이는 I/O 바운드 작업(네트워크 요청, 파일 읽기 등)에서 애플리케이션의 응답성을 향상시키는 데 효과적입니다.
    • ainvoke, abatch, astream: 각각 동기 버전(invoke, batch, stream)에 대한 비동기 실행을 지원합니다. async 및 await 키워드를 사용하여 비동기 코드를 작성합니다. 마치 여러 작업을 동시에 요청해두고, 완료된 작업부터 확인하는 것과 같습니다.

핵심 차이: 동기 방식은 하나의 작업이 끝날 때까지 기다려야 하지만, 비동기 방식은 여러 작업을 동시에 처리하여 전반적인 처리 시간을 단축하고 사용자 경험을 향상시킬 수 있습니다. 비동기 방식은 입력과 출력이 독립적으로 발생할 수 있는 환경에서 더욱 효율적입니다. (더 자세한 내용은 https://dev-coco.tistory.com/46을 참고하세요.)

 

 결론

LangChain은 LLM 기반 애플리케이션 개발의 판도를 바꿀 수 있는 강력한 도구입니다. 추상화, 표준화, 체이닝이라는 핵심 특징을 통해 개발자는 더욱 쉽고 효율적으로 LLM의 잠재력을 현실 세계의 다양한 문제 해결에 적용할 수 있습니다.

 

<출처>

사진 출처 : https://python.langchain.com/docs/introduction/

 

Introduction | 🦜️🔗 LangChain

LangChain is a framework for developing applications powered by large language models (LLMs).

python.langchain.com