brunch

You can make anything
by writing

C.S.Lewis

by 최재철 Nov 20. 2024

[입문] 2. LangChain 메모리 추가하기

(실습) ollama와 함께 기억상실 없는 AI 채팅 도우미 만들기

이 글에서는 LangChain을 사용해 AI 채팅 도우미를 만드는 방법을 설명하겠습니다. 

AI 가 자연스럽게 대화를 이어가기 위해서는 이전 대화의 내용을 기억하는 기능이 필수적입니다. 

이를 위해 RunnableWithMessageHistory라는 LangChain의 클래스를 활용해 보겠습니다.


(단, 이 글은 LangChain에 대해 기본적인 이해가 있는 분들을 대상으로 합니다. 처음 접하신다면 

LangChain 공식 문서 를 먼저 참고해 주세요. �)


환경 설정

아래 라이브러리를 설치해야 합니다. 버전을 정확히 맞추는 것이 중요합니다.

langchain                                0.2.16
langchain-community          0.2.17
langchain-core                       0.2.41
langchain-ollama                  0.2.0

LLM 실행 환경  

LLM 실행 도구: ollama 0.4.2

사용 모델: openhermes


openhermes는 4.1GB 크기의 LLM 모델입니다. 아래 명령어로 다운로드할 수 있습니다.

$ ollama run openhermes

(Tip) ollama 다운로드 가능한 LLM 모델의 목록은 여기에서 확인할 수 있습니다.


대화의 핵심: 메시지 이력 기억하기

일반적인 대화는 질문과 답변이 오가며 연속성을 유지합니다. 가령 이런 대화가 있을 수 있습니다.  

    1. 사용자: 오늘 날씨는 어때요?

     2. AI: 서울은 맑고 화창한 날씨입니다.

    3. 사용자: 그러면 내일은요?


위 대화처럼 AI가 직전의 대화 맥락을 기억하지 못한다면, "내일은요?"라는 질문에 답을 제대로 하지 못합니다. LangChain은 이러한 연속성을 유지할 수 있는 도구를 제공합니다. 여기서 중요한 기능이 바로 RunnableWithMessageHistory입니다.


먼저 소스와 결과부터 살펴보겠습니다. 

소스 

ollama 설정과 RunnableWithMessageHistory


실제 채팅하는 영역


결과

결과를 보면, 오늘 날씨를 물어보고 "그러면 내일은요?" 라고 물어봤을 때, 문맥을 파악해서 날씨정보를 제공하지 못한다고 답변을 주는 것을 볼 수 있다. 

추가로, 기억에 해당되는 history 영역을 보면, session_id 로 대화를 나누었던 모든 이력이 저장되어 있음을 알 수 있습니다. 



LangChain의 새로운 채팅 기록 RunnableWithMessageHistory

RunnableWithMessageHistory의 개념도 (출처 : LangChain 웹 사이트 )

▶ RunnableWithMessageHistory란?

이 클래스는 이전 대화 이력을 기억하면서 대화를 자연스럽게 이어가도록 돕습니다. 대화 내용을 시계열로 추적하며, 새로운 질문과 응답을 지속적으로 기록합니다.


공식 문서: RunnableWithMessageHistory 상세 설명


▶ 주요 특징  

대화 이력 관리: 이전 대화를 불러오고, 새로 생성된 응답을 기록으로 저장합니다.

여러 세션 관리: session_id를 사용해 사용자별 대화 기록을 구분합니다.

유연한 설정: 클래스 내부에서 다양한 키와 설정을 커스터마이징할 수 있습니다.


(※ 주의) LangChain에서 기존 ConversationChain 클래스는 더 이상 업데이트되지 않습니다. 대신 RunnableWithMessageHistory는 더 강력하고 유연한 기능을 제공합니다.


▶ 주요 매개변수 설명

이 클래스는 다양한 매개변수를 통해 동작을 설정할 수 있습니다. 아래는 쉽게 이해할 수 있도록 설명한 내용입니다.  


- get_session_history세션 ID(대화별 고유 ID)를 받아 해당 대화 기록을 반환합니다. 새로운 세션이면 새 기록을 만듭니다.

- input_messages_keyAI가 입력으로 받는 데이터에서 대화 메시지를 포함하는 키를 지정합니다.

- output_messages_keyAI가 출력으로 내보내는 데이터에서 메시지를 포함하는 키를 지정합니다.

- history_messages_key입력 데이터에서 히스토리 메시지를 사용하는 키를 설정합니다.

- history_factory_config대화 기록을 생성할 때 필요한 추가 설정을 담습니다.


▶ 실제 활용 예시

이 클래스는 다양한 상황에서 활용할 수 있습니다.

    1. 대화형 AI 채팅 도우미(챗봇) 개발

        사용자의 대화 내역을 기반으로 AI의 응답을 자연스럽게 조정할 수 있습니다.

    2. 복잡한 데이터 처리

        이전 단계의 데이터를 기억하고, 이를 기반으로 다음 단계의 결과를 결정할 때 유용합니다.

    3. 사용자 상태 관리

        쇼핑몰이나 정보 제공 앱에서 사용자가 이전에 클릭한 항목이나 선택한 정보를 기반으로 맞춤형 

        화면을 제공합니다.


RunnableWithMessageHistory는 인메모리방식으로 작동됩니다. 그래서, 빠르게 기록을 읽고 쓸 수 있어 테스트나 소규모 앱 개발에 적합한 장점이 있지만, 반대로 앱을 종료하면 기록이 사라진다는 단점이 있습니다. 그러므로, 대규모 시스템에서는 데이터베이스에 저장하는 방식으로 변경이 필요합니다.


openhermes 모델

openhermes 모델


OpenHermes 2.5는 Mistral 7B 모델을 기반으로 성능을 높이기 위해 추가 학습된 최신 AI 모델입니다. 이 모델은 기존 OpenHermes 2를 개선하여 만들어졌으며, 특히 코드 데이터를 학습한 점이 큰 특징입니다.

OpenHermes 2는 약 90만 건의 데이터로 추가 학습되고 있습니다.

한편 OpenHermes 2.5는, 더 많은 약 100만건의 코드 데이터 세트로 추가 학습되고 있습니다.

OpenHermes 2.5의 특징은 그 추가 학습에서 사용된 코드 데이터는 대부분 GPT-4에서 생성된 데이터를 사용하고 있다는 점과 코드 데이터를 일정비율(추정으로 총 데이터 세트의 약 7-14%)로 트레이닝함으로써 몇몇 비코드 벤치마크의 성능이 향상되었다는 점입니다.


[참고사이트] 

https://ollama.com/library/openhermes

https://huggingface.co/teknium/OpenHermes-2.5-Mistral-7B


마치며

이번 글에서는 LangChain과 Ollama를 사용하여 대화형 AI 채팅 도우미를 만드는 기본적인 과정을 살펴보았습니다. 특히, 대화의 맥락을 기억하여 보다 자연스러운 응답을 생성할 수 있도록 돕는 LangChain의 RunnableWithMessageHistory 클래스를 중심으로 설명했습니다. 이를 통해 대화 기록을 기억하고 활용하는 방법을 배웠습니다.

이처럼, LangChain과 Ollama는 AI 채팅 도우미를 개발하는데 필요한 강력한 도구를 제공합니다.

앞으로 이 기술을 활용해 창의적인 AI 애플리케이션을 만들어보세요. �

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari