AnyToolCall — どんなLLMでも使えるツール呼び出しミドルウェア

AI/ML

概要

AnyToolCallは「プロンプトベース」のアプローチで、あらゆる大規模言語モデル(LLM)にツール呼び出し機能を提供する軽量ミドルウェアです。各モデルごとに異なるfunction-callingの実装差や制約を吸収し、ツール記述の注入・呼び出し判定・結果の取り扱いを統一したワークフローで扱えるようにします。特にGeminiやClaude、OpenAI互換レイヤーなどの「奇妙な制約」に対する回避策を持ち、Node.js(18+)で簡単に組み込める点が特徴です。小規模なリポジトリながら、汎用的なミドルウェアとしてツール連携をモデル非依存で実現します。

GitHub

リポジトリの統計情報

  • スター数: 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字程度)。

リポジトリ情報:

READMEの抜粋:

AnyToolCall

去™的原生工具调用!让任何 LLM 都能用上 Tool Calling。

License: MIT Node.js

😤 问题

你是否也被这些问题折磨过?

模型奇葩限制
Gemini相同 role 的消息不能连续出现
Claudetool_call 必须紧跟 tool_result,ID 必须对齐
Gemini 3tool_call 必须附带思维链签名
某些模型压根不支持 function calling
OpenAI 兼容层各种奇怪的 …