用 Token 治理回答 AI 投入产出:从调用账单走向可审计的业务价值

2026-09-16 12 预计阅读时间: 1 分钟
来源: oschina.net AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:11 分钟

在以“AI 的系统落地”为主题的 2026 ITValue Summit 数字价值年会上,开源中国董事长马越围绕“AI 是成本还是产能”这一企业普遍关心的问题展开演讲。这个问题的难点并不只是模型价格,而是企业常常只能看到不断增长的调用账单,却无法回答:Token 被谁使用、用于什么场景、产生了什么结果,以及这笔投入是否值得继续。

Token 治理提供了一个可操作的切入口:先把 AI 消耗变成可计量、可归属、可控制的数据,再将这些数据与质量指标和业务结果连接起来。不过,Token 只是计量单位,不等同于业务价值;真正有效的治理,需要同时建立消耗账、质量账和价值账。

不要只问 Token 花了多少

传统云成本治理通常可以按机器、数据库和项目分摊费用。生成式 AI 更复杂:同一应用可能调用多个模型,一次业务请求可能触发检索、重试、工具调用和多轮生成,最终还可能被用户拒绝。

因此,一条可用于治理的 AI 调用记录,至少应包含以下维度:

  • 归属信息:部门、项目、应用、业务场景和负责人。
  • 消耗信息:模型、输入 Token、输出 Token、缓存命中和重试次数。
  • 质量信息:是否被用户采纳、评测分数、人工修订量和失败原因。
  • 价值信息:节省的工时、完成的订单、解决的工单或其他可验证结果。
  • 风险信息:是否包含敏感数据、是否触发越权工具、是否经过人工确认。

如果缺少归属信息,财务只能看到总账;如果缺少质量信息,低价模型可能因为反复重试而更贵;如果缺少业务结果,Token 再便宜也无法证明 AI 已经形成产能。

三本账比一个 ROI 数字更可靠

企业可以把 Token 治理拆成三层,而不是急着计算一个看似精确的整体 ROI。

1. 消耗账:钱花在哪里

将不同供应商、模型和计费方式统一换算到请求、任务、项目和部门。除了输入与输出 Token,还要纳入向量检索、联网搜索、图片处理、模型托管和人工审核等非 Token 成本。

2. 质量账:输出是否可用

对客服回复、代码补全、报告生成等场景分别定义质量指标。例如,客服可以看一次解决率和转人工率,代码助手可以看建议采纳率和回滚率。不能用同一套“满意度”覆盖所有场景。

3. 价值账:结果是否值得投入

价值归因要尽量保守。节省十分钟并不必然等于创造了十分钟工资价值,生成一份文档也不代表业务真正采用。更可靠的做法是选择可核验事件,例如“工单已关闭”“合同审查完成”“代码已合并且未回滚”。

最终可以关注几类指标:

  • 每个成功任务的 AI 成本;
  • 每 1 万次调用产生的有效结果数;
  • 单位业务结果对应的 Token 消耗;
  • 预算利用率以及异常调用比例;
  • 与人工基线或旧系统相比的质量、时延和成本变化。

可以这样实践:建立最小 Token 成本与价值台账

下面是一个仅使用 Python 标准库的最小示例。它按项目汇总模型调用成本、成功结果和可归因价值,并检查单次调用上限及项目预算。

示例中的价格、预算和业务价值均为假设值。运行前应替换为企业实际合同价格和经过业务部门确认的价值口径。

将以下内容保存为 token_governance.py,然后执行 python token_governance.py

import json
from collections import defaultdict

# 假设价格:人民币/百万 Token。请替换为实际合同价格。
RATES = {
    "model-a": {"input": 2.0, "output": 8.0},
    "model-b": {"input": 6.0, "output": 18.0},
}

# 项目月度预算与单次请求成本上限,单位为人民币。
PROJECT_BUDGETS = {"customer-service": 1.00, "coding": 1.50}
REQUEST_COST_LIMIT = 0.08

# 生产环境中,这些记录应来自 AI 网关、可观测平台或业务事件系统。
events = [
    {
        "project": "customer-service",
        "scenario": "ticket-summary",
        "model": "model-a",
        "input_tokens": 4200,
        "output_tokens": 600,
        "accepted": True,
        "attributed_value": 2.50,
    },
    {
        "project": "customer-service",
        "scenario": "reply-draft",
        "model": "model-b",
        "input_tokens": 7600,
        "output_tokens": 1400,
        "accepted": False,
        "attributed_value": 0.00,
    },
    {
        "project": "coding",
        "scenario": "test-generation",
        "model": "model-b",
        "input_tokens": 12000,
        "output_tokens": 2600,
        "accepted": True,
        "attributed_value": 6.00,
    },
]

stats = defaultdict(lambda: {
    "requests": 0,
    "accepted": 0,
    "tokens": 0,
    "cost": 0.0,
    "attributed_value": 0.0,
})
alerts = []

for event in events:
    rate = RATES[event["model"]]
    cost = (
        event["input_tokens"] * rate["input"]
        + event["output_tokens"] * rate["output"]
    ) / 1_000_000

    project = event["project"]
    item = stats[project]
    item["requests"] += 1
    item["accepted"] += int(event["accepted"])
    item["tokens"] += event["input_tokens"] + event["output_tokens"]
    item["cost"] += cost
    item["attributed_value"] += event["attributed_value"]

    if cost > REQUEST_COST_LIMIT:
        alerts.append({
            "type": "request_cost_exceeded",
            "project": project,
            "scenario": event["scenario"],
            "cost": round(cost, 4),
        })

report = {}
for project, item in stats.items():
    cost = item["cost"]
    accepted = item["accepted"]
    budget = PROJECT_BUDGETS[project]

    report[project] = {
        "requests": item["requests"],
        "accepted_results": accepted,
        "acceptance_rate": round(accepted / item["requests"], 4),
        "total_tokens": item["tokens"],
        "cost": round(cost, 4),
        "cost_per_accepted_result": round(cost / accepted, 4)
        if accepted else None,
        "attributed_value": round(item["attributed_value"], 2),
        "illustrative_roi": round(
            (item["attributed_value"] - cost) / cost, 4
        ) if cost else None,
        "budget_utilization": round(cost / budget, 4),
    }

    if cost > budget:
        alerts.append({
            "type": "project_budget_exceeded",
            "project": project,
            "cost": round(cost, 4),
            "budget": budget,
        })

print(json.dumps({"projects": report, "alerts": alerts}, ensure_ascii=False, indent=2))

这段程序不是完整的 FinOps 平台,但展示了关键的数据连接:模型计费记录不能停留在供应商账单中,而要与项目、场景、采纳结果和业务价值放在同一条数据链上。

进入生产环境后,可以将采集点放在统一 AI 网关中,并为每次调用生成 trace_id。业务系统在工单关闭、代码合并或合同审核完成时,再用同一个 trace_id 回写结果。这样即使一次任务跨越多个模型,也能汇总出任务级成本。

从试点走向生产的治理清单

落地时不宜一开始就建设庞大的治理平台,可以按以下顺序推进:

  1. 统一调用入口:尽量让模型请求经过 AI 网关,统一记录身份、模型、Token、时延和错误。
  2. 给调用打业务标签:至少包含部门、项目、场景、环境和负责人,禁止长期存在无法归属的调用。
  3. 建立预算护栏:设置单次请求、每日项目和月度部门预算,并区分提醒、限流和熔断策略。
  4. 绑定质量评测:高成本不一定低效,低成本也不一定可用;成本优化必须与正确率、采纳率和安全指标一起进行。
  5. 保留人工复核:财务、医疗、法务等高风险输出不能只靠 Token 阈值自动放行。
  6. 定期校准价值口径:业务价值应由业务部门、财务和技术团队共同确认,避免把模型生成次数直接包装成收益。

还需要注意,供应商之间的分词方式、缓存政策和价格结构并不完全一致,不能简单用 Token 数量横向比较模型。隐私数据也不应为了成本分析而直接写入日志;通常只记录元数据、脱敏标签和结果状态。

AI 究竟是成本还是产能,不会由某一张模型账单自动给出答案。Token 治理的意义,是建立一条可审计的证据链:每一笔消耗有归属,每一次输出有评测,每一个价值判断有业务依据。企业做到这一点,才有可能把“要不要继续投入”的争论,变成可以持续验证和调整的工程决策。


相关推荐