OpenAI APIを使った各種アプリケーションをローカルLLMに置き換えるためのOpenAI代替API機能についてのメモです。
いずれも、パッケージ標準のAPI機能に追加してOpenAIスタイルのAPIに対応させたものです。ChatGPT互換にこだわらない場合はそれぞれの標準APIを使うほうが機能性がよいと思います。
1. llama.cpp
llama.cppはGGUFフォーマットを使ってLLMの量子化や推論・学習を行うためのパッケージです。APIサーバー機能も実装されていて、そこでOpenAI型APIも一応対応しています。
- Windowsの場合、server.exeでモデルを立ち上げるだけで使える。
- OpenAI型APIで利用する場合、 OpenHermes, OpenChat-3.5などChatMLテンプレート(<|im_start|>system\n...)で追加学習したモデルが推奨されている。
- llama.cpp serverの通常APIはコンテキストキャッシュ(cache_prompt)に対応しているが、OpenAI型APIでは未対応?
- どうやらllama.cpp本体の開発の速さに対してserverのサポートが色々と追い付いていない感があり、こちらでserver改善/保守のためのヘルプが出されています。
- なお、llama.cppのPythonラッパーであるlama-cpp-pythonも独自にOpenAI型APIを提供しています。
2. koboldcpp
koboldcppはllama.cppをベースに、ウェブUIなどに独自の機能拡充を施したパッケージです。
- Windowsの場合、prebuildのexeファイルを実行するだけでAPIも利用可。ソースからのインストールは非推奨。
- llama.cppと同じくGGUF量子化にのみ対応(一応旧形式のGGMLも対応)。
- 公開URL(Cloudflare)に対応。
- ContextShiftという独自のコンテキストキャッシュ機能がデフォルトで有効。コンテキストのオーバーフローにも自動で対応。
- koboldcppのOpenAI型APIはどちらかというと簡易的なもので、内部的にはChatMLテンプレート(<|im_start|>system\n...)ではなくAlpacaテンプレート(###Instruction\n...)で処理。
3. Text generation web UI
ローカルLLMの老舗UI、Text generation web UIにもOpenAI型API機能があります。llama.cppやkoboldcpp のOpenAI APIよりも少し手が込んだ実装になっています。
- モデルのチャットテンプレート情報を読み込み、自動で判定したテンプレートを適用。
- prebuildの.exeファイルではなくone-clickインストーラーを使ってセットアップする。やや手間だがコードの修正は容易。
- コンテキストキャッシュはデフォルトで有効。
- 公開URL(Cloudflare)に対応。
- --verbose フラグでコンソールに入力プロンプト全体が表示できる。
- llama.cpp(GGUFフォーマット)だけでなく、TransformersやGPTQ、Exllamav2など複数のローダー/バックエンドに対応。
- ただGGUFによる推論はllama-cpp-python経由となっていて、直接llama.cppを使ったほうがやや速いと言われています。