SuperAPI AI 工具集

klingai-team-setup

智能体与模型

查看项目

更新于 10-16 07:07

技能介绍

用途

Kling AI Team Setup 用于管理团队对 Kling AI API 的访问,通过独立 API 密钥、基于环境的路由、按成员的用量配额以及集中式凭据管理来实现。

主要能力

按环境划分 API 密钥

在 Kling AI 开发者控制台中为每个环境创建独立的 API 密钥对:

环境 密钥命名约定 用途
Development dev-<project> 本地测试、免费额度
Staging staging-<project> 集成测试
Production prod-<project> 线上流量

示例环境变量:

# .env.development
KLING_ACCESS_KEY="ak_dev_..."
KLING_SECRET_KEY="sk_dev_..."

# .env.production
KLING_ACCESS_KEY="ak_prod_..."
KLING_SECRET_KEY="sk_prod_..."

团队配置

通过数据类定义团队成员与团队配置,成员包含姓名、邮箱、角色(admin、editor、viewer)、每日额度上限和允许使用的模型列表;团队配置包含名称、成员列表、团队每日总上限、默认模型和默认模式。

from dataclasses import dataclass
from typing import Optional

@dataclass
class TeamMember:
    name: str
    email: str
    role: str  # admin, editor, viewer
    daily_credit_limit: int
    allowed_models: list[str]

@dataclass
class TeamConfig:
    name: str
    members: list[TeamMember]
    total_daily_limit: int = 1000
    default_model: str = "kling-v2-master"
    default_mode: str = "standard"

    def get_member(self, email: str) -> Optional[TeamMember]:
        return next((m for m in self.members if m.email == email), None)

team = TeamConfig(
    name="marketing",
    total_daily_limit=5000,
    members=[
        TeamMember("Alice", "alice@co.com", "admin", 2000,
                   ["kling-v2-6", "kling-v2-master", "kling-v2-5-turbo"]),
        TeamMember("Bob", "bob@co.com", "editor", 500,
                   ["kling-v2-master", "kling-v2-5-turbo"]),
        TeamMember("Carol", "carol@co.com", "viewer", 100,
                   ["kling-v2-5-turbo"]),
    ],
)

按成员用量配额

TeamQuotaManager 负责执行成员级与团队级额度限制,包括每日重置、模型授权检查、成员每日上限校验和团队每日总上限校验,并提供用量报告。

import time
from collections import defaultdict

class TeamQuotaManager:
    """Enforce per-member and team-wide credit limits."""

    def __init__(self, config: TeamConfig):
        self.config = config
        self._usage = defaultdict(int)  # email -> credits used today
        self._reset_time = time.time()

    def _check_reset(self):
        if time.time() - self._reset_time > 86400:
            self._usage.clear()
            self._reset_time = time.time()

    def authorize(self, email: str, credits_needed: int, model: str) -> bool:
        self._check_reset()
        member = self.config.get_member(email)
        if not member:
            raise PermissionError(f"Unknown user: {email}")

        if model not in member.allowed_models:
            raise PermissionError(f"{email} not authorized for {model}")

        if self._usage[email] + credits_needed > member.daily_credit_limit:
            raise RuntimeError(f"{email} exceeds daily limit "
                             f"({self._usage[email]} + {credits_needed} > {member.daily_credit_limit})")

        team_total = sum(self._usage.values()) + credits_needed
        if team_total > self.config.total_daily_limit:
            raise RuntimeError(f"Team daily limit exceeded ({team_total} > {self.config.total_daily_limit})")

        return True

    def record_usage(self, email: str, credits: int):
        self._usage[email] += credits

    def usage_report(self) -> dict:
        return {
            "team_total": sum(self._usage.values()),
            "team_limit": self.config.total_daily_limit,
            "by_member": dict(self._usage),
        }

密钥管理

支持多种密钥存储工具:

工具 存储 AK/SK 的方式
AWS Secrets Manager aws secretsmanager create-secret --name kling/prod
GCP Secret Manager gcloud secrets create kling-prod
HashiCorp Vault vault kv put secret/kling ak=... sk=...
1Password CLI op item create --category login --title "Kling API"

从 AWS Secrets Manager 加载凭据的示例:

import boto3
import json

def get_kling_credentials(secret_name="kling/prod"):
    client = boto3.client("secretsmanager")
    secret = client.get_secret_value(SecretId=secret_name)
    creds = json.loads(secret["SecretString"])
    return creds["access_key"], creds["secret_key"]

访问控制封装

TeamKlingClient 在基础客户端之上加入团队级访问控制,在调用 text_to_video 前先进行配额授权,调用后记录用量。

class TeamKlingClient:
    """Kling client with team-level access control."""

    def __init__(self, base_client, quota_manager: TeamQuotaManager):
        self.client = base_client
        self.quotas = quota_manager

    def text_to_video(self, email: str, prompt: str, **kwargs):
        model = kwargs.get("model", "kling-v2-master")
        credits = 10 if kwargs.get("mode") != "professional" else 35
        self.quotas.authorize(email, credits, model)

        result = self.client.text_to_video(prompt, **kwargs)
        self.quotas.record_usage(email, credits)
        return result

使用方式

前置条件

需要已批准的团队角色矩阵、授权工作区、预算负责人、权利与内容政策流程、合成测试简报,以及经过测试的访问撤销路径。

操作步骤

  1. 在沙箱团队中配置最小权限角色,拒绝共享凭据或未经批准的发布目标。
  2. 仅使用合成简报测试配额、审批、审计、政策和撤销路径;所有生成资产保持草稿状态。
  3. 一次只运行一个角色金丝雀测试,遇到意外的权限、预算、政策或保留期漂移时立即停止。
  4. 仅在负责人批准后提升角色,撤销临时访问,并在约定窗口后删除测试资产。

输出

生成团队配置回执,包含工作区、角色范围、配额限制、审批与政策检查、仅草稿断言、撤销测试、负责人批准、保留与删除证明以及回滚引用。不包含成员身份和凭据。

错误处理

条件 响应
角色授予超出已批准矩阵 撤销授予,恢复先前矩阵,仅记录脱敏审计事件。
预算或政策控制失败 停止生成,取消排队草稿,要求负责人审查后再重试。

示例

workspace=sandbox-studio; role=editor-draft-only; quota=100-credits; policy=pass; publish=disabled; revocation=tested 是一个有效的配置金丝雀。

适用场景

适用于需要多人协作使用 Kling AI 视频生成 API 的团队,尤其是希望按成员控制额度、按环境隔离密钥、集中管理凭据并实施最小权限访问控制的组织。

限制

资料未提供具体的定价、平台兼容性、性能指标或效果数据。使用前需自行准备已批准的团队角色矩阵、授权工作区、预算负责人、权利与内容政策流程、合成测试简报和访问撤销路径。