概要
前回の記事でお便り等の書類をローカルで整理する環境(RAG、Retrieval-Augmented Generation(検索拡張生成))を構築しました。
ただし、精度や応答速度の面で課題を感じていました。
上記の課題について、LLMの変更やテンプレートを定義して体感的には改善できたように思います。
今回の記事では改善できた環境の構築手順をまとめます。
Qwen2.5とは
Qwen2.5はAlibabaが開発する LLMシリーズで、3B〜72Bまで幅広いサイズが提供されています。
- 日本語が強い(特に 3B / 7B)
- コード生成に強い(Coder 系)
- 推論速度が速い
- GGUF 形式でローカル実行が容易
※GGUF(GPT‑Generated Unified Format)はLLMをローカルで動かすために作られたモデルファイル形式。
今回はQwen2.5‑Coder‑3Bを使用しました。
Qwen2.5‑Coder‑3Bは、3B(30億パラメータ)という軽量サイズにも関わらず、要約・抽出・構造化タスクに非常に強いという評価があります。
Modelfileとは
ModelfileはOllamaでモデルを作成するため設定ファイルで、用途に合わせたLLMをOllamaに登録することができます。
Modelfileには以下のような内容が定義されています。
- LLMのファイル(GGUF)指定
例:FROM ./qwen2.5-coder-3b-instruct-q4_k_m.gguf - SYSTEM(人格)の定義
例:SYSTEM "あなたは日本語に特化したアシスタントです。" - TEMPLATE(入力構造)の定義
例:
TEMPLATE """
以下の文章を要約してください。--- 原文 ---
{{ .Prompt }}
--- 要約 ---
"""
今回はModelfileを使いOllamaでQwen2.5‑Coder‑3Bを使用する環境を構築しました。
Ollama(Docker Desktop)にLLMを追加する手順
GGUFファイルの取得
Qwen2.5‑Coder‑3BのGGUFファイルをダウンロードします。
Modelfile作成
以下の内容を「Modelfile」として作成します。
FROM ./qwen2.5-coder-3b-instruct-q4_k_m.gguf
TEMPLATE """
以下のファイル名と指示に基づいて、ナレッジベースから該当ファイルを検索し、
その内容を要約してください。
--- 指定ファイル名 ---
{{ .Prompt }}
--- 原文(ナレッジベースから自動挿入) ---
{{ .Context }}
--- 要約 ---
"""
SYSTEM """
あなたは日本語文書の要約に特化したアシスタントです。
以下の原則を厳密に守ってください。
1. 文章の意味を変えない
2. 事実を追加・創作しない
3. 曖昧な部分を勝手に補完しない
4. 文書の構造を保ったまま簡潔にまとめる
5. 固有名詞・数値・日付は正確に保持する
6. 不要な挨拶・感想・雑談は一切書かない
7. 箇条書きを優先し、論理的に整理する
あなたの唯一の目的は「正確で簡潔な要約を返すこと」です。
"""
ファイルに関する補足
{{.Prompt}}:ユーザーの入力が入ります。
{{.Context}}:ファイルの中身が入ります。
モデルの展開
上記GGUF、Modelfileを同じフォルダに用意します。
OllamaはDocke上にある為、ホスト→Dockerにファイルを移動してモデルを作成します。
docker cp "C:\open-webui\qwen2.5-coder-3b\qwen2.5-coder-3b-instruct-q4_k_m.gguf" ollama:/root/
docker cp "C:\open-webui\qwen2.5-coder-3b\Modelfile" ollama:/root/
ファイルを移動した後、コンテナへ入ります。
docker exec -it ollama bash
cd /root
モデルをビルドします。
ollama create qwen2.5-coder-3b-summary -f Modelfile
※Modelfileを変更した場合はビルドを実行します。
ここまで実行することでOllamaよりQwen2.5のモデルを使うことができます。
その他実施したこと
上記以外で、ナレッジベースに登録するファイルについてはテキストデータとしました。
動作検証
上記内容で環境を構築しファイルの内容を要約してみました。
前回の環境より、要約された内容、および文章が適切になり、また、気持ち応答が早くなったように思います。