0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ollamaを使用して、ローカルLLM(Llama 3.1🦙)を実装したチャットAIをつくってみた

Last updated at Posted at 2024-12-15

Ollamaはローカル環境で大規模言語モデル(LLM)を実行できるツールであり、プライバシー保護や高速な推論といった利点があります。
今回は、Streamlitというフレームワークを使用して、このローカルLLM(Llama 3.1🦙)をChatGPTのようなGUIとして実装してみようと思います。

Screenshot from 2024-12-15 23-13-49.png
※回答内容の精査は各自行いましょう…

前提条件

今回は以下の条件で実施しました:
・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. プロジェクト環境の構築

以下のコマンドでプロジェクトディレクトリを作成します:

python
mkdir -p /media/shared/s_AIchat/static
cd /media/shared/s_AIchat

仮想環境を作成し、有効化します:

python
conda create -n aichat python=3.11 -y
conda activate aichat

2. 必要なパッケージのインストール

requirements.txtファイルを作成し、以下の内容を記載します:

python
streamlit==1.41.1
langchain-ollama==0.2.2rc1
python-dotenv==1.0.0

その後、以下のコマンドでパッケージをインストールします:

python
pip install -r requirements.txt

3. アプリケーションコードの作成

app.pyファイルに以下のコードを記載します:

python
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ファイルに以下の内容を記載します:

python
.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アプリケーションを起動します:

python
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/)

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?