IT 공부/LangChain

AI의 LangChain 설명

coiljuice 2024. 10. 28. 14:38

LangChain 개요

LangChain은 대규모 언어 모델(LLM)을 기반으로 한 애플리케이션 개발을 위한 오픈 소스 프레임워크입니다. 이 프레임워크는 LLM을 외부 데이터 소스와 연결하고, 환경과 상호작용할 수 있게 하는 두 가지 주요 원칙에 기반하여 설계되었습니다.

  • LangChain은 프롬프트 템플릿, 모델 인터페이스, 출력 파서 등 다양한 모듈을 제공하여 개발 과정을 간소화합니다.
  • 체인(Chain) 개념을 통해 여러 컴포넌트를 연결하여 복잡한 작업 흐름을 구성할 수 있습니다.
  • 메모리 기능을 통해 대화의 맥락을 유지하고, 에이전트 기능으로 더 지능적인 의사 결정이 가능합니다.
  • Python과 JavaScript를 지원하며, 다양한 LLM과 외부 도구를 쉽게 통합할 수 있는 유연성을 제공합니다.

 

LangChain 주요 기능

LangChain은 프롬프트 관리, 체인 구축, 메모리 통합, 인덱스 및 검색, 그리고 에이전트 기능을 제공합니다. 이러한 기능들을 통해 개발자들은 복잡한 작업을 수행하고, 맥락을 유지한 대화를 구현하며, 외부 데이터 소스를 효율적으로 활용할 수 있습니다.

 

  • 유연성과 확장성을 갖춘 LangChain은 다양한 LLM과 도구를 쉽게 통합할 수 있으며, 복잡한 애플리케이션을 모듈화하여 개발할 수 있습니다.
  • 활발한 개발자 커뮤니티의 지원을 받아 지속적인 개선이 이루어지고 있으며, 특히 플랫폼 서비스 분야에서 큰 잠재력을 보이고 있습니다.

 

LangChain 활용 기술

LangChain은 설명 가능한 AI 개발을 위해 다양한 첨단 기술을 활용합니다. ExplanatoryGPT 접근 방식을 통해 질문 생성 및 답변 검색 알고리즘을 결합하여 사용자 중심의 대화형 설명을 생성합니다. 또한, 특정 주제에 대한 전문화된 지식 그래프를 자동으로 생성하여 교육적으로 생산적인 방식의 설명을 제공합니다.

  • Achinstein의 철학적 설명 이론을 통합하여 더 정확하고 사용자 중심적인 설명을 생성합니다.
  • 자연어 처리(NLP) 기술을 활용하여 비정형 데이터에서 의미 있는 통찰력을 추출합니다.
  • 환각 현상과 메모리 부족 문제를 완화하기 위한 기술을 적용하여 더 정확하고 신뢰할 수 있는 설명을 제공합니다.

 

 

LangChain 알고리즘

대규모 언어 모델(LLM)을 기반으로 하는 LangChain은 다양한 알고리즘을 활용하여 강력한 AI 애플리케이션을 구현합니다. 임베딩 기술을 사용하여 텍스트를 벡터 공간으로 변환하고, Google의 Flan T5 모델을 활용한 지식 검색 알고리즘으로 효과적인 정보 추출을 수행합니다.

  • 체인 구성 알고리즘을 통해 복잡한 작업을 모듈화하고 커스터마이즈합니다.
  • 벡터 데이터베이스 알고리즘으로 로컬 데이터와 LLM을 효과적으로 통합합니다.
  • Rasa 대화 시스템 기술을 통합하여 자연스러운 대화형 AI를 구현합니다.
  • LMMathChain과 같은 수학 특화 LLM을 활용하여 수학 문제 해결 능력을 향상시킵니다.

 

LangChain 기초 코드(v.0.1)

  • 모델 초기화: OpenAI나 다른 LLM 모델을 초기화합니다. 예를 들어:

 

from langchain.llms import OpenAI
from langchain.chat_models import ChatOpenAI

llm = OpenAI()
chat_model = ChatOpenAI()



이때 API 키는 환경 변수로 설정하거나 직접 전달할 수 있습니다.

 

  • 프롬프트 템플릿 생성: 사용자 입력을 포맷팅하기 위한 템플릿을 만듭니다.

 

from langchain.prompts import PromptTemplate

prompt = PromptTemplate.from_template("What is a good name for a company that makes {product}?")



이 템플릿을 사용하여 실제 프롬프트를 생성할 수 있습니다.

 

  • 출력 파서 정의: 모델의 출력을 원하는 형식으로 변환합니다. 예를 들어, 쉼표로 구분된 목록을 파싱하는 파서:

 

from langchain.schema import BaseOutputParser

class CommaSeparatedListOutputParser(BaseOutputParser):
    def parse(self, text: str):
        return text.strip().split(", ")

 

 

  • 체인 구성: 프롬프트 템플릿, 모델, 출력 파서를 하나의 체인으로 결합합니다.
from langchain.chains import LLMChain

chain = LLMChain(llm=llm, prompt=prompt, output_parser=CommaSeparatedListOutputParser())

 

 

  • 체인 실행: 구성된 체인을 실행하여 결과를 얻습니다.
result = chain.run(product="colorful socks")
print(result)



이러한 기본 구조를 바탕으로 더 복잡한 애플리케이션을 구축할 수 있습니다. 예를 들어, 여러 체인을 순차적으로 연결하거나 병렬로 실행할 수 있습니다.

LangChain은 또한 에이전트 기능을 제공하여 더 복잡한 작업을 수행할 수 있습니다. 에이전트는 주어진 작업을 수행하기 위해 여러 도구를 선택하고 사용할 수 있습니다.

 

from langchain.agents import initialize_agent, Tool
from langchain.agents.agent_types import AgentType

tools = [
    Tool(name="Text Generator", func=chain.run, description="Generates text based on a topic"),
    Tool(name="Summarizer", func=summary_chain.run, description="Summarizes a given text")
]

agent = initialize_agent(tools, llm, agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION)
response = agent.run("Tell me about AI and then summarize it")


이러한 기본적인 코딩 방법을 통해 LangChain은 복잡한 NLP 작업을 단순화하고, 개발자가 LLM의 강력한 기능을 쉽게 활용할 수 있도록 돕습니다.

 

 

LangChain 기초코드 (v.0.2)

 

### 모델 초기화
from langchain.llms import OpenAI
from langchain.chat_models import ChatOpenAI

llm = OpenAI()
chat_model = ChatOpenAI()


###프롬프트 템플릿 생성
from langchain.prompts import PromptTemplate

prompt = PromptTemplate.from_template("What is a good name for a company that makes {product}?")


### 출력 파서 정의
from langchain.output_parsers import CommaSeparatedListOutputParser

output_parser = CommaSeparatedListOutputParser()


### 체인 구성
from langchain.chains import LLMChain

chain = LLMChain(llm=llm, prompt=prompt, output_parser=output_parser)


### 체인 실행
result = chain.run(product="colorful socks")
print(result)


### 에이전트 기능 사용
from langchain.agents import initialize_agent, Tool
from langchain.agents import AgentType
from langchain.tools import DuckDuckGoSearchRun

search = DuckDuckGoSearchRun()
tools = [
    Tool(name="Search", func=search.run, description="useful for when you need to answer questions about current events")
]

agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
response = agent.run("Tell me about AI and then summarize it")
print(response)

 

 

LangChain 0.2 버전은 0.1 버전과 비교하여 다음과 같은 주요 변경사항이 있습니다:

  1. 출력 파서 개선: 0.1 버전에서는 사용자 정의 출력 파서를 직접 구현해야 했지만, 0.2 버전에서는 `CommaSeparatedListOutputParser`와 같은 미리 정의된 출력 파서를 제공합니다. 이로 인해 코드가 간소화되고 재사용성이 향상되었습니다.
  2. 체인 구성 방식 변경: 0.1 버전에서는 체인을 직접 구성해야 했지만, 0.2 버전에서는 `LLMChain`을 사용하여 더 쉽게 체인을 구성할 수 있습니다. 이는 코드의 가독성을 높이고 구현을 단순화합니다.
  3. 에이전트 기능 강화: 0.2 버전에서는 `initialize_agent` 함수를 사용하여 더 쉽게 에이전트를 생성하고 구성할 수 있습니다. 또한 `AgentType`을 통해 다양한 유형의 에이전트를 선택할 수 있어 유연성이 향상되었습니다.
  4. 도구 통합 개선: 0.2 버전에서는 `DuckDuckGoSearchRun`과 같은 미리 정의된 도구를 쉽게 사용할 수 있습니다. 이를 통해 외부 서비스와의 통합이 더욱 간편해졌습니다.
  5. 프롬프트 관리 시스템 개선: 0.2 버전에서는 프롬프트 템플릿 사용이 더욱 직관적이고 유연해졌습니다. 이는 복잡한 프롬프트 구조를 더 쉽게 관리할 수 있게 해줍니다.
  6. 메모리 기능 향상: 0.2 버전에서는 대화 기록을 더 효과적으로 관리할 수 있는 개선된 메모리 시스템을 제공합니다. 이를 통해 장기적인 컨텍스트 유지가 가능해졌습니다.
  7. 벡터 저장소 지원 강화: 0.2 버전에서는 다양한 벡터 데이터베이스와의 통합이 개선되어, 대규모 데이터셋을 효율적으로 처리할 수 있게 되었습니다.
  8. 성능 최적화: 0.2 버전에서는 전반적인 성능 개선이 이루어져, 특히 대규모 데이터셋을 처리할 때 더 빠른 응답 시간을 제공합니다.

이러한 변경사항들로 인해 LangChain 0.2 버전은 더 강력하고 유연한 AI 애플리케이션 개발 환경을 제공하며, 개발자들이 복잡한 NLP 작업을 더 쉽게 구현할 수 있게 되었습니다.

 

LangChain 기초 코드(v.0.3)

 

### 모델 초기화
from langchain.llms import OpenAI
from langchain.chat_models import ChatOpenAI

llm = OpenAI()
chat_model = ChatOpenAI()


### 프롬프트 템플릿 생성
from langchain.prompts import PromptTemplate

prompt = PromptTemplate.from_template("What is a good name for a company that makes {product}?")


### 출력 파서 정의
from langchain.output_parsers import CommaSeparatedListOutputParser

output_parser = CommaSeparatedListOutputParser()


### 체인 구성
from langchain.chains import LLMChain

chain = LLMChain(llm=llm, prompt=prompt, output_parser=output_parser)


### 체인 실행
result = chain.invoke({"product": "colorful socks"})
print(result)


### 에이전트 기능 사용
from langchain.agents import initialize_agent, Tool
from langchain.agents import AgentType
from langchain.tools import DuckDuckGoSearchRun

search = DuckDuckGoSearchRun()
tools = [
    Tool(name="Search", func=search.run, description="useful for when you need to answer questions about current events")
]

agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
response = agent.invoke("Tell me about AI and then summarize it")
print(response)

 



LangChain 0.3 버전은 0.2 버전과 비교하여 다음과 같은 주요 변경사항이 있습니다:

 

  1. Pydantic v2 지원: 0.3 버전에서는 내부적으로 Pydantic v2를 사용하도록 업그레이드되었습니다. 이로 인해 타입 검사와 성능이 향상되었습니다.
  2. 메서드 이름 변경: `run()` 메서드가 `invoke()`로 변경되었습니다. 이는 더 명확한 의미 전달과 일관성을 위한 변경입니다.
  3. 새로운 유틸리티 추가: 채팅 모델과의 상호작용을 위한 새로운 유틸리티(universal model constructor, rate limiter, message utilities)가 추가되었습니다.
  4. 사용자 정의 이벤트 디스패치: 사용자가 자신만의 이벤트를 정의하고 디스패치할 수 있는 기능이 추가되었습니다.
  5. 통합 패키지 구조 변경: 많은 통합 기능들이 'langchain-community'에서 자체 'langchain-x' 패키지로 이동되었습니다. 이는 종속성, 테스트, 버전 관리를 더 효율적으로 하기 위한 변경입니다.
  6. 도구 정의 및 사용법 간소화: 도구를 정의하고 사용하는 방법이 더욱 간단해졌습니다.
  7. 문서 및 API 참조 개편: 통합 문서와 API 참조가 개선되어 사용자가 더 쉽게 정보를 찾을 수 있게 되었습니다.
  8. 레거시 체인 사용 중단: 여러 레거시 체인들이 더 이상 사용되지 않는 것으로 표시되었으며, 이에 대한 마이그레이션 가이드가 제공되었습니다.
  9. Python 3.8 지원 중단: 0.3 버전부터는 Python 3.8 지원이 중단되었습니다. 이는 더 최신의 Python 기능을 활용하기 위한 결정입니다.

이러한 변경사항들로 인해 LangChain 0.3 버전은 더욱 현대화되고 효율적인 개발 환경을 제공합니다. 특히 Pydantic v2 지원과 메서드 이름 변경은 코드의 일관성과 성능을 크게 향상시켰습니다. 또한, 새로운 유틸리티와 기능들의 추가로 더 복잡하고 다양한 AI 애플리케이션 개발이 가능해졌습니다.

 

 

LangChain 버전별 변화

LangChain 0.1:

  • 기본적인 LLM 통합 및 체인 기능 도입
  • 간단한 프롬프트 템플릿 및 메모리 기능 구현
  • 제한된 에이전트 기능 제공


LangChain 0.2:

  • 더 많은 LLM 및 외부 도구와의 통합 기능 추가
  • 개선된 프롬프트 관리 시스템 도입
  • 향상된 메모리 기능 및 벡터 저장소 지원
  • 더 강력한 에이전트 기능 및 도구 사용 능력 개선
  • 성능 최적화 및 안정성 향상


LangChain 0.3:

  • Pydantic 1에서 Pydantic 2로의 내부 업그레이드
  • 사용자 코드에서 Pydantic 2 직접 사용 지원
  • Python 3.8 지원 중단 (2024년 10월 이후)
  • 더 많은 통합 기능을 'langchain-community'에서 자체 'langchain-x' 패키지로 이동
  • 간소화된 도구 정의 및 사용법 도입
  • 채팅 모델과의 상호 작용을 위한 새로운 유틸리티 추가 (universal model constructor, rate limiter, message utilities)
  • 사용자 지정 이벤트 디스패치 기능 추가
  • 통합 문서 및 API 참조 개편
  • 여러 레거시 체인을 더 이상 사용되지 않는 것으로 표시하고 마이그레이션 가이드 추가


LangChain 0.3 버전은 특히 내부 구조의 현대화와 성능 개선에 중점을 두었습니다. Pydantic 2로의 업그레이드는 더 나은 타입 검사와 성능 향상을 제공하며, 새로운 패키지 구조는 더 효율적인 종속성 관리를 가능하게 합니다. 또한, 사용자 경험을 개선하기 위한 다양한 기능과 도구가 추가되었습니다.

각 버전 업그레이드는 LangChain의 기능을 확장하고 사용자 경험을 개선하는 데 초점을 맞추고 있으며, 특히 0.3 버전에서는 내부 구조의 현대화와 성능 최적화에 큰 진전이 있었습니다.

 

 

LangChain 언어 호환성

LangChain은 주로 Python과 JavaScript를 지원하며, 각 언어별 호환성과 지원 버전은 다음과 같습니다:

Python:

  • LangChain은 Python 3.8.1 이상의 버전을 지원합니다.
  • Python 3.8 지원은 2024년 10월 이후 중단될 예정이므로, Python 3.9 이상 사용을 권장합니다.

JavaScript:

  • LangChain.js는 Node.js 18 이상의 버전을 지원합니다.
  • 브라우저 환경에서도 사용 가능하며, ES2020 이상을 지원하는 최신 브라우저에서 동작합니다.

SQL:

  • LangChain은 직접적으로 SQL을 지원하지 않지만, SQLDatabase 클래스를 통해 SQL 데이터베이스와 연동할 수 있습니다.
  • 지원되는 SQL 데이터베이스 종류에는 SQLite, MySQL, PostgreSQL 등이 포함됩니다.

Java:

  • 현재 LangChain은 Java를 공식적으로 지원하지 않습니다.
  • 하지만 Java 개발자를 위한 LangChain 포팅 프로젝트인 'LangChain4j'가 커뮤니티에 의해 개발되고 있습니다.

기타 언어:

  • Go: 'LangChain-Go'라는 비공식 포팅 프로젝트가 존재합니다.
  • C#: 'LangChain.NET'이라는 비공식 포팅 프로젝트가 개발 중입니다.

 

LangChain은 주로 Python과 JavaScript 생태계에 초점을 맞추고 있지만, 다양한 데이터베이스 및 외부 서비스와의 통합을 지원합니다. 예를 들어, OpenAI, Hugging Face, Anthropic 등의 AI 모델과 연동할 수 있으며, Pinecone, Weaviate 등의 벡터 데이터베이스와도 통합이 가능합니다.

LangChain의 개발 속도가 빠르기 때문에, 최신 버전과 호환성 정보를 확인하려면 공식 문서를 참조하는 것이 좋습니다. 또한, LangChain은 지속적으로 새로운 기능과 통합을 추가하고 있으므로, 향후 더 많은 언어와 서비스에 대한 지원이 확대될 가능성이 있습니다.

 

 

LangChain 미래 전망

LangChain은 AI와 자연어 처리 기술의 발전에 따라 지속적으로 성장할 것으로 예상됩니다. 미래의 LangChain은 다음과 같은 기술적 발전을 이룰 것으로 전망됩니다:

 

  1. 멀티모달 AI 통합: LangChain은 텍스트뿐만 아니라 이미지, 음성, 비디오 등 다양한 형태의 데이터를 처리할 수 있는 멀티모달 AI 모델과의 통합을 강화할 것입니다. 이를 통해 더욱 풍부하고 다양한 정보를 활용한 애플리케이션 개발이 가능해질 것입니다.
  2. 강화된 추론 능력: 현재의 LLM 기반 시스템보다 더 복잡한 추론과 의사결정을 수행할 수 있는 고급 AI 모델과의 통합이 이루어질 것입니다. 이는 더 정교한 문제 해결과 전략적 사고를 요구하는 작업에서 LangChain의 활용도를 크게 높일 것입니다.
  3. 자동화된 AI 파이프라인: LangChain은 AI 모델 선택, 하이퍼파라미터 튜닝, 프롬프트 최적화 등을 자동으로 수행하는 고급 AutoML 기능을 통합할 것입니다. 이를 통해 개발자들은 더욱 효율적으로 AI 애플리케이션을 구축할 수 있게 될 것입니다.
  4. 확장된 언어 지원: 현재 주로 Python과 JavaScript를 지원하는 LangChain은 더 많은 프로그래밍 언어에 대한 공식 지원을 확대할 것입니다. 이는 더 넓은 개발자 커뮤니티의 참여를 유도하고, 다양한 환경에서의 LangChain 활용을 가능하게 할 것입니다.
  5. 강화된 보안 및 윤리적 AI: LangChain은 AI 모델의 편향성 감지 및 완화, 개인정보 보호, 윤리적 AI 사용을 위한 고급 도구와 프레임워크를 통합할 것입니다. 이는 AI 애플리케이션의 신뢰성과 책임성을 높이는 데 기여할 것입니다.
  6. 실시간 학습 및 적응: LangChain은 실시간으로 새로운 데이터를 학습하고 환경 변화에 적응할 수 있는 온라인 학습 기능을 통합할 것입니다. 이를 통해 더욱 동적이고 반응적인 AI 시스템 구축이 가능해질 것입니다.


이러한 기술적 발전을 통해 LangChain은 AI 애플리케이션 개발의 핵심 도구로서의 위치를 더욱 공고히 할 것으로 예상됩니다. 특히 기업용 AI 솔루션, 고급 자연어 처리 시스템, 지능형 자동화 플랫폼 등의 분야에서 LangChain의 활용도가 크게 증가할 것으로 전망됩니다.

 

 


### 자료 출처 ###

 

 

 

 

 

 

 

'IT 공부 > LangChain' 카테고리의 다른 글

LangGraph  (4) 2024.11.04
LangChain Agent  (10) 2024.10.30