前回の記事では、導入手順が端折り気味だったので、それはそれでebikinにまとめてもらった。
以下のブログの本文はebikinに書いてもらったものです。kinnekoはなにもしてません。
---
1. モデルを用意する
まず llm-jp-4-8b-thinking の GGUF を取得する。
今回は Q4_K_M を使った。
mkdir -p ~/.cache/hf-llmjp4
hf download alfredplpl/llm-jp-4-8b-thinking-gguf \
--local-dir ~/.cache/hf-llmjp4 \
llm-jp-4-8B-thinking-Q4_K_M.gguf
2. llama-completion で動くことを確認する
このモデルは llama-server や llama-cli の chat completions ではうまくいかなかった。
なので、llama-completion 専用で使う方針にした。
/opt/homebrew/bin/llama-completion \
-m ~/.cache/hf-llmjp4/llm-jp-4-8B-thinking-Q4_K_M.gguf \
-ngl 0 \
--single-turn --simple-io --no-display-prompt \
-sys '日本語で短く自然に答えてください。' \
-p 'こんにちは' \
-n 32
3. 薄いラッパーを作る
次に、llama-completion を直接叩く Python ラッパーを作った。
役割は次の3つだけ。
- system prompt を付ける
- 出力を少し整形する
- 使いやすいコマンドにする このラッパーが ~/.hermes/scripts/llmjp4_thinking_cli.py。
4. 呼び出しコマンドを jp4 にする
呼びかけ名は ebikin ではなく、モデル名に寄せて jp4 にした。
分かりやすくて、運用上も迷いにくい。
~/.local/bin/jp4 はこんなシェルスクリプトにしている。
#!/bin/sh
set -eu
MODEL_WRAPPER=/Users/kinneko/.hermes/scripts/llmjp4_thinking_cli.py
SYSTEM_PROMPT='あなたは蝦金。日本語で短く自然に答える。'
if [ ! -x "$MODEL_WRAPPER" ]; then
echo "error: wrapper not found or not executable: $MODEL_WRAPPER" >&2
exit 2
fi
set +e
response="$($MODEL_WRAPPER --system "$SYSTEM_PROMPT" "$@")"
status=$?
set -e
if [ -n "$response" ]; then
printf '%s\n' "$response"
fi
if [ -n "$response" ] && command -v hermes >/dev/null 2>&1; then
printf '%s' "$response" | hermes send --to telegram -s 'jp4:' -q -f - >/dev/null 2>&1 || true
fi
exit "$status"
5. 実行権限を付ける
chmod 755 ~/.local/bin/jp4
~/.local/bin が PATH に入っていれば、そのまま jp4 と打てる。
6. Telegram にも送る
この構成のポイントは、Hermes のバックエンドとして組み込まないこと。
代わりに、jp4 の応答を Telegram にもミラー送信する。
そのとき、メッセージ先頭に jp4: を付ける。
これで、Telegram 上でも「これは jp4 の応答だ」と一目で分かる。
送信は hermes send を使う。
printf '%s' "$response" | hermes send --to telegram -s 'jp4:' -q -f -
7. 動作確認する
最後に実行して確認する。
jp4 '日本で2番目に高い山を教えて。'
- ターミナルに回答が返る
- Telegram にも jp4: ヘッダ付きで送られる という並行運用ができる。
この構成の肝
今回の工夫は、Hermes に直結させず、Telegram 経由で別系統にしたことです。
これにより、既存の Hermes 運用を壊さずに llm-jp-4-8b-thinking を試せました。
要するに、
- Hermes は今まで通り
- jp4 は別口
- Telegram では jp4: で識別 という分離が効いています。
オリジナル投稿:
ローカルでllmjp4-8bを動かして、Telegramから呼べるようにした -2-|kinneko|pixivFANBOX
https://kinneko.fanbox.cc/posts/12136708



