🤖 AI

[LLM] 체인(Chains) - 대화형 체인

heywantodo 2024. 7. 9. 09:48
728x90
반응형

[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

 

728x90
반응형