AnyToolCall — どんなLLMでも使えるツール呼び出しミドルウェア
概要
AnyToolCallは「プロンプトベース」のアプローチで、あらゆる大規模言語モデル(LLM)にツール呼び出し機能を提供する軽量ミドルウェアです。各モデルごとに異なるfunction-callingの実装差や制約を吸収し、ツール記述の注入・呼び出し判定・結果の取り扱いを統一したワークフローで扱えるようにします。特にGeminiやClaude、OpenAI互換レイヤーなどの「奇妙な制約」に対する回避策を持ち、Node.js(18+)で簡単に組み込める点が特徴です。小規模なリポジトリながら、汎用的なミドルウェアとしてツール連携をモデル非依存で実現します。
リポジトリの統計情報
- スター数: 22
- フォーク数: 0
- ウォッチャー数: 22
- コミット数: 4
- ファイル数: 5
- メインの言語: JavaScript
主な特徴
- モデル固有のfunction-calling差分をプロンプトレベルで吸収し汎用的なツール呼び出しを提供
- Gemini / Claude / OpenAI互換レイヤーなどの奇妙な制約へのワークアラウンドを用意
- Node.js(18+)環境で動作する軽量なミドルウェア実装、導入が容易
- MITライセンスでオープンソース、拡張や組み込みがしやすい
技術的なポイント
AnyToolCallは「function callingをAPI/モデルに頼るのではなく、プロンプト設計で再現する」ミドルウェアです。READMEに示された課題(Geminiの同ロール連続禁止、Claudeのtool_callとtool_resultの厳格な整合、Gemini 3のチェイン・オブ・ソート署名要求、function calling未対応モデルなど)を踏まえ、モデルごとの制約を内部で解決する戦略を採ります。具体的には、ツールの説明や使用ルールをプロンプトに埋め込み、モデルから「ツール呼び出し意図」を抽出するためのパターン(特別なマーカーやJSON形式の出力など)を定義します。これにより、モデルがネイティブにfunction callingをサポートしていなくても、テキスト応答の一部として呼び出し要求を受け取り、ミドルウェア側で該当ツールを実行して結果を再注入できます。また、モデル固有の出力スタイル(たとえばtool_callが必ずtool_resultに続く必要がある等)に合わせた出力整形や、連続する同ロールメッセージが許されないケースへのロール割り当ての調整など、対症療法的な変換を行います。設計上は軽量で、index.jsを中心にプロンプト生成・応答解析・ツール実行・結果整形を行う単一責務のモジュール構成が想定されます。これにより、既存のアプリケーションにミニマムな差分で統合でき、異なるモデル間での一貫したツール利用体験を実現します。
プロジェクトの構成
主要なファイルとディレクトリ:
- .gitignore: file
- LICENSE: file
- README.md: file
- index.js: file
- package.json: file
まとめ
小さくて実用的な、モデル非依存のツール呼び出しミドルウェアです(50字程度)。
リポジトリ情報:
- 名前: AnyToolCall
- 説明: A llm api midware offering prompt-based function call ability.
- スター数: 22
- 言語: JavaScript
- URL: https://github.com/AliyahZombie/AnyToolCall
- オーナー: AliyahZombie
- アバター: https://avatars.githubusercontent.com/u/61051765?v=4
READMEの抜粋:
AnyToolCall
去™的原生工具调用!让任何 LLM 都能用上 Tool Calling。
😤 问题
你是否也被这些问题折磨过?
| 模型 | 奇葩限制 |
|---|---|
| Gemini | 相同 role 的消息不能连续出现 |
| Claude | tool_call 必须紧跟 tool_result,ID 必须对齐 |
| Gemini 3 | tool_call 必须附带思维链签名 |
| 某些模型 | 压根不支持 function calling |
| OpenAI 兼容层 | 各种奇怪的 … |