언어모델 LLM/프로젝트 예제

로컬 모델로 Streamlit 챗봇 만들기

General AI 2024. 7. 12. 22:34
728x90
반응형

로컬 모델로 Streamlit 챗봇 만들기

로컬 AI 모델을 사용하여 Streamlit으로 챗봇을 만드는 방법에 대해 알아보겠습니다. 이 방법을 통해 OpenAI의 API에 의존하지 않고도 자신만의 ChatGPT 스타일 챗봇을 만들 수 있습니다.

로컬 모델로 Streamlit 챗봇 만들기

챗봇 만들기

사용할 주요 도구들은 다음과 같습니다:

  1. Langchain: 대화 관리와 AI 모델 연동을 위한 프레임워크
  2. Streamlit: 웹 인터페이스 구현을 위한 라이브러리
  3. Ollama: 로컬에서 AI 모델을 실행하기 위한 도구

먼저, 필요한 라이브러리를 설치해야 합니다.

pip install langchain streamlit ollama

 

그리고 Ollama를 설치하고 원하는 모델(예: llama2)을 다운로드해야 합니다. llama2 는 자동으로 다운로드 됩니다.

'''주의:''' Ollama의 설치 및 환경 설정에 대한 자세한 가이드는 [이 블로그 포스트]를 참고하세요. 특히 WSL 환경에서의 설정 방법이 상세히 설명되어 있습니다.

 

이제 Python 스크립트를 작성해 봅시다. 이 스크립트는 Streamlit을 사용하여 웹 인터페이스를 만들고, Langchain을 통해 Ollama의 AI 모델과 연동합니다. 또한 토큰 생성 속도를 실시간으로 표시하는 기능도 포함되어 있습니다.

import streamlit as st
from langchain.llms import Ollama
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
import time

# Ollama 모델 초기화
llm = Ollama(model="llama2")

# 대화 체인 초기화
conversation = ConversationChain(
    llm=llm, 
    memory=ConversationBufferMemory()
)

# Streamlit 앱 구성
st.title("ChatGPT 스타일 챗봇 (토큰 속도 표시)")

# 세션 상태 초기화
if "messages" not in st.session_state:
    st.session_state.messages = []

# 이전 대화 표시
for message in st.session_state.messages:
    with st.chat_message(message["role"]):
        st.markdown(message["content"])

# 사용자 입력 처리
if prompt := st.chat_input("무엇이 궁금하신가요?"):
    st.session_state.messages.append({"role": "user", "content": prompt})
    with st.chat_message("user"):
        st.markdown(prompt)

    with st.chat_message("assistant"):
        message_placeholder = st.empty()
        full_response = ""

        start_time = time.time()
        token_count = 0

        # 토큰별 출력
        for chunk in llm.stream(prompt):
            full_response += chunk
            token_count += 1
            elapsed_time = time.time() - start_time

            # 토큰 속도 계산 (tokens per second)
            token_speed = token_count / elapsed_time if elapsed_time > 0 else 0

            # 응답과 함께 토큰 속도 표시
            message_placeholder.markdown(f"{full_response}▌\n\n---\n토큰 수: {token_count} | 속도: {token_speed:.2f} 토큰/초")

        # 최종 응답 표시
        message_placeholder.markdown(f"{full_response}\n\n---\n최종 토큰 수: {token_count} | 평균 속도: {token_speed:.2f} 토큰/초")

    st.session_state.messages.append({"role": "assistant", "content": full_response})

이 스크립트는 다음과 같은 기능을 제공합니다:

  1. Streamlit을 사용한 대화형 웹 인터페이스
  2. Langchain을 통한 대화 기록 관리
  3. Ollama의 로컬 AI 모델을 사용한 응답 생성
  4. 실시간 토큰 생성 속도 표시

이 앱을 실행하려면 터미널에서 다음 명령어를 입력하세요:

streamlit run app.py

이렇게 하면 로컬 웹 브라우저에서 ChatGPT와 유사한 인터페이스의 챗봇 앱이 열립니다. 사용자는 질문을 입력할 수 있고, 앱은 Ollama의 llama2 모델을 사용해 응답을 생성합니다. 또한 실시간으로 토큰 생성 속도를 확인할 수 있어, 모델의 성능을 직관적으로 이해할 수 있습니다.

로컬 모델로 Streamlit 챗봇 만들기

이 프로젝트를 시작점으로 삼아 다양한 기능을 추가할 수 있습니다. 예를 들어, 다양한 Ollama 모델 선택 옵션, 대화 내용 저장 및 불러오기, 사용자 정의 프롬프트 템플릿 등을 구현해볼 수 있습니다.

로컬 AI 모델을 사용한 챗봇 개발은 데이터 프라이버시 보장, 인터넷 연결 없이 사용 가능, 커스터마이징의 자유 등 많은 장점이 있습니다. 이 튜토리얼을 통해 여러분만의 unique한 AI 챗봇을 만들어보시기 바랍니다.

더 자세한 정보를 원하신다면 다음 링크들을 참고해 보세요:

  1. Streamlit 공식 문서
  2. Langchain 공식 문서
  3. Ollama GitHub 저장소

즐거운 코딩 되세요!

728x90
반응형