メインコンテンツへスキップ

はじめに

Shannonはタスクの送信、結果のストリーミング、AIエージェントワークフローの管理のためのHTTP REST APIとgRPC APIを提供します。 ベースURL: http://localhost:8080(開発環境)

クイックスタート

# タスクを送信
curl -X POST http://localhost:8080/api/v1/tasks \
  -H "Content-Type: application/json" \
  -d '{"query": "感情分析: Shannonは AI をシンプルにする"}'

# レスポンス
{
  "task_id": "task-dev-1234567890",
  "status": "submitted",
  "created_at": "2025-01-20T10:00:00Z"
}

# リアルタイムイベントをストリーム
curl -N "http://localhost:8080/api/v1/stream/sse?workflow_id=task-dev-1234567890"

APIエンドポイント

コアタスク操作

エンドポイントメソッド説明
/api/v1/tasksPOST新しいタスクを送信
/api/v1/tasks/streamPOSTタスクを送信してストリームURLを取得(201)
/api/v1/tasksGETフィルタ付きでタスクを一覧表示
/api/v1/tasks/{id}GETタスクのステータスと結果を取得
/api/v1/tasks/{id}/streamGET特定のタスクのイベントをストリーム
/api/v1/tasks/{id}/eventsGETタスクのイベント履歴を取得
/api/v1/tasks/{id}/timelineGETTemporal実行タイムラインを取得

タスク制御

エンドポイントメソッド説明
/api/v1/tasks/{id}/cancelPOST実行中のタスクをキャンセル
/api/v1/tasks/{id}/pausePOST次のチェックポイントでタスクを一時停止
/api/v1/tasks/{id}/resumePOST一時停止したタスクを再開
/api/v1/tasks/{id}/control-stateGETタスクの制御状態(一時停止/実行中)を取得

リアルタイムストリーミング

エンドポイントメソッド説明
/api/v1/stream/sse?workflow_id={id}GETServer-Sent Eventsストリーム
/api/v1/stream/ws?workflow_id={id}GETWebSocketストリーム

セッション管理

エンドポイントメソッド説明
/api/v1/sessionsGETページネーション付きでセッションを一覧表示
/api/v1/sessions/{sessionId}GETセッションの詳細を取得
/api/v1/sessions/{sessionId}/historyGETセッションのチャット履歴を取得
/api/v1/sessions/{sessionId}/eventsGETセッションイベントを取得(ターンごとにグループ化)
/api/v1/sessions/{sessionId}PATCHセッションタイトルを更新(UUIDまたはexternal_id)
/api/v1/sessions/{sessionId}DELETEセッションを削除(ソフト削除、204冪等)

スケジュール(定期タスク)

エンドポイントメソッド説明
/api/v1/schedulesPOST新しいスケジュールを作成
/api/v1/schedulesGETフィルタ付きでスケジュールを一覧表示
/api/v1/schedules/{id}GETスケジュールの詳細を取得
/api/v1/schedules/{id}/runsGETスケジュールの実行履歴を取得
/api/v1/schedules/{id}PUTスケジュール設定を更新
/api/v1/schedules/{id}/pausePOSTスケジュールを一時停止
/api/v1/schedules/{id}/resumePOST一時停止したスケジュールを再開
/api/v1/schedules/{id}DELETEスケジュールを削除

認証

エンドポイントメソッド説明認証必須
/api/v1/auth/registerPOST新規ユーザー登録いいえ
/api/v1/auth/loginPOSTログインしてJWTトークンを取得いいえ
/api/v1/auth/refreshPOSTJWTアクセストークンを更新いいえ
/api/v1/auth/meGET現在のユーザー情報を取得はい
/api/v1/auth/refresh-keyPOSTAPIキーを再生成はい
/api/v1/auth/api-keysGETユーザーのAPIキーを一覧表示はい
/api/v1/auth/api-keysPOST新しいAPIキーを作成はい
/api/v1/auth/api-keys/{id}DELETEAPIキーを無効化はい

承認

エンドポイントメソッド説明
/api/v1/approvals/decisionPOSTHuman-in-the-loopタスクの承認決定を送信

OpenAI互換API

Shannonは既存のOpenAI SDKおよびツールとの簡単な統合のためにOpenAI互換APIを提供します。詳細はOpenAI互換APIリファレンスを参照してください。
エンドポイントメソッド説明
/v1/chat/completionsPOSTチャット補完(ストリーミング対応)
/v1/modelsGET利用可能なモデルを一覧表示
/v1/models/{model}GET特定のモデルの詳細を取得

ヘルス&オブザーバビリティ

エンドポイントメソッド説明認証必須
/healthGETヘルスチェックいいえ
/readinessGETレディネスプローブいいえ
/openapi.jsonGETOpenAPI 3.0仕様いいえ

認証

開発デフォルト: 認証は無効GATEWAY_SKIP_AUTH=1)です。本番環境では有効にしてください。
有効な場合、ヘッダーでAPIキーを渡します:
curl -H "X-API-Key: sk_test_123456" \
  http://localhost:8080/api/v1/tasks
SSEストリーミング: ブラウザのEventSourceはカスタムヘッダーを送信できません。
  • 開発: GATEWAY_SKIP_AUTH=1を設定して認証をスキップ。
  • 本番: バックエンド(またはエッジ)からSSEを開始し、X-API-KeyまたはAuthorization: Bearerヘッダーを注入。
  • SSEエンドポイントでは、ヘッダーを送信できない場合のフォールバックとして api_key クエリパラメータがサポートされています。

レスポンス形式

すべてのエンドポイントは一貫したエラー形式でJSONを返します: 成功(200):
{
  "task_id": "task-dev-1234567890",
  "status": "COMPLETED",
  "result": "感情: ポジティブ"
}
エラー(400/401/404/429/500):
{
  "error": "Task not found"
}

レート制限

  • デフォルト: APIキーあたり60リクエスト/分
  • ヘッダー: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
  • 429レスポンス: Retry-Afterヘッダーを含む

イベントストリーミング

Shannonはリアルタイム監視のために33種類のイベントタイプを発行します: コアイベント:
  • WORKFLOW_STARTED, WORKFLOW_COMPLETED
  • AGENT_STARTED, AGENT_COMPLETED
  • STATUS_UPDATE, DATA_PROCESSING
  • ERROR_OCCURRED
LLMイベント:
  • LLM_PROMPT, LLM_OUTPUT, LLM_PARTIAL
ツールイベント:
  • TOOL_INVOKED, TOOL_OBSERVATION
完全なリストはイベントタイプリファレンスを参照してください。 Python SDK: フィルタリングとチェックにはEventType列挙型を使用。SDKストリーミングを参照。

クライアントアクセス

Gateway REST APIまたはPython SDK(HTTPのみ)を使用:
  • RESTエンドポイント: http://localhost:8080/api/v1/*
  • Python SDK: ShannonClient(base_url="http://localhost:8080")
注意: gRPCサービスは内部用であり、パブリックSDKの一部ではありません。OpenAI互換の/v1/chat/completionsエンドポイントは互換性のためのものです。完全なShannon機能(スキル、セッションワークスペース、研究戦略)を使用するには、/api/v1/tasksおよび関連エンドポイントを使用してください。

ベストプラクティス

1. コンテキストのためにセッションIDを使用

{
  "query": "Q2はどうですか?",
  "session_id": "user-123-analytics"
}

2. 長時間タスクにはイベントをストリーム

import requests

r = requests.get(
    f"http://localhost:8080/api/v1/stream/sse?workflow_id={task_id}",
    stream=True
)

for line in r.iter_lines():
    if line:
        event = parse_sse(line)
        print(event['type'])

3. レート制限を処理

import time

def submit_with_retry(query, max_retries=3):
    for attempt in range(max_retries):
        response = requests.post(url, json={"query": query})

        if response.status_code == 429:
            retry_after = int(response.headers.get("Retry-After", 60))
            time.sleep(retry_after)
            continue

        return response

4. 冪等性キーを使用

curl -X POST http://localhost:8080/api/v1/tasks \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"query": "一度だけ処理"}'

SDK

Python SDK

ストリーミング対応の公式Pythonクライアント

RESTクライアント

任意のHTTPクライアントライブラリを使用

次のステップ