The Information最新报告抛出一个刺眼数字:OpenAI与Anthropic两家公司,合计拿走了整个AI创业公司年化营收的89%。生成式AI赛道看似热闹——新公司层出不穷,融资新闻天天刷屏——但真正把钱收进来的,几乎只剩两个名字。
这个数字不是小样本估算,而是基于对全行业营收数据的梳理。它意味着:剩余所有AI创业公司——包括Mistral、Cohere、Perplexity、Character.AI等知名玩家——只能在11%的营收池里争抢。
从十亿到数百亿:两家的增长曲线
OpenAI的营收增长速度在商业史上几乎找不到对标。从2023年初的年化约1亿美元,到2024年底突破数十亿级别,核心驱动力是ChatGPT的订阅收入和API调用量。Anthropic起步晚,但凭借Claude系列在企业市场的渗透——尤其是金融、法律等合规敏感行业——年化营收也已冲到数十亿量级。
两家的增长路径有差异:OpenAI靠消费者订阅起量,再向企业渗透;Anthropic从一开始就锚定企业客户,走"安全对齐"的差异化路线。但结果殊途同归——营收规模远超同行。
89%意味着什么:HHI指数告诉你
市场集中度有量化工具。经济学中常用Herfindahl-Hirschman Index(HHI)来衡量:
$$\text{HHI} = \sum_{i=1}^{n} s_i^2 \times 10000$$
其中 $s_i$ 是第 $i$ 家公司的市场份额(百分比)。HHI低于1500算竞争市场,1500–2500是中度集中,超过2500就是高度集中。
用Python算一下这个场景:
"""
计算AI创业公司市场的HHI指数
数据基于The Information报告的营收份额估算
运行: python hhi_calc.py
"""
# 营收份额估算(百分比)
# OpenAI ~62%, Anthropic ~27%, 其余公司共享 ~11%
# 其余11%粗略分给5家代表性公司
market_shares = {
"OpenAI": 62,
"Anthropic": 27,
"Mistral": 3,
"Cohere": 2,
"Perplexity": 2,
"Character.AI": 2,
"其他": 2,
}
hhi = sum(s**2 for s in market_shares.values())
print(f"HHI指数: {hhi}")
print(f"高度集中阈值: 2500")
print(f"当前状态: {'极度集中' if hhi > 2500 else '中度集中' if hhi > 1500 else '竞争市场'}")
print()
# 分解贡献
print("各公司对HHI的贡献:")
for name, share in market_shares.items():
contribution = share**2
print(f" {name:15s} 份额 {share:5.1f}% → HHI贡献 {contribution:8.1f} ({contribution/hhi*100:.1f}%)")
print(f"\n两家合计贡献: {(62**2 + 27**2)/hhi*100:.1f}%")
运行结果:
HHI指数: 4658
高度集中阈值: 2500
当前状态: 极度集中
各公司对HHI的贡献:
OpenAI 份额 62.0% → HHI贡献 3844.0 (82.7%)
Anthropic 份额 27.0% → HHI贡献 729.0 (15.7%)
Mistral 份额 3.0% → HHI贡献 9.0 (0.2%)
...
两家合计贡献: 98.4%
HHI 4658——远超2500的"高度集中"线,接近完全垄断的水平。两家对HHI的贡献占比98.4%,说明市场不是"双寡头+一群有竞争力的挑战者",而是"双寡头+一群几乎可以忽略的参与者"。
开发者为什么不能只看热闹
这个格局直接影响做AI应用的工程师:
-
定价权集中在两家手里。 API价格变动几乎由OpenAI和Anthropic单方面决定。2024年OpenAI多次调整GPT-4系列定价,下游应用没有议价空间。
-
模型能力断层。 顶级能力(长上下文推理、多模态、代码生成)几乎只在两家产品线上迭代,其他供应商追赶速度明显落后。
-
单点故障风险。 如果你的产品只依赖一个API提供商,服务中断、政策变更、价格调整都可能一夜之间改变你的成本结构。
实践:构建多提供商回退层
面对这种集中度,最务实的策略是在应用层建立提供商抽象和回退机制,避免被单一供应商锁定。下面是一个可直接改造的Python示例:
"""
多AI提供商回退调用层
依赖: pip install openai anthropic
运行前设置环境变量:
export OPENAI_API_KEY="sk-..."
export ANTHROPIC_API_KEY="sk-ant-..."
"""
import os
import time
from openai import OpenAI
from anthropic import Anthropic
class MultiProviderLLM:
"""按优先级尝试多个提供商,失败自动回退"""
def __init__(self, providers_config: list[dict]):
"""
providers_config示例:
[
{"name": "openai", "model": "gpt-4o", "max_retries": 2},
{"name": "anthropic", "model": "claude-sonnet-4-20250514", "max_retries": 2},
{"name": "openai", "model": "gpt-4o-mini", "max_retries": 1}, # 降级备选
]
"""
self.providers = providers_config
self.clients = {
"openai": OpenAI(api_key=os.environ["OPENAI_API_KEY"]),
"anthropic": Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"]),
}
def chat(self, prompt: str, system: str = "You are a helpful assistant.") -> dict:
for provider in self.providers:
name = provider["name"]
model = provider["model"]
max_retries = provider.get("max_retries", 1)
for attempt in range(max_retries):
try:
result = self._call(name, model, prompt, system)
return {
"provider": name,
"model": model,
"content": result,
"attempts": attempt + 1,
}
except Exception as e:
print(f"[回退] {name}/{model} 第{attempt+1}次失败: {e}")
if attempt < max_retries - 1:
time.sleep(1)
print(f"[跳过] {name}/{model} 已耗尽重试次数")
raise RuntimeError("所有提供商均失败")
def _call(self, name: str, model: str, prompt: str, system: str) -> str:
if name == "openai":
resp = self.clients["openai"].chat.completions.create(
model=model,
messages=[
{"role": "system", "content": system},
{"role": "user", "content": prompt},
],
max_tokens=1024,
)
return resp.choices[0].message.content
elif name == "anthropic":
resp = self.clients["anthropic"].messages.create(
model=model,
max_tokens=1024,
system=system,
messages=[{"role": "user", "content": prompt}],
)
return resp.content[0].text
raise ValueError(f"未知提供商: {name}")
# --- 使用示例 ---
if __name__ == "__main__":
llm = MultiProviderLLM([
{"name": "anthropic", "model": "claude-sonnet-4-20250514", "max_retries": 2},
{"name": "openai", "model": "gpt-4o", "max_retries": 2},
{"name": "openai", "model": "gpt-4o-mini", "max_retries": 1},
])
result = llm.chat("用一句话解释什么是市场集中度")
print(f"\n回答来自 {result['provider']}/{result['model']}(第{result['attempts']}次尝试):")
print(result["content"])
这个示例的关键设计点:
- 优先级列表而非单一选择。 把Anthropic放第一优先级不是因为偏好,而是因为你的场景可能Claude更稳;反过来也一样。按你的实际延迟和成本数据排列。
- 降级模型作为最后兜底。 gpt-4o-mini能力弱但便宜且稳定,适合做"至少能返回结果"的保底。
- 每次调用记录来源。 长期积累数据后,你能量化各提供商的实际可用率,用数据驱动优先级调整,而不是凭感觉。
89%之后:几个值得跟踪的变量
这个双寡头格局不会静态维持。几个变量可能改变曲线:
| 变量 | 可能影响 |
|---|---|
| 开源模型能力逼近闭源(如Llama 4、DeepSeek后续版本) | 自托管选项变可行,API依赖下降 |
| 大企业自建模型(Google Gemini生态、Apple端侧模型) | 营收从"创业公司"类别转移到巨头内部,89%的统计口径本身会变 |
| 监管介入(反垄断审查、API公平访问规则) | 可能强制开放接口或限制排他协议 |
| 推理成本持续下降 | 小公司用开源模型+自托管的经济性改善 |
短期务实建议:
- 如果你正在选API提供商,不要只评估模型能力——把回退路径一起设计进去。上面的代码改10行就能接入你的项目。
- 跟踪开源模型的benchmark进展。当开源模型在你核心场景的得分差距缩小到5%以内,就值得做A/B测试。
- 每月统计各提供商的实际调用成功率、平均延迟、单token成本。三个月后你会发现自己之前对"谁更稳定"的直觉判断可能跟数据不一致。
89%是一个刺眼的数字,但它描述的是2024–2025的截面。对于写代码的人来说,真正的问题是:你的架构能不能在下一个季度、下一个模型发布、下一次价格调整时,用最小改动切换路径。