Skip to content

Streamlitチャットボットの構築:クイックスタート

Updated on

SiriやAlexa、お客様相談チャットボットなどがどのように動作しているか気になったことはありませんか?この記事では、デジタルコミュニケーションを革新している便利なAIパワードツールであるチャットボットの世界を短期間で紹介します。カスタマーサービスからインタラクティブ体験までどこにでも存在し、私たちのコミュニケーションと情報アクセスの方法を変えつつあります。

しかし、私たちはただのチャットボットについて話しているわけではありません。Streamlitを使用してチャットボットを構築し、機械学習とデータサイエンス愛好者の間で人気のあるオープンソースのアプリフレームワークに焦点を当てます。さらに、LangChainとさまざまな言語モデル(LLMモデルなど)との統合方法にも探求していきます。プライバシーに配慮したチャットボットを作成する準備はできていますか?効率的でありながら、ユーザーのプライバシーも尊重するチャットボットを作成するために準備しましょう。

Streamlitとは?

Streamlitは、ウェブアプリケーションを構築するための高速で簡単で楽しいオープンソースのツールです。機械学習エンジニアやデータサイエンティストが、ウェブ開発の知識なしでプロジェクトの周りにインタラクティブなウェブアプリケーションを構築するのに役立ちます。Streamlitのシンプリシティとスピードのおかげで、チャットボットのUIを構築するのに優れた選択肢です。

チャットボットとは?

チャットボットは、生の人間のエージェントとの直接的な接触を提供する代わりに、テキストやテキスト読み上げを通じてオンラインチャットの会話を行うために設計されたソフトウェアアプリケーションです。人間の会話パートナーとしての振る舞いを信じさせるように設計されており、チャットボットシステムは通常、継続的な調整とテストが必要であり、プロダクション環境では産業標準のチューリングテストを十分にクリアできないものも多数存在します。

Streamlitを使用したチャットボットの構築

環境のセットアップ

実際のチャットボットの構築プロセスに入る前に、必要なライブラリとツールを使用して開発環境をセットアップする必要があります。これにより、コードの実行が成功し、チャットボットが意図通りに機能することが保証されます。requirements.txtファイルには、このプロジェクトに必要なライブラリとツールのリストが含まれています。以下に示すものです。

  • streamlit:このライブラリは、機械学習とデータサイエンスのプロジェクトのためにインタラクティブなウェブアプリを作成するのに役立ちます。
  • streamlit_chat:このStreamlitコンポーネントは、チャットボットのユーザーインターフェースを作成するために使用されます。
  • langchain:これは言語モデルで動作するアプリケーションを開発するためのフレームワークで、チェーン用の標準インターフェース、他のツールとの多数の統合、一般的なアプリケーションのためのエンドツーエンドチェーンを提供します。
  • sentence_transformers:このライブラリは、テキストの意味的表現(埋め込み)を生成するためにBERT、RoBERTaなどのトランスフォーマーモデルを使用できるようにします。これらの埋め込みは、ドキュメントのインデックス作成に使用します。
  • openai:これは公式のOpenAIライブラリで、GPT-3.5-turboなどの言語モデルを使用して人間らしいテキストを生成することができます。
  • unstructuredとunstructured[local-inference]:これらはドキュメントの処理と非構造化データの管理に使用されます。
  • pinecone-client:これはベクトルデータ上で類似検索を実行するためのベクトルデータベースサービスPineconeのクライアントです。

これらのライブラリをすべてインストールするには、ターミナルで次のコマンドを実行します:

pip install -r requirements.txt

このコマンドは、pip(Pythonのパッケージインストーラー)に、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でインデックスが作成され、埋め込みデータと対応するテキストが保存されます。これで、ユーザーが質問をすると、チャットボットはこのインデックスを検索し、最も類似したテキストを返すことができます。

Streamlitを使用したChatbotインターフェースの作成

文書がインデックス化され、検索の準備が整ったので、今度はChatbotインターフェースの構築に集中できます。Streamlitは、インタラクティブなWebアプリケーションを簡単かつ直感的に作成するための便利なツールで、私たちのChatbot UIに最適です。

Streamlit Chatコンポーネント

StreamlitのChatコンポーネントは、Chatbotを作成する新しい方法です。Chatアプリのようなインターフェースを提供し、Streamlitで展開されるChatbotにクールな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("Hello, how can I help you today?", "bot")

ChatbotのLangChainとの統合

LangChainは、言語モデルで動作するアプリケーションを開発するためのフレームワークです。チェーンに対する標準的なインターフェースと、他のツールとの多くの統合、一般的なアプリケーション用のエンドツーエンドチェーンを提供します。私たちのChatbotをLangChainに統合するためには、「main.py」の「load_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アプリを強化するための詳細な手順をデモンストレーションしている、PythonでPyGWalkerを使用してデータを探索する方法 (opens in a new tab)のすばらしいビデオをチェックしてください!


PyGWalkerコミュニティへのSvenと彼の素晴らしい貢献 (opens in a new tab)に特別な感謝を申し上げます!

さらに、以下のリソースも参照できます:

Visualize Data in Streamlit with PyGWalker (opens in a new tab)

プライバシーコンシャスな機能

現代のデジタル時代では、データの侵害やプライバシーへの懸念が以前よりも一般的になっています。私たちのChatbotがシームレスなユーザーエクスペリエンスを提供するだけでなく、ユーザーのプライバシーを尊重することが非常に重要です。では、これをどのように実現するのでしょうか?

まず、チャットボットがユーザーの個人データを保存しないようにすることができます。StreamlitのChatボットコンポーネントは、プライバシーを考慮して設計されており、デフォルトではユーザーデータを保存しません。つまり、Chatbotとの会話は、データが保存されたり他の目的で使用されることなく、あなたとBotの間で行われます。

さらに一歩進めることもできます。プライバシーを保護する言語モデルを使用して、チャットボットが機密情報を記憶しないようにすることができます。これらのモデルは敏感なデータを保持しないように訓練されています。例えば、OpenAIのGPT-3.5-turboは、与えられた入力から機密情報を記憶することなく、人間らしいテキストを生成するよう設計された言語モデルです。つまり、ユーザーが誤って機密情報を共有したとしても、モデルはこの情報を記憶したり将来の対話で使用したりしません。

結論

StreamlitとLangChainを使用してChatbotを構築するプロセスは、環境のセットアップ、文書のインデックス化、Chatbotインターフェースの作成、プライバシーコンシャスな機能の確保といった具体的なステップからなります。LLMモデルとオープンソースツールの力を活用することで、効率的で使いやすいChatbotを作成し、ユーザーのプライバシーも尊重することができます。

よくある質問

  1. Streamlitでチャットボットを作成する方法は? マークダウンファイルの日本語訳を提供します。もし、フロントマターがある場合は、languageパラメータをjaに翻訳してください。以下にファイルを記載します:Streamlitでチャットボットを作成するには、開発環境の設定、ドキュメントのインデックス作成、チャットボットインターフェースの作成、プライバシーコンシャスな機能の確保など、いくつかの手順が必要です。この記事では、Streamlitを使用してチャットボットを構築するための包括的なガイドを提供します。

  2. Streamlitチャットの使用方法は? Streamlitチャットは、Streamlitアプリ内でユーザーフレンドリーなチャットボットインターフェースを作成するために使用されます。チャットアプリのようなインターフェースを提供し、ユーザーにとって対話的で魅力的なチャットボットを実現します。

  3. 最も高度なAIチャットボットは何ですか? 最も高度なAIチャットボットは、OpenAIのGPT-3.5-turboなどの洗練された言語モデルを活用しています。これらのチャットボットは、人間らしいテキストの生成、文脈の理解、関連する応答の提供などが可能です。また、プライバシーを考慮して設計されており、ユーザーの機密情報を保持しないようになっています。