1. GPTsの発想をコマンドラインへ
TranslateGemmaから始まった自動化
最初に作成したtranslateスクリプトは,選択したテキストまたはクリップボードの内容をOllamaへ送り,TranslateGemmaの結果を受け取るためのものでした。定型プロンプト,言語方向の判定,API呼び出しをひとつのコマンドにまとめたことで,翻訳のたびに同じ指示を入力する必要がなくなりました。
この仕組みを使い続けると,翻訳以外にも同じ操作が必要だと気づきます。文章の推敲,要約,平易な説明,定型的な文体への変換などは,入力と指示が異なるだけで,処理の流れは共通しています。用途ごとにBashスクリプトを増やす方法では,API呼び出しやモデル設定も重複します。プロバイダーを変更するたびに複数のスクリプトを修正する構成にもなります。
そこで,入力処理,プロンプト構築,API接続,出力処理を共通化し,用途固有の指示だけを設定ファイルへ移しました。これがmyllm-cliの出発点です。
GPTsとの対応
発想の原型はChatGPTのGPTsです。GPTsでは,特定の用途に対する指示をあらかじめ設定し,目的に合わせたChatGPTを呼び出せます。myllm-cliでは,同じ考え方を名前付きのタスクとして表現します。たとえば,文章を整える指示をpolishとして登録すると,毎回その指示を貼り付ける代わりに,次のように実行できます。
echo "下書きの文章" | myllm polish両者の対応は次のように整理できます。
| 観点 | GPTs | myllm-cli |
|---|---|---|
| 用途別の指示 | GPTごとに設定 | [tasks.<id>]ごとに設定 |
| 呼び出し方 | ChatGPT上でGPTを選択 | myllm <task>を実行 |
| 主な操作形態 | 対話 | 1回の入力と出力 |
| モデルの接続先 | ChatGPT | Ollama,OpenAI API,Anthropic API |
| 他のコマンドとの連携 | ChatGPTの画面内 | stdinとstdoutによるパイプ |
| 設定の保存先 | ChatGPT | ローカルのconfig.toml |
ただし,myllm-cliはGPTsをそのまま再実装するものではありません。会話履歴,アップロードした知識,Web検索,外部ツールやActionsに相当する機能は持たず,ひとつの入力をひとつのタスクで処理することに範囲を限定しています。この単純さにより,エディター,シェルスクリプト,パイプラインなど,コマンドラインを呼び出せる場所から同じタスクを利用できます。
一回の処理
通常のタスクでは,設定した指示の後に空行と入力テキストを連結し,単一のユーザーメッセージとしてプロバイダーへ送ります。処理の全体像は次のとおりです。
引数・stdin・クリップボード
│
▼
myllm <task>
│
├── config.tomlから指示を取得
├── プロバイダーとモデルを決定
▼
Ollama・OpenAI・Anthropic
│
▼
stdoutへ逐次出力入力と出力をUnixの標準ストリームに置くことで,myllm-cli自身は特定のエディターやランチャーに依存しません。macOSではクリップボードと通知を追加で利用できますが,コア部分はBash,curl,jqで構成されており,LinuxやWSL2でも同じタスクを実行できます。
三つの名前
本プロジェクトでは,次の名前を使い分けています。
- myllm-cli
GitHubリポジトリとCLI版の名称です。 myllm
インストールされるコマンドと,中核となるBashスクリプトの名称です。- My LLM
ツール群全体の名称です。CLIの機能を利用するmacOSメニューバーアプリの名称でもあります。
以下ではCLI版をmyllm-cli,実行するコマンドをmyllmと表記します。