captiOnline4でのAI制御パネルでローカルLLMを使用する
2025/09/17
はじめに
最近、Llama などのさまざまな大規模な言語モデルで、推論を実行するオープンソースソフトウェアライブラリが増えてきました。captiOnline4にもローカルLLMに推論させる機能が実装されているので、ここでは、llama.cppを使用して、captiOnline4に入力された文を整文させたり、要約させたりする方法について解説します。
この解説を理解するには、コマンドライン(Windowsの場合はコマンドプロンプトやPowerShell、Macの場合はコンソール)によるOS操作の知識や技術が必須なのでご注意ください。
使用している環境
解説に使用している環境は次の通りです。
Mac Book Pro
チップ: Apple M1 Pro
メモリ: 32 GB
llama.cppのビルド
ChatGPTに聞いてみました (^^
Windowsの方は、ご自分の環境に合わせて推論させると、良いと思います。
GPUが使用できるPCならば、ぜひ有効にしてビルドし直してみてください。
注意: 実行ファイルとして「./main」を提示していますが、最近のllama.cppのバージョンではこれが削除されて、代わりに「./llama-cli」になっています。」
プロンプト↓
Mac Book Pro で llama.cpp をビルドさせて動作させたいです。
環境構築から教えてください。
推論結果↓
了解しました!
MacBook Pro 上で llama.cpp をビルド・実行するまでの手順を、環境構築から順を追って説明します。
(Intel / Apple Silicon どちらでも可能ですが、M1/M2/M3 チップ搭載の Mac なら Metal 対応で高速に動作します 🚀)
1. 前提環境の確認
まず、macOS の開発環境を整えます。
code:bash
# Xcode Command Line Tools をインストール
xcode-select --install
次に Homebrew がなければ入れてください:
code:bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
2. 必要なツールのインストール
llama.cpp のビルドには CMake が必要です。
code:bash
brew install cmake
Metal / Accelerate を利用するために追加のインストールは不要です(macOS 標準ライブラリに含まれています)。
3. llama.cpp の取得
GitHub から clone します。
code:bash
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
4. ビルド
シンプルな方法は make です。
code:bash
make
Apple Silicon (M1/M2/M3) で Metal を使って高速化するなら:
code:bash
LLAMA_METAL=1 make
これで main などの実行ファイルが ./ に生成されます。
CMake を使ったビルドも可能です(細かく設定したい場合):
code:bash
mkdir build
cd build
cmake .. -DLLAMA_METAL=ON
cmake --build . --config Release
5. モデルの準備
Meta の Llama 2 や Llama 3 の公式モデルをダウンロードして、GGUF フォーマットに変換して使います。
例えば Hugging Face から Llama-2-7B-chat の GGUF 版を取得:
code:bash
# Hugging Face CLI をインストール
brew install huggingface-cli
# ログイン(Hugging Face のアカウントが必要)
huggingface-cli login
# llama.cpp 用に変換済みのモデルを取得
git lfs install
git clone https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF
6. 推論の実行
モデルをダウンロードできたら、次のように実行します。
code:bash
./main -m ./Llama-2-7B-Chat-GGUF/llama-2-7b-chat.Q4_K_M.gguf -p "Hello, how are you?"
-m : モデルファイルのパス
-p : プロンプト(入力)
7. 便利なオプション例
対話モード:
code:bash
./main -m ./Llama-2-7B-Chat-GGUF/llama-2-7b-chat.Q4_K_M.gguf -i
出力トークン数を制限:
code:bash
./main -m model.gguf -p "Explain quantum computing" -n 256
✅ まとめ
1. Xcode Command Line Tools + Homebrew + CMake を準備
2. llama.cpp を clone
3. make か LLAMA_METAL=1 make でビルド
4. Hugging Face から GGUF モデルをダウンロード
5. ./main -m モデル -p "プロンプト" で実行
ご希望に合わせて、
「CPUのみで動かしたい」
「MetalでGPU高速化したい」
「日本語モデルを動かしたい」
などの用途別のチューニング手順も補足できます。
👉 どれに重点を置きますか?
このGhatGPTの解説を読んでみていくつか心配なことがあるので補足しておきます。
captiOnline4でのAI制御パネルでローカルLLMを使用する#68ca14580000000000ccfd90
モデルをダウンロードするために、Hugging FaceというWebサイトを使用するので、ご自分でアカウントを作成する必要があります。
https://huggingface.co/
captiOnline4でのAI制御パネルでローカルLLMを使用する#68ca14580000000000ccfd99
実行ファイルとして「./main」を提示していますが、最近のllama.cppのバージョンではこれが削除されて、代わりに「./llama-cli」になっています。
captiOnline4でのAI制御パネルでローカルLLMを使用する#68ca14580000000000ccfd94
llama.cppのビルドは、llama.cpp/build/bin/ 内で行われているので、このままだとモデルが、 llama.cpp/build/bin/ の下にダウンロードされます。管理しやすくするには、llama.cpp/models がより良いでしょう。ただし、モデルをダウンロードするフォルダを変更する場合には、実行時のモデルのパスをしっかり指定する必要があります。
エラーメッセージが出た場合は、そのログをChatGPTにペーストして、解決方法を訪ねてみてください。
llama.cpp のサーバを起動
ビルドが成功すると、build/bin/の中に llama-server というコマンドが生成されているはずです。これを実行してサーバの動作確認をしましょう。
ここでは、llama.cppで作業しているので、先のChatGPTが作業していたフォルダ(llama.cpp/build/bin/)の場所とは異なります。なお、モデルについては、llama.cpp/modelsの下にダウンロードしておいた、「Llama-3-ELYZA-JP-8B-q4_k_m.gguf」を使用しています。
code:bash
build/bin/llama-server -m models/Llama-3-ELYZA-JP-8B-q4_k_m.gguf --port 18080
「--port 18080」を指定して、18080ポートでサーバを起動することを指示しています。
うまく起動できると、次のようなメッセージが最後に表示されると思います。
main: server is listening on http://127.0.0.1:18080 - starting the main loop
srv update_slots: all slots are idle
それでは、Webブラウザで次のアドレスにアクセスしてみましょう。
http://127.0.0.1:18080
ChatGPTのような画面が表示されれば、大成功です!「Type a message」と表示されているところに、「空はなぜ青いの?」のようなプロンプトを書いて推論させてみましょう。
Webブラウザ(Chrome)の起動
自分のPC(localhost)で起動した llama-server にcaptiOnline4からアクセスする際には、クライアント上で、https://captionline.org から http://localhost へのアクセスとなります。この場合、CORS(Cross-Origin Resource Sharing)のエラーが発生し、うまく通信ができません。ここでは、ブラウザのWebセキュリティを一時的に下げることで、通信を可能にする方法について説明します。
まず、Chromeを「--disable-web-security」オプションをつけて、コマンドラインから立ち上げます。この際、Webセキュリティが低い状態で普段使っているプロファイルを使用するのは怖いので、「--user-data-dir="/tmp/chrome_dev"」オプションで別のプロファイルを使用することにしています。このため、初めて起動するときは、初回起動時のようなブラウザをデフォルトにするのようなオプションが現れ、Googleアカウントへのログインを促されますが、基本的にはすべてチェックをはずし、ログインもしなくてよいでしょう。
code:bash
open -na "Google Chrome" --args --disable-web-security --user-data-dir="/tmp/chrome_dev"
AIの使用が終わったら、この方法で起動したブラウザは普段使いせず、必ず閉じてください。
また、AIを使用したい場合は、同様にコマンドラインから立ち上げたブラウザを使用してください。
captiOnline4からllama.cppサーバの利用
いよいよ、captiOnline4の「字幕生成者」ページ(typist.html)にアクセスし、AIに推論させていきます。
次の手順を行ってください。
AI制御パネルの設定を開く
「AIの選択」で、「Local LLM」 を選ぶ
「Local LLM」カテゴリの「REST API Endpoint」 に 「http://localhost:18080/v1/chat/completions」と入力
「AIへの要望」に、適切な要望を入力してください、例えば「次の文を要約してください」などです。
「AIへの文章を送信する条件」カテゴリの「複数の文を出力したとき」を「1」にする
設定を閉じ、AI制御パネルの開始ボタン「▶」をクリックする
この状態で、連係パネルなどで、適当な文章を入力してください。そうするとAI制御パネルのログに、AIに送信した文が表示され、推論結果が、AI表示パネルに表示されます。
お疲れ様でした!以上がcaptiOnline4でのローカルLLMの利用方法となります。
メモ(以下は開発者用の記録です)
2025/09/17現在、CORSエラーを避けるためには、ChromeをWebセキュリティを下げた状態で起動する方法しかないようです。
この記事を作成するにあたりいろいろと調査した結果、localhost 用の 証明書を作成し、証明書をOSに登録し、llama-server を https に対応するようにビルドしなおし、httpsで起動すると、いいところまで行くことを確認しました。
証明書の作成
CNがlocalhostで、SANがlocalhostで127.0.0.1な証明書を作成する
code:bash
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365 -nodes -subj "/CN=localhost" -addext "subjectAltName = DNS:localhost,IP:127.0.0.1"
証明書をOSに登録
「キーチェーンアクセス」を起動し、「ファイル」➔「読み込む」から、作成した cert.pem を読み込む
「キーチェーンアクセス」の「システム」タブ➔「証明書」タブを選び、その中の「localhost」(cert.pemで登録された証明書)をダブルクリックすると、ウインドウが開く
そのウインドウの「信頼」をクリックし、「SSL」を「常に信頼」に変更して、ウインドウを閉じる
llama-server を https に対応するように再ビルド
標準では、llama-server は https に対応していないので、ビルドしなおす。
llama.cpp/buildを削除し、再ビルドする。
code:bash
rm -rf build
cmake -B build -DLLAMA_METAL=ON -DLLAMA_SERVER_SSL=ON -DOPENSSL_ROOT_DIR=/opt/homebrew/opt/openssl@3
cmake --build build --config Release
「-DLLAMA_SERVER_SSL=ON」が重要
「-DOPENSSL_ROOT_DIR=/opt/homebrew/opt/openssl@3」は、自分のPCにHomebrewで入れたopensslがintel用だったので、M1用のやつを入れなおして、パスを強制的に指定した名残…。今どきのAppleシリコンCPU搭載のやつでHomebrewいれたやつならおそらく不要だと思う
llama-server を https で起動
llama-server を証明書をつけて起動する
code:bash
LLAMA_SERVER_CORS_ORIGIN='https://localhost:8080' ./build/bin/llama-server \
-m models/Llama-3-ELYZA-JP-8B-q4_k_m.gguf \
--host 0.0.0.0 \
--port 11434 \
--ssl-key-file ssl/key.pem \
--ssl-cert-file ssl/cert.pem
最初の環境変数の指定「LLAMA_SERVER_CORS_ORIGIN='https://localhost:8080'」は効いているかどうか謎です
試してみた結果
ChromeではCORSエラーが相変わらず出る。Geminiによれば、
今回のトラブルの根本原因は以下の2つでした。
SSL証明書の SAN (Subject Alternative Name) 不足:
最初に遭遇したnet::ERR_CERT_COMMON_NAME_INVALIDは、自己署名証明書にlocalhostと127.0.0.1の両方が含まれていなかったことが原因でした。
opensslコマンドでSANを含む新しい証明書を作成し、OSのキーチェーンに信頼させることで、この問題を解決しました。
llama-serverのCORS処理のバグ:
SSL証明書の問題を解決した後に発生したCORSエラー(The 'Access-Control-Allow-Origin' header contains the invalid value '')は、llama-serverがHTTPS環境下でCORSヘッダーを正しく処理できないバグが原因でした。
Chromeの起動オプションに--disable-web-securityを追加することで、ブラウザ側のCORSチェックを無効にし、通信を成功させることができました。
ということらしいです。
たしかに llama-server が Access-Control-Allow-Origin をうまく設定して返してくれてない感じはしますね。
ChromeではCORSエラーは解消できませんでしたが、Safariならうまく動きました。