Skip to content
LangChain이란 무엇인가요? 어떻게 사용하나요?

LangChain Chains의 복잡성: 멀티 모델 언어 학습 솔루션의 잠재력 발휘

LangChain은 언어 학습 모델 (LLM)의 다이내믹한 분야에서 큰 영향을 미치고 있는 매력적인 도구입니다. 이번 글에서는 이 혁신적인 도구의 핵심 - LangChain Chains에 대해 살펴보겠습니다. LangChain Chains란 무엇이며 어떻게 동작하며, LangChain에서 왜 이렇게 중요한 요소인가요?

LangChain이란 무엇인가요? LangChain AI란 무엇인가요?

LangChain Chains에 대해 자세히 볼 전, 먼저 LangChain이 무엇인지 알아보겠습니다. LangChain은 OpenAI, Cohere, Bloom, Huggingface 등 여러 대형 LLM 공급업체와의 상호작용을 간소화하기 위해 설계된 강력한 라이브러리입니다. LangChain의 독특한 제안은 한 개 이상의 LLM 사이에 논리적으로 연결된 Chains를 생성할 수 있는 능력입니다. 이 특징이 LangChain이 큰 유틸리티를 제공하는 원인입니다.

LangChain Chains란 무엇인가요?

Chains는 LangChain의 중요한 핵심입니다. 하나 이상의 LLM간의 논리적 연결인 Chain은 LangChain의 기능의 주축입니다. 체인은 필요성 및 관련된 LLM의 특징에 따라 단순한 것부터 복잡한 것까지 다양할 수 있습니다. 이제 각각의 유형에 대해 자세히 알아보겠습니다.

기본 체인

기본 체인은 만들 수 있는 가장 간단한 형태의 체인입니다. 단일 LLM이 입력 프롬프트를 받고 해당 프롬프트를 텍스트 생성에 사용하는 것으로 구성됩니다.

예를 들어 Huggingface를 LLM 제공업체로 사용하는 기본 체인을 다음과 같은 코드로 생성할 수 있습니다.

from langchain.prompts import PromptTemplate
from langchain.llms import HuggingFace
from langchain.chains import LLMChain
 
prompt = PromptTemplate(
    input_variables=["city"],
    template="Describe a perfect day in {city}?",
)
 
llm = HuggingFace(
          model_name="gpt-neo-2.7B", 
          temperature=0.9) 
 
llmchain = LLMChain(llm=llm, prompt=prompt)
llmchain.run("Paris")

이 경우 출력은 파리에서의 완벽한 하루를 기술하는 AI 생성 텍스트가 됩니다.

고급 체인

고급 체인 또는 유틸리티 체인은 일부 특정 작업을 처리하기 위해 여러 LLM으로 구성됩니다. 예를 들어 SummarizeAndTranslateChain은 요약 및 번역과 같은 작업을 위해 제작되었습니다.

예를 들어, LangChain은 주어진 글의 핵심 주제를 읽고 생성하는 TopicModellingChain이라는 특정 유틸리티 체인을 제공합니다.

from langchain.chains import TopicModellingChain
topic_chain = TopicModellingChain(llm=llm, verbose=True)
topic_chain.run("Text of a scientific article about climate change.")
```이 출력은 기후변화에 대한 과학 논문과 관련된 주제 목록을 제공합니다.
 
## LangChain Chains의 강점
 
무엇이 LangChain Chains를 중요하게 만드는 것인가?
 
LangChain Chains는 사용자가 다양한 LLM을 쉽게 연결하여 다른 모델의 강점을 융합하고 더 복잡하고 정교한 작업을 수행하는 것을 용이하게합니다. 이러한 전통적인 단일 모델 배치의 능력을 향상시켜 복잡한 문제에 대한 창의적인 해결책을 제시합니다.
 
LangChain Chains는 LLM 세계에서 상당한 진전을 나타냅니다. 접근 가능한 방식으로 모델 간 간극을 극복함으로써 취미에서 기업 수준 전문가에 이르기까지 전 세계의 개발자에게 귀중한 도구가 될 수 있습니다. LangChain Chains의 힘과 함께 어떤 언어 학습 모델도 달성할 수 없는 것이 없습니다.
 
## LLM과 Prompt가없는 Chains
 
우리가 이전에 설명한 PalChain은 사용자의 자연 언어로 작성된 질문을 분석하기 위해 LLM(및 해당 Prompt)이 필요하지만, LangChain에는 그렇지 않은 체인도 있습니다. 이러한 변환 체인은 주로 LLM으로 입력하기 전에 프롬프트를 전처리하는 변환 체인입니다. 예를 들어:
 
```python
from langchain.chains import TrimSpacesChain
 
trim_chain = TrimSpacesChain()
trimmed_prompt = trim_chain.run("   What is the   weather   like?   ")
print(trimmed_prompt)  # 출력 : "What is the weather like?"

이 경우, TrimSpacesChain을 사용하여 불필요한 공백을 제거하여 프롬프트를 정리하는 데 사용됩니다. 전처리 후 깨끗한 프롬프트를 선택한 모든 LLM에 입력할 수 있습니다.

체인 제작 : SimpleSequentialChain

이제 특정 체인 유형에 초점을 맞춥시다 : SimpleSequentialChain. 이 체인 유형을 사용하면 하나의 출력이 다음 입력으로 사용되는 LLM을 논리적으로 연결할 수 있습니다.

우선 프롬프트를 정리하고 (추가 공백 제거, 줄이기 등) 이를 사용하여 LLM을 호출해야하는 시나리오를 고려해보십시오. 상단의 TrimSpacesChain을 사용하여 이를 수행하고 LLM 체인과 함께 결합합니다.

from langchain.chains import SimpleSequentialChain
 
trim_chain = TrimSpacesChain()
llm_chain = LLMChain(llm=llm, prompt=prompt)
 
combined_chain = SimpleSequentialChain([trim_chain, llm_chain])
output = combined_chain.run("   What is the   weather   like?   ")
print(output)  # 정리된 프롬프트를 기반으로 한 AI 생성 텍스트가 출력됩니다.

이 설정에서 TrimSpacesChain의 출력 (정리된 프롬프트)이 LLMChain의 입력으로 전달됩니다.

LangChain에서 에이전트의 역할

LangChain의 에이전트는 사용자 입력에 기초하여 LLM을 동적으로 호출하는 혁신적인 방법을 제공합니다. LLM에만 액세스하는 것뿐만 아니라 Google 검색, Python REPL, 수학 계산기, 날씨 API 등과 상호 작용할 수있는 일련의 도구를 제공합니다.

LangChain의 ZERO_SHOT_REACT_DESCRIPTION 에이전트를 사용하여 실제 예제를 검토해 봅시다.

from langchain.agents import initialize_agent, AgentType, load_tools
from langchain.llms import OpenAI
 
llm = OpenAI(temperature=0)
tools = load_tools(["pal-math"], llm=llm)
 
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
 
```response = agent.run("만약 내 나이가 아빠의 나이의 반이고 그가 내년에 60 세가 될 것이라면, 내 현재 나이는 얼마입니까?")
print(response) # 결과: "현재 내 나이는 29.5 세입니다."

이 경우, agent는 자연어 프롬프트에 내장된 수학 문제를 해결하기 위해 pal-math 도구와 OpenAI LLM을 활용합니다. 에이전트는 프롬프트를 이해하고 작업을 수행하는 데 필요한 올바른 도구를 선택하며, 결과적으로 의미 있는 응답을 반환하면서 추가적인 가치를 제공하는 실용적인 경우를 보여줍니다.


LangChain의 체인과 agent의 동적 기능을 활용하면 사용자는 유연하게 다단계 언어 처리 워크플로우를 설계할 수 있습니다. 프롬프트 전처리, 멀티-LLM 체인 생성 또는 에이전트를 사용하여 동적으로 LLM 및 도구를 선택하기를 원하는 경우, LangChain은 이러한 기능을 구현하기 위한 구성 요소를 제공합니다.

고급 사용 사례: 사용자가 선호하는 장르에 따라 영화 추천 생성

이 사용 사례에서는 두 개의 체인을 사용합니다.

Chain #1 - 사용자가 좋아하는 영화 장르에 대해 묻는 LLM 체인입니다. Chain #2 - Chain 1의 결과를 기반으로 선호하는 장르를 사용하여 해당 장르의 영화를 추천하는 다른 LLM 체인입니다.

먼저 chain_one을 생성합니다.

template = '''당신은 영화 장르 설문 조사입니다. 사용자에게 선호하는 장르에 대해 물어보세요.
 
묻기:'''
prompt_template = PromptTemplate(input_variables=[], template=template)
chain_one = LLMChain(llm=llm, prompt=prompt_template)

그런 다음, chain_two를 생성하여 영화를 추천합니다.

template = '''당신은 영화 추천 프로그램입니다. 사용자가 선호하는 장르: {genres}, 이 장르에 해당하는 영화를 추천하세요.
 
추천:'''
prompt_template = PromptTemplate(input_variables=["genres"], template=template)
chain_two = LLMChain(llm=llm, prompt=prompt_template)

다음으로, 이러한 체인을 SimpleSequentialChain을 사용하여 결합합니다.

from langchain.chains import SimpleSequentialChain
 
overall_chain = SimpleSequentialChain(
    chains=[chain_one, chain_two],
    verbose=True)

SimpleSequentialChain의 input_variables 및 output_variables을 명시적으로 언급하지 않은 것을 볼 수 있습니다. 이것은 chain 1의 출력이 chain 2의 입력으로 전달된다는 가정에 기반합니다.

이제 이 체인을 실행합니다.

overall_chain.run('당신이 좋아하는 영화 장르는 무엇인가요?')
 
# 결과
# > Entering new SimpleSequentialChain chain...
# > Entering new LLMChain...
# 좋아하는 장르: 액션, 드라마, 코미디#> 완료된 체인.
 
# 좋아하는 장르: 액션, 드라마, 코미디
# 액션: 다이 하드, 매드 맥스: 분노의 도로, 다크 나이트
# 드라마: 쇼생크 탈출, 위대한 개츠비, 유령
# 코미디: 굳세어라, 방황하는 카메라, 삼촌
#> 완료된 체인.

첫 번째 LLMChain은 좋아하는 장르를 요청하고, 두 번째 LLMChain은 이 입력을 사용하여 영화를 추천합니다. 이것은 개인화된 영화 추천 시스템을 만드는 데 여러 LLMChain을 SimpleSequentialChain에 결합하여 사용하는 방법의 좋은 예입니다.

이제 사용자가 선호하는 영화 길이와 같은 추가 정보를 가져 오려는 경우가 있다고 가정해 보겠습니다. 우리는 chain_two를 업데이트하여 또 다른 입력 변수인 movie_length를 사용하도록 할 수 있습니다.

template = '''당신은 영화 추천자입니다. 사용자가 좋아하는 장르: {genres}와 그들이 선호하는 영화 길이: {movie_length}을 고려하여 이 장르에 속하는 몇 가지 영화를 추천하세요.
 
영화 추천:'''
prompt_template = PromptTemplate(input_variables=["genres", "movie_length"], template=template)
chain_two = LLMChain(llm=llm, prompt=prompt_template)

마지막으로 SimpleMemory를 사용하여 추가 컨텍스트 'movie_length'를 저장하는 방법을 사용하여 체인을 결합할 수 있습니다. 이것은 프롬프트 사이에서 변경되지 않아야하는 추가 컨텍스트를 저장하는 데 유용합니다. 이 체인을 실행하면 좋아하는 장르뿐만 아니라 선호하는 영화 길이도 고려하여 영화를 추천합니다.

overall_chain = SequentialChain(
    input_variables=["input"],
    memory=SimpleMemory(memories={"movie_length": "2 hours"}),
    chains=[chain_one, chain_two],
    verbose=True)

LangChain을 시도하고 실험해보는 것을 권장합니다. 다양한 AI 에이전트 및 모델을 연결하여 더 강력하고 유용한 응용 프로그램을 만드는 데 무한한 가능성이 있습니다!

FAQ

  1. LangChain이란 무엇인가요? LangChain은 구조적 방식으로 다양한 AI 모델, 에이전트 및 프롬프트를 만들고 연결할 수 있는 파이썬 라이브러리입니다. 여러 모델을 순서대로 상호 작용해야하는 복잡한 AI 응용 프로그램을 만들 때 완벽합니다.

  2. LangChain의 SimpleSequentialChain 및 SequentialChain은 무엇인가요? 이 둘 모두 LangChain에서 체인을 연결하는 데 사용됩니다. SimpleSequentialChain은 체인 사이에 단일 입력과 단일 출력이 있는 경우에 사용되며, SequentialChain은 여러 입력과 출력이 있는 경우에 사용됩니다.

  3. LangChain에서 추가 컨텍스트를 어떻게 추가할 수 있나요? LangChain에서 SimpleMemory를 사용하여 추가 컨텍스트를 추가할 수 있습니다. Context 또는 다른 정보를 저장하는 데 유용한 쉬운 방법입니다. 저장되는 정보는 프롬프트 사이에서 변경되지 않아야합니다.

  4. LangChain에서 사용자 정의 에이전트를 만들 수 있나요? 네, LangChain의 에이전트 클래스를 사용하여 사용자 정의 에이전트를 만들 수 있습니다. 에이전트는 복잡한 로직을 캡슐화하고 체인의 일부가 될 수 있습니다.

  5. LangChain에 대한 자세한 정보는 어디에서 확인할 수 있나요? LangChain에 대한 자세한 정보는 공식 문서 웹 사이트에서 확인할 수 있습니다. 오픈 소스 프로젝트이므로 GitHub에서 소스 코드를 확인할 수도 있습니다.

📚