(langchain) LangChain에 대한 완벽한 가이드: 대규모 언어 모델로 강력한 애플리케이션 구축


웨이브 체인

(langchain) LangChain에 대한 완벽한 가이드: 대규모 언어 모델로 강력한 애플리케이션 구축

안녕하세요!
개발자 대형 언어 모델 (LLM) 및 강력한 애플리케이션 구축에 도움이 되는 기타 컴퓨팅 리소스: LangChain. 이 가이드에서는 LangChain의 작동 방식을 간략하게 설명하고 Q&A, 챗봇 및 에이전트와 같은 멋진 사용 사례를 살펴봅니다.

또한 시작하는 데 도움이 되는 빠른 시작 가이드를 안내해 드립니다.

시작하자!

웨이브 체인이란 무엇입니까?

웨이브 체인 개발자가 언어 모델을 사용하여 엔드 투 엔드 애플리케이션을 구축할 수 있도록 설계된 강력한 프레임워크입니다.

대규모 언어 모델(LLM) 및 채팅 모델로 구동되는 애플리케이션 생성 프로세스를 단순화하는 일련의 도구, 구성 요소 및 인터페이스를 제공합니다.

LangChain을 사용하면 언어 모델과의 상호 작용을 쉽게 관리하고, 여러 구성 요소를 연결하고, API 및 데이터베이스와 같은 추가 리소스를 통합할 수 있습니다.

LangChain에는 몇 가지 핵심 개념이 있습니다.

하나씩 살펴보겠습니다.

1. 구성 요소 및 체인

LangChain에서 구성 요소는 강력한 애플리케이션을 만들기 위해 결합할 수 있는 모듈식 빌딩 블록입니다.

체인은 특정 작업을 수행하기 위해 함께 모인 구성 요소(또는 다른 체인) 그룹입니다.

예를 들어 체인에는 사용자 입력을 처리하고, 응답을 생성하고, 출력을 처리하기 위해 함께 작동하는 프롬프트 템플릿, 언어 모델 및 출력 파서가 포함될 수 있습니다.

2. 프롬프트 템플릿 및 값

힌트 템플릿은 최종적으로 언어 모델에 전달되는 힌트 값을 생성하는 역할을 합니다.

프롬프트 템플릿은 사용자 입력 및 기타 동적 정보를 언어 모델에 적합한 형식으로 변환하는 데 도움이 됩니다.

PromptValues ​​클래스는 각 모델 유형을 텍스트 또는 채팅 메시지와 같이 예상되는 정확한 입력 유형으로 변환할 수 있는 메서드가 있는 클래스입니다.

3. 셀렉터 예시

예제 선택기는 프롬프트에 예제를 동적으로 포함하려는 경우에 유용합니다.

사용자 입력을 받아 프롬프트에서 사용할 예제 목록을 반환하므로 더욱 강력하고 상황에 맞게 사용할 수 있습니다.

4. 출력 파서

출력 파서는 언어 모델 응답을 보다 유용한 형식으로 구조화하는 역할을 합니다.

두 가지 주요 메서드를 구현합니다.

하나는 형식 지침을 제공하고 다른 하나는 언어 모델의 응답을 구조화된 형식으로 구문 분석합니다.

이렇게 하면 애플리케이션의 출력 데이터를 더 쉽게 처리할 수 있습니다.

5. 인덱스와 리트리버

인덱싱은 언어 모델이 문서와 더 쉽게 상호 작용할 수 있도록 문서를 구성하는 방법입니다.

리트리버는 관련 문서를 가져와 언어 모델과 결합하기 위한 인터페이스입니다.

LangChain은 벡터 데이터베이스 및 텍스트 분할기와 같은 다양한 유형의 인덱서 및 검색기를 처리하는 도구와 기능을 제공합니다.

6. 채팅 내역 메시지

LangChain은 주로 채팅 인터페이스를 통해 언어 모델과 상호 작용합니다.

ChatMessageHistory 클래스는 이전의 모든 채팅 상호 작용을 기억하고 모델에 다시 전달하거나 집계하거나 결합할 수 있습니다.

이는 컨텍스트를 유지하고 대화에 대한 모델의 이해를 높이는 데 도움이 됩니다.

7. 에이전트 및 툴킷

에이전트는 웨이브 체인의 의사 결정 엔터티입니다.

상담원은 일련의 도구에 액세스할 수 있으며 사용자 입력에 따라 호출할 도구를 결정할 수 있습니다.

툴킷은 함께 사용하면 특정 작업을 수행하는 도구 세트입니다.

에이전트 실행자는 적절한 도구를 사용하여 에이전트를 실행할 책임이 있습니다.

이러한 핵심 개념을 이해하고 활용함으로써 LangChain의 기능을 활용하여 적응 가능하고 효율적이며 복잡한 사용 사례를 처리할 수 있는 고급 언어 모델 애플리케이션을 구축할 수 있습니다.

롱체인 프록시란?

LangChain 에이전트는 프레임워크에서 의사 결정 기반 엔터티입니다.

상담원은 일련의 도구에 액세스할 수 있으며 사용자 입력에 따라 호출할 도구를 결정할 수 있습니다.

프록시는 상황에 맞는 적응형 응답이 필요한 복잡한 애플리케이션을 구축하는 데 도움이 됩니다.

에이전트는 사용자 입력 및 기타 요인을 기반으로 알 수 없는 상호 작용 세트가 있을 때 특히 유용합니다.

랭체인은 어떻게 사용하나요?

LangChain을 사용하기 위해 개발자는 먼저 LLM, 채팅 모델, 에이전트, 체인 및 메모리 기능과 같은 필요한 구성 요소와 도구를 가져옵니다.

이러한 구성 요소를 결합하여 사용자 입력을 이해하고 처리하고 응답하는 애플리케이션을 만듭니다.

LangChain은 개인 비서, 문서 질문에 응답, 챗봇, 표 형식 데이터 쿼리, API와의 상호 작용, 추출, 평가 및 요약과 같은 특정 사용 사례에 대한 다양한 구성 요소를 제공합니다.

랭체인 모델이란?

LangChain 모델은 프레임워크에서 사용되는 다양한 유형의 모델을 나타내는 추상화입니다.

LangChain에는 주로 세 가지 모델 유형이 있습니다.

  1. 대형 언어 모델(LLM)): 이러한 모델은 텍스트 문자열을 입력으로 사용하고 텍스트 문자열을 출력으로 반환합니다.

    많은 언어 모델 애플리케이션의 기본 모델입니다.

  2. 채팅 모델: 채팅 모델: 채팅 모델은 언어 모델로 지원되지만 보다 구조화된 API를 사용합니다.

    채팅 메시지 목록을 입력으로 사용하고 채팅 메시지를 반환합니다.

    이를 통해 대화 기록을 쉽게 관리하고 컨텍스트를 유지할 수 있습니다.

  3. 텍스트 임베딩 모델: 이 모델은 텍스트를 입력으로 사용하고 텍스트 임베딩을 나타내는 플로트 목록을 반환합니다.

    이러한 임베딩은 문서 검색, 클러스터링 및 유사성 비교와 같은 작업에 사용할 수 있습니다.

개발자는 사용 사례에 맞는 Langchain 모델을 선택하고 제공된 구성 요소로 응용 프로그램을 빌드할 수 있습니다.

랭체인의 주요 기능

LangChain은 6가지 주요 영역에서 개발자를 지원하는 것을 목표로 합니다.

  1. LLM 및 팁: LangChain은 쉽게 힌트를 관리하고, 힌트를 최적화하고, 모든 LLM에 대한 공통 인터페이스를 생성합니다.

    또한 LLM을 위한 몇 가지 편의 유틸리티도 포함되어 있습니다.

  2. 체인: LLM 또는 기타 유틸리티에 대한 일련의 호출. LangChain은 체인에 대한 표준 인터페이스를 제공하고 다양한 도구를 통합하며 널리 사용되는 응용 프로그램을 위한 엔드 투 엔드 체인을 제공합니다.

  3. 데이터 증강 생성: LangChain은 체인이 외부 데이터 소스와 상호 작용하여 생성 단계에 필요한 데이터를 수집할 수 있도록 합니다.

    예를 들어 긴 텍스트를 요약하거나 특정 데이터 소스를 사용하여 질문에 답하는 데 도움이 될 수 있습니다.

  4. 대리인: 에이전트는 LLM이 작업에 대한 결정을 내리고, 실행하고, 결과를 보고, 작업이 완료될 때까지 진행할 수 있도록 합니다.

    LangChain은 프록시를 위한 표준 인터페이스, 선택할 수 있는 다양한 프록시 및 종단 간 프록시 예제를 제공합니다.

  5. 메모리: LangChain에는 체인 또는 프록시 호출 간에 상태를 유지하는 데 도움이 되는 표준 인메모리 인터페이스가 있습니다.

    또한 메모리를 사용하는 다양한 메모리 구현 및 체인 또는 프록시의 예를 제공합니다.

  6. 평가하다: 기존 메트릭으로 생성 모델을 평가하기 어렵습니다.

    그렇기 때문에 LangChain은 힌트와 체인을 제공하여 개발자가 LLM을 직접 사용하여 모델을 평가할 수 있도록 합니다.

LangChain은 다음과 같은 다양한 사용 사례를 지원합니다.

  • 특정 파일에 대한 질문에 답하기: 주어진 문서를 기반으로 질문에 답하고 해당 문서의 정보를 사용하여 답을 구성합니다.

  • 챗봇: LLM의 기능을 활용하여 텍스트를 생성할 수 있는 챗봇을 구축합니다.

  • 대리인: 행동을 결정하고, 그 행동을 취하고, 결과를 관찰하고, 완료될 때까지 계속할 수 있는 에이전트를 개발합니다.

빠른 시작 가이드: LangChain을 사용하여 엔드 투 엔드 언어 모델 애플리케이션 구축

설치하다

먼저 LangChain을 설치합시다.

다음 명령을 실행하십시오.

pip install langchain

우선 사항

이제 LangChain은 종종 모델 공급자, 데이터 저장소, API 등과 통합해야 하므로 환경을 구축해 보겠습니다.

이 예에서는 OpenAI의 API를 사용하므로 해당 SDK를 설치해야 합니다.

pip install openai

다음으로 터미널에서 환경 변수를 설정해 보겠습니다.

export OPENAI_API_KEY="..."

또는 Jupyter 노트북 또는 Python 스크립트에서 작업하는 것을 선호하는 경우 다음과 같이 환경 변수를 설정할 수 있습니다.

import os.environ("OPENAI_API_KEY") = "..."

언어 모델 애플리케이션 구축: LLM

이제 LangChain이 설치되고 환경이 설정되었으므로 언어 ​​모델 애플리케이션 구축을 시작할 수 있습니다.

LangChain은 언어 모델 응용 프로그램을 만드는 데 사용할 수 있는 다양한 모듈을 제공합니다.

이러한 모듈을 결합하여 더 복잡한 응용 프로그램을 만들거나 개별적으로 사용하여 더 간단한 응용 프로그램을 만들 수 있습니다.

언어 모델링 애플리케이션 구축: 채팅 모델

LLM 외에도 채팅 모델이 될 수도 있습니다.

내부적으로 언어 모델을 사용하지만 인터페이스가 다른 언어 모델의 변형입니다.

채팅 모델은 “텍스트 입력, 텍스트 출력” API 대신 입력 및 출력으로 채팅 메시지를 사용합니다.

채팅 모델 API는 너무 새롭기 때문에 모두가 여전히 최고의 추상화를 찾고 있습니다.

채팅을 완료하려면 적어도 하나의 메시지가 채팅 모델에 전달되어야 합니다.

LangChain은 현재 AIMessage, Human Message, System Message 및 Chat Message 유형을 지원합니다.

주로 인간 메시지, AI 메시지 및 시스템 메시지로 작업합니다.

다음은 채팅 모델을 사용하는 예입니다.

from langchain.chat_models import ChatOpenAI
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)

chat = ChatOpenAI(temperature=0)

메시지를 전달하여 완료를 받을 수 있습니다.

chat((HumanMessage(content="Translate this sentence from English to Korea. I love programming.")))

또는 OpenAI의 gpt-3.5-turbo 및 gpt-4 모델에 대해 여러 메시지를 전달할 수 있습니다.

messages = (
    SystemMessage(content="You are a helpful assistant that translates English to Korea."),
    HumanMessage(content="Translate this sentence from English to Korea. I love programming.")
)
chat(messages)

만들다 이를 사용하여 여러 메시지 세트에 대한 완성을 생성할 수도 있습니다.

이것은 추가 메시지 매개변수와 함께 LLMResult를 반환합니다.

batch_messages = (
    (
        SystemMessage(content="You are a helpful assistant that translates English to Korea."),
        HumanMessage(content="Translate this sentence from English to Korea. I love programming.")
    ),
    (
        SystemMessage(content="You are a helpful assistant that translates English to Korea."),
        HumanMessage(content="Translate this sentence from English to Korea. I love artificial intelligence.")
    ),
)
result = chat.generate(batch_messages)

LLMResult에서 토큰 사용과 같은 정보를 추출할 수도 있습니다.

result.llm_output('token_usage')

채팅 모델에서는 메시지 프롬프트 템플릿을 사용하여 템플릿을 사용할 수도 있습니다.

하나 이상의 메시지 프롬프트 템플릿에서 ChatPromptTemplate을 생성할 수 있습니다.

채팅 프롬프트 템플릿 형식 힌트 이 메서드는 형식이 지정된 값이 LLM 또는 채팅 모델에 대한 입력으로 사용되는지 여부에 따라 문자열 또는 메시지 개체로 변환할 수 있는 PromptValue를 반환합니다.

예를 들어:

from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate,
)

chat = ChatOpenAI(temperature=0)

template="You are a helpful assistant that translates {input_language} to {output_language}."
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_template="{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)

chat_prompt = ChatPromptTemplate.from_messages((system_message_prompt, human_message_prompt))

# get a chat completion from the formatted messages
chat(chat_prompt.format_prompt(input_language="English", output_language="Korea", text="I love programming.").to_messages())

채팅 모델과 함께 LLMChain을 사용할 수도 있습니다.

from langchain.chat_models import ChatOpenAI
from langchain import LLMChain
from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate,
)

chat = ChatOpenAI(temperature=0)

template="You are a helpful assistant that translates {input_language} to {output_language}."
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_template="{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
chat_prompt = ChatPromptTemplate.from_messages((system_message_prompt, human_message_prompt))

chain = LLMChain(llm=chat, prompt=chat_prompt)
chain.run(input_language="English", output_language="Korea", text="I love programming.")

채팅 모델과 함께 에이전트를 사용할 수도 있습니다.

에이전트 유형별 ProxyType.CHAT_ZERO_SHOT_REACT_DESCRIPTION 다음을 사용하여 프록시를 초기화합니다.

from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.chat_models import ChatOpenAI
from langchain.llms import OpenAI

# First, let's load the language model we're going to use to control the agent.
chat = ChatOpenAI(temperature=0)

# Next, let's load some tools to use. Note that the `llm-math` tool uses an LLM, so we need to pass that in.
llm = OpenAI(temperature=0)
tools = load_tools(("serpapi", "llm-math"), llm=llm)

# Finally, let's initialize an agent with the tools, the language model, and the type of agent we want to use.
agent = initialize_agent(tools, chat, agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

# Now let's test it out!
agent.run("Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?")

이 예에서 에이전트는 대화형 검색 및 계산을 수행하여 최종 답변을 제공합니다.

마지막으로 채팅 모델과 에이전트로 초기화된 체인으로 메모리가 어떻게 사용되는지 살펴보자. 이것과 LLM 메모리의 주요 차이점은 오래된 메시지를 문자열로 압축하는 대신 고유한 메모리 개체로 유지할 수 있다는 것입니다.

다음 대화 체인 다음은 사용 예입니다.

from langchain.prompts import (
    ChatPromptTemplate, 
    MessagesPlaceholder, 
    SystemMessagePromptTemplate, 
    HumanMessagePromptTemplate
)
from langchain.chains import ConversationChain
from langchain.chat_models import ChatOpenAI
from langchain.memory import ConversationBufferMemory

prompt = ChatPromptTemplate.from_messages((
    SystemMessagePromptTemplate.from_template("The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know."),
    MessagesPlaceholder(variable_name="history"),
    HumanMessagePromptTemplate.from_template("{input}")
))

llm = ChatOpenAI(temperature=0)
memory = ConversationBufferMemory(return_messages=True)
conversation = ConversationChain(memory=memory, prompt=prompt, llm=llm)

conversation.predict(input="Hi there!
") # -> 'Hello!
How can I assist you today?' conversation.predict(input="I'm doing well!
Just having a conversation with an AI.") # -> "That sounds like fun!
I'm happy to chat with you. Is there anything specific you'd like to talk about?" conversation.predict(input="Tell me about yourself.") # -> "Sure!
I am an AI language model created by OpenAI. I was trained on a large dataset of text from the internet, which allows me to understand and generate human-like language. I can answer questions, provide information, and even have conversations like this one. Is there anything else you'd like to know about me?"

이 예에서 대화의 컨텍스트는 AI와의 여러 상호 작용에서 유지됩니다.

대화 체인 사용된

그게 다야!
이제 LangChain을 사용하여 엔드투엔드 언어 모델 애플리케이션을 구축하는 방법을 명확하게 이해해야 합니다.

이 예제를 따르면 LLM, 채팅 모델, 에이전트, 체인 및 메모리 기능을 사용하여 강력한 언어 모델 애플리케이션을 개발할 수 있습니다.