Kimi K3 を Harness パイプラインから呼び出す

Kimi K3(kimi-k3)を CI/CD パイプラインやスクリプトから OpenAI 互換 API で統合する手順
Important注意:ここでの「Harness」は CI/CD プラットフォームです

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

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


1. Kimi K3 のエンドポイント取得

Kimi API は OpenAI 互換の Chat Completions API を提供しています。

項目 内容
ベース URL(国際版) https://api.moonshot.ai/v1
エンドポイント POST /v1/chat/completions
認証ヘッダー Authorization: Bearer <YOUR_API_KEY>
モデル指定 リクエストボディの model: "kimi-k3"
推論パラメータ reasoning_effort"low" / "high" / "max"、既定 "max")、max_completion_tokens など
Note
  • API キーは Kimi API プラットフォームのコンソール(platform.kimi.ai → API Keys)で生成します。環境変数 MOONSHOT_API_KEY で保存するのが公式推奨です。
  • kimi-k3 の思考強度は reasoning_effort で制御します。temperature / top_p / presence_penalty / frequency_penalty などはモデルによって固定・非対応の場合があるため、指定を外すのが安全です。

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

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

  1. Setup → Secrets+ New Secret
  2. 種類: Encrypted Text
  3. キー名: KIMI_API_TOKEN
  4. : Kimi API プラットフォームで生成したキー

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


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

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

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

3-2. Python ステップ(公式 SDK がある場合)

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

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

payload = {
    "model": "kimi-k3",
    "messages": [{"role": "user", "content": prompt}],
    "max_completion_tokens": 1200,
    "reasoning_effort": "low"
}
headers = {"Authorization": f"Bearer {api_token}", "Content-Type": "application/json"}
resp = requests.post("https://api.moonshot.ai/v1/chat/completions", headers=headers, json=payload)
print(json.dumps(resp.json(), indent=2, ensure_ascii=False))
PY
    envVariables:
      KIMI_API_TOKEN: "<+secrets.getValue('KIMI_API_TOKEN')>"
Note

Python 例は環境変数名を MOONSHOT_API_KEY(公式推奨)にしています。Harness の envVariables 側で KIMI_API_TOKEN を渡す場合も、コード内の os.getenv の名前と一致するよう調整してください。公式の Python SDK(openai パッケージ)を使う場合は client = OpenAI(base_url="https://api.moonshot.ai/v1") とすれば直接呼べます。


4. 実務での活用例

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

5. ベストプラクティス

  1. API キーは最小権限で – Kimi API のキーは、用途に応じて必要最小限のスコープに絞り、コードに直接書かない。
  2. リトライロジック – ネットワーク障害やレートリミットに備えて、curl / requests にリトライ(--retry や backoff)を実装する。
  3. 応答サイズ制御max_completion_tokensreasoning_effort を調整し、不要に長い出力や過度な推論を防ぐ。
  4. 監査ログ – Harness の Audit 機能で外部 API コールを記録し、トラブル時に呼び出し履歴を追跡できるようにする。
  5. シークレットローテーション – 定期的に新しい Kimi API キーを生成し、Harness のシークレットを更新する(更新間隔は運用方針に合わせて決定)。
Warning

API キーのローテーション頻度やレートリミットの具体的な値は、Kimi 公式の利用規約・料金・FAQ で確認してください。本ページに数値を明記しないのは、検証時点の仕様と異なる可能性があるためです。


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

エラー 内容 対処
401 Unauthorized トークンが無効・期限切れ シークレットの API キーを再取得し、パイプライン変数を更新
429 Too Many Requests レートリミット超過 レスポンスの Retry-After ヘッダーを読み取り、待機後再実行
500 Internal Server Error サーバ側障害(稀) 短時間でリトライ、障害が続く場合は Kimi 公式のステータスページを確認
JSONDecodeError 返却が期待した JSON でない curl-f silent オプションを外し、レスポンス全体をログに出力して原因を特定

まとめ

  1. シークレット登録 – Kimi API キーを Harness に安全に保管する。
  2. パイプラインステップcurl または公式 SDK を呼び出し、model: "kimi-k3" を指定する。
  3. 出力をファイル / 変数に保存し、次のビルドステップやデプロイに組み込む。
  4. リトライ・ロギング・権限管理を徹底し、安定した CI/CD フローを実現する。

この手順で、Kimi K3 の生成能力を自動化パイプラインに統合し、コード生成、ドキュメント作成、インフラ構成自動化などをシームレスに実行できます。詳細は必ず Kimi API 公式ドキュメント を参照してください。