반응형
LangChain에서 LLMChain은 가장 기본적이면서도 중요한 개념입니다.
간단히 말해, 하나의 프롬프트(Prompt)와 하나의 LLM(대규모 언어 모델) 호출 과정을 연결해주는 파이프라인이라고 할 수 있는데요.
여기에 메모리(Memory)를 더하면, 여러 번의 호출에서 맥락(Context) 을 유지할 수 있어, 대화형 또는 연속적인 작업에 활용하기가 좋아집니다.
이번 글에서는 LLMChain이 어떤 원리로 동작하는지, 그리고 어떻게 확장할 수 있는지 살펴보겠습니다.
1. LLMChain이란?
1) 정의
- LLMChain은 LangChain에서 가장 기본적인 체인(Chain) 형태입니다.
- “하나의 입력(문자열)”을 받아서 “하나의 LLM 호출”을 실행한 뒤, “하나의 결과(문자열)”를 반환합니다.
예를 들어,
[User Input] → [프롬프트 작성] → [LLM 호출] → [LLM Output]
이 과정을 체인 형태로 묶어둔 것이 바로 LLMChain이죠.
2) 구조
LLMChain은 다음을 필수 요소로 가집니다.
- LLM
- 실제 모델(예: ChatOpenAI, GPT-3, 등) 인스턴스
- Prompt
- 사용자 입력을 합쳐서 모델에 전달할 문자열 템플릿
- (Optional) Memory
- 여러 번 호출할 때, 이전 호출(대화나 결과)에 대한 기록을 유지해, 맥락을 유지할 수 있도록 돕는 구성 요소
2. 기본 사용 예시
아래 예시는 가장 기본적인 LLMChain입니다.
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
# 1. LLM 설정
llm = OpenAI(temperature=0.7)
# 2. 프롬프트 템플릿
prompt = PromptTemplate(
input_variables=["input_text"],
template="Please summarize the following text:\n\n{input_text}\n"
)
# 3. LLMChain 구성
chain = LLMChain(
llm=llm,
prompt=prompt,
verbose=True
)
# 4. 체인 실행
result = chain.run("LangChain is a powerful toolkit for developing with large language models.")
print("Summary:", result)
코드 설명
- LLM
- OpenAI의 API를 이용해 온도(temperature)=0.7로 응답에 적절한 창의성을 부여했습니다.
- PromptTemplate
- "input_text"라는 변수를 받아서, 실제로 모델에 “Please summarize…” 형태의 문자열을 구성해 줍니다.
- LLMChain
- llm와 prompt를 연결해, chain.run(...)을 호출할 때마다 프롬프트를 자동으로 생성하고, 모델을 호출합니다.
- 체인 실행
- chain.run("...")으로 사용자 입력을 주면, LLMChain이 내부적으로 완성된 프롬프트를 모델에 보내 요약 결과를 받아옵니다.
3. Memory로 확장하기
LLMChain 자체는 단발성 호출에 특화되어 있지만, 실제 서비스에서는 “대화” 형태나 “연속된 맥락”이 필요한 경우가 많습니다.
이럴 때 Memory를 연결하면, 이전 호출(질문이나 답변)을 자동으로 프롬프트에 합쳐주는 기능이 활성화됩니다.
예시: ConversationSummaryBufferMemory
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.memory import ConversationSummaryBufferMemory
llm = OpenAI(temperature=0.1)
memory = ConversationSummaryBufferMemory(
llm=llm,
max_token_limit=120,
memory_key="chat_history",
)
template = """
You are a helpful AI talking to a human.
{chat_history}
Human: {question}
You:
"""
chain = LLMChain(
llm=llm,
memory=memory,
prompt=PromptTemplate.from_template(template),
verbose=True,
)
chain.predict(question="My name is Nico")
chain.predict(question="I live in Seoul")
chain.predict(question="What is my name?")
코드 핵심
- ConversationSummaryBufferMemory
- 최근 대화는 원문으로, 오래된 대화는 요약해서 유지합니다.
- max_token_limit=120을 넘지 않도록 자동 관리.
- memory_key="chat_history"`
- 프롬프트에서 {chat_history} 위치에 대화 기록을 전달받습니다.
- 체인 호출
- 여러 번 chain.predict(...) 함수를 호출해도, 내부적으로 이전 대화가 chat_history에 쌓이므로,
모델은 “내 이름이 Nico였던가?” 같은 질문에도 맥락을 이해할 수 있게 됩니다.
- 여러 번 chain.predict(...) 함수를 호출해도, 내부적으로 이전 대화가 chat_history에 쌓이므로,
4. LLMChain vs. ConversationChain
- LLMChain
- LangChain에서 가장 기본적인 체인.
- 하나의 프롬프트, 하나의 LLM 호출 구조.
- Memory를 붙여 대화형 시나리오로 확장 가능.
- ConversationChain
- 내부적으로 LLMChain을 활용하지만, “대화(Conversation)”에 최적화된 세팅을 미리 제공.
- PromptTemplate, Memory 등의 설정이 더 간단하게 되어 있고, 대화에 특화된 코드 예시가 많습니다.
5. 활용 사례
- 간단한 텍스트 변환
- 예: 문장 요약, 번역, 스타일 변환
- LLMChain + PromptTemplate로 입력받은 텍스트를 단일 호출 형태로 처리
- 질문 응답(Q&A)
- 예: 사용자가 문서를 올려놓고 그에 대한 질문을 하면, “답변”을 돌려주는 기능
- 추가로 Memory(혹은 Vector DB)와 결합해, 여러 번 묻고 답하는 대화형 질의응답 가능
- 대화형 챗봇
- Memory를 붙여서 “유저가 이전에 말한 내용”을 계속 기억시키고, 맥락을 이어가는 챗봇
6. 마무리
- LLMChain은 LangChain의 기본 단위로, 프롬프트와 LLM을 연결해 손쉽게 AI 호출을 구현합니다.
- 처음에는 “단일 호출” 중심으로 이해하시면 되지만,
Memory 기능을 붙이면 연속된 대화나 맥락 유지가 필요한 시나리오로 확장할 수 있죠. - 복잡한 프로젝트에서도, 대부분은 여러 LLMChain(혹은 ConversationChain)을 조합해 다단계 로직(Agent, Tool 등)을 구현하는 식으로 발전합니다.
LLMChain을 잘 이해하고 나면, LangChain에서 “무엇이든” 프로그램 가능한 AI 시스템을 만들 수 있는 발판을 마련하게 됩니다.
간단하지만 강력한 LLMChain을 익혀, 여러분의 AI 프로젝트를 빠르고 유연하게 개발해 보세요!
반응형
'Data Analysis > AI' 카테고리의 다른 글
LCEL Based Memory와 RunnablePassthrough의 활용: LangChain의 진화된 메모리 관리 (0) | 2025.02.01 |
---|---|
Chat Based Memory: 대화형 AI의 기억 관리 이해하기 (0) | 2025.02.01 |
ConversationSummaryBufferMemory: 요약과 버퍼의 절묘한 조합 (0) | 2025.01.31 |
ConversationBufferWindowMemory: 핵심만 기억하는 효율적인 대화 메모리 (0) | 2025.01.29 |
LangChain의 메모리 개념과 ConversationBufferMemory 완벽 이해하기 (0) | 2025.01.29 |
댓글