ollama + mistral の使ってみた
ollama + mistral の使い方
※グラボの VRAM 8GB くらい必要です、メインメモリは16GB~
docker-compose.yaml
version: '3.8'
services:
ollama:
image: ollama/ollama
container_name: ollama
ports:
- "11434:11434"
volumes:
- ollama:/root/.ollama
deploy:
resources:
reservations:
devices:
- capabilities: [gpu]
runtime: nvidia
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
ports:
- "8080:8080"
environment:
- OLLAMA_BASE_URL=http://ollama:11434
volumes:
- open-webui:/app/backend/data
depends_on:
- ollama
volumes:
ollama:
open-webui:
docker インスタンスが起動できたら
docker exec -it ollama bash
としてインスタンスにログイン
ollama pull mistral
としてLLMモデルをインストールする
Windowsホストなら
http://host.docker.internal:8080
Linuxホストなら
http://localhost:8080
で WEB-UI からプロンプトが使えるようになります。
API使う時は
http://host.docker.internal:11434/api/generate
又は
http://localhost:11434/api/generate
POSTデータサンプル
"model": "mistral",
"prompt": "ロックは淑女の嗜みですか?",
"stream": False,
"options": {
"temperature": 0.1,
"top_p": 0.9,
"num_predict": 512,
"repeat_penalty": 1.1
}
dockerでやる必要はないです、各自好きな環境でやってください。
ブラウザから使うと挙動がおかしい
ブラウザUIから使うと回答方針?がキャッシュされるらしく回答の偏りが出てしまいます、APIから使うと毎回考えた結果が返ってきます。
なんらかの実験をしたいならAPIを叩きましょう
文章減らすと精度が高くなる
文章がビジネスメールであるか否か、という実験をやっていました
文章の読み方、結果回答のフォーマットなどを細かく指定するよりもシンプルに質問したほうが回答精度が高かったです
文末に回答形式を指示する
◯◯である確率を 0.0~1.0 で回答してください と文頭で指示するよりも、文末で指示したほうがその通りにしてくれる確率が高いです
質問
~~文章~~
回答の指示(確率で とか、JSONで、とか)
JSONとかの指示は守りきれない
次のようにプロンプトを作ります
ビジネスメールである確率を 0.0~1.0 で JSON で回答してください
-----添付文章開始-----
~文章~
-----添付文章終了-----
回答例:
{
"probability": 0.0~1.0
}
このようにJSONで回答を指示した時に次のような応答でした
- JSON形式で正常な応答
- JSON形式(マークダウン?)で応答
- {"probability" .. と途切れたJSON
- 指示を無視して確率を数字だけで応答
- 指示を無視してコメントによる応答
APIでバッチ処理をして回答をDBに取り込むみたいな作業に向かないですね、対策として
「ビジネスメール」「ビジネスメール以外」で回答してください
解説や要約は不要です
このように指示を出すと
- ビジネスメール
- 「ビジネスメール」
- 「ビジネスメール」です
- 「ビジネスメール」です、なぜなら~~~
という回答パターンになり最悪でも「ビジネスメール」という単語は入れてくれるのでスクリプトで処理できますので、バッチ処理等に組み込めるようになります。
抽出処理
メールの人材や商材の紹介部分だけを抜き出すタスクはそこそこ上手くいきます。
プロンプトは次のように書きます
データ列挙部分の原文を抜き出してください
-----添付文章開始-----
~メール本文~
-----添付文章終了-----
このプロンプトでメール内にある価格、人材、商材、についてのデータ列挙部分だけを抽出できました。
挨拶文章に含まれる送信者の所属テンプレートまで含める時もあったりしますが、8割合格といって良いかなと思います。
抽出処理は結構いける感じです
そこそこ使えると思う
商用利用もOKの mistral 7b のモデルですが、chatGPT4 と比べたら相当に劣る物ではあるのですが、使い方次第ではバッチ処理なんかに組み込めるかなという感じです。
めちゃくちゃ分かりやすい分類処理とか、なんらかの抽出処理であればなんとかという感じでした。
以上です