🌟 Llama 3.1でローカルChatGPTクローンを作ろう!完全ガイド
1. はじめに ✨
Llama 3.1と聞いて「何それ?」と思う方もいるでしょう。でも心配しないでください!本記事では、オフラインで使えるAIチャットボットを、簡単に自分のPCで作る方法を解説します。しかも、ユーザーとの会話を記憶する「メモリー機能」まで搭載!🔥プライバシーを守りながら、どこでも使えるAIアシスタントを一緒に作りましょう!
2. 準備するもの 🛠️
本プロジェクトを始める前に、以下のものが必要です:
Python 3.7以上 🐍
OllamaとQdrant(これらのツールについては後ほど詳しく解説します)
基本的なPythonの知識 ✨
好きなコードエディタ(VS CodeやPyCharmがオススメです)
3. 環境のセットアップ 🚀
まずは環境を整えましょう!
GitHubのリポジトリをクローンします。
git clone https://github.com/Shubhamsaboo/awesome-llm-apps.git
💡 Tip: オープンソースのリポジトリにスターをつけて、開発者を応援しましょう!⭐️
クローンしたフォルダに移動します。
cd llm_apps_with_memory_tutorials/local_chatgpt_with_memory
必要な依存関係をインストールします。
pip install -r requirements.txt
Qdrantベクターデータベースをローカルでインストールして起動します。
docker pull qdrant/qdrant
docker run -p 6333:6333 qdrant/qdrant
Ollamaをインストールし、Llama 3.1のモデルを取得します。
ollama pull llama3.1
4. メモリー付きチャットボットの作成 💬
では、いよいよボットを作成していきます!
まず、新しいPythonファイルを作成します。例えば「local_chatgpt_memory.py」という名前にしましょう。そして以下のコードを追加します。
コードの全体像
このチャットボットでは、以下のような機能を実装します:
💾 メモリー機能: ユーザーごとの会話履歴を保存します。
🤔 ローカルでのAI応答: Llama 3.1を使って、ローカル環境でユーザーの質問に答えます。
import streamlit as st
from mem0 import Memory
from litellm import completion
# 設定を定義します
config = {
"vector_store": {
"provider": "qdrant",
"config": {
"collection_name": "local-chatgpt-memory",
"host": "localhost",
"port": 6333,
"embedding_model_dims": 768,
},
},
"llm": {
"provider": "ollama",
"config": {
"model": "llama3.1:latest",
"temperature": 0,
"max_tokens": 8000,
"ollama_base_url": "http://localhost:11434",
},
},
"embedder": {
"provider": "ollama",
"config": {
"model": "nomic-embed-text:latest",
"ollama_base_url": "http://localhost:11434",
},
},
"version": "v1.1"
}
# Streamlitアプリケーションを初期化
st.title("Local ChatGPT using Llama 3.1 with Personal Memory 🧐")
st.caption("各ユーザーにパーソナライズされたメモリースペースを提供します!")
# チャット履歴とユーザーセッションを管理
if "messages" not in st.session_state:
st.session_state.messages = []
# サイドバーでユーザー設定を行います
with st.sidebar:
st.title("ユーザー設定")
user_id = st.text_input("ユーザー名を入力してください", key="user_id")
if user_id:
st.success(f"ログイン中:{user_id}")
# メモリーの初期化
m = Memory.from_config(config)
# メモリーを表示する機能
st.header("メモリーコンテキスト")
if st.button("自分のメモリーを表示する"):
memories = m.get_all(user_id=user_id)
if memories and "results" in memories:
st.write(f"**{user_id}** のメモリー履歴:")
for memory in memories["results"]:
if "memory" in memory:
st.write(f"- {memory['memory']}")
# チャットインターフェースの実装
if user_id:
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)
m.add(prompt, user_id=user_id)
memories = m.get_all(user_id=user_id)
context = ""
if memories and "results" in memories:
for memory in memories["results"]:
if "memory" in memory:
context += f"- {memory['memory']}\n"
with st.chat_message("assistant"):
message_placeholder = st.empty()
full_response = ""
try:
response = completion(
model="ollama/llama3.1:latest",
messages=[
{"role": "system", "content": "あなたは過去の会話にアクセスできるアシスタントです。提供されたコンテキストを使用して、パーソナライズされた応答を行います。"},
{"role": "user", "content": f"過去の会話のコンテキスト:{context}\n現在のメッセージ:{prompt}"}
],
api_base="http://localhost:11434",
stream=True
)
for chunk in response:
content = chunk.choices[0].delta.get('content', '') if hasattr(chunk, 'choices') else ''
if content:
full_response += content
message_placeholder.markdown(full_response + "▌")
message_placeholder.markdown(full_response)
except Exception as e:
st.error(f"エラーが発生しました: {str(e)}")
full_response = "申し訳ありませんが、応答の生成中にエラーが発生しました。"
message_placeholder.markdown(full_response)
st.session_state.messages.append({"role": "assistant", "content": full_response})
else:
st.info("👍 サイドバーにユーザー名を入力してください!")
## 5. コードの詳細解説 👨💻
### メモリー管理
このコードでは、`Mem0`というフレームワークを使用して、ユーザーごとに会話履歴を保存しています。このメモリー機能により、ユーザーとの会話内容をAIが覚え、よりパーソナライズされた応答が可能になります。
### Llama 3.1の使用
`Ollama`を使って、Llama 3.1のモデルをローカル環境で実行します。これにより、インターネット接続なしでAIを使用でき、プライバシーも守られます。
## 6. チャットボットの実行 🏃♂️
すべてのコードを書き終えたら、ターミナルで以下のコマンドを実行してアプリを起動します。
```bash
streamlit run local_chatgpt_memory.py
その後、ブラウザで表示されたURLにアクセスすれば、あなた専用のローカルAIチャットボットが動き出します!
7. カスタマイズのアイデア 💡
ボイスインターフェースを追加する: 音声入力と出力を追加して、よりインタラクティブにしましょう!
プライバシーモードの実装: メモリーの保存を一時的に停止できる「プライベートモード」を追加して、より柔軟なプライバシー管理を可能にします。
8. まとめ 📜
これで、ローカル環境で動くChatGPTクローンの作り方が分かりましたね!このプロジェクトを通じて、プライバシーを重視しながら、自分だけのAIアシスタントを作る楽しさを体験できたと思います。引き続きカスタマイズを加えて、どんどん進化させてみてくださいね!✨