728x90
반응형
Streamlit과 Langchain으로 만드는 LLaMA 3.1 기반 챗봇
최신 LLaMA 3.1 모델을 활용하여 실시간 토큰 생성 속도를 보여주는 대화형 챗봇을 만드는 방법을 알아보겠습니다. 이 프로젝트에서는 Streamlit을 사용해 웹 인터페이스를 구축하고, Langchain을 통해 LLaMA 모델을 사용하겠습니다.
1. 프로젝트 설정
먼저, 우리의 개발 환경을 설정해 봅시다.
가상 환경 생성
프로젝트의 의존성을 관리하기 위해 가상 환경을 사용하는 것이 좋습니다.
python -m venv chatbot_env
source chatbot_env/bin/activate # Windows: chatbot_env\Scripts\activate
필요한 패키지 설치
pip install streamlit langchain langchain-community
Ollama 설치 및 LLaMA 3.1 모델 다운로드
- Ollama 웹사이트에서 Ollama를 다운로드하고 설치합니다.
- 터미널에서 다음 명령어를 실행하여 LLaMA 3.1 모델을 다운로드합니다:
ollama pull llama3.1
2. 코드 구현
챗봇 애플리케이션의 코드를 작성해 봅시다.
import streamlit as st
from langchain_community.llms import Ollama
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
import time
# Ollama 모델 초기화
llm = Ollama(model="llama3.1")
# 대화 체인 초기화
conversation = ConversationChain(
llm=llm,
memory=ConversationBufferMemory()
)
# Streamlit 앱 구성
st.title("LLaMA 3.1 챗봇 (토큰 속도 표시 포함)")
# 세션 상태 초기화
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
# 토큰 속도 계산 (초당 토큰 수)
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})
# 채팅 기록 표시
st.sidebar.header("채팅 기록")
for message in st.session_state.messages:
st.sidebar.text(f"{message['role']}: {message['content'][:50]}...")
3. 코드 설명
모델 및 대화 체인 초기화
llm = Ollama(model="llama3.1")
conversation = ConversationChain(
llm=llm,
memory=ConversationBufferMemory()
)
여기서는 LLaMA 3.1 모델을 초기화하고, 대화 기록을 유지하기 위한 메모리를 가진 대화 체인을 설정합니다.
Streamlit 앱 구성
st.title("LLaMA 3.1 챗봇 (토큰 속도 표시 포함)")
Streamlit을 사용하여 웹 앱의 제목을 설정합니다.
대화 기록 관리
if "messages" not in st.session_state:
st.session_state.messages = []
세션 상태를 사용하여 대화 기록을 유지합니다.
사용자 입력 처리 및 응답 생성
if prompt := st.chat_input("무엇이 궁금하신가요?"):
# ... (사용자 입력 처리)
for chunk in llm.stream(prompt):
# ... (응답 생성 및 토큰 속도 계산)
사용자 입력을 받아 LLaMA 모델을 통해 응답을 생성하고, 실시간으로 토큰 생성 속도를 계산하여 표시합니다.
4. 실행 방법
- 위의 코드를
app.py
파일로 저장합니다. - 터미널에서 다음 명령어를 실행합니다:
streamlit run app.py
- 웹 브라우저가 자동으로 열리고 챗봇 인터페이스가 표시됩니다.
5. 실행결과
Streamlit과 Langchain의 조합은 복잡한 AI 모델을 손쉽게 웹 애플리케이션으로 구현할 수 있게 해주었습니다. 실시간 토큰 생성 속도 표시 기능은 LLM의 작동 방식을 시각적으로 이해할 수 있게 해주는 독특한 특징입니다. 이는 교육 목적으로도, 모델 성능 분석 용도로도 유용하게 사용될 수 있습니다.
728x90
반응형
'언어모델 LLM > 렝체인 Langchain' 카테고리의 다른 글
Langchain과 Flask로 만드는 영화 검색 프로그램 (0) | 2024.07.09 |
---|---|
Langchain과 mistral 모델을 이용한 텍스트 요약 예제 (0) | 2024.07.07 |
LangChain으로 만드는 AI 강아지 이름 생성기 (0) | 2024.07.06 |