
(langchain) LangChain에 대한 완벽한 가이드: 대규모 언어 모델로 강력한 애플리케이션 구축
안녕하세요! 개발자 대형 언어 모델 (LLM) 및 강력한 애플리케이션을 구축하는 데 도움이 되는 기타 계산 리소스: LangChain. 이 가이드에서는 LangChain의 작동 방식을 간략하게 설명하고 질문 답변, 챗봇 및 에이전트와 같은 멋진 사용 사례를 살펴봅니다. 또한 시작하는 데 도움이 되는 빠른 시작 가이드를 안내해 드립니다. 시작하자!
랭체인이란?
랭체인 개발자가 언어 모델을 사용하여 엔드 투 엔드 애플리케이션을 구축할 수 있도록 설계된 강력한 프레임워크입니다. 대규모 언어 모델(LLM) 및 채팅 모델로 구동되는 애플리케이션 생성 프로세스를 단순화하는 도구, 구성 요소 및 인터페이스 모음을 제공합니다. LangChain을 사용하면 언어 모델과의 상호 작용을 쉽게 관리하고, 여러 구성 요소를 연결하고, API 및 데이터베이스와 같은 추가 리소스를 통합할 수 있습니다.
LangChain에는 몇 가지 핵심 개념이 있습니다. 하나씩 살펴보겠습니다.
1. 구성 요소 및 체인
LangChain에서 구성 요소는 강력한 애플리케이션을 만들기 위해 결합할 수 있는 모듈식 빌딩 블록입니다. 체인은 특정 작업을 수행하기 위해 함께 모인 일련의 구성 요소(또는 기타 체인)입니다. 예를 들어 체인에는 사용자 입력을 처리하고 응답을 생성하고 출력을 처리하기 위해 함께 작동하는 프롬프트 템플릿, 언어 모델 및 출력 파서가 포함될 수 있습니다.
2. 프롬프트 템플릿 및 값
프롬프트 템플릿은 궁극적으로 언어 모델에 전달되는 프롬프트 값을 생성하는 역할을 합니다. 프롬프트 템플릿은 사용자 입력 및 기타 동적 정보를 언어 모델에 적합한 형식으로 변환하는 데 도움이 됩니다. PromptValues 클래스는 각 모델 유형을 텍스트 또는 채팅 메시지와 같이 예상되는 정확한 입력 유형으로 변환할 수 있는 메서드가 있는 클래스입니다.
3. 셀렉터 예시
예제 선택기는 프롬프트에 예제를 동적으로 포함하려는 경우에 유용합니다. 사용자 입력을 받아 프롬프트에서 사용할 예제 목록을 반환하여 더욱 강력하고 상황에 맞게 만듭니다.
4. 출력 파서
출력 파서는 언어 모델 응답을 보다 사용하기 쉬운 형식으로 구조화하는 역할을 합니다. 두 가지 주요 방법을 구현합니다. 하나는 서식 지정 지침을 제공하고 다른 하나는 언어 모델의 응답을 구조화된 형식으로 구문 분석합니다. 이렇게 하면 애플리케이션의 출력 데이터로 작업하기가 더 쉬워집니다.
5. 인덱스와 리트리버
인덱스는 언어 모델이 문서와 더 쉽게 상호 작용할 수 있도록 문서를 구성하는 방법입니다. 리트리버는 관련 문서를 가져와서 언어 모델과 결합하기 위한 인터페이스입니다. LangChain은 벡터 데이터베이스 및 텍스트 분할기와 같은 다양한 유형의 인덱스 및 검색기와 함께 작동하는 도구 및 기능을 제공합니다.
6. 채팅 기록 메시지
LangChain은 주로 채팅 인터페이스를 통해 언어 모델과 상호 작용합니다. ChatMessageHistory 클래스는 이전의 모든 채팅 상호 작용을 기억하고 이를 모델로 다시 전달하거나 요약하거나 다른 방식으로 결합할 수 있습니다. 이는 컨텍스트를 유지하고 대화에 대한 모델의 이해를 높이는 데 도움이 됩니다.
7. 에이전트 및 툴킷
에이전트는 LangChain의 의사 결정 주체입니다. 에이전트는 일련의 도구에 액세스할 수 있으며 사용자 입력에 따라 호출할 도구를 결정할 수 있습니다. 툴킷은 함께 사용하면 특정 작업을 수행할 수 있는 도구 세트입니다. 에이전트 실행자는 적절한 도구를 사용하여 에이전트를 실행할 책임이 있습니다.
이러한 핵심 개념을 이해하고 활용함으로써 LangChain의 기능을 활용하여 적응 가능하고 효율적이며 복잡한 사용 사례를 처리할 수 있는 고급 언어 모델 애플리케이션을 구축할 수 있습니다.
LangChain 에이전트란 무엇입니까?
LangChain 에이전트는 프레임워크에서 의사 결정 기반 엔터티입니다. 에이전트는 일련의 도구에 액세스할 수 있으며 사용자 입력에 따라 호출할 도구를 결정할 수 있습니다. 에이전트는 상황에 맞는 적응형 응답이 필요한 복잡한 애플리케이션을 구축하는 데 도움이 됩니다. 에이전트는 사용자 입력 및 기타 요인을 기반으로 알 수 없는 상호 작용 세트가 있을 때 특히 유용합니다.
랭체인은 어떻게 사용하나요?
LangChain을 사용하기 위해 개발자는 LLM, 채팅 모델, 에이전트, 체인 및 메모리 기능과 같은 필수 구성 요소 및 도구를 가져오는 것부터 시작합니다. 이러한 구성 요소를 결합하여 사용자 입력을 이해하고 처리하고 응답할 수 있는 애플리케이션을 만듭니다.
LangChain은 개인 비서, 문서에 대한 질문에 답하기, 챗봇, 테이블 형식 데이터 쿼리, API와의 상호 작용, 추출, 평가 및 요약과 같은 특정 사용 사례에 대한 다양한 구성 요소를 제공합니다.
랭체인 모델이란?
LangChain 모델은 프레임워크에서 사용하는 다양한 유형의 모델을 나타내는 추상화입니다. LangChain에는 세 가지 주요 모델 유형이 있습니다.
- 대형 언어 모델(LLM)): 이 모델은 텍스트 문자열을 입력으로 사용하고 텍스트 문자열을 출력으로 반환합니다. 많은 언어 모델 응용 프로그램의 기반이 되는 모델입니다.
- 채팅 모델: 채팅 모델: 채팅 모델은 언어 모델에 의해 지원되지만 더 구조화된 API가 있습니다. 채팅 메시지 목록을 입력으로 받아 채팅 메시지를 반환합니다. 이렇게 하면 대화 기록을 쉽게 관리하고 컨텍스트를 유지할 수 있습니다.
- 텍스트 임베딩 모델: 이 모델은 텍스트를 입력으로 사용하고 텍스트 임베딩을 나타내는 플로트 목록을 반환합니다. 이러한 임베딩은 문서 검색, 클러스터링 및 유사성 비교와 같은 작업에 사용할 수 있습니다.
개발자는 사용 사례에 맞는 Langchain 모델을 선택하고 제공된 구성 요소를 활용하여 응용 프로그램을 빌드할 수 있습니다.
랭체인의 주요 기능
LangChain은 6가지 주요 영역에서 개발자를 지원하도록 설계되었습니다.
- LLM 및 프롬프트: LangChain을 사용하면 프롬프트를 쉽게 관리하고 최적화하며 모든 LLM에 대한 범용 인터페이스를 만들 수 있습니다. 또한 LLM 작업을 위한 몇 가지 편리한 유틸리티도 포함되어 있습니다.
- 체인: LLM 또는 기타 유틸리티에 대한 일련의 호출입니다. LangChain은 체인을 위한 표준 인터페이스를 제공하고 다양한 도구와 통합하며 널리 사용되는 애플리케이션을 위한 종단 간 체인을 제공합니다.
- 데이터 증강 생성: LangChain은 체인이 외부 데이터 소스와 상호 작용하여 생성 단계에 필요한 데이터를 수집할 수 있도록 합니다. 예를 들어 긴 텍스트를 요약하거나 특정 데이터 소스를 사용하여 질문에 답하는 데 도움이 될 수 있습니다.
- 대리인: 에이전트는 LLM이 작업에 대한 결정을 내리고, 해당 작업을 수행하고, 결과를 보고, 작업이 완료될 때까지 진행할 수 있도록 합니다. LangChain은 에이전트를 위한 표준 인터페이스, 선택할 수 있는 다양한 에이전트 및 엔드 투 엔드 에이전트의 예를 제공합니다.
- 메모리: LangChain에는 체인 또는 에이전트 호출 사이의 상태를 유지하는 데 도움이 되는 메모리에 대한 표준 인터페이스가 있습니다. 또한 메모리를 사용하는 다양한 메모리 구현 및 체인 또는 에이전트의 예를 제공합니다.
- 평가: 기존 메트릭으로 생성 모델을 평가하기 어렵습니다. 그렇기 때문에 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을 생성할 수 있습니다. ChatPromptTemplate format_prompt 이 메서드는 형식이 지정된 값이 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.")
채팅 모델과 함께 에이전트를 사용할 수도 있습니다. 에이전트 유형별 AgentType.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, 채팅 모델, 에이전트, 체인 및 메모리 기능을 사용하여 강력한 언어 모델 애플리케이션을 개발할 수 있습니다.