Kimi K3 を Harness パイプラインから呼び出す
本文中の 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 など |
- 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 に保存します。
- Setup → Secrets → + New Secret
- 種類: Encrypted Text
- キー名:
KIMI_API_TOKEN - 値: 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')>"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 init → apply |
| テストケース生成 | 受け取った仕様書からテストシナリオを生成 | 仕様テキスト → Kimi K3 に「ユニットテストを書いて」指示 → 結果を src/test に保存 |
| ドキュメント作成 | アーキテクチャ図の説明文や API 仕様書のドラフト | Markdown テンプレート → Kimi K3 に要件を渡し、アウトプットを README.md に上書き |
5. ベストプラクティス
- API キーは最小権限で – Kimi API のキーは、用途に応じて必要最小限のスコープに絞り、コードに直接書かない。
- リトライロジック – ネットワーク障害やレートリミットに備えて、
curl/requestsにリトライ(--retryや backoff)を実装する。 - 応答サイズ制御 –
max_completion_tokensとreasoning_effortを調整し、不要に長い出力や過度な推論を防ぐ。 - 監査ログ – Harness の Audit 機能で外部 API コールを記録し、トラブル時に呼び出し履歴を追跡できるようにする。
- シークレットローテーション – 定期的に新しい Kimi API キーを生成し、Harness のシークレットを更新する(更新間隔は運用方針に合わせて決定)。
API キーのローテーション頻度やレートリミットの具体的な値は、Kimi 公式の利用規約・料金・FAQ で確認してください。本ページに数値を明記しないのは、検証時点の仕様と異なる可能性があるためです。
6. 典型的なエラーメッセージと対処
| エラー | 内容 | 対処 |
|---|---|---|
401 Unauthorized |
トークンが無効・期限切れ | シークレットの API キーを再取得し、パイプライン変数を更新 |
429 Too Many Requests |
レートリミット超過 | レスポンスの Retry-After ヘッダーを読み取り、待機後再実行 |
500 Internal Server Error |
サーバ側障害(稀) | 短時間でリトライ、障害が続く場合は Kimi 公式のステータスページを確認 |
JSONDecodeError |
返却が期待した JSON でない | curl の -f silent オプションを外し、レスポンス全体をログに出力して原因を特定 |
まとめ
- シークレット登録 – Kimi API キーを Harness に安全に保管する。
- パイプラインステップで
curlまたは公式 SDK を呼び出し、model: "kimi-k3"を指定する。 - 出力をファイル / 変数に保存し、次のビルドステップやデプロイに組み込む。
- リトライ・ロギング・権限管理を徹底し、安定した CI/CD フローを実現する。
この手順で、Kimi K3 の生成能力を自動化パイプラインに統合し、コード生成、ドキュメント作成、インフラ構成自動化などをシームレスに実行できます。詳細は必ず Kimi API 公式ドキュメント を参照してください。