Skip to content
튜토리얼
Streamlit
streamlit-chatbot

LLM 모델로 Streamlit 챗봇 만들기: 빠른 시작

Siri, Alexa 또는 고객 서비스 챗봇이 작동하는 방식에 대해 궁금한 적이 있습니까? 그럼 이 문서를 통해 그것에 대한 힌트를 얻게 될 것입니다. 이 문서에서는 디지털 커뮤니케이션을 혁신하는 편리한 AI 기반 도구인 챗봇의 세계를 간단히 살펴봅니다. 그들은 고객 서비스부터 대화형 경험까지 모든 곳에서 활용되고 있으며, 우리가 커뮤니케이션하고 정보에 접근하는 방식을 바꾸고 있습니다.

하지만 여기서 우리가 다루는 것은 어떤 챗봇이든 아닙니다. 우리는 Streamlit을 사용하여 챗봇을 만드는 데 초점을 맞춥니다. Streamlit은 머신 러닝 및 데이터 과학 열애자들 사이에서 인기 있는 오픈 소스 앱 프레임워크입니다. 그리고 그것만이 아닙니다 - 우리는 또한 LangChain과 LLM 모델을 통합하는 방법도 알아볼 것입니다. 그러니 준비하세요, 효율적이면서도 사용자의 개인 정보를 존중하는 개인 정보 보호 기능을 갖춘 챗봇을 만들어보려고 합니다.

Streamlit이란?

Streamlit은 웹 애플리케이션을 빠르고 쉽고 재미있게 구축하기 위한 오픈 소스 도구입니다. 머신 러닝 엔지니어와 데이터 과학자들이 웹 개발 지식이 전혀 필요하지 않고 자신들의 프로젝트를 기반으로 상호작용적인 웹 애플리케이션을 구축할 수 있도록 설계되었습니다. Streamlit의 간결함과 속도는 챗봇 UI를 만들기에 탁월한 선택이 됩니다.

챗봇이란?

챗봇은 실시간 대화를 제공하지 않고 텍스트 또는 텍스트 음성 변환을 통해 온라인 채팅 대화를 수행하는 소프트웨어 애플리케이션입니다. 챗봇 시스템은 대화 파트너로서 사람처럼 행동하는 것이 목적이며, 계속해서 조정 및 테스트해야 하며, 많은 챗봇이 산업 표준의 튜링 테스트를 충분히 통과하지 못하는 경우가 많습니다.

Streamlit으로 챗봇 만들기

환경 설정

챗봇을 구축하는 실제 과정에 앞서, 개발 환경을 필요한 라이브러리와 도구로 설정해야 합니다. 이렇게 하면 코드를 성공적으로 실행하고 챗봇이 의도한 대로 작동할 수 있게 됩니다. requirements.txt 파일에는 이 프로젝트에 필요한 라이브러리와 도구의 목록이 포함되어 있습니다. 다음은 포함된 내용입니다:

  • streamlit: 이 라이브러리는 머신 러닝 및 데이터 과학 프로젝트에 대한 상호작용적인 웹 앱을 생성하는 데 도움을 줍니다.
  • streamlit_chat: 이 Streamlit 컴포넌트는 챗봇 사용자 인터페이스를 생성하는 데 사용됩니다.
  • langchain: 이것은 언어 모델로 작동하는 애플리케이션 개발을위한 프레임워크입니다. 표준 인터페이스, 다양한 도구와의 통합, 일반적인 애플리케이션에 대한 end-to-end 체인을 제공합니다.
  • sentence_transformers: 이 라이브러리를 사용하면 텍스트의 의미적 표현 (즉, 임베딩)을 생성하기 위해 BERT, RoBERTa 등과 같은 변환 모델을 사용할 수 있습니다. 이 임베딩은 문서 인덱싱에 사용됩니다.
  • openai: 이것은 GPT-3.5-터보와 같은 OpenAI 언어 모델을 사용할 수 있게 해주는 공식 OpenAI 라이브러리입니다.
  • unstructured 및 unstructured[local-inference]: 이들은 문서 처리 및 비구조적 데이터 관리에 사용됩니다.
  • pinecone-client: 이것은 벡터 데이터에서 유사성 검색을 수행할 수있게 해주는 Pinecone 벡터 데이터베이스 서비스의 클라이언트입니다.

이러한 라이브러리를 모두 설치하려면 터미널에서 다음 명령을 실행하면 됩니다:

pip install -r requirements.txt

이 명령은 pip (파이썬의 패키지 설치자)에게 requirements.txt 파일에 명시된 라이브러리를 설치하라고 알려줍니다.

문서 인덱싱

챗봇을 구축하기 위한 우리의 여정의 다음 단계는 쿼리에 대답하기 위해 챗봇이 사용할 문서를 준비하고 인덱싱하는 것입니다. 이를 위해 indexing.py 스크립트를 사용합니다.

LangChain을 사용하여 디렉토리에서 문서 로드

indexing.py 스크립트에서 첫 번째 단계는 디렉토리에서 문서를 로드하는 것입니다. 이를 위해 LangChain에서 제공하는 DirectoryLoader 클래스를 사용합니다. 이 클래스는 디렉토리를 입력으로 받고 해당 디렉토리에 있는 모든 문서를 로드합니다.

from langchain.document_loaders import DirectoryLoader
 
directory = '/content/data'
 
def load_docs(directory):
 loader = DirectoryLoader(directory)
 documents = loader.load()
 return documents
 
documents = load_docs(directory)
len(documents)

문서 분리

문서를 로드한 후, 스크립트는 이러한 문서를 더 작은 청크로 분리합니다. 청크의 크기와 이러한 청크 사이의 오버랩은 사용자가 정의할 수 있습니다. 이렇게 함으로써 문서의 크기를 관리 가능한 수준으로 유지하고 분리로 인해 관련 정보가 누락되지 않도록합니다. 이를 위해 LangChain의 RecursiveCharacterTextSplitter 클래스가 사용됩니다.

from langchain.text_splitter import RecursiveCharacterTextSplitter
 
def split_docs(documents,chunk_size=500,chunk_overlap=20):
 text_splitter = RecursiveCharacterTextSplitter(chunk_size=chunk_size, chunk_overlap=chunk_overlap)
 docs = text_splitter.split_documents(documents)
 return docs
 
docs = split_docs(documents)
print(len(docs))

임베딩 생성

문서가 분리되면 AI 모델이 이해할 수 있는 형식으로 이 텍스트 청크를 변환해야 합니다. 이는 LangChain에서 제공하는 SentenceTransformerEmbeddings 클래스를 사용하여 텍스트의 임베딩을 생성함으로써 수행됩니다.

from langchain.embeddings import SentenceTransformerEmbeddings
 
embeddings = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2")

Pinecone에 임베딩 저장

임베딩이 생성된 후, 쉽게 액세스하고 검색할 수 있는 곳에 저장되어야합니다. Pinecone은 이 작업에 적합한 벡터 데이터베이스 서비스입니다. 샘플 코드는 다음과 같습니다:

from langchain.pinecone import PineconeIndexer
 
def index_embeddings(embeddings, docs):
    indexer = PineconeIndexer(api_key='your-pinecone-api-key', index_name='your-index-name')
    indexer.index(embeddings, docs)
 
index_embeddings(embeddings, docs)

이 스크립트는 Pinecone에서 인덱스를 생성하고 임베딩을 해당 텍스트와 함께 저장합니다. 이제 사용자가 질문을 하면 chatbot은 이 인덱스에서 가장 유사한 텍스트를 검색하고 해당하는 답변을 반환할 수 있습니다.

Streamlit을 사용하여 Chatbot 인터페이스 만들기

문서를 인덱싱하고 검색할 준비가 된 후, 이제 chatbot 인터페이스를 만드는 데 집중할 수 있습니다. Streamlit은 인터랙티브한 웹 애플리케이션을 간단하고 직관적인 방법으로 만들 수 있는 도구이며, chatbot UI에 이상적입니다.

Streamlit 채팅 컴포넌트

Streamlit 채팅 컴포넌트는 챗봇을 만드는 새로운 방법입니다. 챗 앱과 유사한 인터페이스를 제공하여 Streamlit에 배포된 챗봇이 멋진 UI를 갖도록 합니다. 이 컴포넌트를 사용하려면 pip를 사용하여 따로 설치해야합니다:

pip install streamlit-chat

설치 후 Streamlit 앱에서 불러올 수 있습니다:

import streamlit as st
from streamlit_chat import chat
 
@st.cache(allow_output_mutation=True)
def get_chat():
    return chat()
 
chat = get_chat()

이 코드는 Streamlit 앱에서 새로운 채팅 인터페이스를 생성합니다. add_message 메소드를 사용하여 이 채팅에 메세지를 추가할 수 있습니다:

chat.add_message("안녕하세요, 오늘은 어떻게 도와드릴까요?", "봇")

Chatbot을 LangChain과 통합하기

LangChain은 언어 모델을 기반으로 한 애플리케이션 개발을 위한 프레임워크입니다. LangChain은 체인에 대한 표준 인터페이스와 다른 도구와의 다양한 통합, 그리고 일반적인 애플리케이션을 위한 end-to-end 체인을 제공합니다. Chatbot을 LangChain과 통합하기 위해 main.pyload_chain 함수를 수정해야합니다.

from langchain import LangChain
 
def load_chain():
    chain = LangChain(api_key='your-openai-api-key')
    return chain
 
chain = load_chain()

이 코드는 OpenAI API 키를 사용하여 새로운 LangChain 인스턴스를 생성합니다. 이 인스턴스를 사용하여 사용자 쿼리에 대한 응답을 생성할 수 있습니다.

PyGWalker를 사용하여 No-Code 데이터 시각화 Stream 앱 만들기

PyGWalker (opens in a new tab)는 또 다른 멋진 No Code 도구입니다. 이 오픈 소스 Python 라이브러리를 사용하여 손쉽게 Streamlit 데이터 시각화 앱을 만들 수 있습니다.

PyGWalker + Streamlit 온라인 데모 (opens in a new tab)

PyGWalker (opens in a new tab)는 Tableau와 유사한 UI를 자신의 Streamlit 앱에 쉽게 포함할 수 있는 Python 라이브러리입니다.

이 강력한 데이터 시각화 Python 라이브러리를 사용하여 Streamlit 앱을 강화하는 자세한 단계를 설명하는 Coding is Fun의 Sven이 제작한 놀라운 비디오 (opens in a new tab)를 확인하세요!


PyGWalker 커뮤니티에 대한 Sven과 그의 큰 공헌 (opens in a new tab)에 대한 특별한 감사의 글입니다!

또한 다음 자원을 확인할 수도 있습니다:

PyGWalker로 Streamlit에서 데이터 시각화하기 (opens in a new tab)

개인 정보 보호 주의 기능

오늘날 디지털 시대에서는 데이터 침해와 개인 정보 보호 관련 문제가 점점 더 두드러집니다. 우리의 chatbot이 원활한 사용자 경험을 제공하는 것뿐만 아니라 사용자의 개인 정보를 존중하는 것이 매우 중요합니다. 그렇다면 어떻게 이를 달성할 수 있을까요?

먼저, chatbot이 사용자로부터 개인 데이터를 저장하지 않도록 할 수 있습니다. Streamlit 챗봇 컴포넌트는 기본적으로 개인 정보를 저장하지 않도록 설계되었습니다. 이는 챗봇과의 모든 대화가 데이터가 저장되거나 다른 목적으로 사용되지 않는 채로 사용자와 봇 사이에 유지됨을 의미합니다.

하지만 우리는 한 걸음 더 나아갈 수 있습니다. 개인 정보 보호 언어 모델을 사용하여 chatbot이 민감한 정보를 기억하지 않도록 할 수 있습니다. 이러한 모델은 민감한 데이터를 유지하지 못하도록 훈련되어 있습니다. 예를 들어, OpenAI의 GPT-3.5-turbo는 주어진 입력에서 민감한 정보를 기억하거나 사용하지 않고 인간과 유사한 텍스트를 생성하기 위해 설계된 언어 모델입니다. 이는 사용자가 실수로 민감한 정보를 공유하더라도 모델이 이 정보를 기억하거나 향후 상호 작용에 사용하지 않을 것을 의미합니다.

결론

Streamlit과 LangChain을 사용하여 chatbot을 구축하는 과정은 환경 설정, 문서 색인화, chatbot 인터페이스 생성 및 개인 정보 보호 주의 기능 확인으로 구성되어 간단한 프로세스입니다. LLM 모델과 오픈 소스 도구의 힘을 활용하여, 효율적이고 사용자 친화적이며 사용자의 개인 정보를 존중하는 chatbot을 만들 수 있습니다.

FAQs

  1. Streamlit에서 chatbot을 어떻게 만들 수 있나요? Streamlit을 사용하여 챗봇을 만드는 것은 개발 환경 설정, 문서 색인, 챗봇 인터페이스 작성 및 개인 정보 보호 기능 보장과 같은 여러 단계를 포함합니다. 이 문서는 Streamlit을 사용하여 챗봇을 구축하는 방법에 대한 포괄적인 안내서를 제공합니다.

  2. Streamlit 챗 사용법은 무엇인가요? Streamlit 챗은 Streamlit 앱에서 사용자 친화적인 챗봇 인터페이스를 만드는 데 사용됩니다. 이를 통해 챗봇이 더욱 상호작용적이고 사용자들에게 흥미롭게 작용할 수 있는 챗 앱과 비슷한 인터페이스를 제공합니다.

  3. 가장 고급 AI 챗봇은 무엇인가요? 가장 고급 AI 챗봇은 GPT-3.5-turbo와 같은 정교한 언어 모델을 활용합니다. 이러한 챗봇은 인간과 유사한 텍스트를 생성하고, 문맥을 이해하며, 관련된 응답을 제공할 수 있습니다. 또한, 개인 정보 보호를 고려하여 민감한 사용자 정보를 보관하지 않도록 설계되었습니다.