Claude Haiku 5.5 与 4.5:分类、提取和摘要任务对比

用真实 API 请求比较 Claude Haiku 5.5 与 4.5 的分类、信息提取和摘要结果,检查 JSON 格式、字段与事实,附可复现测试包及迁移验收步骤。

灰粉背景上的天平黑色线稿、浅色卡纸、几何点缀及 Haiku 5.5 vs 4.5 标题。

对于重复性的应用任务,Claude Haiku 5.5 值得纳入评估,但在替换 Haiku 4.5 之前,新模型应先通过你的输出契约测试。在 Ofox 的小规模测试中,两个版本都返回了预期的分类和提取结果,但摘要的结构不同;即使提示词要求返回 JSON,两个版本也都用 Markdown 代码围栏包裹了响应。答案看起来正确,并不代表它能直接作为严格 JSON 解析器的有效输入。

本文比较了通过真实 API 发送的三个虚构任务,展示记录到的结果,并为维护批处理流程或应用后端的开发者提供迁移步骤。这项测试不能证明哪个模型在准确率、延迟或成本方面总体更优。每个模型对每项任务只发送了一次请求,总计六次请求,且没有使用结构化输出 schema。

Anthropic 于 10 月 7 日发布 Haiku 5.5,并将其定位于分类和摘要等高调用量任务。这些产品层面的主张与下文范围有限的测试观察是两回事。

Haiku 5.5 的 Ofox 英文公开代码示例截图

这是 10 月 12 日截取的 Ofox 实际界面,展示了模型标识符和 Anthropic SDK 示例。下文的比较使用的是单独指定的 Chat Completions 路由;这张截图仅用于展示设置参考,不能证明评测成功。

测试约定

我们使用了 https://api.ofox.ai/v1/chat/completions、max_tokens: 1800 和以下确切的 Ofox ID:

anthropic/claude-haiku-4.5
anthropic/claude-haiku-5.5

我们没有明确设置 temperature 或 reasoning 控制参数。不同提供方的默认设置、路由和 token 统计方式可能不同。因此,相同的用户文本并不保证实际计算预算也相同。输入不包含客户数据、真实订单或个人信息。

可下载的测试工具包包含提示词、经过脱敏的响应证据和脚本。运行 API 脚本会发起真实请求,并可能产生用量费用;请先检查脚本,并设定有上限的测试预算。原始观察结果对应当时那批请求,不会在每次有人访问本页面时重新生成。

任务预期信息验收标准
对四条工单分类A:账单;B:技术;C:账户;D:账单ID 与标签的对应关系必须完全符合预期
提取订单信息BX-71;数量 12;没有交付日期;EUR保留整数和 null 类型;不得编造日期
总结会议内容Maya;10 月 14 日截止;仅英文试点;价格未定保留已批准的决定和未解决事项;另行检查输出结构

摘要提示词要求返回指定字段,但没有提供正式 schema。这个测试适合用于发现集成风险,却不能据此断言模型无法遵循强制执行的 schema。

结果:字段值和响应结构要分别检查

任务Haiku 4.5Haiku 5.5
工单标签返回了四个预期标签返回了四个预期标签
订单提取返回了预期字段和值,包括 null 交付日期返回了预期字段和值,包括 null 交付日期
摘要表示形式顶层包含一个 tasks 数组,每项单独列出请求的字段位于顶层
文本能否直接作为严格 JSON 解析包含 Markdown 代码围栏包含 Markdown 代码围栏

对于分类和提取任务,移除唯一一层外部代码围栏后,字段值符合预期。如果你的使用方直接执行 json.loads(response_text),同一响应就会解析失败。请明确记录使用方是否接受单层代码围栏;不要默默修补任意格式错误的输出,直到它看起来像预期答案为止。

Haiku 5.5 返回的摘要是一个扁平对象:

{
  "owner": "Maya",
  "deadline": "2026-10-14",
  "decision": "English-only pilot approved",
  "unresolved": "Price undecided"
}

Haiku 4.5 则把草拟邮件、批准试点和价格未定分别归入不同的任务条目。这种表示形式包含了有用信息,但如果使用方期待顶层的 owner 和 deadline,就无法找到这些字段。由于样本只有一个,而且 schema 也未充分定义,负责任的结论应是测试并强制执行你的集成契约,而不是声称某个版本的摘要总是更好。

扁平对象也没有明确写出起草邮件这一行动。如果业务需要同时记录行动和决定,就应要求模型返回不同字段。“符合 schema”和“包含所有业务所需事实”是两项不同的验收测试。

观察到的延迟和 token 数

以下是客户端观察到的请求耗时,以及 API 返回的 token 数量。这些数据包含所选网关路径的影响,并非仅针对模型推理的测量结果。

任务4.5 耗时(秒)5.5 耗时(秒)4.5 输入 / 输出 token5.5 输入 / 输出 token
分类1.8331.79164 / 4389 / 45
提取1.7501.77961 / 4988 / 46
摘要1.9792.41164 / 14287 / 191

这次测试中,向 5.5 发送摘要请求花费的时间更长。单次观察既不能推翻供应商更广泛的产品定位,也不能预测你的生产环境延迟。在调整服务级别预期之前,请重复测试有代表性的案例,纳入失败情况,并收集延迟分布。

不要把可见答案中的词数当作计费输出 token 数。请记录响应中返回的用量字段,并与提供方的请求记录核对。表格报告的是 API 返回的数据;它不能解释内部计量方式的所有差异,也不代表已经确认的美元账单金额。

制定预算时,应比较每个通过验收的结果的成本,而不只是输入和输出单价。可以使用下面这份实用的计算表:

cost per accepted result =
  reconciled spend across initial attempts, retries and fallbacks
  / number of results that pass your acceptance rules

分子中不能漏掉被拒绝的输出或回退调用。如果没有任何结果通过验收,这个比率就是未定义,而不是零。计算支出前,请查询所用提供方当前的准确费率,以及适用的缓存或上下文档位。本文有意不对 Ofox 能节省多少费用作出固定承诺。

使用更严格的提取契约

先编写一条明确说明缺失值和类型规则的提示词。下面是改进后的模板,不是上文测量所用的提示词:

Extract only facts explicitly present in the input.
Return a single JSON object, without Markdown or commentary.
Keys must be exactly:
order_id: string
quantity: integer
delivery_date: ISO YYYY-MM-DD string, or null if not stated
currency: three-letter currency code, or null if not stated
Do not infer a delivery date from today's date.
Do not convert an unknown value to an empty string.
Input:
Order BX-71 contains 12 notebooks. Delivery is not scheduled.
Total: 48 EUR.

请在代码中验证生成的对象。如果所选路由支持 schema 约束输出,请先使用准确的模型和端点验证该功能再采用;我们的纯提示词测试没有验证这项功能。

import json

def validate_order(text):
    value = json.loads(text)  # Strict: intentionally rejects code fences.
    expected = {"order_id", "quantity", "delivery_date", "currency"}
    if not isinstance(value, dict) or set(value) != expected:
        raise ValueError("Unexpected object shape")
    if not isinstance(value["order_id"], str):
        raise ValueError("order_id must be a string")
    if type(value["quantity"]) is not int:
        raise ValueError("quantity must be an integer")
    # Fixture-specific assertions; replace with production business rules.
    if value != {"order_id": "BX-71", "quantity": 12,
                 "delivery_date": None, "currency": "EUR"}:
        raise ValueError("Fixture facts do not match")
    return value

这个精确值断言适用于这份合成测试数据。生产环境中的验证器还需要定义货币允许值、日期有效性和记录标识符等领域规则;不能拿每条客户记录都和 BX-71 比较。

迁移时不要丢失失败记录

将模型 ID 作为明确的配置项,并保留原模型,直到替代模型通过有代表性的评估。对每条输入,记录稳定的记录 ID、提示词版本、模型 ID、尝试次数、返回的用量、验证状态和输出。把错误也作为记录保存,不要在批处理中直接丢弃这些行。

从一个包含常见情况和边界情况的小型标注集开始,例如缺少日期、信息矛盾、未知类别、空输入、异常长文本,以及嵌入输入中的指令。把输入文档当作数据处理,不能让文档替换提取指令或选择任意工具。

分别比较语义验收结果、JSON 语法和结构。扩大部署范围前,请先检查分歧。在有限范围内推出时,将旧路由保留为受控回退,限制重试次数,并跟踪重复处理。如果请求超时,它仍可能已经到达提供方;不要直接假定没有产生任何用量。

对于分类任务,要定义没有合适标签时该怎么处理。对于摘要任务,要定义哪些事实可以省略。对于提取任务,要定义有歧义的字段应返回 null,还是转交人工审核。与单纯更改模型字符串相比,这些决策通常更关系到应用正确性。

如果你也在使用 Claude Code,请通过对比 curl 与客户端的连接诊断指南单独验证它的连接。文本 API 调用成功,并不能证明编程客户端的工具或配置正常。

常见问题

Haiku 5.5 在这三项测试中都胜出了吗?
不能据此给出这样的总体排名。两个版本都返回了预期的分类和提取结果,但摘要结构有所不同;所有测得的响应都包含 Markdown 代码围栏,而这不符合我们的严格解析契约。
Haiku 5.5 每次完成任务的成本都更低吗?
这项测试无法证明这一点。请根据实际通过验收的输出、全部重试和回退、提供方当前费率以及核对后的用量进行比较。单看更低的费率,无法完整衡量任务成本。
我只改模型 ID 就可以切换吗?
这或许足以发送请求,但不足以验证应用迁移是否成功。还需要重新检查输出语法、字段、语义完整性、限制、延迟和回滚行为。