Ollamaはローカル環境で大規模言語モデル(LLM)を実行できるツールであり、プライバシー保護や高速な推論といった利点があります。
今回は、Streamlitというフレームワークを使用して、このローカルLLM(Llama 3.1🦙)をChatGPTのようなGUIとして実装してみようと思います。
前提条件
今回は以下の条件で実施しました:
・Ubuntu 24.04
・Python 3.11
・NVIDIA GPU(RTX 3060 Ti)
・Docker
・NVIDIA Container Toolkit
・Ollama
使用するライブラリ/ツールの説明
Streamlit
Pythonで簡単にインタラクティブなWebアプリケーションを構築できるフレームワークです。
直感的なUI設計が可能で、データ可視化や対話型アプリケーションに適しています。
langchain-ollama
Ollamaが提供するローカルLLMと連携するためのPythonライブラリです。
このライブラリを利用することで、モデルの呼び出しや応答生成が簡単に行えます。
Ollama
ローカル環境でLLMを効率的に動作させるためのツールです。
実装手順
1. プロジェクト環境の構築
以下のコマンドでプロジェクトディレクトリを作成します:
mkdir -p /media/shared/s_AIchat/static
cd /media/shared/s_AIchat
仮想環境を作成し、有効化します:
conda create -n aichat python=3.11 -y
conda activate aichat
2. 必要なパッケージのインストール
requirements.txtファイルを作成し、以下の内容を記載します:
streamlit==1.41.1
langchain-ollama==0.2.2rc1
python-dotenv==1.0.0
その後、以下のコマンドでパッケージをインストールします:
pip install -r requirements.txt
3. アプリケーションコードの作成
app.pyファイルに以下のコードを記載します:
import streamlit as st
from langchain_ollama import OllamaLLM
def init_llm():
return OllamaLLM(
model="llama3",
temperature=0.7,
base_url="http://localhost:11434"
)
def main():
st.set_page_config(page_title="AIチャット", layout="wide")
if "messages" not in st.session_state:
st.session_state.messages = []
llm = init_llm()
# サイドバー設定
with st.sidebar:
st.title("設定")
temperature = st.slider("Temperature", 0.0, 1.0, 0.7)
# メインチャット画面
st.title("AIチャットアプリ")
# チャット履歴の表示
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)
# AI応答生成
with st.chat_message("assistant"):
response = llm.invoke(prompt)
st.markdown(response)
st.session_state.messages.append({"role": "assistant", "content": response})
if __name__ == "__main__":
main()
4. UIスタイルの設定
static/style.cssファイルに以下の内容を記載します:
.stChatFloatingInputContainer {
bottom: 20px;
background-color: rgba(255, 255, 255, 0.9);
border-radius: 10px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
.stChatMessage[data-role="user"] {
background-color: #e3f2fd;
}
.stChatMessage[data-role="assistant"] {
background-color: #f5f5f5;
}
5. アプリケーションの起動
以下のコマンドでStreamlitアプリケーションを起動します:
streamlit run app.py
ブラウザで http://localhost:8501 にアクセスすると、アプリケーションが表示されます。
結果と考察
ローカル環境でLlama 3.1モデルを使用したチャットAIが無事に動作しました。
RTX 3060 Tiでも、それなりにストレスのないスムーズな処理が可能だったかと思います。
また、StreamlitによるUI設計は非常に直感的で、開発者が簡単にカスタマイズできる点が魅力です。ユーザーインターフェースはシンプルかつ洗練されており、ユーザーが自然に操作できるよう工夫されているなと思いました。
暇なときにでも、日本語での返答を行えるようにしたいと思います。
まとめ
・OllamaとStreamlitを組み合わせることで、安全かつ高速なローカルチャットAIを構築できました。
・GPUサポートにより、大規模言語モデルでもスムーズな動作が可能です。
・Streamlitを活用したUI設計は柔軟性と簡便性を両立しています。
・プライバシー保護やリアルタイム性が求められるアプリケーションにとって非常に有用であり、今後の開発にも応用可能だとおもいます。
参考文献
・【WSL2】コンテナを使ってLlama 3.1をローカルで動かしてみる(https://qiita.com/eiji-noguchi/items/a73d476f6ff33be2a63e)
・Streamlit Documentation(https://docs.streamlit.io/)
・Ollama Documentation(https://hub.docker.com/r/ollama/ollama)
・LangChain Documentation(https://python.langchain.com/docs/introduction/)