
1. 从跑分反超聊起Sonnet 5.5 这次到底动了谁的蛋糕第一次看到 Claude Sonnet 5.5 的跑分数据时我的反应是这不太对劲。编码类基准上它把自家定位更高的旗舰型号给超了而价格纹丝不动。在模型圈子里这种以下犯上的定价策略并不常见——通常厂商会把最强能力锁在贵的那一档用价格做能力分层。Sonnet 5.5 打破了这个惯例这才是它真正值得聊的地方而不是单纯看一个跑分数字。先把结论摆前面这次升级的核心不在更聪明而在更能干活。如果你平时用模型写代码、跑终端命令、做多步骤的 agentic 任务Sonnet 5.5 带来的体感提升会非常明显如果你只是拿它做简单的文本问答那可能感觉不出太大差别。换句话说它优化的方向是工程落地能力而不是通用对话的花哨程度。我自己这段时间的用法比较杂一边拿它做日常的代码补全和重构一边让它跑一些需要连续调用工具、读文件、执行命令的自动化流程。用下来最大的感受是它在长链路任务里不掉链子这件事上进步很大。以前跑一个十几步的 agent 流程中间总有一两步会理解偏、参数填错、或者干脆忘了前面做过什么现在这种中途失忆的情况明显少了。这篇文章不打算复述官方发布稿那种东西你随便一搜就有。我想聊的是Terminal-Bench 这类跑分到底在测什么、为什么它能反超旗舰、agentic 场景下实际怎么用、以及从旧版本迁移过来要注意哪些坑。这些是官方文档里不会写、但你真正上手一定会遇到的问题。适合已经在用 Claude 系列做开发、或者正在评估要不要切换过来的朋友。提示本文提到的所有跑分和参数都以公开可查的基准测试为准。不同测试环境、不同 prompt 写法结果会有波动别把单一数字当成绝对真理。2. Terminal-Bench 到底在考什么拆开跑分看门道2.1 为什么终端任务比写代码更难量化很多人一看到编码跑分就默认是给它一道算法题看它能不能写对。但 Terminal-Bench 这类基准测的东西完全不是这个维度。它测的是在一个真实的终端环境里模型能不能通过一系列命令操作把某个具体目标达成。比如把这个目录下所有日志文件里超过 7 天的记录清理掉并生成一份汇总报告模型需要自己决定用哪些命令、按什么顺序执行、遇到报错怎么调整。这比单纯写代码难在哪难在环境是动态的、有状态的。写代码题是静态的输入输出都定死了终端任务是动态的上一条命令的输出会影响下一条命令的决策。模型必须维护一个当前系统状态的心智模型还要能根据实际反馈实时修正。这就是为什么很多在代码题上表现很好的模型一到终端任务就拉胯——它们擅长生成正确文本但不擅长在反馈循环里持续做对决策。Terminal-Bench 的评分逻辑通常是按任务完成度给分而不是按命令写得漂不漂亮。一个任务可能允许你用三种不同的命令组合达成只要最终状态正确就算过。这种设计更贴近真实工程场景——老板不关心你用awk还是sed只关心文件有没有被正确处理。2.2 Sonnet 5.5 反超旗舰的关键指令遵循的稳定性那 Sonnet 5.5 凭什么能反超自家旗舰我的判断是它赢在指令遵循的稳定性而不是单点能力的绝对强度。旗舰模型往往参数量更大、知识面更广但在严格按格式输出、严格按步骤执行这类约束下反而容易自作主张——它会觉得你的指令不够优雅然后擅自优化一下结果就偏离了预期。Sonnet 5.5 在这方面收敛得很好。你让它输出 JSON它就老老实实输出 JSON不会给你加一段解释你让它先读文件再改文件它就不会跳步。这种听话在终端任务里是决定性的因为终端命令对格式和顺序极其敏感一个多余的字符就可能导致整条命令失败。我做过一个对比测试同一个多步骤任务分别用旗舰和 Sonnet 5.5 跑。旗舰在前几步表现更聪明会主动补充一些我没要求的检查但到了第五、六步它开始把前面定义的变量名记混导致后续命令引用错误。Sonnet 5.5 全程没有惊艳表现但每一步都稳稳踩在点上最后完整跑完。这就是稳定性溢价——在长链路任务里不犯错比偶尔出彩重要得多。2.3 跑分之外真实项目里更该关注什么跑分只能说明一部分问题。真实项目里我更关注三个指标首次成功率、纠错能力、以及 token 消耗。首次成功率指的是模型第一次尝试就做对的比例纠错能力指的是它执行失败后能不能根据报错信息自己调整token 消耗则直接关系到成本毕竟 agentic 任务动辄几十轮对话token 烧起来很快。Sonnet 5.5 在这三点上表现均衡。首次成功率比上一代有提升纠错时不会像以前那样越改越乱token 消耗因为价格没涨实际单位任务成本反而降了。这里有个反直觉的点有时候模型想得少反而更省钱。旗舰模型倾向于在每一步都做详尽推理token 消耗大Sonnet 5.5 的推理更精简在明确任务上直接给答案省下来的 token 就是省下来的钱。对比维度旗舰模型Sonnet 5.5实际影响单点知识广度更强够用复杂冷门问题旗舰略优指令遵循稳定性偶尔自作主张高度稳定长链路任务 Sonnet 更可靠单步 token 消耗偏高精简大批量任务成本差异明显纠错后收敛速度中等较快减少无效重试轮次3. agentic 场景实操把 Sonnet 5.5 用出该有的样子3.1 任务拆解粒度别让模型一次吃太多agentic 任务最容易踩的坑就是一次性把太复杂的目标丢给模型。比如帮我把这个项目重构一遍并跑通所有测试这种指令对任何模型都是灾难。正确的做法是把大目标拆成可验证的小步骤每一步都有明确的输入和输出。我的习惯是拆到单步可验证的粒度。什么叫可验证就是这一步做完之后我能用一个命令或者一次检查确认它对不对。比如读取 config 文件并提取数据库连接串是一步用这个连接串测试连通性是另一步。拆到这个粒度模型每步都能拿到明确反馈出错也能立刻定位。Sonnet 5.5 对拆解后的任务响应很好因为它不需要在单步里做太多猜测。你给它的指令越具体它的稳定性优势越明显。反过来如果你给一个模糊的大目标它虽然也能尝试但中间步骤的决策质量会下降。这不是它的锅是任务设计的问题。3.2 工具调用的参数校验最容易被忽略的环节agentic 流程里模型调用工具时传的参数经常出问题。比如调用一个文件操作工具路径写错、参数类型不对、必填项漏填这些都会导致调用失败。Sonnet 5.5 在这方面比上一代稳但你不能完全指望模型自己不出错得在工具层做校验。我的做法是在工具定义里加严格的参数 schema并且在工具执行前做一次预校验。如果参数不合法直接把错误信息返回给模型让它重新生成。这个返回错误让它重试的机制很关键——模型看到具体的错误信息后修正的准确率比盲目重试高得多。# 工具参数校验的简化示例 def validate_params(params, schema): errors [] for field, rule in schema.items(): if rule.get(required) and field not in params: errors.append(f缺少必填参数: {field}) if field in params and not isinstance(params[field], rule[type]): errors.append(f参数 {field} 类型错误期望 {rule[type]}) return errors # 校验失败时把 errors 原样返回给模型 # 模型看到具体错误后修正准确率显著提升这里有个经验错误信息要具体不要笼统。返回参数错误模型不知道怎么改返回参数 path 期望字符串实际收到 None模型立刻就知道问题在哪。Sonnet 5.5 对具体错误信息的利用效率很高这一点在实测中体现得很明显。3.3 上下文管理长任务里怎么防止失忆agentic 任务跑长了上下文会越来越长模型容易忘记前面做过什么。Sonnet 5.5 的上下文保持能力比上一代好但物理限制还在你不能无限往里塞。我的策略是主动做上下文压缩每完成几个步骤就把已完成步骤的详细记录压缩成一句摘要只保留关键状态。比如跑了十步之后我不把十步的完整对话都留着而是维护一个当前状态摘要项目路径是什么、已经改了哪些文件、当前卡在哪一步。这个摘要随任务推进不断更新模型每次决策时优先参考摘要而不是翻遍全部历史。这样既省 token又减少模型被无关历史干扰的概率。注意上下文压缩要保留状态类信息丢弃过程类信息。状态是文件 A 已修改过程是我用了 sed 命令修改的。前者影响后续决策后者通常不影响。4. 从旧版本迁移过来那些文档不会告诉你的坑4.1 prompt 需要重新调别直接照搬从旧版本迁移到 Sonnet 5.5最容易犯的错就是直接把原来的 prompt 复制过来用。模型换代后对 prompt 的敏感度会变。原来那套哄着模型干活的写法在新版本上可能适得其反。我迁移时踩的第一个坑就是这个。原来我在 prompt 里加了很多请仔细思考请确保正确之类的强调语在旧模型上有效因为旧模型确实容易马虎。但 Sonnet 5.5 本身指令遵循就很稳这些强调语反而让它过度谨慎输出变得啰嗦。后来我把这些冗余强调删掉只保留明确的任务描述和输出格式要求效果立刻好了。迁移的正确姿势是先精简再测试逐步加回。把 prompt 砍到最核心的任务描述跑一批测试看效果如果某类任务表现不好再针对性地加约束。不要一上来就堆一大堆规则那样你根本不知道哪条规则在起作用、哪条在拖后腿。4.2 输出格式的兼容性检查如果你的系统对模型输出有格式依赖比如解析 JSON、提取特定字段迁移时一定要做格式兼容性测试。新模型可能在字段命名、嵌套结构、空值处理上和旧模型有细微差异这些差异在人工看的时候不明显但在程序解析时会直接报错。我的做法是准备一批格式边界用例空输入、超长输入、特殊字符输入、多语言混合输入然后对比新旧模型的输出结构。重点看几个地方字段是否齐全、类型是否一致、嵌套层级是否相同、特殊字符是否被正确转义。Sonnet 5.5 在这些边界情况上处理得比较规范但规范不等于和旧模型完全一致该测还得测。检查项常见差异处理方式字段命名大小写、下划线风格变化解析层做字段映射空值表示null / / 缺失 不一致统一归一化处理嵌套结构层级深浅变化用 schema 校验兜底特殊字符转义规则差异解析前先做清洗4.3 成本核算要重算别用旧账本价格没涨不代表成本没变。因为 Sonnet 5.5 的 token 消耗模式和旧版本不同你原来的成本核算模型可能已经不准了。我建议迁移后重新跑一遍成本测算重点看两个数单任务平均 token 消耗和重试率。重试率这个指标特别容易被忽略。如果新模型首次成功率高重试就少即使单次 token 消耗略高总成本也可能更低。反过来如果新模型在某类任务上重试变多那即使单价没涨实际成本也是上升的。我实测下来Sonnet 5.5 在明确任务上的重试率比旧版本低但在模糊任务上差异不大——这再次说明任务描述的质量直接决定成本。5. 编码之外的延伸这套能力还能用在哪5.1 数据迁移类任务的自动化Sonnet 5.5 的终端操作能力天然适合数据迁移类任务。比如把一个目录结构的数据搬到另一个地方同时做格式转换、去重、校验。这类任务的特点是步骤多、每步都要验证、中间出错要能回滚正好是 agentic 能力的用武之地。我拿它做过一次文件批量重命名加内容替换的任务几千个文件命名规则不统一内容里还有需要批量替换的字段。手动做要一整天用 Sonnet 5.5 跑 agentic 流程先让它扫描目录生成文件清单再分批处理每批处理完做一次校验最后汇总报告。整个过程大概半小时跑完中间有两批因为文件名含特殊字符失败它自己根据报错调整了处理逻辑重跑通过。这里的关键是让它自己处理异常而不是你提前把所有异常都想到。你不可能预判所有边界情况但模型可以根据实际报错现场调整。Sonnet 5.5 在这方面的纠错能力是我觉得它比跑分数字更值钱的地方。5.2 多步骤工作流的编排除了单次任务Sonnet 5.5 也适合做工作流编排。比如一个拉取数据、清洗、分析、生成报告、发送通知的流程可以拆成几个 agent 步骤每步用 Sonnet 5.5 执行步骤之间用明确的接口传递数据。这种编排方式的好处是每步可独立测试和替换。如果某步效果不好你可以单独调那步的 prompt 或换工具不影响其他步骤。Sonnet 5.5 的稳定性让这种模块化编排变得可行——如果模型每步都飘忽不定模块化就是空谈。提示工作流编排时步骤之间的数据传递格式要定死。不要用自然语言描述上一步结果这种方式传递要用结构化数据。自然语言传递在长流程里必然出问题。5.3 什么时候不该用它说了这么多优点也得说说它不适合的场景。需要深度领域知识的一次性复杂问题旗舰模型可能更合适因为它的知识储备更广。需要极强创造性的开放任务Sonnet 5.5 的听话反而可能限制发挥。对延迟极度敏感的场景agentic 流程本身就有多轮往返延迟天然比单次调用高。选型的原则很简单任务越结构化、步骤越明确、越需要稳定执行Sonnet 5.5 越合适任务越开放、越依赖广博知识、越追求单次惊艳输出越该考虑其他选项。别因为它跑分高就无脑全用它工具要匹配场景。6. 我踩过的几个真实坑和对应的解法第一个坑是过度依赖模型的自我纠错。我一开始觉得 Sonnet 5.5 纠错能力强就故意把任务描述写得模糊指望它自己补全。结果发现模糊描述下它的表现和普通模型没差多少——纠错能力是在有明确目标、有具体报错的前提下才发挥作用的。目标本身模糊它连纠错的方向都没有。后来我改成目标明确、细节留白效果好很多。第二个坑是工具返回信息太长。agentic 流程里工具执行结果如果是一大段日志直接塞回给模型会占用大量上下文还容易干扰判断。我的解法是在工具层做一次摘要只把关键信息成功/失败、关键字段、错误行返回给模型。Sonnet 5.5 对精简后的信息利用效率明显更高。第三个坑是没有设置最大步数限制。agentic 任务理论上可以无限跑下去但实际中如果模型陷入某个循环会一直烧 token。我现在的做法是给每个任务设一个最大步数超过就中断并输出当前状态人工介入。这个限制救过我好几次尤其是任务描述有歧义的时候。第四个坑是忽略了并发场景下的状态隔离。如果你同时跑多个 agentic 任务它们可能操作同一批文件互相干扰。Sonnet 5.5 本身不负责状态隔离这是你系统设计的事。我的做法是每个任务分配独立的工作目录任务之间不共享可变状态。7. 关于迁移节奏的一点个人建议如果你现在系统里跑的是旧版本我不建议一次性全量切换。先切一小部分非关键任务跑一两周观察重点看首次成功率、重试率、成本变化这三个指标。数据稳定了再逐步扩大范围。模型迁移和数据库迁移一样最怕的就是一把梭出了问题回滚都来不及。另外保留旧版本的 fallback 通道。Sonnet 5.5 虽然稳但任何模型都有边界。对于特别关键的任务保留一个如果新模型失败就切回旧模型的机制能给你留出缓冲。等新模型在你的场景里跑够长时间、积累够信心了再考虑彻底下线旧通道。最后说个我自己的体会模型换代带来的收益一半来自模型本身一半来自你为它重新设计的流程。Sonnet 5.5 的能力提升是客观的但如果你还用旧流程、旧 prompt、旧的任务拆解方式去用它能榨出来的价值有限。花点时间重新审视你的任务设计比单纯换个模型名字重要得多。