概要
ShannonはOpenAPI 3.x仕様からツールを自動生成でき、コードを書くことなく任意のREST APIを統合できます。OpenAPIローダーは以下の機能を持っています:- ✅ OpenAPI 3.0/3.1仕様を解析
- ✅ 操作ごとに1つのツールを生成
- ✅ 認証を処理(Bearer、API Key、Basic)
- ✅ パス/クエリ/ヘッダーのパラメータをサポート
- ✅ サーキットブレーカーとレート制限を含む
- ✅ スキーマに対してリクエストを検証
- ✅
$ref参照をローカルで解決
設定リファレンス
基本設定
フィールドの説明
| フィールド | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
enabled | boolean | はい | - | このツールコレクションを有効にする |
spec_path | string | spec_*のいずれか | - | OpenAPI仕様のローカルファイルパス |
spec_url | string | spec_*のいずれか | - | 仕様を取得するためのURL(相対サーバーURLをサポート) |
spec_inline | string | spec_*のいずれか | - | インラインYAML/JSON仕様の内容 |
auth_type | enum | はい | none | 認証方法 |
auth_config | object | auth ≠ noneの場合 | {} | 認証設定(タイプによって異なる) |
category | string | いいえ | "api" | 組織のためのツールカテゴリ |
base_cost_per_use | float | いいえ | 0.001 | 呼び出しごとの推定コスト(USD) |
rate_limit | integer | いいえ | 30 | ツールごとの分あたりの最大リクエスト数 |
timeout_seconds | float | いいえ | 30.0 | HTTPリクエストのタイムアウト |
max_response_bytes | integer | いいえ | 10485760 | 最大レスポンスサイズ(10MB) |
operations | array[string] | いいえ | すべて | 特定のoperationIdsでフィルタリング |
tags | array[string] | いいえ | すべて | タグで操作をフィルタリング |
base_url | string | いいえ | 仕様から | APIのベースURLをオーバーライド |
認証タイプ
認証なし
Bearerトークン
使用例: GitHub、GitLab、ほとんどの最新APIヘッダー内のAPIキー
使用例: OpenAI、Anthropic、多くのSaaS APIクエリパラメータ内のAPIキー
使用例: OpenWeather、一部のレガシーAPIBasic認証
使用例: レガシーAPI、内部サービスカスタムヘッダー
ベンダー固有の認証のために:動的ヘッダーテンプレート:
"${ENV_VAR}"- 環境から解決"{{body.field}}"- 実行時にリクエストボディから解決- 静的文字列 - そのまま使用
高度な機能
操作フィルタリング
operationIdによるフィルタリング(推奨):ベースURLのオーバーライド
仕様からベースURLをオーバーライド:- ステージング/開発環境でのテスト
- 内部プロキシやゲートウェイ
- ローカル開発
レート制限
外部APIを過負荷から保護:- トークンバケットアルゴリズムで強制
- すべてのツールインスタンスで共有(単一のShannonインスタンス)
- 制限を超えた場合はエラーを返す
サーキットブレーカー
自動的な障害保護: 設定(環境経由):- 閉じた(通常): すべてのリクエストが通過
- 開いた(失敗中): すべてのリクエストが即座に拒否
- 半開き(テスト中): 1回の試行リクエストが許可される
- 5回連続で失敗 → サーキットを開く
- サーキットは60秒間オープンのまま
- その後、1回の試行リクエストを許可(半開き)
- 成功 → サーキットを閉じる
- 失敗 → さらに60秒間再オープン
レスポンスサイズ制限
メモリの枯渇を防ぐ:- 制限を超えるレスポンスは切り捨てられる
- 切り捨てマーカー付きのエラーが返される
トラブルシューティング
ツールが登録されていない
症状: ツールが/tools/list に表示されない
デバッグ:
- config内の
enabled: false - 無効なOpenAPI仕様
OPENAPI_ALLOWED_DOMAINSにドメインが含まれていない- 仕様取得タイムアウト
- 循環参照の
$ref
ドメイン検証エラー
症状:URL host 'example.com' not in allowed domains
修正:
仕様取得タイムアウト
症状:Failed to fetch OpenAPI spec: timeout
修正:
サーキットブレーカーがトリガーされた
症状:Circuit breaker open for https://api.example.com
デバッグ:
- 自動回復のために60秒待つ
- 基本的なAPIの問題を修正
- APIが遅い場合はタイムアウトを増加:
レート制限超過
症状:Rate limit exceeded for tool my_tool
修正:
認証失敗
症状:401 Unauthorized または 403 Forbidden
デバッグ:
- 環境変数が設定されていない
- トークンが期限切れ
- 認証タイプが間違っている(
api_keyではなくbearerであるべき) - APIキー認証のための
Bearerプレフィックスが欠落
例
例 1: GitHub API
例 2: OpenWeather API
例 3: ベンダーアダプターを使用した内部API
python/llm-service/llm_service/tools/vendor_adapters/mycompany.py):
セキュリティベストプラクティス
シークレットをハードコーディングしない
シークレットをハードコーディングしない
ドメインのホワイトリストを使用する
ドメインのホワイトリストを使用する
適切なレート制限を設定する
適切なレート制限を設定する
HTTPSを使用する
HTTPSを使用する
- Shannonは外部APIのHTTPを自動的にHTTPSにアップグレードします
- localhost/127.0.0.1は開発用にHTTPで許可されています
レスポンスサイズを制限する
レスポンスサイズを制限する