Skip to main content

概要

Shannonは、カスタムツールを追加するための3つの方法をサポートしています。
Proto/Rust/Goの変更は不要 - すべてのツールは最大の柔軟性のために汎用コンテナを使用します。
主な機能:
  • ✅ APIまたはYAML設定による動的登録
  • ✅ 組み込みのレート制限とサーキットブレーカー
  • ✅ セキュリティのためのドメイン許可リスト
  • ✅ コスト追跡と予算の強制

クイックスタート: MCPツールの追加

MCP(Model Context Protocol)ツールを使用すると、HTTPエンドポイントをShannonツールとして統合することができ、コード変更は不要です。
1

ツール定義の追加

config/shannon.yamlmcp_toolsセクションを編集します:
必須フィールド:
  • enabled: trueに設定して有効化
  • url: HTTPエンドポイント(POSTでなければならず、JSONを受け入れる)
  • func_name: 内部関数名
  • description: LLMに表示される明確な説明
  • category: ツールのカテゴリ(例: search, data, analytics, code
  • cost_per_use: USDでの推定コスト
  • parameters: パラメータ定義の配列
2

ドメインアクセスの設定

開発用(緩和):.envに追加:
本番用(推奨):
3

APIキーの追加

.envにAPIキーを追加:
4

サービスの再起動

サービスを再作成する必要があります(単に再起動するだけではありません):
ヘルスチェックを待ちます:
5

登録の確認

ログを確認:
APIを介してツールをリスト:
ツールスキーマを取得:
6

ツールのテスト

直接実行:
ワークフロー経由:

MCPリクエスト規約

Shannonはこの形式でPOSTリクエストを送信します:
あなたのエンドポイントはJSONを返す必要があります:

代替: ランタイムAPI登録

開発/テスト用のみ(再起動時にツールが失われます):

OpenAPIツールの追加

OpenAPI 3.x仕様のREST APIの場合、Shannonはツールを自動的に生成できます。
カスタム変換が必要なドメイン固有のAPIについては、下記のVendor Adapter Patternセクションまたは包括的なVendor Adapters Guideを参照してください。

機能

サポートされている:
  • ✅ OpenAPI 3.0および3.1仕様
  • ✅ URLベースまたはインライン仕様の読み込み
  • ✅ JSONリクエスト/レスポンスボディ
  • ✅ パスおよびクエリパラメータ
  • ✅ Bearer、APIキー(ヘッダー/クエリ)、Basic認証
  • ✅ operationIdまたはタグによる操作フィルタリング
  • ✅ サーキットブレーカー(5回の失敗 → 60秒のクールダウン)
  • ✅ 指数バックオフによるリトライロジック(2回のリトライ、OPENAPI_RETRIESで設定可能)
  • ✅ 設定可能なレート制限とタイムアウト
  • ✅ 相対サーバーURL(仕様URLに対して解決)
  • ✅ 基本的な$ref解決(#/components/schemas/*へのローカル参照)

制限事項

Shannon OpenAPI統合は、約70%のREST API(シンプルな認証を持つJSONベース)に対して本番環境で使用可能です。以下の機能はまだサポートされていません:
  • ファイルやバイナリデータをアップロードできません
  • 回避策: JSONボディ内にbase64エンコードされたファイルを使用
  • 影響を受ける: 画像生成、ファイル処理、ドキュメントアップロードAPI
  • OAuth 2.0フロー(Authorization Code、Client Credentials)がありません
  • Bearerトークン(手動取得のみ)を使用可能
  • 影響を受ける: Google APIs、GitHub、Slack、Twitterなど
  • 回避策: OAuthトークンを手動で取得し、bearer auth_typeを使用
  • styleexplode、またはdeepObjectシリアル化がありません
  • 基本的なパス/クエリパラメータの置換のみ
  • 影響を受ける: 複雑な配列/オブジェクトクエリパラメータを持つAPI
  • リモートの$ref解決がありません(例: https://example.com/schemas/Pet.json
  • ローカル参照(#/components/...)のみサポート
  • 回避策: 外部スキーマを単一の仕様ファイルに統合
  • allOfoneOfanyOfのサポートがありません
  • 基本的な型マッピングのみ
  • 影響を受ける: 多態的な型や複雑なバリデーションを持つAPI
  • application/x-www-form-urlencodedコンテンツタイプがありません
  • JSONリクエストボディのみサポート
うまく機能するもの:
  • ✅ JSONリクエスト/レスポンスを持つシンプルなREST API
  • ✅ Bearer/APIキー/基本認証を持つAPI
  • ✅ 読み取り重視の操作(GETリクエスト)
  • ✅ ローカル$ref参照を持つ構造化された仕様
  • ✅ パスおよびクエリパラメータ(プリミティブ)
相対サーバーURL(例: /api/v3)を持つ仕様の場合、Shannonが完全なベースURLを解決できるように、spec_urlを介して仕様を提供する必要があります(spec_inlineではなく)。

クイックスタート

1

ツール定義の追加

config/shannon.yamlopenapi_toolsを編集:
2

環境の設定

.envに追加:
3

サービスの再起動

4

検証とテスト

まず仕様を検証:
レスポンス:
ツールを実行:

認証の例

ビルトインPythonツールの追加

複雑なロジック、データベースアクセス、またはパフォーマンスが重要な操作のため。

ビルトインツールを使用するタイミング

ビルトインツールを使用する場合:
  • データベース/Redisへの直接アクセスが必要
  • 複雑なPythonライブラリ(pandas、numpy)が必要
  • パフォーマンスが重要(HTTPラウンドトリップを避ける)
  • セッション状態管理が必要
  • セキュリティに敏感な操作を実装する
代わりにMCP/OpenAPIを使用する場合:
  • 外部APIを統合する
  • ノーコードデプロイを希望する
  • 迅速にプロトタイピングする
  • サードパーティサービスを統合する
1

ツールクラスの作成

python/llm-service/llm_service/tools/builtin/my_custom_tool.pyにファイルを作成:
2

ランタイム登録(オプション)

APIを介してOpenAPIツールを動的に登録します(MCPと同じ管理トークンを使用):
レスポンスには登録された操作と有効な制限が含まれます。
3

ツールの登録

python/llm-service/llm_service/api/tools.pyの228行目付近を編集:
4

サービスの再起動

5

ツールのテスト

高度な: セッション対応ツール

状態を保持するツールのために:

設定リファレンス

MCP ツール設定

OpenAPI ツール設定

環境変数

MCP 設定:
OpenAPI 設定:

テスト & 検証

ヘルスチェック

ツールのリスト

ツールの実行

直接実行:
バッチ実行:
ワークフロー経由:

トラブルシューティング

症状: ツールが /tools/list に表示されないデバッグ手順:
症状: URL host 'example.com' not in allowed domains解決策:
  1. 開発: ワイルドカードを使用
  2. 本番: 特定のドメインを追加
症状: ToolResult { success: false, error: "..." }デバッグ:
症状: Circuit breaker open for <url> (too many failures)デバッグ:
防止策:
  • 失敗の閾値を増加: MCP_CB_FAILURES=10
  • 回復時間を増加: MCP_CB_RECOVERY_SECONDS=120
  • 根本的な API の問題を修正

セキュリティベストプラクティス

ドメインの許可リスト

API キー管理

API キーを設定ファイルにハードコーディングしないでください!
❌ 悪い例:
✅ 良い例:
.env に保存(git で追跡されない):
本番用: シークレット管理を使用
  • Docker シークレット
  • Kubernetes シークレット
  • HashiCorp Vault
  • AWS Secrets Manager

危険なツール

状態を変更したり、機密リソースにアクセスするツールにマークを付ける:

ベンダーアダプターパターン

ドメイン特有の API とカスタムエージェント用 プロプライエタリまたは内部 API を統合する際に、ドメイン特有の変換が必要な場合は、ベンダーアダプターパターンを使用して、ベンダーロジックを Shannon のコアインフラストラクチャから分離します。

使用するタイミング

API 統合が次のことを必要とする場合にベンダーアダプタを使用します:
  • カスタムフィールド名のエイリアス(例: usersmy:unique_users
  • リクエスト/レスポンスの変換
  • セッションコンテキストからの動的パラメータの注入
  • ドメイン特有の検証または正規化
  • カスタムシステムプロンプトを持つ専門的なエージェントロール

クイック例

1

ベンダーアダプタを作成

python/llm-service/llm_service/tools/vendor_adapters/myvendor.py:
2

アダプタを登録

python/llm-service/llm_service/tools/vendor_adapters/__init__.py:
3

ベンダーフラグで設定

config/overlays/shannon.myvendor.yaml:
4

環境を使用

利点

  • クリーンな分離: ベンダーコードがShannonコアから隔離されている
  • コアの変更なし: Shannonインフラストラクチャは汎用的なまま
  • 条件付きロード: ベンダーモジュールが利用できない場合の優雅なフォールバック
  • 簡単なテスト: アダプターを単体でテスト可能
  • シークレット管理: すべてのトークンは環境変数経由

完全ガイド

以下を含む包括的なガイド:
  • 専門分野向けのカスタムエージェントロール
  • セッションコンテキスト注入パターン
  • テスト戦略
  • ベストプラクティスとトラブルシューティング

ベンダーアダプターガイド

アダプターパターンを使用してベンダー特有の統合を構築する方法を学ぶ

概要

ツールを追加する3つの方法: 重要なポイント:
  • ✅ プロトタイプ/Rust/Goの変更なし(汎用的なgoogle.protobuf.Structコンテナ)
  • ✅ セキュリティが組み込まれている(ドメインホワイトリスト、レート制限、サーキットブレーカー)
  • ✅ コスト追跡が自動(メタデータにcost_per_useを設定)
  • ✅ スキーマ駆動(OpenAI互換のJSONスキーマ)

次のステップ

ベンダーアダプター

ベンダー特有の統合を構築する

Shannonの拡張

すべての拡張方法を探る

設定

完全な設定リファレンス

APIリファレンス

REST APIを探る