Blog /

四大 LLM API 深度对比:ChatGPT / Claude / Gemini / Grok

系统对比 ChatGPT、Claude、Gemini、Grok 的会话层设计——消息模型、上下文管理、特色功能、API 风格,以及背后截然不同的产品哲学

搭 LLM 应用的时候,你迟早要跟「会话」打交道:消息怎么存、上下文怎么管、多轮对话怎么不丢状态、超长对话怎么不爆上下文。

这一层看起来无聊,但其实是四大平台差异最集中的地方。同样是「对话」,OpenAI、Anthropic、Google、xAI 选了四条几乎不同的路——有些是工程取舍,有些是产品哲学,有些是生态战略。

这篇是我拆解这四个平台 API 的调研记录,带着代码和对比,也带着一些判断。


TL;DR

ChatGPTClaudeGeminiGrok
上下文窗口128K200K2M128K
缓存控制自动,不可控显式,省约 90%显式,省约 75%不支持
API 兼容性原创标准独立设计独立设计OpenAI 兼容
实时数据Web 搜索Google SearchX 平台
多模态图片(插件式)图片 / 文档原生图文音视频图片
知识管理GPTs(20 文件上限)Projects(无限制)Gems(无知识库)
一句话定位生态最全,行业标准制定者成本可控,开发者友好超长上下文,多模态原生零迁移成本,快速接入

快速选型:

  • 已有 OpenAI 代码想换模型 → Grok(改一行 base_url)
  • 长文档分析 / 超大上下文 → Gemini(2M tokens)
  • 成本敏感 + 知识库问答 → Claude(显式缓存 + Projects)
  • 需要实时 Google / X 数据 → Gemini 或 Grok

从 OpenAI 出发:一个成为行业标准的数据结构

OpenAI 的 Chat Completions API 在 2023 年迅速确立了「消息数组」作为 LLM 对话的事实标准:

{
  "role": "user" | "assistant" | "system",
  "content": "消息内容或内容块数组"
}

这个结构的设计非常克制——角色、内容,就这两个字段。但这种克制是有意为之的:无状态、无魔法、开发者完全掌控。每次请求传入完整的对话历史,API 什么都不记,出了问题全在你自己这边。

随着功能扩展,role 多了一个 developer(新版取代 system,优先级高于 user,明确区分「框架指令」和「用户输入」),内容也从纯字符串变成可以承载多模态的数组:

{
  "role": "user",
  "content": [
    { "type": "text", "text": "这张图片是什么?" },
    { "type": "image_url", "image_url": { "url": "https://..." } }
  ]
}

工具调用的设计形成了一个完整的闭环:assistant 发起 tool_callstool 角色返回结果,再触发下一轮推理。这个模式后来被 Grok 原封不动地沿用——不是因为懒,而是兼容性是一种战略。

// assistant 发起工具调用
{ "role": "assistant", "content": null,
  "tool_calls": [{ "id": "call_abc", "type": "function",
    "function": { "name": "get_weather", "arguments": "{\"location\": \"Beijing\"}" } }] }

// tool 返回结果
{ "role": "tool", "tool_call_id": "call_abc", "content": "{\"temperature\": 22}" }

API 的三代演进

OpenAI 自己也在重构这个体系。三代 API 代表了三种不同的状态管理哲学:

API状态管理状态
Chat Completions无状态,每次传完整历史持续支持
Assistants API有状态(Thread 对象)2026 年中弃用
Responses API可选有状态previous_response_id 链式对话推荐

Responses API 是今年的重要转变:不再强迫开发者在「自己管历史」和「完全交给服务端」之间二选一,而是通过 previous_response_id 实现链式对话,同时跨轮次保留模型的推理状态(reasoning state):

response1 = client.responses.create(model="gpt-4", input="Hello", store=True)
response2 = client.responses.create(
    model="gpt-4", input="继续",
    previous_response_id=response1.id  # 只传 ID,不传完整历史
)

实际效果:缓存命中率提升 40-80%,GPT-5 在某些推理基准上比 Chat Completions 提升 5%。

产品层:三个值得深挖的设计

**消息分支(Branching)**是 ChatGPT 很容易被忽视的一个设计。编辑历史消息会创建新分支,底层是树形结构,每条消息有 parent_idchildren_ids[]。UI 上显示 ◄ 2/3 ► 的切换器,让用户在「对话的多个宇宙」之间导航——这对探索性对话非常重要,但大多数开发者做的应用并不支持这个能力。

Memory 系统的复杂程度远超用户感知。根据社区对 ChatGPT System Prompt 的逆向工程(来源:embracethered.com),Memory 不是”存储对话历史”,而是维护一个分 6 层的用户画像注入到 System Prompt:

1. Model Set Context       — 用户明确要求记住的内容(带时间戳)
2. Assistant Response Preferences — 推断的交互偏好(带置信度分数)
3. Notable Past Conversation Topics — 历史话题摘要
4. Helpful User Insights   — 个人/职业信息提取
5. Recent Conversation Content — 最近约 40 轮(仅用户消息)
6. User Interaction Metadata — 账户/设备/行为数据

几个关键设计:使用 RAG 而非全文嵌入;只存用户消息(不存助手回复),节省 token;OpenAI 后台异步更新用户画像。代价是用户无法查看或修改系统推断的信息——这大概是该功能至今未能在欧洲上线的原因之一(GDPR)。

Canvas 则是另一种思路:通过向系统提示词注入 canmore 命名空间的函数,让模型能操作一个独立的「文档面板」:

canmore.create_textdoc(content: string): { textdoc_id: string }
canmore.update_textdoc(textdoc_id: string, pattern: string, replacement: string)

这是一种很有趣的设计:UI 交互不通过传统的前端路由,而是通过模型输出的工具调用来驱动——内容超过 10 行时自动触发,Python 代码可以直接在浏览器 WASM 里跑。


Claude:反方向的极致——把控制权还给开发者

如果说 OpenAI 的哲学是「给你一个够用的标准,慢慢加功能」,那 Claude 的 API 设计哲学是**「让开发者对每件事都有显式控制权」**。

最典型的体现:System Prompt 不在消息数组里,而是单独的顶层参数。

{
  model: "claude-opus-4-5-20251101",
  system: "You are...",  // 独立参数,不混入 messages
  messages: [
    { role: "user", content: "..." },
    { role: "assistant", content: "..." }
  ],
  thinking: { type: "enabled", budget_tokens: 8000 }
}

这个选择和 Gemini 后来的 systemInstruction 独立参数设计方向一致——将「框架性指令」和「对话内容」物理分离,有利于缓存,也有利于组合复用。Grok 没有跟上(仍沿用 OpenAI 的消息角色方式)。

内容块类型:最丰富的系统

Claude 的内容块类型是四个平台里最多的。除了文本、图片、工具调用/结果之外,有两个类型值得特别说:

**思考块(Thinking Block)**带有签名:

{
  type: "thinking",
  thinking: string,
  signature: string  // Anthropic 服务端签名,防止客户端伪造
}

更重要的是行为:前一轮的思考块会自动从后续对话的上下文中剥离——不会累积,不会把中间推理暴露给后续轮次,也不占用上下文窗口。这一点 Gemini 的 Thinking Mode 做得不一样(思考过程在响应中可见,但不会自动清理)。

文档块原生支持 PDF,并且内置引用能力:

{
  type: "document",
  source: { type: "base64" | "url", media_type: "application/pdf", data: string },
  citations?: { enabled: true }
}

引用可以精确到字符位置或页码,这在文档问答场景下比其他平台都精细。

Prompt Caching:把成本优化变成工程问题

Claude 的缓存是显式的,粒度到内容块级别,TTL 可选 5 分钟或 1 小时:

{
  system: [{
    type: "text",
    text: "长文档内容...",
    cache_control: { type: "ephemeral", ttl: "1h" }
  }]
}

响应里会告诉你缓存命中了多少:

usage: {
  input_tokens: 1000,
  output_tokens: 500,
  cache_creation_input_tokens: 800,  // 这次写入缓存
  cache_read_input_tokens: 0         // 缓存命中(节省约 90% 成本)
}

相比 ChatGPT 的「自动缓存,不告诉你命中了多少」,这种设计让成本优化从「看运气」变成「可工程化」。对于需要重复处理同一份长文档的场景(代码审查、合同分析、知识库问答),这个差异很大。

Gemini 的 Context Caching 提供了类似的显式 API,命中可节省约 75% 输入成本。两者的区别在于:Claude 是内容块级别的控制,Gemini 是请求级别的缓存。

Projects:知识管理的另一个层次

Claude 的 Projects 在知识库容量上远超 ChatGPT GPTs(20 文件上限):

Project
├── Custom Instructions(项目级 System Prompt)
├── Knowledge Base
│   ├── 无文件数量限制,单文件最大 30MB
│   ├── 支持 PDF/DOCX/CSV/TXT/HTML/ODT/RTF/EPUB
│   └── Contextual Retrieval(不只是向量检索,还会给检索片段追加上下文细节)
└── Conversations(项目内的多个对话共享知识库)

RAG 实现叫 Contextual Retrieval,流程是:检索相关内容 → 追加上下文细节增强信息 → 与用户问题组合生成回答。这比纯向量相似度检索的质量高,但 Gemini 目前的 Gems 不支持上传知识库,这一差距比较明显。

Artifacts 与 Canvas 的设计哲学对比

Claude Artifacts 和 ChatGPT Canvas 解决的是同一个问题(生成内容的协作编辑),但设计哲学不同:

Artifacts(Claude)Canvas(ChatGPT)
内容管理独立版本化对象,有完整版本历史实时协作,无显式版本
存储Personal / Shared 两种类型会话内临时
代码执行不支持Python 在 WASM 跑
支持格式Markdown/HTML/React/SVG/Mermaid文档/代码

Artifacts 把「生成内容」当做一个有生命周期的对象管理,Shared 类型还支持多用户共享状态(排行榜、共同文档等)。Canvas 更偏向「实时协作」,但内容不独立存在于会话之外。


Gemini:从底层重新定义多模态

在四个平台里,Gemini 是唯一一个从一开始就把多模态作为一等公民来设计的。这不是功能层面的差异,而是数据模型层面的差异。

数据结构上的刻意不同

Gemini 的消息不叫 message,叫 Content;内容不叫 content,叫 parts;AI 的角色不叫 assistant,叫 model

interface Content {
  role: "user" | "model";  // 不是 "assistant"
  parts: Part[];           // 不是 "content"
}

这些命名选择不是偶然——parts 数组比 content 更自然地表达「一条消息里同时包含文字、图片、音频」的概念。OpenAI 后来也支持了 content 数组,但语义上是「扩展」,Gemini 从一开始就是「原生」:

// 一条消息里混合多种模态,是一等公民
{ role: "user", parts: [
  { text: "帮我分析这段视频里的内容" },
  { fileData: { mimeType: "video/mp4", fileUri: "gs://..." } },
  { inlineData: { mimeType: "audio/mp3", data: audioBase64 } }
]}

支持的格式覆盖面是四个平台里最广的:图片(PNG/JPEG/WEBP/HEIC/HEIF)、音频(WAV/MP3/AIFF/AAC/OGG/FLAC)、视频(MP4/MPEG/MOV/AVI 等)、文档(PDF/TXT/HTML/JS/Python 等)。

2M 上下文窗口意味着什么

模型上下文窗口最大输出
Claude200K tokens8K
ChatGPT (GPT-4)128K tokens16K
Gemini 2.0 Flash1M tokens8K
Gemini 1.5 Pro2M tokens8K

2M tokens 不只是「更大的 128K」——它在质变:约 3000 页文档、约 2 小时视频、完整中型代码库,都可以整个塞进上下文,而不需要做 RAG 分块。这对需要「全局理解」而非「局部检索」的场景(代码重构、合同全文审查、学术论文分析)是真正的竞争优势。

Context Caching 让这个优势可以持续发挥而不爆成本:

// 创建缓存(只做一次)
const cache = await cacheManager.create({
  model: "gemini-1.5-pro",
  contents: largeContextContents,  // 这 2M 上下文
  ttl: "3600s"
});

// 后续请求只传新问题
const response = await model.generateContent({
  cachedContent: cache.name,
  contents: [{ role: "user", parts: [{ text: "基于全部代码,找出所有 N+1 查询问题" }] }]
});

缓存命中,输入 token 价格降低约 75%。

Google 生态整合:护城河,也是隐私问题

Grounding with Google Search 不只是「联网搜索」,而是带置信度分数的段落级来源标注:

// 启用实时搜索
{ tools: [{ googleSearch: {} }] }

// 响应带来源证据
groundingMetadata: {
  groundingChunks: [{ web: { uri: "https://...", title: "来源标题" } }],
  groundingSupports: [{
    segment: { startIndex: 0, endIndex: 100 },
    groundingChunkIndices: [0],
    confidenceScores: [0.95]  // 每个来源的置信度
  }],
  webSearchQueries: ["实际执行的搜索查询"]
}

更深的整合在 Extensions:Gemini 可以直接访问用户的 Gmail、Drive、Calendar、Maps,不是通过 API 调用,而是通过授权后的直接数据访问。这是 ChatGPT Actions 做不到的深度,也是 Claude 主动回避的方向。

但这也是 Gemini 最大的隐患:深度数据访问意味着更大的隐私风险,而且 Extensions 是预定义的(官方集成),用户无法自定义,灵活性远不如 GPTs 的 Actions 体系。

Live API:实时交互的新前沿

Gemini 2.0 的 Live API 支持 WebSocket 实时音视频流——这在其他三个平台里只有 ChatGPT 的 Realtime API 有类似功能,Claude 和 Grok 都不支持:

const ws = new WebSocket("wss://generativelanguage.googleapis.com/ws/...");
ws.send(JSON.stringify({
  realtimeInput: { mediaChunks: [{ mimeType: "audio/pcm", data: audioChunkBase64 }] }
}));

适用场景:语音助手、实时翻译、视频通话分析。


Grok:独家数据 + 兼容策略

Grok 是四个平台里生态最小、成立最晚的,但它有两个其他平台复制不了的东西。

独家护城河:X 平台实时数据

Grok 的核心差异化不在模型能力,在数据源:

用户提问:"最近关于 AI 监管有什么最新动态?"

X 平台实时检索(最新推文 + 趋势话题 + 用户讨论串)

System Prompt + 实时数据 + 用户消息 → 上下文组装

包含最新信息的回复(带 X 平台来源)

注入的数据包括推文内容、作者信息(粉丝数、认证状态)、互动数据(点赞/转发/浏览量)、讨论串结构。

对于舆论分析、突发新闻追踪、社交媒体热点监控这类场景,这是其他任何平台都复制不了的优势——即使 Google Grounding 有 Google Search,X 平台的数据也不在里面。

战略兼容性:把 OpenAI SDK 当作接入成本为零的入口

import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.XAI_API_KEY,
  baseURL: "https://api.x.ai/v1"  // 换这一行,其他代码不动
});

这个选择有很明确的战略逻辑:降低接入门槛 → 让已经在用 OpenAI 的开发者无缝试用 → 积累用户数据和信任 → 再推差异化功能。从市场份额角度看,这是一个合理的后发策略。

支持的端点完整覆盖了常用 API:/v1/chat/completions/v1/completions/v1/embeddings/v1/images/generations,以及 Function Calling(完全 OpenAI 兼容的格式)。

目前的局限也很明显:无知识库管理、无项目组织能力、无缓存支持。但这可能是有意为之——先占住「X 数据入口」和「兼容层」这两个战略位置,其他功能后续跟进。

DeepSearch 与个性化模式

DeepSearch 是 Grok 的深度研究功能,不只是「搜索」,而是多源聚合 + 交叉验证 + 结构化报告。流程:分解复杂问题 → X 数据 + 网络搜索 + 权威来源并行检索 → 交叉验证 + 可信度评分 → 生成有来源引用的报告。耗时较长(分钟级),适合需要综合分析的场景。

Fun Mode / Regular Mode 通过不同 System Prompt 切换风格,Regular 专业直接,Fun 幽默有个性。这个设计在其他平台里没有直接对应——Claude 的 Styles 功能类似,但定位是帮助用户调整助手的沟通风格,而不是给助手设定「人格模式」。


横向对比

关键维度总结

维度ChatGPTClaudeGeminiGrok
最大上下文128K200K2M128K
AI 角色名assistantassistantmodelassistant
System Prompt 位置消息角色 / 顶层参数顶层 system顶层 systemInstruction消息角色
API 兼容性原创(行业标准)独立设计独立设计OpenAI 兼容
多模态深度图片(插件式)图片/文档原生图文音视频图片
实时数据Web BrowsingGoogle Search + GroundingX 平台原生
知识管理GPTs(20 文件)+ MemoryProjects(无限文件)Gems(无知识库)
协作编辑CanvasArtifacts(版本化)
缓存控制自动,不可控显式 TTL,节省约 90%Context Caching API,节省约 75%不支持
深度思考o1 系列(独立模型)Extended Thinking(可配置预算)Thinking Mode不支持
实时音视频Realtime APILive API

会话数据模型核心差异

ChatGPT:  messages[{ role: "assistant", content: string | array }]
Claude:   messages[{ role: "assistant", content: string | array }] + 顶层 system
Gemini:   contents[{ role: "model", parts: Part[] }] + 顶层 systemInstruction
Grok:     messages[{ role: "assistant", content: string | array }]  ← 完全同 OpenAI

三家沿用了 OpenAI 的 assistantcontent,只有 Gemini 用了 modelparts——不是偏好不同,而是多模态优先的设计哲学在数据模型层面的体现。

缓存策略的三种哲学

这个维度最能体现产品哲学差异:

  • ChatGPT:自动缓存,不告诉你命中了多少。「你专注于对话,我来优化成本。」但这意味着你无法预测实际花销。
  • Claude:显式 cache_control,粒度到内容块,TTL 可选,响应里告诉你命中了多少 token。「成本可工程化,你来负责。」
  • Gemini:Context Caching API,请求级别的缓存,适合「固定大段上下文 + 变化的问题」模式。
  • Grok:不支持缓存,这在长上下文场景下是明显的劣势。

对于成本敏感的生产环境,Claude 的显式缓存控制是目前最成熟的方案。

流式响应格式

平台SSE 事件格式
ChatGPTdata: {"choices":[{"delta":{"content":"..."}}]}
Claudeevent: content_block_delta + data: {"delta":{"text":"..."}}
Gemini{"candidates":[{"content":{"parts":[{"text":"..."}]}}]}
Grok与 ChatGPT 相同

Claude 用事件类型区分数据块(content_block_startcontent_block_deltacontent_block_stop),解析复杂响应(思考块 + 文本块 + 工具调用)更清晰,但接入成本略高。


对开发者的启示

选平台的逻辑

场景首选核心理由
长文档分析Gemini(2M)/ Claude(200K)真正的超长上下文
知识库问答Claude知识库无限制 + Contextual Retrieval
实时信息Grok(X 数据)/ Gemini(Google Search)独家数据源
多模态应用Gemini原生多模态,非插件式
快速 API 接入Grok(兼容 OpenAI SDK)零迁移成本
成本敏感 + 长上下文Claude显式缓存,可预测成本
安全合规Claude无生态整合,数据边界清晰

消息数据结构的推荐实践

interface Message {
  id: string;
  role: "user" | "assistant" | "system";
  content: string | ContentBlock[];
  created_at: string;
  parent_id?: string;       // 支持分支——ChatGPT 的实践证明这很有价值
  children_ids?: string[];
  metadata?: {
    model?: string;
    tokens?: number;
    cache_hit_tokens?: number;  // Claude 风格的缓存追踪
    tool_calls?: ToolCall[];
  };
}

System Prompt 独立于消息数组管理(Claude / Gemini 的选择),有利于缓存和组合复用。

上下文管理策略

场景推荐做法
短对话完整历史传输,无需特殊处理
长对话滑动窗口 + System Prompt 优先保留
知识密集RAG + 显式上下文缓存(参考 Claude/Gemini)
深度推理Extended Thinking + 思考块清理(参考 Claude)

五个不会过时的趋势

  1. 消息数组模型已成标准,各家都在这个基础上往上加,根本性重构的可能性极低
  2. 上下文窗口会继续扩大,但 2M 之后的收益边际递减,更值得关注的是成本曲线
  3. **多模态从「插件」到「原生」**是不可逆的趋势,Gemini 的 Part 类型设计代表未来方向
  4. 生态整合是护城河,Google 全家桶和 X 平台数据是其他平台短期内无法复制的
  5. 显式缓存控制越来越重要,成本优化将成为 LLM 应用工程的核心课题之一

参考资料

评论