728x90
반응형
Streamlit과 Langchain으로 TTS 지원 챗봇 만들기
Streamlit과 Langchain을 이용해 음성 지원 기능이 있는 대화형 AI 챗봇을 만드는 방법을 알아보겠습니다. 이 프로젝트를 통해 우리는 텍스트 기반의 대화뿐만 아니라 AI의 응답을 음성으로도 들을 수 있는 챗봇을 구현할 것입니다.
1. 프로젝트 개요
이 포스팅에서 소개할 챗봇은 다음과 같은 특징을 가집니다:
- Streamlit을 사용한 웹 기반 사용자 인터페이스
- Langchain을 이용한 대화 관리 및 AI 모델 연동
- 실시간 토큰 생성 속도 표시
- TTS(Text-to-Speech) 기능으로 AI 응답을 음성으로 변환
2. 환경 설정
먼저, 프로젝트를 위한 가상 환경을 만들어 봅시다:
python -m venv chatbot_env
source chatbot_env/bin/activate # Windows: chatbot_env\Scripts\activate
3. 필요한 라이브러리 설치
다음 명령어로 필요한 라이브러리들을 설치합니다:
pip install streamlit langchain langchain-community ollama TTS
4. 코드 구현
이제 app.py
파일을 만들고 다음 코드를 작성합니다:
import streamlit as st
from langchain_community.llms import Ollama
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
import time
import torch
from TTS.api import TTS
# Ollama 모델 초기화
llm = Ollama(model="llama2")
# 대화 체인 초기화
conversation = ConversationChain(
llm=llm,
memory=ConversationBufferMemory()
)
# TTS 모델 초기화
device = "cuda" if torch.cuda.is_available() else "cpu"
tts = TTS("tts_models/en/ljspeech/tacotron2-DDC", progress_bar=False).to(device)
# Streamlit 앱 구성
st.title("AI 챗봇 with TTS")
# 세션 상태 초기화
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} 토큰/초")
# TTS로 음성 생성
tts.tts_to_file(text=full_response, file_path="response.wav")
# 음성 재생 버튼 추가
st.audio("response.wav")
st.session_state.messages.append({"role": "assistant", "content": full_response})
5. 실행 및 테스트
터미널에서 다음 명령어로 앱을 실행합니다:
streamlit run app.py
브라우저가 자동으로 열리고 챗봇 인터페이스가 표시됩니다. 질문을 입력하고 AI의 응답을 확인해보세요. 응답 아래에 있는 오디오 플레이어를 통해 TTS로 변환된 음성을 들을 수 있습니다. 아래 파일을 테스트 예시 입니다.
6. 문제 해결 팁
- Ollama 연결 오류:
- Ollama 서버가 실행 중인지 확인합니다. (
ollama serve
명령어로 실행) - 방화벽 설정을 확인합니다.
- Ollama 모델이 설치되어 있는지 확인합니다. (
ollama list
)
- Ollama 서버가 실행 중인지 확인합니다. (
- TTS 모델 다운로드 오류:
- 인터넷 연결을 확인합니다.
- TTS 캐시 폴더를 정리하고 다시 시도합니다.
- TTS 라이브러리를 재설치합니다.
- 메모리 부족 오류:
- 더 작은 모델을 사용하거나 시스템 리소스를 확인합니다.
- 가상 환경을 재시작합니다.
이 프로젝트를 통해 우리는 Streamlit과 Langchain을 사용하여 TTS 기능을 갖춘 대화형 AI 챗봇을 만들어 보았습니다. 이 챗봇은 텍스트 기반의 대화뿐만 아니라 음성 응답도 제공하여 사용자 경험을 한층 더 향상시킵니다. 이 프로젝트는 AI, 웹 개발, 음성 처리 기술의 결합을 보여주는 좋은 예시입니다. 여러분은 이를 기반으로 더욱 발전된 기능을 추가하거나, 실제 비즈니스 요구사항에 맞게 커스터마이징할 수 있습니다. AI 기술은 계속해서 발전하고 있으며, 이런 프로젝트들을 통해 우리는 그 발전의 최전선에 서 있습니다. 여러분만의 독특하고 혁신적인 AI 애플리케이션을 만들어 보세요!
728x90
반응형
'언어모델 LLM > 프로젝트 예제' 카테고리의 다른 글
로컬 모델로 Streamlit 챗봇 만들기 (0) | 2024.07.12 |
---|---|
Streamlit으로 PDF 추출기 만들기 (0) | 2024.07.12 |
RAG vs Non-RAG: 지하철 정보 검색 실험 (0) | 2024.07.10 |
ollama API로 간단한 애플리케이션 만들기 (0) | 2024.07.06 |