[LLM] 체인(Chains) - 대화형 체인
체인(Chain) 생성 단계는 이전의 7단계 과정을 모두 하나로 묶어 하나의 RAG 파이프라인으로 조립하여 완성하는 단계다.
LCEL(LangChain Expression Language) 문법을 사용하여 이전 7단계의 전 과정을 하나의 체인으로 묶는다.
💡 LangChain Expression Language
체인을 쉽게 구성할 수 있는 선언적 방식으로 랭체인을 더 쉽게 사용할 수 있게 해준다.
LCEL 식은 파이프(|) 문자를 사용해 변수를 체인으로 연결한다.
chain = prompt | model | output_parser
서로 다른 구성 요소를 연결하고 한 구성 요소의 출력을 다음 구성 요소의 입력으로 전달한다.
대화형 체인(Conversation Chain)
대화형 AI 모델의 인스턴스를 생성하고, 이를 통해 사용자와의 대화를 처리할 수 있다.
ConversationChain 클래스의 인스턴스를 생성하여 문자열을 입력받아 결과를 반환한다.
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
from langchain_community.llms import Ollama
llm = Ollama(model="gemma:latest")
conversation = ConversationChain(
llm=llm,
verbose=False,
memory=ConversationBufferMemory(memory_key="history"),
)
response = conversation.invoke({"input":"양자역학에 대해 설명해줘."})
response
conversation.predict 함수를 사용하면 주어진 입력에 대한 모델의 반응을 예측할 수 있다.
해당 함수를 사용하는 예시는 다음과 같다. 주어진 입력을 분석하고, 그 결과를 불렛 포인트로 요약하여 반환한다.
output = conversation.predict(
input="이전의 내용을 불렛포인트로 요약해줘. emoji도 추가해줘."
)
output
01-1. streaming: 실시간 출력
스트리밍 방식으로 대화형 AI 모델을 구현한다. StreamingStdOutCallbackHandler 클래스를 사용하여, 새로운 토큰이 생성될 때마다 이를 출력하는 기능을 정의한다.
from langchain_community.llms import Ollama
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
from langchain.callbacks.manager import CallbackManager
callback_manager = CallbackManager([StreamingStdOutCallbackHandler()])
llm = Ollama(model='gemma:latest', callbacks=callback_manager)
response = llm.invoke("AI의 역사에 대해 설명해줘")
response
01-2. 휴먼 접두사 & AI 접두사 변경
기본적으로 접두사는 "사람"으로 설정되어있지만, 원하는대로 변경이 가능하다.
PromptTemplate 클래스를 사용하여 질문과 맥락을 입력받아 답변을 준비하는 템플릿을 생성할 수 있다.
from langchain_core.prompts import ChatPromptTemplate
template = """
당신은 10년차 엑셀 전문가 입니다. 아래 대화내용을 보고 질문에 대한 적절한 답변을 해주세요
#대화내용
{context}
----
🌱고객: {question}
🤖전문가:"""
prompt = ChatPromptTemplate.from_template(template)
ConversationBufferMemory 클래스는 대화의 맥락을 관리하는 데 사용된다.
memory = ConversationBufferMemory(
memory_key="context", # 대화의 맥락을 저장하는 키
human_prefix="🌱고객", # 사람이 말하는 부분에 붙는 접두사
ai_prefix="🤖전문가", # AI가 말하는 부분에 붙는 접두사
)
템플릿이 생성이 완료되었으면 대화형 체인을 구성한다.
conversation = ConversationChain(
llm=stream_llm,
prompt=prompt,
memory=memory,
input_key="question",
verbose=False,
)
answer = conversation.predict(
question="엑셀에서 VLOOKUP 함수는 무엇인가요? 간단하게 설명해주세요"
)
memory.load_memory_variables를 호출하여 메모리에 저장된 변수들을 로드할 수 있다.
print(
memory.load_memory_variables({})["context"]
)
출처
https://wikidocs.net/book/14314
'🤖 AI' 카테고리의 다른 글
[CrewAI] CrewAI 시작하기 (1) | 2024.11.19 |
---|---|
[CrewAI] CrewAI란? (0) | 2024.11.18 |
[LLM] 체인(Chains) - 문서 체인 (0) | 2024.07.10 |