こんにちは、JS2IIUです。
本記事では、大規模言語モデル(LLM)の一つであるSarashina2.2を使用し、Streamlitを使って簡単なチャットアプリを構築する方法を解説します。今回もよろしくお願いします。
Sarashina2.2モデルとは?
Sarashina2.2-3b-instruct-v0.1は、SB Intuitionsが開発した小規模模言語モデル(SLM)に相当するモデルです。以下はこのモデルの主な特徴です。
- パラメータ数:3B(30億パラメータ)
- 用途:指示に基づいた対話形式の応答生成(Instruct型)
- 対応タスク:質問応答、要約、コード生成、クリエイティブな文章生成など
- 精度:Instruct形式でチューニングされており、多様なユーザー入力に対して自然で的確な応答を提供
- デバイス:GPU環境での実行が推奨(
torch_dtype=torch.bfloat16を使用することで高速化とメモリ節約が可能)
このモデルはHugging Face Hubで公開されており、誰でも無料で利用可能です。
Streamlitチャットアプリの概要
以下のプログラムでは、Sarashina2.2モデルを利用してユーザー入力に応答するシンプルなチャットボットを作成します。
サンプルコード
Python
import streamlit as st
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline, set_seed
import re
# モデルのロード
@st.cache_resource
def load_model():
model_name = "sbintuitions/sarashina2.2-3b-instruct-v0.1"
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.bfloat16, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
chat_pipeline = pipeline("text-generation", model=model, tokenizer=tokenizer)
return chat_pipeline
chat_pipeline = load_model()
set_seed(123)
# StreamlitアプリのUI
st.title("Sarashina2 チャットボット")
user_input = st.text_input("入力欄", "こんにちは。あなたの名前を教えて")
if st.button("送信"):
with st.spinner("応答を生成中..."):
# モデルによる応答生成
responses = chat_pipeline(
[{"role": "user", "content": user_input}],
max_length=200,
do_sample=True,
num_return_sequences=3,
)
# 応答を表示
st.subheader("モデルの応答")
for i, response in enumerate(responses, 1):
try:
# デバッグ出力(確認用)
st.write("デバッグ: 応答内容", response)
# generated_text を文字列化
generated_text = str(response['generated_text'])
# 'assistant' の content を抽出
match = re.search(r"'role': 'assistant', 'content': '(.*?)'", generated_text)
if match:
assistant_response = match.group(1)
assistant_response = assistant_response.encode('utf-8').decode('unicode_escape')
st.write(f"### 応答 {i}")
st.write(assistant_response.replace("\n", "\n"))
else:
st.error("assistant の応答を解析できませんでした。")
except Exception as e:
st.error(f"応答の解析に失敗しました: {e}")
st.info("Sarashina2モデルを使用しています。複数の応答を生成できます。")コード解説
1. モデルのロード
Python
@st.cache_resource
def load_model():st.cache_resource を使用して、モデルのロードを一度だけ実行し、アプリケーションのパフォーマンスを向上させます。
- AutoModelForCausalLM:因果言語モデル(Causal Language Model)をロード
- torch_dtype=torch.bfloat16:モデルの型を bfloat16 に設定し、GPUメモリ使用量を削減
- device_map=”auto”:適切なデバイス(GPU/CPU)に自動割り当て
2. 入力と応答生成
Python
user_input = st.text_input("入力欄", "こんにちは。あなたの名前を教えて")
if st.button("送信"):ユーザー入力を受け取り、送信ボタンが押されたら処理を開始します。
- do_sample=True:サンプリングを有効にし、多様な応答を生成
- num_return_sequences=3:3つの応答候補を生成
3. 応答の解析と表示
Python
match = re.search(r"'role': 'assistant', 'content': '(.*?)'", generated_text)生成されたテキストからアシスタントの応答を正規表現で抽出し、ユーザーに表示します。
- デバッグ出力:生成された生データを
st.write()で確認 - エラー処理:解析に失敗した場合は
st.error()で通知
実行方法
- 必要なライブラリをインストール
Bash
pip install streamlit torch transformers- アプリを起動
Bash
streamlit run app.pyまとめ
この記事では、Streamlitを使用してLLMモデル「Sarashina2.2」を活用したチャットアプリを作成しました。
- モデルの特徴
- コードの詳細な解説
- デバッグとエラー処理
を含め、実践的なアプリ構築の流れを解説しました。
参考リンク
- Sarashina2.2-3b-instruct-v0.1 (Hugging Face)
- Sarashina2.2:数学・コーディングタスクの性能を向上させた日本語言語モデル – SB Intuitions TECH BLOG
- Streamlit公式ドキュメント
- Transformersライブラリ (Hugging Face)
最後に、書籍のPRです。
最新のOpenAIのチャットAPIの使い方もしっかりと解説されている良書です。2024年11月初版発行、「LangChainとLangGraphによるRAG・AIエージェント[実践]入門」西見、吉田、大嶋著。
最後まで読んでいただきありがとうございます。


コメント