AI 创业营收 89% 被两家吞掉——开发者该怎么面对这个双寡头现实

2026-05-20 20 预计阅读时间:1 分钟
来源:oschina.net AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:11 分钟

The Information 最新报告扔出一个刺眼数字:OpenAI 和 Anthropic 两家合计拿走了 AI 创业公司年化营收的 89%。不是 40%,不是 60%,是 89%。生成式 AI 的商业版图正在以超出预期速度向双寡头坍缩,而绝大多数开发者每天都在用这两家的 API 写代码、跑模型、交付产品。这件事不只是投资人的谈资——它直接决定了你的技术栈风险、成本结构和迁移余地。

从十亿到数百亿:收入集中是怎么形成的

OpenAI 的营收曲线几乎是商业史上的异常值。从 ChatGPT 上线到年化收入突破数十亿量级,时间短到传统 SaaS 公司无法参照。Anthropic 跑得同样快——Claude 系列在企业客户中的渗透率持续攀升,尤其是长上下文、安全对齐这些差异化标签,让它在金融、医疗等高合规行业拿到了大量订单。

两家的增长引擎并不相同:

维度 OpenAI Anthropic
核心驱动力 消费端订阅 + 开发者 API 企业合同 + 安全合规叙事
模型覆盖 GPT-4o / o1 / o3,多模态 Claude 3.5 / 4 系列,长上下文
生态绑定 ChatGPT 插件、GPTs、App Store MCP 协议、Tool Use、企业部署

但结果趋同:钱都流向了同一组 API endpoint。剩下 11% 的营收要分给 Mistral、Cohere、Replicate、Together AI 等几十家公司,平均下来每家连 1% 都不到。

双寡头对开发者意味着什么

营收集中不是抽象概念。当你 90% 的推理调用都走 api.openai.comapi.anthropic.com 时,以下风险已经嵌入了你的系统:

定价权完全倾斜。 2024 年 OpenAI 多次调整 token 价格——有时降价,有时涨价(比如 o1 推理模型定价远高于 GPT-4o)。你没有任何议价空间,只能接受。Anthropic 同样在 Claude 3.5 Haiku 发布时调整了价格结构。

API 变更随时发生。 模型版本切换、功能废弃、rate limit 调整,这些决定由两家公司单方面做出。你的 prompt、pipeline、评估体系可能在一夜之间需要重写。

迁移成本被刻意抬高。 两家的消息格式、tool calling 协议、流式响应结构都不兼容。从 OpenAI 切到 Anthropic 不是改一行 base_url 的事,而是重写整个请求/响应处理层。

实践:用抽象层把双寡头风险降到可控

面对这种格局,最务实的做法不是"选一家死磕",而是在架构层面预留切换能力。下面是一个可运行的 Python 示例——用轻量抽象层统一 OpenAI 和 Anthropic 的调用接口,让你可以在两家之间切换,或随时插入新的提供商。

# ai_gateway.py — 最小可运行的多提供商抽象层
# 依赖:pip install openai anthropic

from openai import OpenAI
from anthropic import Anthropic
from dataclasses import dataclass
from typing import Optional

@dataclass
class LLMResponse:
    content: str
    model: str
    provider: str
    input_tokens: int
    output_tokens: int

class LLMGateway:
    """统一调用入口,隔离提供商差异"""

    PROVIDERS = {
        "openai": {
            "client_init": lambda: OpenAI(),          # 自动读取 OPENAI_API_KEY
            "default_model": "gpt-4o",
        },
        "anthropic": {
            "client_init": lambda: Anthropic(),       # 自动读取 ANTHROPIC_API_KEY
            "default_model": "claude-sonnet-4-20250514",
        },
    }

    def __init__(self, provider: str = "openai", model: Optional[str] = None):
        if provider not in self.PROVIDERS:
            raise ValueError(f"不支持的提供商: {provider},可选: {list(self.PROVIDERS.keys())}")
        cfg = self.PROVIDERS[provider]
        self.provider = provider
        self.client = cfg["client_init"]()
        self.model = model or cfg["default_model"]

    def chat(self, system: str, user: str, max_tokens: int = 1024) -> LLMResponse:
        if self.provider == "openai":
            return self._call_openai(system, user, max_tokens)
        elif self.provider == "anthropic":
            return self._call_anthropic(system, user, max_tokens)

    def _call_openai(self, system: str, user: str, max_tokens: int) -> LLMResponse:
        resp = self.client.chat.completions.create(
            model=self.model,
            messages=[
                {"role": "system", "content": system},
                {"role": "user", "content": user},
            ],
            max_tokens=max_tokens,
        )
        choice = resp.choices[0]
        usage = resp.usage
        return LLMResponse(
            content=choice.message.content,
            model=resp.model,
            provider="openai",
            input_tokens=usage.prompt_tokens,
            output_tokens=usage.completion_tokens,
        )

    def _call_anthropic(self, system: str, user: str, max_tokens: int) -> LLMResponse:
        resp = self.client.messages.create(
            model=self.model,
            max_tokens=max_tokens,
            system=system,
            messages=[{"role": "user", "content": user}],
        )
        block = resp.content[0]
        usage = resp.usage
        return LLMResponse(
            content=block.text,
            model=resp.model,
            provider="anthropic",
            input_tokens=usage.input_tokens,
            output_tokens=usage.output_tokens,
        )

    def switch(self, provider: str, model: Optional[str] = None):
        """热切换提供商,无需重建上层逻辑"""
        new_cfg = self.PROVIDERS[provider]
        self.provider = provider
        self.client = new_cfg["client_init"]()
        self.model = model or new_cfg["default_model"]


# ===== 使用示例 =====
if __name__ == "__main__":
    # 默认走 OpenAI
    gw = LLMGateway(provider="openai")
    r1 = gw.chat(
        system="你是一位简洁的技术顾问",
        user="用一句话解释什么是 token",
    )
    print(f"[{r1.provider}/{r1.model}] {r1.content}")
    print(f"  tokens: in={r1.input_tokens}, out={r1.output_tokens}")

    # 切到 Anthropic,同一套调用代码
    gw.switch("anthropic")
    r2 = gw.chat(
        system="你是一位简洁的技术顾问",
        user="用一句话解释什么是 token",
    )
    print(f"[{r2.provider}/{r2.model}] {r2.content}")
    print(f"  tokens: in={r2.input_tokens}, out={r2.output_tokens}")

运行前确保环境变量已设置:

# .env 或直接 export
export OPENAI_API_KEY="sk-..."
export ANTHROPIC_API_KEY="sk-ant-..."

pip install openai anthropic
python ai_gateway.py

这个抽象层做了三件事:

  1. 统一入参——chat(system, user, max_tokens) 对两个提供商完全一致,上层业务代码不需要知道底层用的是谁。
  2. 统一出参——LLMResponse 数据类抹掉了响应结构的差异,下游日志、评估、缓存逻辑只处理一种格式。
  3. 热切换——switch() 方法让你在运行时更换提供商,可以用于 A/B 测试、故障转移、成本优化。

它没有覆盖 tool calling、流式响应等高级功能——那些差异更大,需要更重的抽象。但作为第一步,这个结构已经把"换一家 API"的成本从"重写整个调用链"降到了"改一行配置"。

还能做什么:从架构到策略

抽象层只是技术手段。面对 89% 的营收集中度,团队还需要在策略层面做几件事:

定期做跨提供商的模型评估。 不要只在一家上跑 benchmark。用同一套测试集在 OpenAI 和 Anthropic 上跑对比,记录质量差异和成本差异。数据驱动的切换决策比"我觉得 Claude 更好"可靠得多。

# 一个最小评估流程的伪命令
python run_eval.py \
  --dataset ./eval_set.jsonl \
  --providers openai,anthropic \
  --models gpt-4o,claude-sonnet-4-20250514 \
  --metrics accuracy,latency,cost_per_1k_tokens \
  --output ./eval_results.csv

关注开源模型的追赶速度。 Llama 4、DeepSeek V3、Qwen 3 等开源模型在特定任务上已经接近甚至超过闭源模型。如果你的场景不需要极致通用性,开源路线可以彻底绕开双寡头的定价和锁定。

把 prompt 当资产管理。 双寡头格局下,你的核心资产不是"用了谁的 API",而是你积累的 prompt、评估集、业务数据。这些是可以跨提供商迁移的。确保它们被版本化、文档化、独立存储,而不是散落在各家 SDK 的示例代码里。

设定成本阈值和故障转移规则。 比如:单日 OpenAI 调用费用超过 $500 时自动切到 Anthropic;某家 API 连续 3 次超时则触发 fallback。这些规则应该写在配置文件里,而不是靠人手动切换。

# fallback_config.yaml — 生产环境的提供商切换规则
default_provider: openai
rules:
  - trigger: cost_threshold
    provider: openai
    daily_limit_usd: 500
    fallback: anthropic
  - trigger: error_rate
    provider: openai
    threshold_pct: 5
    window_minutes: 10
    fallback: anthropic
  - trigger: latency
    provider: openai
    p99_ms: 5000
    fallback: anthropic

89% 不是终局,但信号足够强

这个数字最值得警惕的不是"两家太大了",而是"切换成本正在被结构性锁定"。每多写一行只适配 OpenAI 格式的代码,每多一个只在 Claude 上调通的 prompt,你离那 11% 的替代选项就更远一步。

双寡头可能持续很久,也可能被开源浪潮或监管动作打破。无论哪种走向,保留选择权的技术架构,比押注单一提供商更抗风险。上面那 60 行 Python 代码不是终极方案,但它代表了一种态度:用谁的模型是商业决策,怎么调用是工程决策——把两者解耦,你才不会被 89% 的数字困住。


相关推荐