[LLM] Langchain

JAsmine_log·2024년 6월 10일

Langchain

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

Langchain은 LLM(large langugage model)과 Application의 통합을 간소화 시키는 SDK이다. 어떠한 모델의 API를 사용하든 LLM 기반 애플리케이션을 구축하기 위해서는 복잡한 작업이 필요하다.
이러한 작업에서는 프롬프트에 입력을 넣고 응답을 받기 위해 매개변수 조정, 프롬프트 보강, 응답 조정 등의 요소를 고려해야 한다. 또한, LLM을 상태 저장을 하지 않아 대화 이전의 메시지를 기억하지 않기 때문에 따로 기록해야한다.
개발자는 LLM에 컨텍스트를 제공해야 한다. 이러한 맥락은 다음 새로운 대화에서 컨텍스트를 가져와 다시 사용하도록 저장해야한다. 즉, 메모리를 추가하거나 관리해야 한다.
이 외에도 LLM은 특정한 규칙이 없기때문에 다양한 태스크(tasks)-감정 분석(positive/negative), 분류(classification), 질문 답변(response)과 요약(summary) 등-를 특정 또는 다양한 시나리오에 특화된 모델을 사용해야 할 수 있다. 여러 LLM을 활용하는 것은 시간과 노력에 큰 비용이 든다. 이러한 여러 기능들을 구현하고 사용하는 것을 지원하기 위해 Langchain을 사용한다.

Langchain Architecture & Framework

Architecture

Framework

  • 랭체인 라이브러리(LangChain Libraries):
    python, javascript library 포함, 다양한 컴포넌트의 인터페이스 통합, 체인과 에이전트로 결합(런타임)과 사용 가능

  • 랭체인 템플릿(LangChain Templates):
    다양한 작업을 위한 쉽게 배포할 수 있는 참조 아키텍처 모음, 개발자는 특정 작업에 대해 빠르게 애플리케이션을 구축할 수 있음

  • 랭서브(LangServe):
    랭체인 체인을 REST API로 배포하는 라이브러리, 개발자는 자신의 애플리케이션을 외부 시스템과 쉽게 통합할 수 있음

  • 랭스미스(LangSmith):
    개발자 플랫폼으로, LLM 프레임워크에서 구축된 체인을 디버깅, 테스트, 평가, 모니터링하고 랭체인과 통합을 지원함

Open-source liabraries

  • langchain-core: 기본 추상화 및 langchain 표현 언어

  • langchain-community: Third party 통합

    • Partner packages : 일부 통합은 langchain-core에만 의존하는 자체 경량 패키지로 분할되
    • e.g. langchain-openai, langchain-anthropic, etc.
  • langchain: Chains, agents, and retrieval 전략은 applicaion의 인지 구조(congitive architecture)를 구성

Langchain 구현 방식

Prompt + LLM(기본 LLM 체인)

Langchain의 기보 구성 요소

  • Prompt :
    프롬프트는 사용자나 시스템의 입력으로, 특정 작업을 수행하도록 요청하는 쿼리(query)이다. 이는질문, 명령 등 다양한 형태로 작성하고 원하는 답을 유도하는 중요한 열학을 한다.

  • LLM(large language model):
    대형언어모델이라고 하며, 대량의 텍스트데이터를 사전 학습하고 이후 Prompt의 입력 등을 잘 이해하여 주어진 task에 대한 test, image, video 등을 생성하는 인공지능 모델이다.

    • ChatGPT, Gemini, Claude 등

Process of Langchain

  • 01 Prompt 작성
    사용자의 요구사항이나 특정 작업(task)을 정의하여 Prompt를 작성(생성)한다. Prompt는 work의 목적(goal)과 맥략(context)를 명확히 작성하여, 원하는 응답을 얻고도록 최적화 한다.

  • 02 LLM 처리
    LLM이 prompt(query)를 분석하여 사전에 학습된 지식을 기반으로 적절한 답을 생성한다. 이때, LLM의 내부에서 다양한 언어 패턴과 내외부 지식을 활용한다.

  • 03 응답 리턴(return)
    LLM이 생생헌 응답을 사용자가 이해할 수 있는 형태로 변환하여 반환(return)한다. 이 떄, 사용자는 직접적으로 답변을 받거나, 요약한 다양한 형태로 받아 볼 수 있다.

Multi-Chain(멀티 체인)

어려 개의 체인을 연결하거나 복합적으으로 작용하도록 구성한 것이다. 다양한 task의 여러 체인을 조합하고, 입력 데이터를 다양한 방식으로 처리할 수잇다. 이를 통해서 복잡한 데이터 처리, 의사결정, AI기반 작업을 유용하게 할 수 있다. 결과적으로 원하는 결과를 얻을 수 있다.

  • 체인 연결
    여러개의 체인을 순차적으로 연결하는 형태이다.

chain1 은 한국어를 영어로 번역하는 chain이고,
chain2 는 chain1에서 생성된 응답을 설명해달라는 chain이다.

이렇게 여러개의 chain을 생성하고 서로 연결하여 사용할 수 있다.

prompt1 = ChatPromptTemplate.from_template("translates {korean_word} to English.")
prompt2 = ChatPromptTemplate.from_template(
    "explain {english_word} using oxford dictionary to me in Korean."
)

llm = ChatOpenAI(model="gpt-3.5-turbo-0125")
chain1 = prompt1 | llm | StrOutputParser()
chain1.invoke({"korean_word":"미래"})

chain2 = (
    {"english_word": chain1}
    | prompt2
    | llm
    | StrOutputParser()
)

chain2.invoke({"korean_word":"미래"})

Lanchain 구성

  • 순차적인 체인
  • 대화형 체인
  • 구조화된 출력 체인
  • 문서체인
  • 문서 분할-병합-요약 체인
  • 웹문서 요약 체인
  • 정형데이터 체인

Langchain 모델 유형

LLM

LLM은 Langhain의 기본 모델이다. 표준입출력을 통해서, Prompt를 입력하고 답을 얻는 간단한 형태이다.

from langchain_openai import OpenAI

llm = OpenAI()

llm.invoke("한국의 대표적인 관광지 3군데를 추천해주세요.")
>>
1. 경복궁 (서울) - 대한민국의 대표적인 궁궐로, 조선 왕조의 건립 및 건축 양식을 보여주는 곳입니다. 아름다운 정원과 건물들이 많이 보존되어 있어서 한국의 역사와 문화를 체험할 수 있습니다.

2. 제주도 (제주특별자치도) - 한국에서 가장 인기 있는 관광지로, 아름다운 자연경관과 독특한 문화, 맛집들이 많이 있는 곳입니다. 해변, 산, 화산, 동굴 등 다양한 자연 명소와 함께 제주 특유의 문화인 풍류와 제주 오일장 등을 즐길 수 있습니다.

3. 부산 남포동 (부산) - 부산`

Chat Model

대화형 입력과 출력을 통해서 응답을 얻는 형태이다. 챗봇, 가상 비서, 고객 지원 시스템 등 대화 기반 서비스에 활용할 수 있다.

from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

chat = ChatOpenAI()

chat_prompt = ChatPromptTemplate.from_messages([
    ("system", "이 시스템은 여행 전문가입니다."),
    ("user", "{user_input}"),
])

chain = chat_prompt | chat
chain.invoke({"user_input": "안녕하세요? 한국의 대표적인 관광지 3군데를 추천해주세요."})
AIMessage(content='안녕하세요! 한국의 대표적인 관광지 3군데를 추천해드리겠습니다.\n\n1. 경복궁 (Gyeongbokgung Palace) - 서울의 중심에 위치한 경복궁은 조선 왕조의 궁궐로서 가장 크고 아름다운 궁궁 중 하나입니다. 경복궁에서는 한국 전통 건축물을 감상하고 궁중문화를 체험할 수 있습니다.\n\n2. 부산 해운대해수욕장 (Haeundae Beach) - 부산의 대표적인 해변으로 유명한 해운대해수욕장은 아름다운 모래사장과 시원한 바다를 즐길 수 있는 장소입니다. 해수욕뿐만 아니라 주변의 맛집과 관광명소도 풍부합니다.\n\n3. 경주 (Gyeongju) - 경주는 한국의 역사와 문화가 깃들어 있는 도시로서 세계문화유산에 등재된 고구려 유적지와 신라 왕궁, 불교 사찰 등이 있습니다. 경주는 한국의 역사적인 유산을 체험할 수 있는 멋진 관광지입니다.\n\n이렇게 한국의 대표적인 관광지 3군데를 추천해드렸습니다. 혹시 더 궁금한 사항이 있으시면 언제든지 물어보세요!')

Reference
[1] https://langchain.com
[2] https://www.samsungsds.com/kr/insights/what-is-langchain.html
[3] https://wikidocs.net/231186
[4] https://wikidocs.net/book/14314

profile
Everyday Research & Development

0개의 댓글