본문 바로가기

IT/개발

(7) Langchain에서 memory를 사용해보자(conversation chain)

반응형

LangChain에서 memory는 체인 실행 사이에 이전 상황을 기억하여 애플리케이션 상태를 유지하는데 사용됩니다.

대부분의 LLM 애플리케이션에는 대화형 인터페이스가 있습니다. 메모리는 이전 대화에 소개된 정보를 참조할 수 있도록 지원합니다. 
대화형 시스템은 과거 메시지의 일부에 직접 액세스할 수 있어야 하고 더 복잡한 시스템이라면 지속적으로 이를 업데이트 하며 정보를 유지하는 등의 작업을 수행할 수 있어야 합니다. 

 

 

memory의 종류는 여러가지가 있지만 여기서는 ConversationBufferMemory를 예제로 확인해보겠습니다. 

(ConversationChain은 default로 ConversationBufferMemory를 사용)

 

1. chat model 지정 

import os
import apikeys #user defind, apikeys 숨기기

from langchain.chat_models import ChatOpenAI

#https://platform.openai.com/account/api-keys 에서 발급받는다. 유료

OPENAI_API_KEY = apikeys.OPENAI_API_KEY  

#환경 변수에 넣어준다
os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY

chatAI = ChatOpenAI(model_name='gpt-3.5-turbo', temperature=0.1)

 

2. memory를 사용하는 conversation chain 을 이용하여 대화를 기억해보자.

 


#langchain 중 ConversationChain 선택
from langchain.chains import ConversationChain

#대화를 이어갈 때 이전 대화를 기억하도록 하여 이후 대답에 반영하기
#ConversationChain은 default로 ConversationBufferMemory를 사용하도록 되어 있다.
#memory: BaseMemory = Field(default_factory=ConversationBufferMemory)

conversation = ConversationChain(llm=chatAI, verbose=True)

AI_response = conversation.predict(input="내연기관 자동차를 만드는 방법에 대해서 설명해줘")
print(AI_response)
AI_response = conversation.predict(input="전기차하고 다른점은 뭐야")
print(AI_response)
AI_response = conversation.predict(input="조금전에 이야기한 것들을 한줄로 요약해줘")
print(AI_response)

print(conversation.memory)

 

3. 결과 확인 

 

'''
Current conversation:
Human: 내연기관 자동차를 만드는 방법에 대해서 설명해줘
AI: 내연기관 자동차를 만드는 방법에 대해서 설명해드릴게요. 내연기관 자동차는 주로 다음과 같은 단계로 만들어집니다.
1. 엔진 설계: 내연기관 자동차의 핵심인 엔진을 설계합니다. 엔진은 연료를 연소시켜 움직임을 만들어내는 역할을 합니다. 엔진의 크기, 형태, 실린더 수 등을 결정하고, 연료 주입 시스템과 배 기 시스템도 설계합니다.
2. 부품 제작: 엔진을 구성하는 다양한 부품들을 제작합니다. 실린더, 피스톤, 크랭크샤프트, 밸브 등이 이에 해당합니다. 이러한 부품들은 정밀한 기술과 재료로 제작되어야 합니다.
3. 조립: 제작된 부품들을 엔진 케이스에 조립합니다. 이때 정밀한 조립 기술과 도구가 필요합니다. 엔진 내부의 부품들이 정확한 위치에 배치되어야 하며, 각 부품들이 원활하게 작동할 수 있도 록 조립되어야 합니다.
4. 시험 및 조정: 조립된 엔진을 시험하고 조정합니다. 이 단계에서는 엔진의 작동 상태를 확인하고, 필요한 조정 작업을 수행합니다. 연료 주입량, 밸브 타이밍 등을 조정하여 최적의 성능을 얻 을 수 있도록 합니다.
5. 자동차 제작: 엔진이 완성되면 이를 자동차에 장착합니다. 자동차의 다른 부품들과 연결하고, 차체를 제작하여 완성합니다. 이때는 엔진 외에도 변속기, 차축, 타이어, 조향장치 등 다양한 부 품들이 필요합니다.
6. 시험 주행: 제작된 자동차를 시험 주행하여 안전하고 원활하게 작동하는지 확인합니다. 속도, 조향, 제동 등을 테스트하여 문제가 없는지 확인하고, 필요한 조정 작업을 수행합니다.
이렇게 내연기관 자동차는 다양한 단계를 거쳐 만들어집니다. 각 단계에서는 정밀한 기술과 재료, 조립 기술 등이 필요하며, 안전하고 효율적인 자동차를 만들기 위해 많은 노력과 시간이 소요됩 니다.

Human: 전기차하고 다른점은 뭐야
AI: 전기차와 내연기관 자동차의 가장 큰 차이점은 동력원에 있습니다. 내연기관 자동차는 연료를 연소시켜 움직임을 만들어내는 반면, 전기차는 전기 에너지를 사용하여 움직입니다.
내연기관 자동차는 연료를 연소시켜서 엔진을 작동시키고, 이를 통해 차량을 움직입니다. 주로 휘발유나 디젤과 같은 연료를 사용하며, 연료 소비량과 배출 가스가 주요한 문제점으로 지적되고 있습니다.
반면에 전기차는 배터리에 저장된 전기 에너지를 사용하여 모터를 작동시키고, 이를 통해 차량을 움직입니다. 전기차는 완전히 전기로 작동하기 때문에 연료 소비량이 없으며, 대신 배터리의 용량과 충전 시간이 주요한 고려사항입니다.
또한, 내연기관 자동차는 엔진 소음과 진동이 발생할 수 있지만, 전기차는 모터가 작동할 때 거의 소음과 진동이 없습니다. 이로 인해 전기차는 더 조용하고 원활한 주행 경험을 제공할 수 있습니다.
또한, 내연기관 자동차는 연료를 구매해야 하고 주유소에서 주유를 해야 하지만, 전기차는 충전소에서 배터리를 충전할 수 있습니다. 이는 전기차의 운영 비용이 내연기관 자동차보다 저렴할 수  있다는 장점으로 언급됩니다.
마지막으로, 내연기관 자동차는 연료를 연소시켜서 배출 가스를 발생시키는 반면, 전기차는 전기 에너지를 사용하기 때문에 배출 가스가 없습니다. 이는 전기차가 환경 친화적인 대안으로 강조되 는 이유 중 하나입니다.

Human: 조금전에 이야기한 것들을 한줄로 요약해줘
AI:
> Finished chain.
내연기관 자동차는 연료를 연소시켜 움직이고, 주로 휘발유나 디젤을 사용합니다. 연료 소비량과 배출 가스가 문제점입니다. 전기차는 전기 에너지를 사용하여 움직이고, 배터리의 용량과 충전 시간이 고려사항입니다. 전기차는 조용하고 원활한 주행 경험을 제공하며, 운영 비용이 저렴하고 환경 친화적입니다.
'''

 

위와 같은 결과를 갖기 위해서 memory 에 저장된 내용을 들여다보면 다음과 같습니다 .

 

'''
memory에 저장된 내용을 확인해보기

chat_memory=ChatMessageHistory(
    messages=[
        HumanMessage(content='내연기관 자동차를 만드는 방법에 대해서 설명해줘', additional_kwargs={}, example=False),
        AIMessage(content='내연기관 자동차를 만드는 방법에 대해서 설명해드릴게요. 내연기관 자동차는 주로 다음과 같은 단계로 만들어집니다. \n\n1. 엔진 설계: 내연기관 자동차의 핵심인 엔진을 설계합니다. 엔진은 연료를 연소시켜 움직임을 만들어내는 역할을 합니다. 엔진의 크기, 형태, 실린더 수 등을 결정하고, 연료 주입 시스템과 배기 시스템도 설계합니다.\n\n2. 부품 제작: 엔진을 구성하는 다양한 부품들을 제작합니다. 실린더, 피스톤, 크랭크샤프트, 밸브 등이 이에 해당합니다. 이러한 부품들은 정밀한 기술과 재료로 제작되어야 합니다.\n\n3. 조립: 제작된 부품들을 조립하여 엔진을 완성합니다. 이때 정밀한 조립 기술과 도구가 필요합니다. 엔진의 내부 구조와 부품들이 정확하게 맞물려야 원활한 동작이 가능합니다.\n\n4. 시험 및 조정: 완성된 엔진을 시험하고 조정합니다. 이 단계에서는 연료 주입량, 밸브 타이밍 등을 조정하여 최적의 성능을 얻을 수 있도록 합니다.\n\n5. 자동차 제작: 완성된 엔진을 자동차에 장착합니다. 이때는 엔진과 연결되는 변속기, 차체, 타이어 등 다양한 부 품들을 함께 조립합니다.\n\n6. 시험 주행: 완성된 자동차를 시험 주행하여 안전하고 원활하게 작동하는지 확인합니다. 이때는 속도, 조향, 브레이크 등을 테스트하여 문제가 없는지 확인합니다.\n\n7. 출고: 시험 주행을 통과한 자동차는 출고되어 고객에게 전달됩니다. 이때는 보증서, 사용 설명서 등과 함께 고객에게 제공됩니다.\n\n이렇게 내연기관 자동차는 다양한 단계를 거쳐 만들어 지게 됩니다. 어떤 부분을 더 자세히 알고 싶으신가요?' , additional_kwargs={}, example=False),
        HumanMessage(content='전기차하고 다른점은 뭐야', additional_kwargs={}, example=False),
        AIMessage(content='전기차와 내연기관 자동차의 가장 큰 차이점은 동력원에 있습니다. 내연기관 자동차는 연료를 연소시켜 움직임을 만들어내는 반면, 전기차는 전기 에너지를 사용하여 움직입니다. \n\n내연기관 자동차는 연료를 연소시켜 엔진을 작동시키고, 이를 통해 동력을 발생시킵니다. 반면에 전기차는 배터리에 저장된 전기 에너지를 사용하여 전기 모터를 작동시키고, 이를 통해 동력을 발생시킵니다. \n\n또한, 내연기관 자동차는 연료를 소모하고 배기 가스를 발생시키는 반면, 전기차는 전기 에너지를 사용하므로 직접적인 배기 가스를 발생시키지 않습니다. 이는 환경 친화적인 면에서 전기차가 장점을 가지는 요인 중 하나입니다.\n\n또한, 내연기관 자동차는 변속기를 사용하여 속도를 조절하는 반면, 전기차는 전기 모터의 회전 속도를 조절하여 속도를 조절합니다.  이로 인해 전기차는 가속성이 좋고, 소음이 적으며, 운전이 부드럽다는 장점을 가지고 있습니다.\n\n전기차와 내연기관 자동차는 동력원과 작동 원리의 차이로 인해 다른 특징과 장단점을 가지고 있습니다. 추가적인 정보가 필요하시면 알려주세요.', additional_kwargs={}, example=False),
        HumanMessage(content='조금전에 이야기한 것들을 한줄로 요약해줘', additional_kwargs={}, example=False),
        AIMessage(content='내연기관 자동차는 연료를 연소시켜 엔진을 작동시키고, 전기차는 전기 에너지를 사용하여 전기 모터를 작동시킵니다. 내연기관 자동차는 배기 가스를 발생시키지만, 전기차는 직접적인 배기 가스를 발생시키지 않습니다. 전기차는 가속성이 좋고, 소음이 적으며, 운전이 부드럽다는 장점을 가지고 있습니다.', additional_kwargs={}, example=False)
        ]
        )
        output_key=None input_key=None return_messages=False human_prefix='Human' ai_prefix='AI' memory_key='history'
'''

 

반응형

 

참고. 다양한 메모리의 종류

'''
다양한 memory 종류

ConversationBufferMemory : 대화 기록(기본)
ConversationBufferWindowMemory : 마지막 n개의 대화만 기억
ConversationSummaryBufferMemory : 대화 요약본 + 마지막 n토큰 기억
ConversationTokenBufferMemory : 마지막 n토큰 기억
ConversationSummaryMemory : 대화의 요약본을 저장
등등..

'''

 

반응형