ローカルでllmjp4-8bを動かして、Telegramから呼べるようにした -2-

 前回の記事では、導入手順が端折り気味だったので、それはそれで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