본문 바로가기

인공지능/Lang Chain

LangChain 랭체인의 구조

728x90
반응형

LangChain의 핵심 컴포넌트 이해하기

LangChain의 핵심 컴포넌트 이해하기

LangChain의 주요 컴포넌트에 대해 알아보겠습니다. LangChain은 언어 모델을 사용한 애플리케이션 개발을 쉽게 만들어주는 프레임워크입니다. 각 컴포넌트를 살펴보면서 LangChain의 구조를 이해해 봅시다.

LangChain의 핵심 컴포넌트 이해하기

데이터의 구조를 정의하는 Schema (스키마)

스키마는 LangChain에서 데이터의 구조를 정의합니다. 주요 스키마 타입으로는 Text, ChatMessages, Examples, Document 등이 있습니다.

1.Document

LangChain에서 텍스트 데이터를 다루는 기본 단위입니다. 주요 텍스트 내용인 'page_content'와 추가 정보를 담는 'metadata'로 구성됩니다. 이는 문서 처리, 정보 검색, 요약 등의 작업에서 중요한 역할을 합니다.

2.BaseMessage

대화 시스템에서 사용되는 메시지의 기본 형태를 정의합니다. 여기에는 세 가지 주요 하위 클래스가 있습니다.

  • HumanMessage: 사용자의 입력을 나타냅니다.
  • AIMessage: AI 시스템의 응답을 나타냅니다.
  • SystemMessage: 시스템 지시사항이나 대화의 전반적인 컨텍스트를 제공합니다.
    이 메시지 타입들은 챗봇이나 대화형 AI 시스템을 구축할 때 대화의 흐름을 구조화하는 데 사용됩니다.
3.ChatResult

ChatResult는 대화 모델의 응답을 구조화하는 데 사용됩니다. 이는 AI가 생성한 메시지뿐만 아니라 토큰 사용량 같은 추가 정보도 포함할 수 있어, 대화 시스템의 성능을 모니터링하고 최적화하는 데 도움이 됩니다.

4.Example

Example은 few-shot 학습이나 프롬프트 예시를 위해 사용됩니다. 입력과 그에 대응하는 기대 출력을 쌍으로 저장하여, 모델이 특정 작업을 어떻게 수행해야 하는지 예시를 제공합니다.

5.AgentAction

AgentAction은 AI 에이전트가 수행할 행동을 나타냅니다. 사용할 도구, 도구에 대한 입력, 그리고 행동에 대한 설명 등을 포함합니다. 이는 복잡한 작업을 수행하는 AI 에이전트를 구축할 때 중요한 역할을 합니다.

6.Generation

Generation은 언어 모델이 생성한 단일 출력을 나타냅니다. 생성된 텍스트뿐만 아니라 생성 과정에 대한 추가 정보(예: 생성 이유, 확률 로그 등)도 포함할 수 있습니다.

이러한 스키마들은 LangChain 내에서 데이터를 일관되게 구조화하고 처리하는 데 중요한 역할을 합니다. 이를 통해 다양한 컴포넌트들 사이의 데이터 흐름을 표준화하고, 복잡한 AI 시스템을 더 쉽게 구축할 수 있게 해줍니다. 예를 들어, Document 스키마를 사용하여 대량의 텍스트 데이터를 처리하고, BaseMessage와 그 하위 클래스들을 사용하여 대화 흐름을 관리하며, AgentAction을 통해 복잡한 의사결정 과정을 구현할 수 있습니다.

예시: Document 스키마를 사용하여 텍스트 데이터와 메타데이터를 함께 저장할 수 있습니다.

from langchain.schema import Document

doc = Document(page_content="LangChain은 강력한 프레임워크입니다.", metadata={"source": "블로그", "date": "2023-06-30"})

Models (모델)

LangChain은 다양한 언어 모델을 지원합니다. 주요 모델 유형으로는 Language Model, Chat Model, Text Embedding Model이 있습니다.

예시: OpenAI의 GPT-3.5를 사용하는 방법:

from langchain.llms import OpenAI

llm = OpenAI(temperature=0.9)
result = llm.predict("인공지능의 미래에 대해 설명해주세요.")
print(result)

Prompts (프롬프트)

프롬프트는 언어 모델에 입력할 텍스트를 구성하는 데 사용됩니다. Prompt Value, Prompt Template, Example Selectors, Output Parser 등이 포함됩니다.

예시: 프롬프트 템플릿 사용:

from langchain import PromptTemplate

template = "다음 주제에 대해 100단어로 요약해주세요: {topic}"
prompt = PromptTemplate(input_variables=["topic"], template=template)
result = prompt.format(topic="인공지능의 윤리")
print(result)

Indexes (인덱스)

인덱스는 대량의 텍스트 데이터를 효율적으로 처리하고 검색하는 데 사용됩니다. Document Loaders, Text Splitters, Retriever, Vectorstore 등이 포함됩니다.

예시: 텍스트를 청크로 분할하기:

from langchain.text_splitter import CharacterTextSplitter

text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_text(long_text)

Memory (메모리)

메모리 컴포넌트는 대화의 이전 내용을 저장하고 관리합니다. 주로 Chat Message History를 다룹니다.

예시: 대화 기록 저장하기:

from langchain.memory import ConversationBufferMemory

memory = ConversationBufferMemory()
memory.chat_memory.add_user_message("안녕하세요!")
memory.chat_memory.add_ai_message("안녕하세요! 무엇을 도와드릴까요?")

Chains (체인)

체인은 여러 컴포넌트를 연결하여 복잡한 작업을 수행합니다. Chain, LLMChain, Index-related chains, Prompt Selector 등이 있습니다.

예시: 간단한 LLMChain 사용:

from langchain import LLMChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate

llm = OpenAI(temperature=0.9)
prompt = PromptTemplate(input_variables=["product"], template="What is a good name for a company that makes {product}?")
chain = LLMChain(llm=llm, prompt=prompt)
result = chain.run("eco-friendly water bottles")
print(result)

Agents (에이전트)

에이전트는 주어진 목표를 달성하기 위해 자동으로 도구를 선택하고 사용합니다. Tool, Toolkit, Agent, Agent Executor 등으로 구성됩니다.

예시: 간단한 에이전트 생성 및 실행:

from langchain.agents import Tool, AgentExecutor, LLMSingleActionAgent, AgentOutputParser
from langchain.prompts import StringPromptTemplate
from langchain import OpenAI, SerpAPIWrapper, LLMChain

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

prompt = StringPromptTemplate.from_template("""Answer the following questions as best you can. You have access to the following tools:

{tools}

Use the following format:

Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [{tool_names}]
Action Input: the input to the action
Observation: the result of the action
... (this Thought/Action/Action Input/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question

Question: {input}
{agent_scratchpad}""")

llm_chain = LLMChain(llm=OpenAI(temperature=0), prompt=prompt)
agent = LLMSingleActionAgent(llm_chain=llm_chain, output_parser=output_parser, stop=["\nObservation:"], allowed_tools=tool_names)
agent_executor = AgentExecutor.from_agent_and_tools(agent=agent, tools=tools, verbose=True)

agent_executor.run("What's the weather like in SF?")

이렇게 LangChain의 주요 컴포넌트들을 살펴보았습니다. 각 컴포넌트는 특정 기능을 담당하며, 이들을 조합하여 강력한 AI 애플리케이션을 만들 수 있습니다. LangChain을 사용하면 복잡한 언어 모델 기반 시스템을 더 쉽게 구축할 수 있습니다.

반응형