LangChain

LangChain

LLM은 상태를 저장하지 않으므로 이전 대화 내용을 기억하지 못합니다새로운 대화에서 이전에 사용한 컨텍스트를 다시 가져오기 위해 영구 데이터베이스에 저장해야 할 수도 있습니다이렇듯 LLM에 장단기 메모리를 추가하는 것은 개발자의 주요 임무입니다LangChain은 대규모 언어 모델(LLM)을 사용하여 애플리케이션을 개발하기 위한 오픈 소스 프레임워크로써, 랭체인을 사용해 챗봇 또는 개인 비서를 만들고문서 또는 구조화된 데이터에 대한 Q&A를 요약분석생성하고코드를 쓰거나 이해하고, API와 상호작용하고생성형 AI를 활용하는 여러 애플리케이션을 만들 수 있습니다현재 랭체인은 파이썬과 타입스크립트/자바스크립트 두 가지 버전이 있습니다. LLM을 효과적으로 사용할 수 있는 프롬프트 작성에는 어느 정도 기술이 필요하지만, LLM 사용법은 대체로 간단합니다반면 언어 모델을 사용한 프로그래밍은 어려울 수 있습니다그럴 때는 랭체인을 사용하면 됩니다.

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

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




LangChain의 주요 특징:

  • 다양한 LLM 지원: 랭체인은 오픈AI, 코히어(Cohere), AI21에서 제공하는 주류 LLM과 허깅페이스(Hugging Face)에서 제공되는 오픈소스 LLM을 지원
  • 구조적 프로그래밍: 여러 LLM을 순서대로 연결하고 상호 작용하도록 설계하여 복잡한 AI 애플리케이션 개발을 용이하게 합니다.
  • 데이터 연결: 외부 데이터 소스(예: 데이터베이스, API)와 LLM을 연결하여 데이터 기반 추론 및 분석을 수행할 수 있도록 합니다.
위의 그림은 랭체인 프레임워크의 핵심을 나타낸다. 스택 상단의 애플리케이션은 파이썬 또는 자바스크립트 SDK를 통해 여러 랭체인 모듈 중 하나와 상호 작용한다. 여러 모듈의 역할을 살펴보면 다음과 같다.

Model I/O
모델 I/O 모듈은 LLM 모델과의 인터페이스. 이는 기본적으로 효과적인 프롬프트를 생성/관리하고, 공통 인터페이스를 통해서 모델 API를 호출하고, 모델 출력에서 정보를 추출한다.. 생성형 AI의 핵심인 프롬프트 엔지니어링이 랭체인에서 잘 처리된다. 이 모듈은 LLM 제공자가 노출하는 인증, API 매개변수, 엔드포인트를 요약한다. 이 모듈은 마지막으로, 모델에서 보낸 응답을 애플리케이션서 사용할 수 있는 원하는 형식으로 해석하는 작업을 돕는다.
https://shorturl.at/QIJvn

Data Connection
Data Connection 모듈은 LLM 애플리케이션의 ETL 파이프라인에 해당한다. 이 모듈은 PDF 또는 엑셀 파일과 같은 외부 문서를 로드하고, 이를 처리하기 위해 일괄적으로 단어 임베딩으로 변환한 다음, 임베딩을 벡터 데이터베이스에 저장하고, 마지막으로 쿼리를 통해 검색하기 위한 빌딩 블록을 제공한다. 앞서 설명한 바와 같이, 이는 랭체인의 가장 중요한 구성 요소이다.
https://shorturl.at/vDp4l

Chains
LLM과 상호 작용하는 것은 유닉스 파이프라인을 사용하는 것과 많은 면에서 유사하다. 한 모듈의 출력이 다른 모듈에 입력으로 전송된다. 개발자는 종종 원하는 결과를 얻을 때까지 LLM을 사용해 응답을 명확하게 하고 요약해야 한다. 

랭체인의 체인은 구성 요소와 LLM을 활용하여 예상되는 응답을 얻는 효율적인 파이프 라인을 구축하도록 설계됐다. 간단한 체인에는 프롬프트와 LLM이 포함될 수 있지만 재귀와 같이 LLM을 여러 번 호출하여 결과를 얻는 등 매우 복잡한 체인을 구축할 수도 있다. 예를 들어, 체인은 문서를 요약한 다음 이에 대한 감정 분석을 수행하는 프롬프트가 포함될 수 있다.

Memory
LLM은 상태 비저장형이지만 정확한 응답을 위해 컨텍스트가 필요하다. 랭체인의 메모리 모듈은 모델에 단기 및 장기 메모리를 쉽게 추가할 수 있도록 도와주며 체인 실행 간 애플리케이션 상태 유지한다. 단기 메모리는 간단한 메커니즘을 통해 대화의 기록을 유지한다. 메시지 기록은 레디스(Redis)와 같은 외부 소스에 저장되어 장기 메모리를 유지할 수 있다.

Callbacks
랭체인은 개발자에게 LLM 애플리케이션의 다양한 단계에 연결할 수 있는 콜백 시스템을 제공한다. 이는 체인의 중간 단계를 기록 및 스트리밍한다. 파이프라인 내에서 특정 상황이 발생할 때 호출되는 사용자 지정 콜백 핸들러를 작성할 수 있게 해준다다. 랭체인의 기본 콜백은 모든 단계의 출력을 콘솔에 간단히 인쇄하는 stdout을 가리킨다.

Agents
LLM은 추론과 행동이 가능한데, 이는 ReAct 프롬프트 기법이라고 불린다. 랭체인의 에이전트는 LLM을 사용하여 프롬프트를 행동 계획으로 추출하는 ReAct 프롬프트 제작을 단순화한다. 
에이전트는 일종의 동적 체인으로 생각할 수 있다. 에이전트의 상위 지시문이 주어지면 체인이 사용할 툴을 선택할 수 있도록 한다. 동작의 순서는 체인(코드)으로 하드 코딩 된다. 언어 모델은 에이전트 내에서 추론 엔진으로 사용되어 어떤 순서로 어떤 동작을 취할지 결정한다. 

원문보기:
https://www.ciokorea.com/column/305341#csidxea547b8e4628bc19b3dff101588141c

  • 1. Schema

      1.1 채팅 메세지 - System : AI에게 해야 할 일을 알려주는 배경 컨텍스트 - Human : 사용자 메세지 - AI : AI가 응답한 내용을 보여주는 상세 메세지

      1.1 문서 텍스트와 메타데이터를 담고있는 객체입니다.

    예제1) PyPDFLoader - PDF to Document

    2. Models

      2.1 언어 모델 (LLMs) 텍스트 문자열을 입력하고, 텍스트 문자열을 출력하는 모델입니다. LangChain 은 LLM 공급자가 아니며, 인터페이스만 제공합니다.
      2.2 채팅 모델 채팅 모델은 언어 모델의 변형으로, 내부적으로는 언어 모델을 사용하지만 노출되는 인터페이스는 다르다

      2.3 텍스트 임베딩 모델 텍스트를 벡터 (텍스트의 의미 를 담고 있는 일련의 숫자) 로 변경합니다. 주로 두 텍스트를 함께 비교할 때 사용

    3. Prompt 모델을 프로그래밍 하는 새로운 방법은 프롬프트를 사용

      3.1 Prompt

      3.2 Prompt Template

      3.3 예제 선택기 (Example Selector)

      3.4 출력 파서 (Output Parser)

    4. Index

      4.1 문서 로더 (Document Loader) CSV, HTML, 메일, Image, PDF, PPT, Site, Youtube 등 다양한 소스에서 Document 를 작성할 수 있는 Loader 가 제공 댓글 가져오기, 사이트 로더,  유튜브 자막 불러오기,

      4.2 텍스트 분할기 (Text Splitters) 책과 같이 문서가 너무 길어서 LLM 에 한번에 입력이 어려운 경우, 문서를 잘게 쪼개야 합니다. 이 경우 텍스트 분할기를 이용 OpenAI의 오픈소스인 tiktoken 을 사용하여 사용된 토큰을 추정한 분할 마크다운 텍스트 분할기

      4.3 백터 스토어 (Vector Stores) 벡터 (Vector)를 저장하는 데이터베이스와 관련된 기능입니다. 벡터 저장소 작업의 핵심 부분은 일반적으로 임베딩을 통해 생성되는 벡터를 만드는 것

      4.4 검색기 (Retrievers) 리트리버 인터페이스는 문서를 쉽게 결합할 수 있는 일반 인터페이스입니다. 현재 ChatGPT Plugin Retriever 와 VectorStore Retriever 가 있습니다.

    5. Memory 기본적으로 체인과 에이전트는 상태를 저장하지 않습니다. 즉, 쿼리가 수행되면 독립적으로 처리합니다. Memory 컴포넌트는 LLM 이 정보를 기억할 수 있도록 지원합니다. 간단하게는 과거 채팅 히스토리를 기억할 수 도 있고, 더 복잡한 정보를 검색 할 수도 있습니다.

      5.1 채팅 메세지 History ChatMessageHisotry 클래스는 Human, AI 메세지를 저장한 다음 모두 가져올 수 있습니다.

    6. Chain

      6.1 간단한 Sequential Chain LLMChain 을 이용하여 LLM 출력을 다른 LMM의 입력으로 사용할 수 있도록 합니다

      6.2 요약 Chain 한번에 처리가 어려운 문서를 나눠서 요약

    7. Agents 사용자 입력에 따라 Agent는 여러 도구 중 호출할 수 있는 경우 도구를 결정할 수 있습니다. Agnet는 LLM 을 사용하여 수행핼 작업과 순서를 결정합니다. 이 과정에서 도구를 사용하여 출력을 관찰하거나 사용자에게 반환할 수 있습니다.

      7.1 Tools 구글 검색, 데이터베이스 조회, Python REPL 등을 이용하여 현재 문자열을 입력받아 결과값을 출력합니다. OpenAI Plugins 과 유사한 영역

LangChain의 활용 사례:

  • 챗봇: 사용자의 의도를 파악하고 자연스러운 대화를 통해 질문에 답변하거나 작업을 수행하는 챗봇 개발
  • 문서 요약 및 분석: 방대한 문서에서 핵심 내용을 추출하고 분석하여 요약
  • 코드 생성 및 분석: 프로그래밍 언어를 이해하고 코드를 생성하거나 분석하여 개발 작업을 지원
  • 창의적인 콘텐츠 제작: 시, 소설, 대본 등 창의적인 텍스트 콘텐츠를 자동으로 생성
  • 데이터 기반 추론 및 예측: 데이터에서 패턴을 파악하고 미래를 예측하여 의사 결정을 지원

LangChain의 장점:

  • LLM 활용 용이성: 복잡한 LLM 기술을 이해하지 않고도 쉽게 활용하여 AI 애플리케이션을 개발할 수 있습니다.
  • 개발 효율성 향상: 모듈 구성, 코드 재사용 등을 통해 개발 시간을 단축하고 생산성을 높일 수 있습니다.
  • 확장성 및 유연성: 다양한 LLM과 데이터 소스를 지원하며, 새로운 기능 추가가 용이하여 변화하는 요구에 맞게 쉽게 확장할 수 있습니다.
구글의 PaLM 2 API와 함께 랭체인을 사용

랭체인 사용례 (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은 기본적으로 파이썬 또는 타입스크립트/자바스크립트를 사용한 체인 만들기의 고수준 대안이므로 코드를 사용해 구성할 때 사용하는 모든 기존 랭체인 생성자를 그대로 사용해 체인을 만들 수 있습니다.

  • 파이썬을 위한 랭체인 설치
    • pip install langchain
    • 모델 공급자, 데이터 저장소 또는 다른 통합을 위한 모듈은 포함되지 않는다
  • pip install langchain[llms]
    • 랭체인 및 일반적인 언어 모델을 설치
  • pip install langchain[all]
    • 랭체인과 모든 통합을 설치
  • 자바스크립트용 랭체인을 설치하려면 npm, Yarn, 또는 pnpm을 사용한다. 예를 들면,
    • npm install -S langchain
    • 자바스크립트용 랭체인은 Node.js, 클라우드플레어 워커(Cloudflare Workers), 버셀(Vercel)/Next.js(브라우저, 서버리스, 엣지 함수), 수파베이스 엣지(Supabase Edge) 함수, 웹 브라우저, 디노(Deno)에서 사용할 수 있다.

ref. 


댓글 쓰기

0 댓글