Sakana AI(Fugu / Namazu)を Harness パイプラインから呼び出す

Sakana AI の Fugu / Sakana Namazu を CI/CD パイプラインやスクリプトから OpenAI 互換 API で統合する手順
Important注意:ここでの「Harness」は CI/CD プラットフォームです

本文中の Harness は、このサイトが扱う DeepSeek Harness(DSH)ではなく、Harness.io(CI/CD プラットフォーム) を指します。Sakana AI は Quarto とは直接関係のない、あくまで 「LLM を自動化パイプラインに組み込む応用のヒント」 として記載します。

API キーの管理・レートリミット・トークンの扱いなどは、必ず Sakana AI 公式コンソール・ドキュメント(console.sakana.ai)を参照してください。本ページの内容は検証時点の仕様に基づくもので、将来変更される可能性があります。


1. Sakana AI のエンドポイント取得

Sakana AI は API 経由で Fugu(マルチエージェント)と Sakana Namazu(日本語特化 LLM)の 2 系統を提供し、いずれも OpenAI 互換のエンドポイントから利用できます。

項目 内容
ベース URL https://api.sakana.ai/v1
エンドポイント POST /v1/chat/completions / POST /v1/responses / GET /v1/models
認証ヘッダー Authorization: Bearer <YOUR_API_KEY>
モデル指定 リクエストボディの model: fugu / fugu-ultra / fugu-cyber / sakana-namazu
Note
  • API キーは Sakana AI コンソール(console.sakana.ai)で発行します(fish_ で始まる文字列)。環境変数 SAKANA_API_KEY で保存するのが公式推奨です。
  • 生成リクエストには Responses API/v1/responses)が公式推奨です。既存の OpenAI Chat Completions 互換クライアントを使う場合は /v1/chat/completions も利用できます。
  • Fugu 系のモデルでは思考レベルを reasoning.effort"high" / "xhigh" / "max")で指定します。Chat Completions では temperature / top_p などの一部サンプリングパラメータは受け付けても無視される場合があるため注意してください。
  • Sakana Namazu は日本語特化の単一モデルで、temperature / top_p の指定が可能です。

2. Harness にシークレットを登録

API キーをパイプラインに直接書かず、Harness の Secret Manager に保存します。

  1. Setup → Secrets+ New Secret
  2. 種類: Encrypted Text
  3. キー名: SAKANA_API_TOKEN
  4. : Sakana AI コンソールで発行したキー

このシークレットはパイプライン実行時に ${secrets.getValue("SAKANA_API_TOKEN")} で参照できます。


3. パイプラインステップで Sakana AI を呼び出す例

3-1. Bash ステップ(curl 使用・Fugu)

steps:
  - name: "Generate AI response with Sakana Fugu"
    type: Run
    spec:
      shell: Bash
      command: |
        #!/usr/bin/env bash
        API_TOKEN=$(secrets.getValue "SAKANA_API_TOKEN")
        PROMPT="以下の要件で CloudFormation テンプレートを作成してください:\n- VPC とサブネット\n- 2 つの EC2 インスタンス (t3.micro)\n- インターネットゲートウェイ"
        RESPONSE=$(curl -sS -X POST "https://api.sakana.ai/v1/chat/completions" \
          -H "Content-Type: application/json" \
          -H "Authorization: Bearer $API_TOKEN" \
          -d "$(cat <<EOF
{
  "model": "fugu",
  "messages": [{"role":"user","content":"$PROMPT"}],
  "max_completion_tokens": 1500
}
EOF
)")
        echo "=== Sakana Fugu からの応答 ==="
        echo "$RESPONSE" | jq -r '.choices[0].message.content'
  • ポイント
    • secrets.getValue でシークレットを安全に取得。
    • jq で JSON から生成されたテキストだけを抽出。
    • 出力を長くしたい場合は max_completion_tokens を大きめに設定。

3-2. Python ステップ(公式 SDK 使用・Namazu)

steps:
  - name: "Sakana Namazu 呼び出し (Python)"
    type: Run
    spec:
      shell: Bash
      command: |
        #!/usr/bin/env bash
        python - <<'PY'
import os, json
from openai import OpenAI

api_token = os.getenv("SAKANA_API_KEY")
prompt = """以下の要件で Terraform 設定を作成してください:
- AWS provider
- VPC / 2 つのサブネット
- 1 つの RDS (db.t3.micro)"""

client = OpenAI(
    base_url="https://api.sakana.ai/v1",
    api_key=api_token,
)
resp = client.chat.completions.create(
    model="sakana-namazu",
    messages=[{"role": "user", "content": prompt}],
    max_tokens=1200,
)
print(resp.choices[0].message.content)
PY
    envVariables:
      SAKANA_API_KEY: "<+secrets.getValue('SAKANA_API_TOKEN')>"
Note

Sakana API は OpenAI 互換なので、公式の Python SDK(openai パッケージ)をそのまま使えます。base_urlhttps://api.sakana.ai/v1api_key に Sakana のキーを指定するだけです。Fugu で生成品質を上げたい場合は client.responses.create(model="fugu-ultra", reasoning={"effort": "high"}, ...) のように Responses API を使うのが推奨です。


4. 実務での活用例

シナリオ 目的 実装例
コードレビュー自動化 PR の差分を要約し、改善点を提案 git diff → Fugu に送信 → コメントを自動生成し、GitHub API で PR に投稿
インフラ構成自動生成 要件定義(テキスト) → IaC(Terraform / CloudFormation) Bash ステップで出力をファイルに保存し、terraform initapply
テストケース生成 受け取った仕様書からテストシナリオを生成 仕様テキスト → Fugu に「ユニットテストを書いて」指示 → 結果を src/test に保存
日本語ドキュメント作成 アーキテクチャ図の説明文や API 仕様書のドラフト(日本語) Markdown テンプレート → Namazu に要件を渡し、アウトプットを README.md に上書き

5. ベストプラクティス

  1. API キーは最小権限で – Sakana AI のキーは用途に応じて必要最小限のスコープに絞り、コードに直接書かない。
  2. リトライロジック – ネットワーク障害やレートリミットに備えて、curl / requests にリトライ(--retry や backoff)を実装する。
  3. モデル・パラメータの使い分け – 通常タスクは fugu、品質重視・検証が必要なタスクは fugu-ultra を使い、reasoning.effort で思考レベルを調整する。
  4. 応答サイズ制御max_completion_tokens を調整し、不要に長い出力を防ぐ。
  5. 監査ログ – Harness の Audit 機能で外部 API コールを記録し、トラブル時に呼び出し履歴を追跡できるようにする。
  6. シークレットローテーション – 定期的に新しい Sakana AI キーを生成し、Harness のシークレットを更新する(更新間隔は運用方針に合わせて決定)。
Warning

料金・レートリミット・サブスクリプション vs 従量課金の扱いなどは、Sakana AI 公式の料金ページ・FAQ で確認してください。本ページに数値を明記しないのは、検証時点の仕様と異なる可能性があるためです。


6. 典型的なエラーメッセージと対処

エラー 内容 対処
401 Unauthorized トークンが無効・期限切れ シークレットの API キーを再取得し、パイプライン変数を更新
429 Too Many Requests レートリミット超過 レスポンスの Retry-After ヘッダーを読み取り、待機後再実行
model_not_found モデル名が誤っている / アクセス権がない GET /v1/models で利用可能なモデル ID を確認(fugu-cyber はアクセス制限あり)
500 Internal Server Error サーバ側障害(稀) 短時間でリトライ、障害が続く場合は Sakana 公式のステータスページを確認

まとめ

  1. シークレット登録 – Sakana AI のキーを Harness に安全に保管する。
  2. パイプラインステップcurl または公式 SDK(OpenAI 互換)を呼び出し、モデル(fugu / fugu-ultra / sakana-namazu など)を指定する。
  3. 出力をファイル / 変数に保存し、次のビルドステップやデプロイに組み込む。
  4. リトライ・ロギング・権限管理を徹底し、安定した CI/CD フローを実現する。

この手順で、Sakana AI(Fugu / Namazu)の生成能力を自動化パイプラインに統合し、コード生成、日本語ドキュメント作成、インフラ構成自動化などをシームレスに実行できます。詳細は必ず Sakana AI 公式コンソール を参照してください。