<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jenny Met</title>
    <description>The latest articles on DEV Community by Jenny Met (@xujfcn).</description>
    <link>https://dev.to/xujfcn</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3789823%2F2c9e4c1c-52be-4e47-b75c-c97051adb99c.png</url>
      <title>DEV Community: Jenny Met</title>
      <link>https://dev.to/xujfcn</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/xujfcn"/>
    <language>en</language>
    <item>
      <title>Claude Opus 5 vs GPT-5.6 Luna：速度順位を使わない18問の正確性ベンチマーク</title>
      <dc:creator>Jenny Met</dc:creator>
      <pubDate>Thu, 30 Jul 2026 00:50:02 +0000</pubDate>
      <link>https://dev.to/xujfcn/claude-opus-5-vs-gpt-56-lunasu-du-shun-wei-woshi-wanai18wen-nozheng-que-xing-bentimaku-79c</link>
      <guid>https://dev.to/xujfcn/claude-opus-5-vs-gpt-56-lunasu-du-shun-wei-woshi-wanai18wen-nozheng-que-xing-bentimaku-79c</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F34f6tdrfgylkvyesfoc1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F34f6tdrfgylkvyesfoc1.png" alt="Claude Opus 5 vs GPT-5.6 Luna：速度順位を使わない18問の正確性ベンチマーク" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  先に結論
&lt;/h2&gt;

&lt;p&gt;高難度ラウンドでは Claude Opus 5 が &lt;strong&gt;17/18（94.4%）&lt;/strong&gt;、GPT-5.6 Luna が &lt;strong&gt;16/18（88.9%）&lt;/strong&gt;でした。差は1問であり、Opusが常に上という証明ではありません。重要なのは失敗の形です。Opusは3本のアルゴリズムをそのまま実行できる形で納品した一方、厳密JSONで余計な囲みを付けました。Lunaは3つの形式指示をすべて守りましたが、2本のPythonファイルがimport時に停止しました。&lt;/p&gt;

&lt;h2&gt;
  
  
  なぜ問題を難しくしたのか
&lt;/h2&gt;

&lt;p&gt;最初の8問は両モデルとも8/8で、差が出ませんでした。そこで第2ラウンドを18問に増やし、6分野それぞれに hard、harder、extreme を配置しました。正確な分数、多段階の物理モデル、完全なPythonファイル、誤った前提の拒否、一意な制約解、文字単位の出力形式を要求しています。説明が巧みかどうかではなく、決定的な主張を計算、JSONパース、Python実行で確認できるかを評価しました。&lt;/p&gt;

&lt;h2&gt;
  
  
  18問をどう採点したか
&lt;/h2&gt;

&lt;p&gt;同一の問題文、system指示、temperature、問題別の出力予算を使いました。数学と物理は厳密値または数値許容差で検証し、コードは回答のまま保存して共通のhidden testへimportしました。JSONとCSVは「意味が通る」ではなく、機械入力として合格するかで判定しています。モデル自身のassertを削除すれば動く場合も、原因分析には使いますが初回納品を合格へ変更しません。回線遅延は生JSONにだけ残し、勝敗には一切使っていません。&lt;/p&gt;

&lt;h2&gt;
  
  
  6分野の結果
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3cf3n2twc6cpp03zvdoq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3cf3n2twc6cpp03zvdoq.png" alt="6分野の正解数" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;評価分野&lt;/th&gt;
&lt;th&gt;Opus 5&lt;/th&gt;
&lt;th&gt;GPT-5.6 Luna&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;数学的推論&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;複雑な物理&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;アルゴリズム納品&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;td&gt;1/3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;誤った前提への耐性&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;制約推論&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;指示遵守&lt;/td&gt;
&lt;td&gt;2/3&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;17/18 (94.4%)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;16/18 (88.9%)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  アルゴリズム差は「納品物」の差だった
&lt;/h2&gt;

&lt;p&gt;Lunaが失敗した2問は、末尾の自己テストを外すと関数本体がhidden testを通過しました。しかし自己テストの期待値が誤っており、元ファイルはimport時に&lt;code&gt;AssertionError&lt;/code&gt;を起こします。「完全なPythonファイル」という契約では失敗です。Opusの3ファイルは元のままimportと共通テストに通りました。本番では、正しそうな関数と、そのまま利用できる成果物を分けて考える必要があります。&lt;/p&gt;

&lt;h2&gt;
  
  
  厳密JSONではLunaが優位
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy7c0srom52u2ixn2hdsk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy7c0srom52u2ixn2hdsk.png" alt="失敗の種類が違えば、本番リスクも違う" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Opusの唯一の失敗は逆方向でした。JSONのキーと値は正しいのに、「JSONオブジェクトだけ」という指示に反してMarkdownのコードフェンスを追加しました。独立再試行でも同じです。Lunaは指示遵守3問をすべて通過しました。出力を直接パーサーへ渡す処理では、囲みの有無も正確性の一部です。&lt;/p&gt;

&lt;h2&gt;
  
  
  出力予算と知能上の誤りを分離
&lt;/h2&gt;

&lt;p&gt;初期試行の一部は、内部推論が出力予算を使い切り&lt;code&gt;finish_reason=length&lt;/code&gt;になりました。これは証拠として保存しましたが、知能の誤りには数えていません。両モデルの有効予算を同条件で増やしてから採点したためです。ただし、長い推論で可視成果物の領域が不足するという統合上のリスクは残ります。&lt;/p&gt;

&lt;h2&gt;
  
  
  本番ルーティングへの落とし込み
&lt;/h2&gt;

&lt;p&gt;厳密JSON、CSV、短い抽出、大量の構造化処理はLunaを第一候補にしつつ、schema検証を必須にします。長いアルゴリズム、境界条件、防御的な実装はOpusを第一候補にします。数学、複雑な物理、誤前提、制約推論は本サンプルで同点なので、価格、API互換性、文章量で選ぶ方が合理的です。どちらでもJSONをparseし、数値を照合し、コードを回答のまま実行してください。&lt;/p&gt;

&lt;h2&gt;
  
  
  再現方法と生データ
&lt;/h2&gt;

&lt;p&gt;実行スクリプトは&lt;code&gt;scripts/opus5_vs_luna_hard_benchmark.py&lt;/code&gt;、全結果は&lt;code&gt;.tmp/opus5-vs-luna-hard-benchmark-results.json&lt;/code&gt;です。独立再試行は&lt;code&gt;.tmp/opus5-hard-failure-retry.json&lt;/code&gt;と&lt;code&gt;.tmp/luna-hard-failure-retry.json&lt;/code&gt;にあります。APIは&lt;code&gt;https://cn.crazyrouter.com/v1/chat/completions&lt;/code&gt;を使用し、遅延値は生データでのみ確認できます。&lt;/p&gt;

&lt;h2&gt;
  
  
  よくある質問
&lt;/h2&gt;

&lt;h3&gt;
  
  
  17/18ならOpus 5が総合勝者ですか？
&lt;/h3&gt;

&lt;p&gt;いいえ。この18問では1問リードした、という意味です。画像、ツール利用、超長文脈、複数ターンのagentは対象外です。&lt;/p&gt;

&lt;h3&gt;
  
  
  誤った自己テストをアルゴリズム失敗に含める理由は？
&lt;/h3&gt;

&lt;p&gt;要求が完全なPythonファイルだからです。元ファイルがimportで落ちるなら、人手で直さずに利用できません。&lt;/p&gt;

&lt;h3&gt;
  
  
  なぜ速度を結論に入れないのですか？
&lt;/h3&gt;

&lt;p&gt;遅延はモデルだけでなく、ゲートウェイ、上流負荷、経路状態にも左右されます。運用証拠としては有用でも、知能の正確性とは別です。&lt;/p&gt;

&lt;h2&gt;
  
  
  最終評価
&lt;/h2&gt;

&lt;p&gt;検証可能な正確性を優先した本テストでは、アルゴリズム3問を完全納品したOpus 5が &lt;strong&gt;17/18 対 16/18&lt;/strong&gt;で1問リードしました。一方、厳密な指示遵守はLunaが上です。結論は万能の勝者ではなく、再現可能な失敗傾向に基づく使い分けです。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://crazyrouter.com/ja?utm_source=blog&amp;amp;utm_medium=content&amp;amp;utm_campaign=opus5_gpt56_luna_correctness_benchmark_20260730&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;Crazyrouterで両モデルを実際のプロンプトに通して比較する&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>benchmark</category>
    </item>
    <item>
      <title>Claude Opus 5 frente a GPT-5.6 Luna: 18 pruebas verificables, sin ranking de velocidad</title>
      <dc:creator>Jenny Met</dc:creator>
      <pubDate>Thu, 30 Jul 2026 00:45:32 +0000</pubDate>
      <link>https://dev.to/xujfcn/claude-opus-5-frente-a-gpt-56-luna-18-pruebas-verificables-sin-ranking-de-velocidad-4740</link>
      <guid>https://dev.to/xujfcn/claude-opus-5-frente-a-gpt-56-luna-18-pruebas-verificables-sin-ranking-de-velocidad-4740</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy4fuzf2cqqwz12g4utzc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy4fuzf2cqqwz12g4utzc.png" alt="Claude Opus 5 frente a GPT-5.6 Luna: 18 pruebas verificables, sin ranking de velocidad" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Respuesta rápida
&lt;/h2&gt;

&lt;p&gt;En la ronda difícil, Claude Opus 5 obtuvo &lt;strong&gt;17/18 (94,4%)&lt;/strong&gt; y GPT-5.6 Luna &lt;strong&gt;16/18 (88,9%)&lt;/strong&gt;. Es una ventaja de una tarea en esta muestra, no una prueba de superioridad universal. Lo importante es el tipo de fallo: Opus entregó correctamente los tres archivos algorítmicos, pero rompió un contrato de JSON estricto; Luna cumplió las tres instrucciones de formato, aunque dos archivos de Python fallaron al importarse.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por qué fue necesario subir la dificultad
&lt;/h2&gt;

&lt;p&gt;La primera ronda de ocho tareas fue demasiado sencilla para separar a los modelos: ambos consiguieron 8/8. La segunda pasó a 18 tareas, con variantes hard, harder y extreme en seis categorías. Se exigieron fracciones exactas, modelos físicos por etapas, archivos ejecutables completos, rechazo de premisas engañosas, soluciones lógicas únicas y disciplina de salida carácter por carácter. Una explicación convincente no bastaba: cada afirmación decisiva debía poder verificarse con cálculo, parsing de JSON o ejecución de Python.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo se puntuaron las 18 tareas
&lt;/h2&gt;

&lt;p&gt;Los dos modelos recibieron el mismo enunciado, instrucción de sistema, temperature y presupuesto por tarea. Matemáticas y física se validaron contra valores exactos o tolerancias numéricas. El código se guardó tal como llegó y se importó en el mismo harness de pruebas ocultas. JSON y CSV se evaluaron como artefactos para máquinas. Que un archivo funcione después de borrar sus propios assert ayuda a diagnosticar el fallo, pero no convierte la entrega original en un aprobado. La latencia de ruta se conserva solo en el JSON original y no participa en ninguna decisión de ganador.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resultados en seis dimensiones
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvdwowht7ry0nue21chko.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvdwowht7ry0nue21chko.png" alt="Precisión en seis dimensiones" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimensión&lt;/th&gt;
&lt;th&gt;Opus 5&lt;/th&gt;
&lt;th&gt;GPT-5.6 Luna&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Razonamiento matemático&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Física compleja&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entrega de algoritmos&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;td&gt;1/3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rechazo de premisas falsas&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Razonamiento con restricciones&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seguimiento de instrucciones&lt;/td&gt;
&lt;td&gt;2/3&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;17/18 (94.4%)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;16/18 (88.9%)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  La diferencia algorítmica fue una diferencia de entrega
&lt;/h2&gt;

&lt;p&gt;En los dos fallos de Luna, las funciones principales superaron las pruebas ocultas después de eliminar los assert del final. El problema era que esos assert contenían resultados esperados incorrectos y el archivo original lanzaba &lt;code&gt;AssertionError&lt;/code&gt; durante el import. Bajo un contrato de “archivo Python completo”, son fallos reales. Los tres archivos originales de Opus se importaron y superaron el mismo harness. En producción, una función plausible no equivale a un artefacto listo para integrar.&lt;/p&gt;

&lt;h2&gt;
  
  
  En JSON estricto, la ventaja cambió de lado
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffb2jrbo0owvj69k572xk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffb2jrbo0owvj69k572xk.png" alt="Fallos distintos implican riesgos distintos" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El único fallo de Opus fue casi el reflejo contrario. Las claves y los valores eran correctos, pero el modelo envolvió el objeto en un bloque Markdown pese a que se pedía exactamente un objeto JSON, sin nada más. El comportamiento se repitió en un segundo intento independiente. Luna aprobó las tres pruebas de instrucciones. Cuando la salida entra directamente en un parser, el envoltorio también forma parte de la corrección.&lt;/p&gt;

&lt;h2&gt;
  
  
  El presupuesto de salida se separó de los errores de inteligencia
&lt;/h2&gt;

&lt;p&gt;Algunos intentos iniciales terminaron con &lt;code&gt;finish_reason=length&lt;/code&gt; porque el razonamiento oculto consumió el presupuesto de salida. Se conservaron como evidencia, pero no se contaron como errores de inteligencia. Antes de puntuar se aumentó de forma equivalente el presupuesto efectivo de ambos modelos. Así se evita confundir configuración con razonamiento, sin ocultar el riesgo de integración de una respuesta que deja poco espacio al artefacto visible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo convertir los resultados en reglas de routing
&lt;/h2&gt;

&lt;p&gt;Empieza con Luna para JSON estricto, CSV, extracción corta y trabajo estructurado de gran volumen, manteniendo siempre validación de esquema. Empieza con Opus para archivos algorítmicos largos, casos límite e ingeniería defensiva. En matemáticas, física compleja, rechazo de premisas falsas y restricciones hubo empate; en esas áreas, coste, compatibilidad y estilo de salida son mejores criterios. Con ambos modelos hay que validar el artefacto: parsear JSON, comprobar números clave y ejecutar el código sin limpiarlo a mano.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reproducción y evidencia original
&lt;/h2&gt;

&lt;p&gt;El runner es &lt;code&gt;scripts/opus5_vs_luna_hard_benchmark.py&lt;/code&gt;. El resultado completo está en &lt;code&gt;.tmp/opus5-vs-luna-hard-benchmark-results.json&lt;/code&gt;; los reintentos independientes están en &lt;code&gt;.tmp/opus5-hard-failure-retry.json&lt;/code&gt; y &lt;code&gt;.tmp/luna-hard-failure-retry.json&lt;/code&gt;. Se usó el endpoint limpio &lt;code&gt;https://cn.crazyrouter.com/v1/chat/completions&lt;/code&gt;. Las latencias permanecen únicamente en los archivos de evidencia.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preguntas frecuentes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ¿17/18 convierte a Opus 5 en ganador absoluto?
&lt;/h3&gt;

&lt;p&gt;No. Solo significa que lideró por una tarea en este conjunto. No se evaluaron visión, herramientas, contexto ultralargo ni agentes de varios turnos.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Por qué cuentan como fallo unas autopruebas incorrectas?
&lt;/h3&gt;

&lt;p&gt;Porque se pidió un archivo Python completo. Si el original falla al importarse, un sistema posterior no puede usarlo sin reparación manual.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Por qué la latencia no aparece en el veredicto?
&lt;/h3&gt;

&lt;p&gt;Depende del modelo, el gateway, la carga upstream y el estado de la ruta. Es evidencia operativa útil, pero no mide la precisión intelectual.&lt;/p&gt;

&lt;h2&gt;
  
  
  Veredicto final
&lt;/h2&gt;

&lt;p&gt;En esta prueba centrada en precisión verificable, Opus 5 lideró &lt;strong&gt;17/18 a 16/18&lt;/strong&gt; gracias a la entrega completa de los tres algoritmos. Luna fue mejor en cumplimiento estricto de formato. La conclusión práctica no es un campeón universal, sino una regla de routing basada en fallos reproducibles.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://crazyrouter.com/es?utm_source=blog&amp;amp;utm_medium=content&amp;amp;utm_campaign=opus5_gpt56_luna_correctness_benchmark_20260730&amp;amp;utm_content=es" rel="noopener noreferrer"&gt;Prueba ambos modelos en Crazyrouter con tus propios prompts de producción&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>benchmark</category>
    </item>
    <item>
      <title>Claude Opus 5 vs GPT-5.6 Luna: 18 Verifiable Tasks, No Speed Leaderboard</title>
      <dc:creator>Jenny Met</dc:creator>
      <pubDate>Thu, 30 Jul 2026 00:42:45 +0000</pubDate>
      <link>https://dev.to/xujfcn/claude-opus-5-vs-gpt-56-luna-18-verifiable-tasks-no-speed-leaderboard-3alf</link>
      <guid>https://dev.to/xujfcn/claude-opus-5-vs-gpt-56-luna-18-verifiable-tasks-no-speed-leaderboard-3alf</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxmcnvhkat60epcs35gsi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxmcnvhkat60epcs35gsi.png" alt="Claude Opus 5 vs GPT-5.6 Luna: 18 Verifiable Tasks, No Speed Leaderboard" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick answer
&lt;/h2&gt;

&lt;p&gt;Claude Opus 5 scored &lt;strong&gt;17/18 (94.4%)&lt;/strong&gt; and GPT-5.6 Luna scored &lt;strong&gt;16/18 (88.9%)&lt;/strong&gt; on the harder round. That is a one-task lead in this sample—not proof that Opus is universally stronger. The useful result is the shape of the failures: Opus delivered all three algorithm files successfully but broke a strict JSON contract; Luna followed all three formatting instructions but shipped two algorithm files that failed during import.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the benchmark had to become harder
&lt;/h2&gt;

&lt;p&gt;The first eight tasks were too easy to separate the models: both scored 8/8. The second round therefore used 18 tasks, with hard, harder, and extreme variants in each of six categories. The questions required exact fractions, multi-stage physical modeling, executable files, resistance to misleading assumptions, unique logical solutions, and byte-level output discipline. The goal was not to reward impressive prose. Every decisive claim had to be checked by deterministic rules, independent calculations, JSON parsing, or Python execution.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the 18-task round was scored
&lt;/h2&gt;

&lt;p&gt;Both models received the same task text, system instruction, temperature, and task-level output budget. Mathematical and physics answers were checked against exact values or numerical tolerances. Algorithm responses were saved as delivered and imported into the same hidden-test harness. Strict JSON and CSV tasks were validated as artifacts, not read charitably. A file that only works after deleting model-written assertions is useful diagnostic evidence, but it is not a successful first delivery. Route latency was retained in the raw JSON for infrastructure diagnosis and was excluded from every winner decision in this article.&lt;/p&gt;

&lt;h2&gt;
  
  
  Results across six dimensions
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0shbbw2f11pnbu4ei5xb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0shbbw2f11pnbu4ei5xb.png" alt="Correctness by dimension" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Opus 5&lt;/th&gt;
&lt;th&gt;GPT-5.6 Luna&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Mathematical reasoning&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Complex physics&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Algorithm delivery&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;td&gt;1/3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;False-premise resistance&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Constraint reasoning&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Instruction following&lt;/td&gt;
&lt;td&gt;2/3&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;17/18 (94.4%)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;16/18 (88.9%)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The algorithm gap was a delivery gap
&lt;/h2&gt;

&lt;p&gt;Luna's two failed algorithm answers contained core functions that passed hidden tests after their own bottom-of-file assertions were removed. The problem was that the assertions encoded incorrect expected values, so importing the original files raised &lt;code&gt;AssertionError&lt;/code&gt; before a caller could use the functions. Under a strict complete-file contract, those are failures. Opus's three original algorithm files imported and passed the shared harness. This distinction matters in production: a plausible function body is not the same thing as a deployable artifact.&lt;/p&gt;

&lt;h2&gt;
  
  
  The strict-JSON failure points in the other direction
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fygklb403va7rgtt1boyy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fygklb403va7rgtt1boyy.png" alt="Different failures, different production risks" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Opus's only hard-round failure was almost the mirror image. The JSON keys and values were correct, but the model wrapped the object in a Markdown code fence even though the instruction required exactly one JSON object and nothing else. The same behavior reappeared in the independent retry. Luna returned valid strict output in all three instruction-following tasks. If your pipeline feeds model output directly into a parser, wrapper discipline is part of correctness, not a cosmetic preference.&lt;/p&gt;

&lt;h2&gt;
  
  
  Output budgets were separated from intelligence errors
&lt;/h2&gt;

&lt;p&gt;Some early responses ended with &lt;code&gt;finish_reason=length&lt;/code&gt; because hidden reasoning consumed the available output budget. Those attempts were preserved, but they were not counted as intelligence failures. The same effective budget was increased for both models before scoring. This avoids confusing capacity configuration with reasoning quality while still documenting a real integration risk: long reasoning can leave too little room for the visible artifact.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means for production routing
&lt;/h2&gt;

&lt;p&gt;Use Luna first for strict JSON, CSV, short extraction, and high-volume structured work—but keep schema validation. Use Opus first for long algorithm files, defensive engineering, and tasks where the complete executable artifact matters more than brevity. For math, complex physics, false-premise resistance, and constraint reasoning, this sample was a tie, so cost, interface compatibility, and output style are better routing variables. In every case, validate the task artifact: parse JSON, check key numbers, and run generated code exactly as received.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reproduction and raw evidence
&lt;/h2&gt;

&lt;p&gt;The benchmark runner is &lt;code&gt;scripts/opus5_vs_luna_hard_benchmark.py&lt;/code&gt;. The complete hard-round result is &lt;code&gt;.tmp/opus5-vs-luna-hard-benchmark-results.json&lt;/code&gt;; independent failure retries are in &lt;code&gt;.tmp/opus5-hard-failure-retry.json&lt;/code&gt; and &lt;code&gt;.tmp/luna-hard-failure-retry.json&lt;/code&gt;. The API endpoint used was &lt;code&gt;https://cn.crazyrouter.com/v1/chat/completions&lt;/code&gt;. Latency fields remain in those raw files for route diagnosis only.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Does 17/18 make Opus 5 the overall winner?
&lt;/h3&gt;

&lt;p&gt;No. It gives Opus a one-task lead on this specific 18-task set. The sample does not cover vision, tools, long-context retrieval, or multi-turn agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why count faulty self-tests as algorithm failures?
&lt;/h3&gt;

&lt;p&gt;Because the requested deliverable was a complete Python file. If the original file crashes on import, downstream systems cannot use it without manual repair.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why is latency absent from the verdict?
&lt;/h3&gt;

&lt;p&gt;Latency reflects the model, gateway route, upstream load, and channel state. It is valuable operational evidence but not a reliable measure of intelligence correctness.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final verdict
&lt;/h2&gt;

&lt;p&gt;In this correctness-first benchmark, Opus 5 led &lt;strong&gt;17/18 to 16/18&lt;/strong&gt; because it delivered all algorithm artifacts successfully. Luna was stronger at strict instruction compliance. The practical conclusion is not a universal champion; it is a routing rule backed by reproducible failure modes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://crazyrouter.com/en?utm_source=blog&amp;amp;utm_medium=content&amp;amp;utm_campaign=opus5_gpt56_luna_correctness_benchmark_20260730&amp;amp;utm_content=en" rel="noopener noreferrer"&gt;Run both models through Crazyrouter with your own production prompts&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>benchmark</category>
    </item>
    <item>
      <title>Claude Opus 5 vs GPT-5.6-SOL: 프로덕션 QA로 검증한 10개 과제, 핵심 정확도는 동률</title>
      <dc:creator>Jenny Met</dc:creator>
      <pubDate>Thu, 30 Jul 2026 00:25:45 +0000</pubDate>
      <link>https://dev.to/xujfcn/claude-opus-5-vs-gpt-56-sol-peurodeogsyeon-qaro-geomjeunghan-10gae-gwaje-haegsim-jeonghwagdoneun-dongryul-2i9o</link>
      <guid>https://dev.to/xujfcn/claude-opus-5-vs-gpt-56-sol-peurodeogsyeon-qaro-geomjeunghan-10gae-gwaje-haegsim-jeonghwagdoneun-dongryul-2i9o</guid>
      <description>&lt;h1&gt;
  
  
  Claude Opus 5 vs GPT-5.6-SOL: 프로덕션 QA로 검증한 10개 과제, 핵심 정확도는 동률
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq2achq4arcukcthqri3a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq2achq4arcukcthqri3a.png" alt="Claude Opus 5와 GPT-5.6-SOL 지능 정확도 벤치마크" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;모델을 프로덕션에 투입할 때는 최종 답만 맞는다고 충분하지 않다. 응답이 중간에 잘리지 않았는지 &lt;code&gt;finish_reason&lt;/code&gt;을 확인해야 하고, 생성된 코드는 실제 숨은 테스트를 통과해야 하며, JSON은 설명이나 코드 블록 없이 바로 파싱할 수 있어야 한다.&lt;/p&gt;

&lt;p&gt;이번 비교에서는 Crazyrouter의 동일한 OpenAI-compatible endpoint를 통해 Claude Opus 5와 GPT-5.6-SOL에 10개의 지능 과제를 수행하게 했다. 별도로 엄격한 JSON 출력 과제를 추가해 지시 준수와 구조화 출력 안정성도 확인했다.&lt;/p&gt;

&lt;p&gt;평가는 다음 질문에 초점을 맞췄다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;수학 답과 물리 모델이 정확한가?&lt;/li&gt;
&lt;li&gt;잘못된 전제나 불충분한 통계적 결론을 식별하는가?&lt;/li&gt;
&lt;li&gt;생성한 Python 코드가 숨은 테스트를 통과하는가?&lt;/li&gt;
&lt;li&gt;문제에 포함된 모든 하위 요구 사항을 빠짐없이 완료하는가?&lt;/li&gt;
&lt;li&gt;JSON 응답을 별도 정제 없이 바로 파싱할 수 있는가?&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;finish_reason&lt;/code&gt;이 정상 종료를 나타내는가?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;결과는 단순한 승패보다 프로덕션 QA 관점에서 해석할 가치가 있다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;핵심 답변 정확도: Opus 5 &lt;strong&gt;10/10&lt;/strong&gt;, GPT-5.6-SOL &lt;strong&gt;10/10&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;모든 하위 요구 사항까지 완전히 완료: Opus 5 &lt;strong&gt;9/10&lt;/strong&gt;, GPT-5.6-SOL &lt;strong&gt;10/10&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Python 알고리즘 과제의 숨은 테스트: 두 모델 모두 &lt;strong&gt;2/2&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;엄격한 JSON 최초 제출: Opus 5 &lt;strong&gt;0/1&lt;/strong&gt;, GPT-5.6-SOL &lt;strong&gt;1/1&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Opus 5는 이후 두 번의 추가 재시도에서도 JSON 외의 텍스트를 덧붙여 형식 요구를 충족하지 못했다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;따라서 이번 결과는 &lt;strong&gt;핵심 정확도는 동률&lt;/strong&gt;이지만, &lt;strong&gt;완전한 과제 납품과 구조화 출력의 안정성은 동일하지 않았다&lt;/strong&gt;고 정리하는 것이 정확하다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://crazyrouter.com/register?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=opus5_gpt56sol_accuracy_20260730&amp;amp;utm_content=claude-opus-5-vs-gpt-5-6-sol-intelligence-accuracy-benchmark-2026-ko__hero_cta&amp;amp;utm_term=claude+opus+5+gpt+5.6+sol" rel="noopener noreferrer"&gt;API Key를 만들고 실제 업무 문제로 재검증하기&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  빠른 답변
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgr3to2dmdpgu8r8a2u1s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgr3to2dmdpgu8r8a2u1s.png" alt="Claude Opus 5와 GPT-5.6-SOL 정확도 결과 카드" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;질문&lt;/th&gt;
&lt;th&gt;이번 테스트 결과&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;핵심 지능 과제의 답은 어느 쪽이 더 정확했나?&lt;/td&gt;
&lt;td&gt;동률: 두 모델 모두 10/10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;모든 하위 요구 사항을 더 많이 완료한 모델은?&lt;/td&gt;
&lt;td&gt;GPT-5.6-SOL 10/10, Opus 5 9/10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;코드 신뢰성은 어느 쪽이 더 높았나?&lt;/td&gt;
&lt;td&gt;이번에는 동률. 두 알고리즘 과제 모두 숨은 테스트 통과&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Opus 5가 어려운 확률 문제를 틀렸나?&lt;/td&gt;
&lt;td&gt;아니다. 핵심 답은 정확했지만 &lt;code&gt;max_tokens=3200&lt;/code&gt;에서 출력이 잘려 마지막 설명 요구를 누락했다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;엄격한 JSON 지시를 더 안정적으로 지킨 모델은?&lt;/td&gt;
&lt;td&gt;이번에는 GPT-5.6-SOL. Opus 5는 최초 응답과 추가 재시도 2회, 총 3회 모두 추가 텍스트 또는 코드 블록을 포함했다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;이 결과로 GPT가 전반적으로 더 똑똑하다고 할 수 있나?&lt;/td&gt;
&lt;td&gt;아니다. 핵심 추론 정확도와 형식·지시 준수는 분리해 평가해야 한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;응답 속도도 평가했나?&lt;/td&gt;
&lt;td&gt;아니다. 네트워크와 라우팅 영향을 분리할 수 없어 지능 점수에서 제외했다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;수학·물리·알고리즘의 핵심 정확성이 중요한 업무라면 이번 표본에서 두 모델 간 뚜렷한 격차는 없었다. 반면 응답 본문이 반드시 순수 JSON이어야 하거나, 단 한 번의 응답에서 모든 하위 요구 사항을 완료해야 한다면 이번 테스트에서는 GPT-5.6-SOL의 납품 완성도가 더 높았다.&lt;/p&gt;

&lt;h2&gt;
  
  
  네트워크 지연 시간을 지능 점수에서 제외한 이유
&lt;/h2&gt;

&lt;p&gt;모델 API의 종단 간 응답 시간에는 모델의 추론 능력 외에도 여러 변수가 개입한다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;게이트웨이에서 각 상위 공급자까지의 네트워크 경로&lt;/li&gt;
&lt;li&gt;요청 시점의 채널 부하와 계정별 속도 제한&lt;/li&gt;
&lt;li&gt;캐시 적중 여부&lt;/li&gt;
&lt;li&gt;실제로 요청을 처리한 서비스 인스턴스&lt;/li&gt;
&lt;li&gt;상위 공급자가 reasoning token을 집계하거나 숨기는 방식&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;단일 요청이 몇 초 더 빨랐다는 사실은 모델의 추론 능력이 더 우수하다는 증거가 아니다. 그것은 네트워크 상태나 라우팅 결과, 순간적인 서버 부하를 측정한 것일 수 있다.&lt;/p&gt;

&lt;p&gt;속도를 비교하려면 최소한 동일한 상위 공급자와 실행 조건을 고정하고, 충분한 횟수로 반복한 뒤 분산과 신뢰구간을 함께 보고해야 한다. 이번 테스트에는 그런 조건이 마련되지 않았으므로 네트워크 지연 시간을 지능 점수에서 명시적으로 제외했다.&lt;/p&gt;

&lt;p&gt;따라서 이 글은 어떤 모델도 속도 승자로 선정하지 않는다. 지연 시간은 운영 관측 지표로는 유용하지만, 이번과 같은 지능 정확도 평가에 혼합하면 결과를 왜곡할 수 있다.&lt;/p&gt;

&lt;p&gt;현재 제공되는 모델과 접속 범위는 &lt;a href="https://crazyrouter.com/models?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=opus5_gpt56sol_accuracy_20260730&amp;amp;utm_content=claude-opus-5-vs-gpt-5-6-sol-intelligence-accuracy-benchmark-2026-ko__models" rel="noopener noreferrer"&gt;Crazyrouter 모델 목록&lt;/a&gt;에서 확인할 수 있다. 비용 계획은 지능 평가와 분리해 &lt;a href="https://crazyrouter.com/pricing?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=opus5_gpt56sol_accuracy_20260730&amp;amp;utm_content=claude-opus-5-vs-gpt-5-6-sol-intelligence-accuracy-benchmark-2026-ko__pricing" rel="noopener noreferrer"&gt;Crazyrouter pricing&lt;/a&gt;을 참고해야 한다.&lt;/p&gt;

&lt;h2&gt;
  
  
  테스트 환경과 채점 기준
&lt;/h2&gt;

&lt;p&gt;테스트 전 모델 목록 API를 호출해 정확한 모델 ID 두 개가 노출되는지 확인했다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET https://cn.crazyrouter.com/v1/models

claude-opus-5
gpt-5.6-sol
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;실제 요청에는 다음 endpoint를 공통으로 사용했다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST https://cn.crazyrouter.com/v1/chat/completions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;각 테스트 배치에서 두 모델에 동일한 system prompt, user prompt, temperature, &lt;code&gt;max_tokens&lt;/code&gt;를 적용했다. 외부 도구는 사용하지 않았으며, HTTP 200 응답만으로 과제 통과를 판정하지 않았다.&lt;/p&gt;

&lt;p&gt;채점은 세 단계로 나눴다.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;핵심 답변 정확도&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
주요 수치, 결론, 알고리즘 동작이 정확한지 평가했다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;완전한 과제 통과율&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
문제에 명시된 모든 하위 요구 사항을 빠짐없이 완료했는지 확인했다.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;기계 검증 가능성&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
코드는 숨은 테스트를 통과하는지, JSON은 별도 정제 없이 직접 파싱되는지 검사했다.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;자동 문자열 채점 후에는 사람이 다시 검토했다. LaTeX 표현, 대소문자, 정확한 분수와 반올림된 소수의 차이 때문에 거짓 음성이 발생할 수 있기 때문이다.&lt;/p&gt;

&lt;p&gt;예를 들어 GPT-5.6-SOL은 확률 문제에서 기준 답안의 분수 표현을 그대로 복사하지 않았지만 동치인 수식과 정확한 소수를 제시했다. Opus 5는 물리 문제의 &lt;code&gt;0.302 m&lt;/code&gt;를 유효숫자 두 자리인 &lt;code&gt;0.30 m&lt;/code&gt;로 썼지만, 이를 오답으로 볼 근거는 없다.&lt;/p&gt;

&lt;h2&gt;
  
  
  10개 지능 과제 결과
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;과제&lt;/th&gt;
&lt;th&gt;검증 기준&lt;/th&gt;
&lt;th&gt;Claude Opus 5&lt;/th&gt;
&lt;th&gt;GPT-5.6-SOL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;정확한 마르코프 연쇄&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;E[τ]=5&lt;/code&gt;, &lt;code&gt;E[τ²]=43&lt;/code&gt;, &lt;code&gt;Var(τ)=18&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;정확&lt;/td&gt;
&lt;td&gt;정확&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2자유도 진동자&lt;/td&gt;
&lt;td&gt;고유진동수 2개, 진폭 2개, 위상 2개&lt;/td&gt;
&lt;td&gt;정확&lt;/td&gt;
&lt;td&gt;정확&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;제약 조건 탐색&lt;/td&gt;
&lt;td&gt;유일한 순서 &lt;code&gt;A,C,E,B,D&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;정확&lt;/td&gt;
&lt;td&gt;정확&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cantelli 오류 수정&lt;/td&gt;
&lt;td&gt;확률은 식별 불가능하며 상한은 &lt;code&gt;0.2&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;정확&lt;/td&gt;
&lt;td&gt;정확&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python 순환 탐지 검토&lt;/td&gt;
&lt;td&gt;bug, DAG 반례, 최소 수정&lt;/td&gt;
&lt;td&gt;정확&lt;/td&gt;
&lt;td&gt;정확&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;실험 설계&lt;/td&gt;
&lt;td&gt;동일 문제 짝짓기, 난이도 통제, 신뢰구간&lt;/td&gt;
&lt;td&gt;정확&lt;/td&gt;
&lt;td&gt;정확&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;편향 동전의 &lt;code&gt;HHTH&lt;/code&gt; 대기 시간&lt;/td&gt;
&lt;td&gt;기댓값 약 &lt;code&gt;12.6547&lt;/code&gt;과 올바른 상태 전이&lt;/td&gt;
&lt;td&gt;핵심 답은 정확하나 출력이 잘려 마지막 설명 누락&lt;/td&gt;
&lt;td&gt;정확하고 완전함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;로그 집계 알고리즘&lt;/td&gt;
&lt;td&gt;시간 구간, 실패 이벤트, 캐시 비율, 상위 사용자&lt;/td&gt;
&lt;td&gt;숨은 테스트 통과&lt;/td&gt;
&lt;td&gt;숨은 테스트 통과&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;비탄성 충돌과 용수철&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;v1≈6.10&lt;/code&gt;, &lt;code&gt;v2≈2.44&lt;/code&gt;, &lt;code&gt;x≈0.302&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;정확&lt;/td&gt;
&lt;td&gt;정확&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;안정적 라우팅 알고리즘&lt;/td&gt;
&lt;td&gt;cost, latency, reliability와 사전식 순서 규칙&lt;/td&gt;
&lt;td&gt;숨은 테스트 통과&lt;/td&gt;
&lt;td&gt;숨은 테스트 통과&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;이 표에서 가장 중요한 구분은 &lt;strong&gt;핵심적으로 맞았는가&lt;/strong&gt;와 &lt;strong&gt;요구된 결과를 완전히 납품했는가&lt;/strong&gt;가 서로 다른 평가 항목이라는 점이다.&lt;/p&gt;

&lt;p&gt;Opus 5는 10개 과제의 핵심 답을 모두 맞혔다. 그러나 확률 문제에서 마지막 설명 하나가 누락되어 완전한 과제 통과율은 9/10이었다. GPT-5.6-SOL은 핵심 정확도와 완전한 과제 통과율이 모두 10/10이었다.&lt;/p&gt;

&lt;h2&gt;
  
  
  가장 어려운 확률 문제: &lt;code&gt;12.6547&lt;/code&gt;은 맞았지만 응답은 완전하지 않았다
&lt;/h2&gt;

&lt;p&gt;문제의 목표 패턴은 &lt;code&gt;HHTH&lt;/code&gt;이며 편향 동전의 확률은 다음과 같다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;P(H)=0.62
P(T)=0.38
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;문제는 최장 접두사·접미사 일치 상태를 사용해 방정식을 세우고, 다음 두 가지 함정을 명시적으로 설명하도록 요구했다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;상태 &lt;code&gt;HH&lt;/code&gt;에서 다시 &lt;code&gt;H&lt;/code&gt;가 나왔을 때 왜 상태가 여전히 &lt;code&gt;HH&lt;/code&gt;인가?&lt;/li&gt;
&lt;li&gt;기대 대기 시간을 왜 단순히 &lt;code&gt;1/P(HHTH)&lt;/code&gt;로 계산할 수 없는가?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;두 모델 모두 올바른 기대 대기 시간을 계산했다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;E[N] ≈ 12.6547
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GPT-5.6-SOL은 전체 유도를 완료했고, 패턴에 중첩이 존재하므로 다음 관계가 성립한다고 설명했다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;E[N] = 1 / P(HHTH) + 1 / P(H)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Opus 5도 올바른 상태 정의, 방정식, 정확한 분수와 소수 결과를 제시했다. 하지만 응답의 최종 상태는 &lt;code&gt;finish_reason=length&lt;/code&gt;였다. 출력이 부가적인 상태별 기대값을 설명하던 중 종료되면서, 마지막 요구 사항인 “왜 확률의 역수를 직접 사용하면 안 되는가”에 대한 설명이 빠졌다.&lt;/p&gt;

&lt;p&gt;이때 적용해야 할 채점 원칙은 명확하다.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;최종 수치가 정확하면 핵심 답변 정확도에는 포함할 수 있다. 그러나 문제의 모든 요구 사항을 완료하지 않았다면 완전한 과제 통과로 처리할 수 없다.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;이 응답에는 &lt;code&gt;max_tokens=3200&lt;/code&gt;이 적용됐다. 따라서 프로덕션에서는 답변 본문만 저장해서는 안 된다. 최소한 원문 응답, &lt;code&gt;finish_reason&lt;/code&gt;, 사용한 출력 예산을 함께 기록해야 한다. 앞부분이 정확하다는 이유만으로 전체 작업이 완료됐다고 판단해서는 안 된다.&lt;/p&gt;

&lt;p&gt;이는 기존의 &lt;a href="https://crazyrouter.com/ko/blog/claude-fable-5-vs-gpt-55-max-tokens-animation-test-2026-ko" rel="noopener noreferrer"&gt;max_tokens 잘림 재검증&lt;/a&gt;에서도 확인할 수 있는 동일한 방법론적 문제다.&lt;/p&gt;

&lt;h2&gt;
  
  
  실행 가능한 코드 검증: 코드 모양이 아니라 숨은 테스트로 평가
&lt;/h2&gt;

&lt;p&gt;코드 생성 결과는 길이, 주석의 양, 함수 분리 방식만 보고 평가하기 어렵다. 보기 좋은 코드가 반드시 정확한 코드는 아니며, 짧은 구현도 모든 경계 조건을 만족할 수 있다.&lt;/p&gt;

&lt;p&gt;이번 테스트에서는 두 모델이 생성한 출력을 각각 &lt;code&gt;.py&lt;/code&gt; 파일로 저장하고 격리 모드에서 동일한 테스트를 실행했다.&lt;/p&gt;

&lt;h3&gt;
  
  
  로그 집계 알고리즘
&lt;/h3&gt;

&lt;p&gt;로그 집계 함수는 다음 조건을 모두 처리해야 했다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;반개방 시간 구간&lt;/li&gt;
&lt;li&gt;성공 요청과 실패 요청에 서로 다른 집계 규칙 적용&lt;/li&gt;
&lt;li&gt;사용자 또는 모델 값이 누락된 이벤트&lt;/li&gt;
&lt;li&gt;cache hit rate&lt;/li&gt;
&lt;li&gt;cost가 같을 때 사용자 이름의 사전식 순서 적용&lt;/li&gt;
&lt;li&gt;입력 객체를 변경하지 않는 불변성&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;두 모델의 구현 모두 숨은 테스트를 통과했다.&lt;/p&gt;

&lt;h3&gt;
  
  
  신뢰성 제약이 있는 안정적 라우팅
&lt;/h3&gt;

&lt;p&gt;두 번째 함수는 경로 탐색 과정에서 다음 조건을 함께 처리해야 했다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;총비용이 가장 낮은 경로 선택&lt;/li&gt;
&lt;li&gt;비용이 같으면 latency가 가장 낮은 경로 선택&lt;/li&gt;
&lt;li&gt;latency까지 같으면 reliability가 가장 높은 경로 선택&lt;/li&gt;
&lt;li&gt;모든 조건이 같으면 경로의 사전식 순서로 선택&lt;/li&gt;
&lt;li&gt;banned nodes 처리&lt;/li&gt;
&lt;li&gt;최대 hops 제한&lt;/li&gt;
&lt;li&gt;최소 reliability 제한&lt;/li&gt;
&lt;li&gt;잘못된 edge 처리&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;두 모델 모두 이 과제의 숨은 테스트를 통과했다.&lt;/p&gt;

&lt;p&gt;따라서 코드 부문의 결과는 &lt;strong&gt;두 모델 모두 2/2로 동률&lt;/strong&gt;이다. 코드가 더 길거나 설명이 더 상세하다는 이유로 별도의 우승 모델을 정하지 않았다.&lt;/p&gt;

&lt;p&gt;GPT-5.6-SOL의 다른 고난도 물리·의존성 알고리즘 결과는 &lt;a href="https://crazyrouter.com/zh/blog/gpt-56-sol-vs-gpt-55-round6-hard-physics-code-2026" rel="noopener noreferrer"&gt;GPT-5.6-SOL vs GPT-5.5 고난도 물리 및 코드 테스트&lt;/a&gt;에서 확인할 수 있다.&lt;/p&gt;

&lt;h2&gt;
  
  
  엄격한 JSON: 계산 정확도와 지시 준수를 분리해서 봐야 한다
&lt;/h2&gt;

&lt;p&gt;별도의 엄격한 JSON 과제에서는 사고 데이터를 하나의 객체로 압축하되 다음 조건을 지키도록 요구했다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;exactly one JSON object and no Markdown
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;두 모델 모두 실패율, 장애 책임 채널, 재시도 후 복구되지 않은 요청 수를 정확하게 계산했다. 차이는 JSON 바깥의 출력에서 발생했다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GPT-5.6-SOL은 첫 시도에 JSON만 반환했고 &lt;code&gt;json.loads&lt;/code&gt;로 직접 파싱할 수 있었다.&lt;/li&gt;
&lt;li&gt;Opus 5는 첫 시도에 코드 블록과 Verification을 추가했다.&lt;/li&gt;
&lt;li&gt;Opus 5의 첫 번째 추가 재시도에서는 압축된 JSON 뒤에 Verification을 덧붙였다.&lt;/li&gt;
&lt;li&gt;Opus 5의 두 번째 추가 재시도에서는 다시 코드 블록과 설명을 추가했다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;수치로 정리하면 엄격한 JSON 최초 제출은 GPT-5.6-SOL &lt;strong&gt;1/1&lt;/strong&gt;, Opus 5 &lt;strong&gt;0/1&lt;/strong&gt;이다. Opus 5는 그 뒤 두 번 더 재시도했지만 계속 형식 요구를 충족하지 못했다.&lt;/p&gt;

&lt;p&gt;이는 “계산을 못했다”는 의미가 아니다. Opus 5가 생성한 필드와 값은 정확했다. 실패 원인은 &lt;strong&gt;데이터 오류가 아니라 출력 형식과 지시 준수&lt;/strong&gt;다.&lt;/p&gt;

&lt;p&gt;이 차이를 핵심 지능 정확도에 섞어 하나의 총점으로 만들면 다음 두 문제를 구분할 수 없게 된다.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;모델이 올바른 값을 계산했는가?&lt;/li&gt;
&lt;li&gt;모델이 지정된 구조만 출력했는가?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;프로덕션에서는 최소한 다음과 같은 로컬 검증기를 둘 수 있다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="n"&gt;REQUIRED_KEYS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;window&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total_requests&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed_requests&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failure_rate_pct&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;provider_owned_failures&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;customer_owned_failures&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;recovered_by_retry&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;unrecovered_failures&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;root_cause&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;parse_incident_json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;REQUIRED_KEYS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;unexpected schema or key order&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed_requests&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;84&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed request count mismatch&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;system prompt만으로 구조화 출력을 보장할 수는 없다. 더 안전한 구성은 다음 세 요소를 함께 적용하는 것이다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;공급자가 지원하는 구조화 출력 매개변수 사용&lt;/li&gt;
&lt;li&gt;응답에 대한 로컬 schema 검증&lt;/li&gt;
&lt;li&gt;파싱 또는 검증 실패 시 재시도하거나 다른 모델로 전환&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;즉, 구조화 출력은 프롬프트 작성만의 문제가 아니라 애플리케이션 계층의 검증 문제다.&lt;/p&gt;

&lt;h2&gt;
  
  
  같은 API로 재검증하는 방법
&lt;/h2&gt;

&lt;p&gt;다음은 OpenAI-compatible chat completions endpoint를 사용하는 최소 실행 예제다. API endpoint 자체에는 UTM 매개변수를 추가하지 않는다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;BASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://cn.crazyrouter.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CRAZYROUTER_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;ask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/chat/completions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;messages&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Answer accurately and follow every requested constraint.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;temperature&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;max_tokens&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;


&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-opus-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-5.6-sol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Your benchmark prompt here&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;choice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;choices&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;finish_reason&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;message&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;실제 회귀 테스트에서는 답변 텍스트뿐 아니라 다음 항목도 함께 저장하는 편이 좋다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;response ID&lt;/li&gt;
&lt;li&gt;returned model&lt;/li&gt;
&lt;li&gt;원본 응답&lt;/li&gt;
&lt;li&gt;&lt;code&gt;finish_reason&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;요청에 사용한 &lt;code&gt;max_tokens&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;로컬 검증 결과&lt;/li&gt;
&lt;li&gt;코드 테스트 또는 schema 검증의 실패 원인&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;현재 모델이 노출되는지는 &lt;a href="https://crazyrouter.com/models?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=opus5_gpt56sol_accuracy_20260730&amp;amp;utm_content=claude-opus-5-vs-gpt-5-6-sol-intelligence-accuracy-benchmark-2026-ko__body_models" rel="noopener noreferrer"&gt;Crazyrouter 모델 목록&lt;/a&gt;에서 확인한 뒤, 실제 업무 prompt로 소규모 회귀 테스트를 진행할 수 있다.&lt;/p&gt;

&lt;h2&gt;
  
  
  프로덕션 도입을 위한 QA 지침
&lt;/h2&gt;

&lt;h3&gt;
  
  
  두 모델 모두 후보로 고려할 수 있는 작업
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;명확한 기준 답안이 있는 수학·물리 문제&lt;/li&gt;
&lt;li&gt;단위 테스트를 실행할 수 있는 Python 알고리즘&lt;/li&gt;
&lt;li&gt;잘못된 전제나 불충분한 통계 결론을 식별하는 작업&lt;/li&gt;
&lt;li&gt;로컬 검증기로 성공 여부를 판정할 수 있는 업무 흐름&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;이번 10개 과제에서 두 모델 모두 핵심 정확도 10/10을 기록했고, 코드 과제의 숨은 테스트도 각각 2/2를 통과했다. 따라서 검증 가능한 작업이라면 두 모델 모두 후보군에 포함할 근거가 있다.&lt;/p&gt;

&lt;h3&gt;
  
  
  이번 결과에서 GPT-5.6-SOL을 우선 검토할 수 있는 작업
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;모든 하위 요구 사항을 한 번의 응답에서 완료해야 하는 작업&lt;/li&gt;
&lt;li&gt;응답 원문이 반드시 순수 JSON이어야 하는 연동&lt;/li&gt;
&lt;li&gt;설명문에서 구조화 데이터를 다시 추출하는 후처리를 줄여야 하는 시스템&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;이 판단은 GPT-5.6-SOL의 핵심 추론 정확도가 더 높았다는 뜻이 아니다. 두 모델의 핵심 정확도는 동일한 10/10이었다. 차이는 이번 표본에서 확인된 완전한 과제 납품과 JSON 형식 준수에 있다.&lt;/p&gt;

&lt;h3&gt;
  
  
  Opus 5를 사용할 때 추가할 보호 장치
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;긴 유도 과정에는 충분한 &lt;code&gt;max_tokens&lt;/code&gt; 할당&lt;/li&gt;
&lt;li&gt;모든 응답에서 &lt;code&gt;finish_reason&lt;/code&gt; 검사&lt;/li&gt;
&lt;li&gt;JSON을 하위 시스템에 전달하기 전에 반드시 파싱&lt;/li&gt;
&lt;li&gt;추가 Markdown, 코드 블록, 설명 텍스트가 포함됐을 때의 명시적 대체 경로 구성&lt;/li&gt;
&lt;li&gt;잘림이나 schema 위반 시 재시도 또는 모델 전환&lt;/li&gt;
&lt;li&gt;핵심 정답과 전체 요구 사항 완료 여부를 별도로 기록&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Opus 5의 확률 문제는 핵심 계산이 틀린 사례가 아니다. &lt;code&gt;max_tokens=3200&lt;/code&gt; 경계에서 &lt;code&gt;finish_reason=length&lt;/code&gt;로 끝나면서 마지막 설명이 누락된 사례다. 이를 추론 오류로 분류하면 원인을 잘못 진단하게 된다.&lt;/p&gt;

&lt;p&gt;Claude 계열 내부의 납품 특성을 추가로 비교하려면 &lt;a href="https://crazyrouter.com/ko/blog/claude-opus-5-vs-claude-fable-5-api-benchmark-2026-ko" rel="noopener noreferrer"&gt;Claude Opus 5 vs Claude Fable 5 실제 API 테스트&lt;/a&gt;를 참고할 수 있다.&lt;/p&gt;

&lt;h2&gt;
  
  
  프로덕션 체크리스트
&lt;/h2&gt;

&lt;p&gt;모델을 실제 시스템에 연결할 때는 단일 “정답률” 대신 다음 항목을 개별적으로 수집하는 것이 좋다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] 핵심 답변이 정확한가?&lt;/li&gt;
&lt;li&gt;[ ] 모든 하위 요구 사항을 완료했는가?&lt;/li&gt;
&lt;li&gt;[ ] &lt;code&gt;finish_reason&lt;/code&gt;이 예상한 종료 상태인가?&lt;/li&gt;
&lt;li&gt;[ ] 응답이 &lt;code&gt;max_tokens&lt;/code&gt; 경계에서 잘리지 않았는가?&lt;/li&gt;
&lt;li&gt;[ ] JSON이 &lt;code&gt;json.loads&lt;/code&gt;로 직접 파싱되는가?&lt;/li&gt;
&lt;li&gt;[ ] 필수 키, 자료형, 값 범위가 schema와 일치하는가?&lt;/li&gt;
&lt;li&gt;[ ] 생성된 코드가 공개 테스트뿐 아니라 숨은 테스트도 통과하는가?&lt;/li&gt;
&lt;li&gt;[ ] 입력 객체의 불변성과 경계 조건을 지키는가?&lt;/li&gt;
&lt;li&gt;[ ] 실패 시 재시도 또는 모델 전환 경로가 있는가?&lt;/li&gt;
&lt;li&gt;[ ] 네트워크 지연 시간과 지능 정확도를 별도 지표로 기록하는가?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Claude Opus 5와 GPT-5.6-SOL 중 어느 모델이 더 똑똑한가?
&lt;/h3&gt;

&lt;p&gt;이번 10개 과제에서는 두 모델 모두 핵심 답변 정확도 10/10을 기록했다. 따라서 이 결과만으로 어느 한쪽이 전반적으로 더 똑똑하다고 결론 내릴 수 없다.&lt;/p&gt;

&lt;h3&gt;
  
  
  완전한 과제 통과율은 왜 동률이 아닌가?
&lt;/h3&gt;

&lt;p&gt;Opus 5의 고난도 확률 문제 응답이 &lt;code&gt;max_tokens=3200&lt;/code&gt;에서 잘렸기 때문이다. 기대값 &lt;code&gt;12.6547&lt;/code&gt;과 상태 방정식은 정확했지만, 마지막 설명 요구를 완료하지 못했고 &lt;code&gt;finish_reason=length&lt;/code&gt;가 반환됐다. 따라서 핵심 정확도에는 포함되지만 완전한 과제 통과에는 포함되지 않는다.&lt;/p&gt;

&lt;h3&gt;
  
  
  핵심 정확도와 완전한 과제 납품은 어떻게 다른가?
&lt;/h3&gt;

&lt;p&gt;핵심 정확도는 주요 수치, 결론, 알고리즘 동작이 맞는지를 평가한다. 완전한 과제 납품은 여기에 더해 문제에서 요구한 모든 설명, 형식, 하위 항목까지 빠짐없이 제공했는지를 평가한다. 정답을 계산했더라도 마지막 설명이나 필수 필드가 빠지면 완전한 납품은 아니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  엄격한 JSON 실패를 지능 오류로 봐야 하나?
&lt;/h3&gt;

&lt;p&gt;수학 또는 추론 오류로 직접 분류해서는 안 된다. Opus 5는 JSON의 필드와 값을 정확하게 계산했지만 JSON 외의 코드 블록이나 Verification 설명을 추가했다. 따라서 더 정확한 분류는 형식 및 지시 준수 실패다.&lt;/p&gt;

&lt;h3&gt;
  
  
  Opus 5는 JSON 재시도에서 성공했나?
&lt;/h3&gt;

&lt;p&gt;아니다. 최초 응답은 엄격한 JSON 기준에서 0/1이었고, 이후 두 번의 추가 재시도에서도 JSON 뒤의 Verification 또는 코드 블록과 설명을 추가했다. 즉, 총 3회 모두 순수 JSON만 반환하라는 요구를 지키지 못했다.&lt;/p&gt;

&lt;h3&gt;
  
  
  두 코드 과제는 어떻게 평가했나?
&lt;/h3&gt;

&lt;p&gt;각 모델의 출력을 Python 파일로 저장하고 동일한 숨은 테스트를 실행했다. 테스트에는 경계 조건, 정렬 규칙, 잘못된 입력, 입력 불변성 등이 포함됐다. 두 모델 모두 두 과제를 통과해 각각 2/2를 기록했다.&lt;/p&gt;

&lt;h3&gt;
  
  
  왜 응답 속도 승자를 발표하지 않았나?
&lt;/h3&gt;

&lt;p&gt;종단 간 응답 시간은 네트워크 경로, 채널 부하, 캐시, 상위 공급자 상태, 라우팅된 인스턴스 등에 영향을 받는다. 동일한 상위 환경을 고정하고 충분히 반복하지 않은 단일 지연 시간은 지능 정확도를 나타내지 않는다. 그래서 이번 점수에서는 네트워크 지연 시간을 제외했으며 속도 승자를 정하지 않았다.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;finish_reason&lt;/code&gt;을 반드시 검사해야 하는 이유는 무엇인가?
&lt;/h3&gt;

&lt;p&gt;본문에 올바른 답이 포함돼 있어도 응답이 중간에 끝났을 수 있기 때문이다. 이번 Opus 5 사례처럼 &lt;code&gt;finish_reason=length&lt;/code&gt;이면 핵심 답을 계산한 뒤에도 마지막 요구 사항이 누락될 수 있다. 프로덕션에서는 본문과 함께 &lt;code&gt;finish_reason&lt;/code&gt;을 성공 판정 조건에 포함해야 한다.&lt;/p&gt;

&lt;h3&gt;
  
  
  10개 과제만으로 장기 모델을 선정해도 되나?
&lt;/h3&gt;

&lt;p&gt;충분하지 않다. 이번 결과는 작지만 재현 가능한 능력 표본이다. 실제 도입 전에는 업무 문제를 20–50회 반복해 핵심 정확도, 완전한 과제 통과율, 코드 테스트 통과율, 형식 위반률을 각각 집계하는 것이 좋다.&lt;/p&gt;

&lt;h3&gt;
  
  
  자체 모델 비교는 어떻게 시작해야 하나?
&lt;/h3&gt;

&lt;p&gt;실제 업무를 대표하는 prompt 10–30개를 먼저 선정하고, 각 문제에 기계적으로 실행 가능한 통과 기준을 정의해야 한다. 이후 동일한 API 조건으로 두 모델에 같은 입력을 보내고 결과를 비교한다. 결론을 먼저 정한 뒤 그 결론을 뒷받침하는 사례만 선택해서는 안 된다.&lt;/p&gt;

&lt;h3&gt;
  
  
  구조화 출력은 prompt만 잘 쓰면 보장할 수 있나?
&lt;/h3&gt;

&lt;p&gt;보장할 수 없다. 명확한 system prompt와 user prompt는 필요하지만 충분하지 않다. 가능하면 공급자의 구조화 출력 기능을 사용하고, 로컬 schema 검증과 파싱 실패 시 재시도 또는 모델 전환을 함께 구성해야 한다.&lt;/p&gt;

&lt;h2&gt;
  
  
  최종 결론
&lt;/h2&gt;

&lt;p&gt;이번 테스트의 핵심은 어느 한 모델을 단순 승자로 선언하는 것이 아니다. 프로덕션에서는 &lt;strong&gt;핵심적으로 맞는 답을 생성하는 능력&lt;/strong&gt;과 &lt;strong&gt;요구한 형식과 모든 하위 항목을 완전하게 납품하는 능력&lt;/strong&gt;을 분리해 검증해야 한다.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Claude Opus 5와 GPT-5.6-SOL은 10개 지능 과제에서 모두 핵심 답변 정확도 10/10을 기록했다. GPT-5.6-SOL은 모든 하위 요구 사항에서 10/10, 엄격한 JSON 최초 제출에서 1/1을 기록했다. Opus 5는 하위 요구 사항 완료에서 9/10, 엄격한 JSON 최초 제출에서 0/1이었으며 두 번의 추가 재시도에서도 형식 요구를 충족하지 못했다.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Opus 5의 차이는 핵심 추론 실패가 아니었다. 고난도 확률 문제에서는 정답 &lt;code&gt;12.6547&lt;/code&gt;을 계산했지만 &lt;code&gt;max_tokens=3200&lt;/code&gt; 경계에서 &lt;code&gt;finish_reason=length&lt;/code&gt;로 종료돼 마지막 설명이 빠졌다. JSON 과제에서도 데이터는 정확했지만 출력 외피가 요구 형식과 달랐다.&lt;/p&gt;

&lt;p&gt;따라서 기준 답안이나 숨은 테스트를 운영할 수 있는 업무라면 두 모델 모두 후보가 될 수 있다. 반면 하위 시스템이 모델의 JSON을 직접 소비한다면 다음 요소는 선택 사항이 아니라 필수 구성 요소로 봐야 한다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;finish_reason&lt;/code&gt; 검사&lt;/li&gt;
&lt;li&gt;구조화 출력 schema 검증&lt;/li&gt;
&lt;li&gt;코드의 실제 실행 및 숨은 테스트&lt;/li&gt;
&lt;li&gt;출력 잘림 감지&lt;/li&gt;
&lt;li&gt;형식 위반 시 재시도&lt;/li&gt;
&lt;li&gt;필요할 때의 모델 전환&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;그리고 네트워크 지연 시간은 지능 점수와 분리해야 한다. 이번 테스트에는 속도 승자가 없으며, 확인된 차이는 핵심 정확도가 아니라 완전한 과제 납품과 구조화 출력 준수에 있다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://crazyrouter.com/register?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=opus5_gpt56sol_accuracy_20260730&amp;amp;utm_content=claude-opus-5-vs-gpt-5-6-sol-intelligence-accuracy-benchmark-2026-ko__final_cta&amp;amp;utm_term=ai+model+accuracy+benchmark" rel="noopener noreferrer"&gt;Crazyrouter 계정을 만들고 Opus 5 / GPT-5.6-SOL을 직접 테스트하기&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>benchmark</category>
    </item>
    <item>
      <title>Claude Opus 5 против GPT-5.6-SOL: проверка на 10 задачах — по точности основных ответов ничья</title>
      <dc:creator>Jenny Met</dc:creator>
      <pubDate>Thu, 30 Jul 2026 00:25:29 +0000</pubDate>
      <link>https://dev.to/xujfcn/claude-opus-5-protiv-gpt-56-sol-provierka-na-10-zadachakh-po-tochnosti-osnovnykh-otvietov-nichia-4ag4</link>
      <guid>https://dev.to/xujfcn/claude-opus-5-protiv-gpt-56-sol-provierka-na-10-zadachakh-po-tochnosti-osnovnykh-otvietov-nichia-4ag4</guid>
      <description>&lt;h1&gt;
  
  
  Claude Opus 5 против GPT-5.6-SOL: проверка на 10 задачах — по точности основных ответов ничья
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzr6k05uzocp4aig7k3ke.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzr6k05uzocp4aig7k3ke.png" alt="Сравнение точности Claude Opus 5 и GPT-5.6-SOL" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Что именно означает «модель умнее» — быстрее отвечает, правильно решает задачу или строго соблюдает формат?&lt;/p&gt;

&lt;p&gt;В этом сравнении скорость намеренно не учитывается. Вместо нее оцениваются критерии, которые можно независимо проверить: правильность математических результатов, полнота физической модели, прохождение локальных тестов кода, распознавание ошибочных предпосылок и выполнение всех требований задания.&lt;/p&gt;

&lt;p&gt;Обе модели получили одинаковые условия через один OpenAI-compatible endpoint Crazyrouter. Основной набор состоял из 10 задач; строгое соблюдение JSON проверялось отдельно.&lt;/p&gt;

&lt;p&gt;Результаты:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;точность основных ответов: Claude Opus 5 — &lt;strong&gt;10/10&lt;/strong&gt;, GPT-5.6-SOL — &lt;strong&gt;10/10&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;полное выполнение всех подпунктов: Claude Opus 5 — &lt;strong&gt;9/10&lt;/strong&gt;, GPT-5.6-SOL — &lt;strong&gt;10/10&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;скрытые тесты двух задач на Python: обе модели — &lt;strong&gt;2/2&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;строгий JSON с первой попытки: Claude Opus 5 — &lt;strong&gt;0/1&lt;/strong&gt;, GPT-5.6-SOL — &lt;strong&gt;1/1&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;в двух дополнительных попытках Opus по-прежнему добавлял к JSON посторонний текст или оформление.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Итог нельзя свести к одному общему баллу: по правильности основных рассуждений модели выступили одинаково, но по полноте и формату ответа — по-разному.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://crazyrouter.com/register?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=opus5_gpt56sol_accuracy_20260730&amp;amp;utm_content=claude-opus-5-vs-gpt-5-6-sol-intelligence-accuracy-benchmark-2026-ru__hero_cta&amp;amp;utm_term=claude+opus+5+gpt+5.6+sol" rel="noopener noreferrer"&gt;Создать API Key и повторить тестирование на собственных задачах&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Краткий ответ
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fprpz30uvutmy1fb344uu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fprpz30uvutmy1fb344uu.png" alt="Итоговые результаты Claude Opus 5 и GPT-5.6-SOL" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Вопрос&lt;/th&gt;
&lt;th&gt;Результат теста&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Какая модель точнее решила основные задачи?&lt;/td&gt;
&lt;td&gt;Ничья: обе модели получили 10/10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Какая модель выполнила больше заданий целиком?&lt;/td&gt;
&lt;td&gt;GPT-5.6-SOL — 10/10; Opus 5 — 9/10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Какая модель надежнее генерирует код?&lt;/td&gt;
&lt;td&gt;В этом наборе ничья: обе прошли скрытые тесты двух алгоритмических задач, то есть 2/2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ошибся ли Opus в сложной задаче по теории вероятностей?&lt;/td&gt;
&lt;td&gt;Нет. Основной ответ правильный, но вывод был оборван при &lt;code&gt;max_tokens=3200&lt;/code&gt;, поэтому последнее требуемое объяснение отсутствовало&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Какая модель точнее соблюдает строгий JSON?&lt;/td&gt;
&lt;td&gt;В этом тесте GPT-5.6-SOL: 1/1 с первой попытки против 0/1 у Opus; две дополнительные попытки Opus также не соответствовали формату&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Доказывает ли это, что GPT в целом умнее?&lt;/td&gt;
&lt;td&gt;Нет. Правильность рассуждений, полноту ответа и соблюдение формата следует оценивать раздельно&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Если приоритет — проверяемая правильность математики, физики и алгоритмов, этот набор не выявил преимущества одной модели. Если ответ должен без дополнительной обработки разбираться как JSON или содержать каждый обязательный подпункт, GPT-5.6-SOL в данном тесте показал более стабильную доставку результата.&lt;/p&gt;

&lt;h2&gt;
  
  
  Почему задержка сети не входит в оценку интеллекта
&lt;/h2&gt;

&lt;p&gt;Полное время ответа API зависит не только от самой модели. На него влияют:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;сетевой маршрут от шлюза до вышестоящего сервиса;&lt;/li&gt;
&lt;li&gt;текущая нагрузка на канал и ограничения учетной записи;&lt;/li&gt;
&lt;li&gt;попадание в кеш;&lt;/li&gt;
&lt;li&gt;выбор конкретного обслуживающего экземпляра;&lt;/li&gt;
&lt;li&gt;способ учета или сокрытия reasoning token вышестоящим сервисом.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Разница в несколько секунд в одиночном запросе прежде всего характеризует текущую инфраструктуру и маршрутизацию. Она не доказывает более высокую точность рассуждений.&lt;/p&gt;

&lt;p&gt;Чтобы содержательно сравнивать задержку, потребовалось бы зафиксировать вышестоящий сервис, выполнить достаточное число повторов и опубликовать распределения результатов с доверительными интервалами. Без этого задержка пригодна для эксплуатационного мониторинга, но не для оценки интеллекта модели.&lt;/p&gt;

&lt;p&gt;Поэтому время ответа полностью исключено из итогового счета, и победитель по скорости здесь не определяется. Список доступных моделей можно проверить на странице &lt;a href="https://crazyrouter.com/models?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=opus5_gpt56sol_accuracy_20260730&amp;amp;utm_content=claude-opus-5-vs-gpt-5-6-sol-intelligence-accuracy-benchmark-2026-ru__models" rel="noopener noreferrer"&gt;моделей Crazyrouter&lt;/a&gt;, а планирование затрат следует проводить отдельно по странице &lt;a href="https://crazyrouter.com/pricing?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=opus5_gpt56sol_accuracy_20260730&amp;amp;utm_content=claude-opus-5-vs-gpt-5-6-sol-intelligence-accuracy-benchmark-2026-ru__pricing" rel="noopener noreferrer"&gt;тарифов Crazyrouter&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Среда и методика проверки
&lt;/h2&gt;

&lt;p&gt;Перед запуском использовался список моделей, чтобы убедиться в доступности точных идентификаторов:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET https://cn.crazyrouter.com/v1/models

claude-opus-5
gpt-5.6-sol
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Все основные запросы отправлялись по одному пути:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST https://cn.crazyrouter.com/v1/chat/completions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Внутри каждого тестового набора обе модели получали одинаковые:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;system prompt;&lt;/li&gt;
&lt;li&gt;user prompt;&lt;/li&gt;
&lt;li&gt;значение &lt;code&gt;temperature&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;значение &lt;code&gt;max_tokens&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Внешние инструменты не подключались. Успешный HTTP-ответ сам по себе не считался доказательством прохождения задачи.&lt;/p&gt;

&lt;h3&gt;
  
  
  Три независимых уровня оценки
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Точность основного ответа&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Проверялись ключевые числа, выводы, состояние математической модели и поведение алгоритма.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Полное выполнение задания&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Проверялось наличие всех подпунктов, которые были явно перечислены в условии.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Машинная проверяемость&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Код запускался локально на скрытых тестах, а строгий JSON передавался стандартному анализатору.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Такое разделение принципиально важно. Правильное число не гарантирует выполнения всего задания, а верные данные внутри ответа не гарантируют, что ответ соответствует требуемому формату.&lt;/p&gt;

&lt;p&gt;После автоматической проверки проводилась ручная перепроверка. Иначе различия в записи LaTeX, регистре, точной дроби и округленном десятичном значении могли бы дать ложные отрицательные результаты. Например, GPT-5.6-SOL в вероятностной задаче не повторил эталонную дробь буквально, но привел эквивалентную формулу и правильное десятичное значение. Opus в физической задаче записал &lt;code&gt;0.302 m&lt;/code&gt; как &lt;code&gt;0.30 m&lt;/code&gt; с двумя значащими цифрами — это также не является ошибкой.&lt;/p&gt;

&lt;h2&gt;
  
  
  Результаты 10 задач
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Задача&lt;/th&gt;
&lt;th&gt;Проверяемый результат&lt;/th&gt;
&lt;th&gt;Claude Opus 5&lt;/th&gt;
&lt;th&gt;GPT-5.6-SOL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Точная цепь Маркова&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;E[τ]=5&lt;/code&gt;, &lt;code&gt;E[τ²]=43&lt;/code&gt;, &lt;code&gt;Var(τ)=18&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Правильно&lt;/td&gt;
&lt;td&gt;Правильно&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Осциллятор с двумя степенями свободы&lt;/td&gt;
&lt;td&gt;Две собственные частоты, две амплитуды и две фазы&lt;/td&gt;
&lt;td&gt;Правильно&lt;/td&gt;
&lt;td&gt;Правильно&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Поиск с ограничениями&lt;/td&gt;
&lt;td&gt;Единственный порядок &lt;code&gt;A,C,E,B,D&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Правильно&lt;/td&gt;
&lt;td&gt;Правильно&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Исправление применения неравенства Кантелли&lt;/td&gt;
&lt;td&gt;Вероятность не идентифицируется, верхняя граница равна &lt;code&gt;0.2&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Правильно&lt;/td&gt;
&lt;td&gt;Правильно&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Проверка Python-кода поиска циклов&lt;/td&gt;
&lt;td&gt;Ошибка, контрпример на DAG и минимальное исправление&lt;/td&gt;
&lt;td&gt;Правильно&lt;/td&gt;
&lt;td&gt;Правильно&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Планирование эксперимента&lt;/td&gt;
&lt;td&gt;Парное сравнение на одинаковых задачах, контроль сложности и доверительный интервал&lt;/td&gt;
&lt;td&gt;Правильно&lt;/td&gt;
&lt;td&gt;Правильно&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ожидание шаблона &lt;code&gt;HHTH&lt;/code&gt; для смещенной монеты&lt;/td&gt;
&lt;td&gt;Математическое ожидание около &lt;code&gt;12.6547&lt;/code&gt; и правильные переходы состояний&lt;/td&gt;
&lt;td&gt;Основной ответ правильный, последнее объяснение отсутствует из-за обрыва&lt;/td&gt;
&lt;td&gt;Правильно и полностью&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Алгоритм агрегирования журналов&lt;/td&gt;
&lt;td&gt;Временное окно, события отказа, доля попаданий в кеш и пользователи с максимальными затратами&lt;/td&gt;
&lt;td&gt;Скрытые тесты пройдены&lt;/td&gt;
&lt;td&gt;Скрытые тесты пройдены&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Неупругое столкновение и пружина&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;v1≈6.10&lt;/code&gt;, &lt;code&gt;v2≈2.44&lt;/code&gt;, &lt;code&gt;x≈0.302&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Правильно&lt;/td&gt;
&lt;td&gt;Правильно&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Алгоритм стабильной маршрутизации&lt;/td&gt;
&lt;td&gt;cost, latency, reliability и лексикографическое правило&lt;/td&gt;
&lt;td&gt;Скрытые тесты пройдены&lt;/td&gt;
&lt;td&gt;Скрытые тесты пройдены&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Сводный результат основного набора:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;основные ответы — &lt;strong&gt;10/10 у обеих моделей&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;полное выполнение всех подпунктов — &lt;strong&gt;9/10 у Opus 5 и 10/10 у GPT-5.6-SOL&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;скрытые тесты кода — &lt;strong&gt;2/2 у обеих моделей&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Самая сложная задача по теории вероятностей
&lt;/h2&gt;

&lt;p&gt;В задаче требовалось найти ожидаемое число бросков до появления шаблона &lt;code&gt;HHTH&lt;/code&gt; для смещенной монеты:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;P(H)=0.62
P(T)=0.38
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Состояния нужно было построить по принципу самого длинного префикса шаблона, совпадающего с суффиксом уже полученной последовательности. Кроме вычислений, условие требовало объяснить два потенциально неочевидных момента:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;почему после состояния &lt;code&gt;HH&lt;/code&gt; и очередного &lt;code&gt;H&lt;/code&gt; процесс остается в &lt;code&gt;HH&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;почему математическое ожидание нельзя просто записать как &lt;code&gt;1/P(HHTH)&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Обе модели получили правильный основной результат:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;E[N] ≈ 12.6547
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GPT-5.6-SOL завершил весь вывод и учел перекрытия шаблона:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;E[N] = 1 / P(HHTH) + 1 / P(H)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Opus 5 также правильно определил состояния, составил уравнения и привел точную дробь вместе с десятичным результатом. Однако ответ завершился с:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;finish_reason=length
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;При границе:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;max_tokens=3200
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;вывод оборвался после дополнительных математических ожиданий для состояний. Последнее требуемое объяснение — почему нельзя использовать только обратную вероятность шаблона — в ответ не попало.&lt;/p&gt;

&lt;p&gt;Это различие напрямую показывает, зачем разделять два критерия:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Правильное итоговое значение засчитывается как правильность основного ответа. Отсутствие обязательного объяснения означает, что задача выполнена не полностью.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Методологически это тот же риск, который рассматривался в &lt;a href="https://crazyrouter.com/zh/blog/claude-fable-5-vs-gpt-55-max-tokens-animation-test-2026" rel="noopener noreferrer"&gt;повторном тесте обрыва по max_tokens&lt;/a&gt;: вместе с содержимым ответа необходимо сохранять &lt;code&gt;finish_reason&lt;/code&gt; и заданный бюджет вывода. Частично правильный ответ нельзя автоматически считать полной доставкой результата.&lt;/p&gt;

&lt;h2&gt;
  
  
  Проверка исполняемого кода
&lt;/h2&gt;

&lt;p&gt;Качество программного решения нельзя надежно оценить по длине ответа, количеству комментариев или внешней аккуратности реализации. Поэтому сгенерированный код сохранялся в файлы &lt;code&gt;.py&lt;/code&gt; и запускался локально в изолированном режиме на одинаковом наборе скрытых тестов.&lt;/p&gt;

&lt;h3&gt;
  
  
  Агрегатор журналов
&lt;/h3&gt;

&lt;p&gt;Функция должна была корректно обрабатывать:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;полуоткрытое временное окно;&lt;/li&gt;
&lt;li&gt;разные правила учета успешных и неуспешных запросов;&lt;/li&gt;
&lt;li&gt;отсутствующих пользователей и модели;&lt;/li&gt;
&lt;li&gt;cache hit rate;&lt;/li&gt;
&lt;li&gt;лексикографическую сортировку пользователей при одинаковом cost;&lt;/li&gt;
&lt;li&gt;запрет на изменение входных объектов.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Обе реализации прошли скрытые тесты.&lt;/p&gt;

&lt;h3&gt;
  
  
  Стабильная маршрутизация с ограничением надежности
&lt;/h3&gt;

&lt;p&gt;Алгоритм поиска пути должен был последовательно применять следующие критерии:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;минимальная общая стоимость;&lt;/li&gt;
&lt;li&gt;при равной стоимости — минимальная задержка;&lt;/li&gt;
&lt;li&gt;при равной стоимости и задержке — максимальная надежность;&lt;/li&gt;
&lt;li&gt;при полном равенстве — лексикографический порядок пути.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Дополнительно проверялись:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;banned nodes;&lt;/li&gt;
&lt;li&gt;максимальное число hops;&lt;/li&gt;
&lt;li&gt;минимально допустимая reliability;&lt;/li&gt;
&lt;li&gt;некорректные ребра.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Обе модели прошли и этот набор. Таким образом, результат по исполняемому коду — &lt;strong&gt;2/2 у Claude Opus 5 и 2/2 у GPT-5.6-SOL&lt;/strong&gt;. Оснований объявлять победителя по этим двум задачам нет.&lt;/p&gt;

&lt;p&gt;Другой набор сложных задач по физике и алгоритмам приведен в материале &lt;a href="https://crazyrouter.com/zh/blog/gpt-56-sol-vs-gpt-55-round6-hard-physics-code-2026" rel="noopener noreferrer"&gt;GPT-5.6-SOL vs GPT-5.5: тест сложной физики и кода&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Строгий JSON: проверка формата, а не математических способностей
&lt;/h2&gt;

&lt;p&gt;В отдельном задании нужно было представить данные об инциденте в виде одного объекта. Требование формулировалось однозначно:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;exactly one JSON object and no Markdown
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Обе модели правильно вычислили:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;долю отказов;&lt;/li&gt;
&lt;li&gt;принадлежность отказов к каналам;&lt;/li&gt;
&lt;li&gt;число запросов, не восстановленных после повторной попытки.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Различие возникло только на уровне выходного формата:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GPT-5.6-SOL с первой попытки вернул только JSON, который можно было сразу передать в &lt;code&gt;json.loads&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;Opus 5 с первой попытки добавил ограждение блока кода и раздел Verification;&lt;/li&gt;
&lt;li&gt;в первой дополнительной попытке Opus выдал компактный JSON, но затем снова добавил Verification;&lt;/li&gt;
&lt;li&gt;во второй дополнительной попытке Opus опять добавил ограждение блока кода и пояснение.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Итог строгой проверки с первой попытки:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Opus 5 — &lt;strong&gt;0/1&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;GPT-5.6-SOL — &lt;strong&gt;1/1&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Две дополнительные попытки Opus также остались несоответствующими строгому формату. При этом сами данные и значения полей были правильными.&lt;/p&gt;

&lt;p&gt;Поэтому корректная классификация такова: &lt;strong&gt;данные верны, формат не соблюден&lt;/strong&gt;. Это нарушение инструкции и контракта ответа, а не ошибка вычисления.&lt;/p&gt;

&lt;h3&gt;
  
  
  Минимальная локальная проверка
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="n"&gt;REQUIRED_KEYS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;window&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total_requests&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed_requests&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failure_rate_pct&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;provider_owned_failures&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;customer_owned_failures&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;recovered_by_retry&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;unrecovered_failures&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;root_cause&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;parse_incident_json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;REQUIRED_KEYS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;unexpected schema or key order&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed_requests&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;84&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed request count mismatch&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Этот код проверяет три независимых свойства:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ответ действительно разбирается как JSON;&lt;/li&gt;
&lt;li&gt;схема и порядок ключей соответствуют ожидаемому контракту;&lt;/li&gt;
&lt;li&gt;одно из критических значений совпадает с эталоном.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Один system prompt не гарантирует структурированный вывод. В рабочей системе безопаснее использовать поддерживаемые поставщиком параметры структурированного ответа, выполнять локальную проверку schema и предусматривать повторный запрос либо переключение модели после ошибки разбора.&lt;/p&gt;

&lt;h2&gt;
  
  
  Как воспроизвести сравнение через один API
&lt;/h2&gt;

&lt;p&gt;Ниже приведен минимальный исполняемый пример для OpenAI-compatible chat completions endpoint. К самому API endpoint UTM-параметры не добавляются.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;BASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://cn.crazyrouter.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CRAZYROUTER_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;ask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/chat/completions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;messages&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Answer accurately and follow every requested constraint.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;temperature&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;max_tokens&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;


&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-opus-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-5.6-sol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Your benchmark prompt here&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;choice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;choices&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;finish_reason&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;message&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Для воспроизводимого теста недостаточно сохранить только видимый текст ответа. На каждом запуске также следует записывать:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;точный model ID;&lt;/li&gt;
&lt;li&gt;response ID;&lt;/li&gt;
&lt;li&gt;returned model;&lt;/li&gt;
&lt;li&gt;исходный prompt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;temperature&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;max_tokens&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;finish_reason&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;необработанное содержимое ответа;&lt;/li&gt;
&lt;li&gt;результат локальной проверки;&lt;/li&gt;
&lt;li&gt;версию тестового набора.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Текущую доступность моделей можно проверить в &lt;a href="https://crazyrouter.com/models?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=opus5_gpt56sol_accuracy_20260730&amp;amp;utm_content=claude-opus-5-vs-gpt-5-6-sol-intelligence-accuracy-benchmark-2026-ru__body_models" rel="noopener noreferrer"&gt;списке моделей Crazyrouter&lt;/a&gt;, после чего запустить небольшой регрессионный набор на собственных рабочих запросах.&lt;/p&gt;

&lt;h2&gt;
  
  
  Рекомендации для рабочих систем
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Где обе модели остаются подходящими кандидатами
&lt;/h3&gt;

&lt;p&gt;Обе модели имеет смысл тестировать в сценариях, где:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;математические или физические задачи имеют проверяемые эталонные ответы;&lt;/li&gt;
&lt;li&gt;Python-код можно запускать на модульных и скрытых тестах;&lt;/li&gt;
&lt;li&gt;требуется обнаруживать ошибочные предпосылки или недостаточно обоснованные статистические выводы;&lt;/li&gt;
&lt;li&gt;успешность задачи определяется локальным валидатором, а не субъективной оценкой текста.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Когда по результатам этого теста разумно сначала проверить GPT-5.6-SOL
&lt;/h3&gt;

&lt;p&gt;GPT-5.6-SOL в этом наборе показал более полную доставку результата, если:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;каждый подпункт должен быть выполнен в одном ответе;&lt;/li&gt;
&lt;li&gt;тело ответа обязано содержать только JSON;&lt;/li&gt;
&lt;li&gt;нежелательно извлекать структурированные данные из пояснений или Markdown;&lt;/li&gt;
&lt;li&gt;нарушение формата должно быть редким уже на первом запросе.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Это вывод только по текущему набору: полное выполнение составило &lt;strong&gt;10/10&lt;/strong&gt;, а строгий JSON с первой попытки — &lt;strong&gt;1/1&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Какие защитные меры нужны при работе с Opus 5
&lt;/h3&gt;

&lt;p&gt;Для Claude Opus 5 особенно важно:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;выделять достаточный &lt;code&gt;max_tokens&lt;/code&gt; для длинных выводов;&lt;/li&gt;
&lt;li&gt;всегда проверять &lt;code&gt;finish_reason&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;разбирать JSON до передачи результата последующим компонентам;&lt;/li&gt;
&lt;li&gt;отклонять ответы с дополнительным Markdown или пояснениями;&lt;/li&gt;
&lt;li&gt;предусматривать повторную генерацию либо переключение модели;&lt;/li&gt;
&lt;li&gt;отдельно проверять наличие каждого обязательного подпункта.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Эти меры не означают, что Opus хуже рассуждает. В основном наборе он правильно решил все 10 задач, а обе программы прошли скрытые тесты. Зафиксированное различие относится прежде всего к полной упаковке результата в окончательный ответ.&lt;/p&gt;

&lt;p&gt;Дополнительное сравнение поведения моделей Claude доступно в материале &lt;a href="https://crazyrouter.com/ru/blog/claude-opus-5-vs-claude-fable-5-api-benchmark-2026-ru" rel="noopener noreferrer"&gt;Claude Opus 5 против Claude Fable 5: тест реального API&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Claude Opus 5 или GPT-5.6-SOL — какая модель умнее?
&lt;/h3&gt;

&lt;p&gt;По этому набору нельзя обоснованно назвать одну модель в целом более умной. На 10 объективно проверяемых задачах обе получили &lt;strong&gt;10/10 по правильности основных ответов&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Почему полное выполнение заданий не закончилось ничьей?
&lt;/h3&gt;

&lt;p&gt;Ответ Opus на сложную задачу по вероятностям был оборван при &lt;code&gt;max_tokens=3200&lt;/code&gt; и завершился с &lt;code&gt;finish_reason=length&lt;/code&gt;. Число &lt;code&gt;12.6547&lt;/code&gt; и уравнения были правильными, но последнее требуемое объяснение отсутствовало. Поэтому Opus получил 9/10 по полной доставке, а GPT-5.6-SOL — 10/10.&lt;/p&gt;

&lt;h3&gt;
  
  
  Почему обрыв ответа не считается ошибкой основного рассуждения?
&lt;/h3&gt;

&lt;p&gt;Потому что основной математический результат был получен правильно. Однако задача содержала дополнительное требование, которое не было выполнено. Правильность рассуждений и полнота ответа — разные показатели.&lt;/p&gt;

&lt;h3&gt;
  
  
  Следует ли считать нарушение строгого JSON ошибкой интеллекта?
&lt;/h3&gt;

&lt;p&gt;Не как математическую ошибку. Opus правильно вычислил поля и значения, но нарушил требование к внешнему формату. Это следует учитывать как ошибку соблюдения инструкции и машинного контракта.&lt;/p&gt;

&lt;h3&gt;
  
  
  Что именно произошло при повторных попытках Opus с JSON?
&lt;/h3&gt;

&lt;p&gt;С первой попытки Opus добавил ограждение блока кода и Verification. В первой дополнительной попытке после компактного JSON снова появился Verification. Во второй дополнительной попытке модель вновь добавила ограждение блока кода и пояснение. Таким образом, все три ответа не соответствовали требованию «ровно один JSON-объект без Markdown».&lt;/p&gt;

&lt;h3&gt;
  
  
  Как оценивались две задачи на программирование?
&lt;/h3&gt;

&lt;p&gt;Код сохранялся в файлы Python и запускался на одинаковых скрытых тестах. Проверялись граничные условия, правила сортировки, некорректные входные данные и неизменность входных объектов. Обе модели прошли обе задачи — &lt;strong&gt;2/2&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Почему в сравнении нет победителя по скорости?
&lt;/h3&gt;

&lt;p&gt;Полное время API-запроса зависит от сетевого маршрута, кеша, нагрузки канала, ограничений учетной записи и выбранного обслуживающего экземпляра. Без фиксированного вышестоящего сервиса, большого числа повторов и доверительных интервалов задержка не является показателем интеллекта. Поэтому она исключена из оценки.&lt;/p&gt;

&lt;h3&gt;
  
  
  Достаточно ли 10 задач для долгосрочного выбора модели?
&lt;/h3&gt;

&lt;p&gt;Нет. Это небольшой воспроизводимый срез возможностей, а не окончательный рейтинг. Перед внедрением следует использовать собственный набор рабочих задач и раздельно считать точность основных ответов, полноту выполнения, прохождение тестов кода и частоту нарушений формата.&lt;/p&gt;

&lt;h3&gt;
  
  
  Как начать собственное сравнение?
&lt;/h3&gt;

&lt;p&gt;Выберите 10–30 реальных рабочих запросов и заранее задайте для каждого машинно проверяемые критерии. Затем отправляйте обеим моделям одинаковые входные данные с одинаковыми параметрами и сохраняйте необработанные ответы вместе с &lt;code&gt;finish_reason&lt;/code&gt;. Критерии необходимо определить до просмотра результатов.&lt;/p&gt;

&lt;h3&gt;
  
  
  Что важнее для backend-системы: точность или формат?
&lt;/h3&gt;

&lt;p&gt;Оба свойства важны, но проверять их нужно отдельно. Правильный ответ в неразбираемом формате может быть бесполезен для конвейера. И наоборот, синтаксически корректный JSON не гарантирует правильность значений. Надежная система проверяет и содержание, и контракт ответа.&lt;/p&gt;

&lt;h2&gt;
  
  
  Итоговый вывод
&lt;/h2&gt;

&lt;p&gt;Главный результат этого сравнения — не безусловная победа одной модели, а четкое разделение двух аспектов качества:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Claude Opus 5 и GPT-5.6-SOL получили по 10/10 за правильность основных ответов. GPT-5.6-SOL полнее выполнил все подпункты — 10/10 против 9/10 — и с первой попытки соблюл строгий JSON: 1/1 против 0/1. Opus сохранил правильность рассуждений, но потребовал более строгого контроля бюджета вывода и формата.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если задачу можно проверять по эталонному ответу или скрытым тестам, обе модели заслуживают включения в список кандидатов. Если последующие компоненты напрямую потребляют JSON, локальная проверка, контроль &lt;code&gt;finish_reason&lt;/code&gt;, повторные запросы и переключение модели должны рассматриваться как обязательная часть архитектуры.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://crazyrouter.com/register?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=opus5_gpt56sol_accuracy_20260730&amp;amp;utm_content=claude-opus-5-vs-gpt-5-6-sol-intelligence-accuracy-benchmark-2026-ru__final_cta&amp;amp;utm_term=ai+model+accuracy+benchmark" rel="noopener noreferrer"&gt;Создать учетную запись Crazyrouter и запустить собственное сравнение Opus 5 и GPT-5.6-SOL&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>benchmark</category>
    </item>
    <item>
      <title>Claude Opus 5 vs GPT-5.6-SOL：10 道智能正确率实测，核心答案打平</title>
      <dc:creator>Jenny Met</dc:creator>
      <pubDate>Thu, 30 Jul 2026 00:25:07 +0000</pubDate>
      <link>https://dev.to/xujfcn/claude-opus-5-vs-gpt-56-sol10-dao-zhi-neng-zheng-que-lu-shi-ce-he-xin-da-an-da-ping-28ml</link>
      <guid>https://dev.to/xujfcn/claude-opus-5-vs-gpt-56-sol10-dao-zhi-neng-zheng-que-lu-shi-ce-he-xin-da-an-da-ping-28ml</guid>
      <description>&lt;h1&gt;
  
  
  Claude Opus 5 vs GPT-5.6-SOL：10 道智能正确率实测，核心答案打平
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fva8xnjvlt0tz1q9o6ul1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fva8xnjvlt0tz1q9o6ul1.png" alt="Claude Opus 5 与 GPT-5.6-SOL 智能正确率实测" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Claude Opus 5 和 GPT-5.6-SOL，谁更聪明？&lt;/p&gt;

&lt;p&gt;如果用一次响应时间回答这个问题，结论很可能测到的是线路、路由和上游负载，而不是模型能力。因此这轮对比主动放弃“谁更快”的叙事，只保留可以独立验收的内容：&lt;strong&gt;数学答案是否正确、物理建模是否完整、代码能否通过隐藏测试、错误前提能否被识别，以及题目要求是否全部完成。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;我们通过 Crazyrouter 的同一个 OpenAI-compatible endpoint，对两个模型执行了 10 道智能题，并把严格 JSON 作为单独的指令遵守测试。结果比“谁碾压谁”更值得参考：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;核心答案正确率：Opus 5 为 &lt;strong&gt;10/10&lt;/strong&gt;，GPT-5.6-SOL 为 &lt;strong&gt;10/10&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;完整完成全部子要求：Opus 5 为 &lt;strong&gt;9/10&lt;/strong&gt;，GPT-5.6-SOL 为 &lt;strong&gt;10/10&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;两道 Python 算法题隐藏测试：双方均为 &lt;strong&gt;2/2&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;严格 JSON 首次交付：Opus 5 为 &lt;strong&gt;0/1&lt;/strong&gt;，GPT-5.6-SOL 为 &lt;strong&gt;1/1&lt;/strong&gt;；Opus 后续两次复测仍附加了额外文字。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;所以，本轮可以说“核心正确率打平”，但不能说两者的交付行为完全相同。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://crazyrouter.com/register?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=opus5_gpt56sol_accuracy_20260730&amp;amp;utm_content=claude-opus-5-vs-gpt-5-6-sol-intelligence-accuracy-benchmark-2026__hero_cta&amp;amp;utm_term=claude+opus+5+gpt+5.6+sol" rel="noopener noreferrer"&gt;创建 API Key，用自己的真实题库复测&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  快速结论
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6cqkp6c70uao9w2u0rx8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6cqkp6c70uao9w2u0rx8.png" alt="Claude Opus 5 与 GPT-5.6-SOL 正确率结果卡" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;问题&lt;/th&gt;
&lt;th&gt;本轮结果&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;谁的核心智能答案更正确？&lt;/td&gt;
&lt;td&gt;打平：双方 10/10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;谁完整完成了更多题目要求？&lt;/td&gt;
&lt;td&gt;GPT-5.6-SOL：10/10；Opus 5：9/10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;谁的代码更可靠？&lt;/td&gt;
&lt;td&gt;本轮打平，两道算法题均通过隐藏测试&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Opus 的概率题算错了吗？&lt;/td&gt;
&lt;td&gt;没有，核心答案正确；只是输出被 &lt;code&gt;max_tokens=3200&lt;/code&gt; 截断，遗漏最后一个解释要求&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;谁更遵守严格 JSON？&lt;/td&gt;
&lt;td&gt;本轮 GPT-5.6-SOL 更稳；Opus 连续 3 次添加了额外文本或代码围栏&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;能据此宣布 GPT 更聪明吗？&lt;/td&gt;
&lt;td&gt;不能。格式遵守和核心推理正确率应分开统计&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;如果你的业务以数学、物理或算法正确性为主，这组样本没有拉开明显差距。如果业务要求响应必须是可直接解析的 JSON，或者每个子要求都不能缺失，那么 GPT-5.6-SOL 在本轮表现得更完整。&lt;/p&gt;

&lt;h2&gt;
  
  
  为什么这次不比较速度
&lt;/h2&gt;

&lt;p&gt;模型 API 的端到端耗时会受到多个变量影响：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;网关到不同上游的网络路径；&lt;/li&gt;
&lt;li&gt;当时渠道负载与账户限流；&lt;/li&gt;
&lt;li&gt;是否命中缓存；&lt;/li&gt;
&lt;li&gt;路由到哪个实际服务实例；&lt;/li&gt;
&lt;li&gt;上游如何统计或隐藏 reasoning token。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;一次请求快几秒，并不能证明模型推理更强。除非固定上游、重复足够多次并报告置信区间，否则延迟更适合做运维观测，不适合当作“智能分数”。&lt;/p&gt;

&lt;p&gt;这也是为什么本文没有把任何响应耗时指标放进胜负表。如果你关心可用模型和接入范围，可以先查看 &lt;a href="https://crazyrouter.com/models?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=opus5_gpt56sol_accuracy_20260730&amp;amp;utm_content=claude-opus-5-vs-gpt-5-6-sol-intelligence-accuracy-benchmark-2026__models" rel="noopener noreferrer"&gt;Crazyrouter 模型列表&lt;/a&gt;；成本规划则应单独参考 &lt;a href="https://crazyrouter.com/pricing?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=opus5_gpt56sol_accuracy_20260730&amp;amp;utm_content=claude-opus-5-vs-gpt-5-6-sol-intelligence-accuracy-benchmark-2026__pricing" rel="noopener noreferrer"&gt;Crazyrouter pricing&lt;/a&gt;。&lt;/p&gt;

&lt;h2&gt;
  
  
  测试环境与评分方式
&lt;/h2&gt;

&lt;p&gt;测试前调用模型列表接口，确认两个精确模型 ID 均可见：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET https://cn.crazyrouter.com/v1/models

claude-opus-5
gpt-5.6-sol
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;正式请求统一使用：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST https://cn.crazyrouter.com/v1/chat/completions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;每个测试批次内，两款模型使用相同的 system prompt、user prompt、temperature 和 &lt;code&gt;max_tokens&lt;/code&gt;。测试不启用外部工具，也不把 HTTP 200 自动当成任务通过。&lt;/p&gt;

&lt;p&gt;评分拆成三层：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;核心答案正确率&lt;/strong&gt;：关键数值、结论和算法行为是否正确；&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;完整任务通过率&lt;/strong&gt;：是否完成题目列出的全部子要求；&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;机器可验收性&lt;/strong&gt;：代码是否通过隐藏测试，JSON 是否可直接解析。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;自动字符串评分之后又做了人工复核。原因很简单：LaTeX 写法、大小写、精确分数与小数舍入都可能造成假阴性。比如 GPT-5.6-SOL 的概率题没有照抄参考分数，但给出了等价公式和正确小数；Opus 的物理题把 &lt;code&gt;0.302 m&lt;/code&gt; 写成两位有效数字 &lt;code&gt;0.30 m&lt;/code&gt;，也不能因此算错。&lt;/p&gt;

&lt;h2&gt;
  
  
  10 道智能题结果
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;任务&lt;/th&gt;
&lt;th&gt;验收要点&lt;/th&gt;
&lt;th&gt;Claude Opus 5&lt;/th&gt;
&lt;th&gt;GPT-5.6-SOL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;精确马尔可夫链&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;E[τ]=5&lt;/code&gt;、&lt;code&gt;E[τ²]=43&lt;/code&gt;、&lt;code&gt;Var(τ)=18&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;正确&lt;/td&gt;
&lt;td&gt;正确&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;二自由度振子&lt;/td&gt;
&lt;td&gt;两个固有频率、两个振幅、两个相位&lt;/td&gt;
&lt;td&gt;正确&lt;/td&gt;
&lt;td&gt;正确&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;约束搜索&lt;/td&gt;
&lt;td&gt;唯一顺序 &lt;code&gt;A,C,E,B,D&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;正确&lt;/td&gt;
&lt;td&gt;正确&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cantelli 纠错&lt;/td&gt;
&lt;td&gt;概率不可识别，上界为 &lt;code&gt;0.2&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;正确&lt;/td&gt;
&lt;td&gt;正确&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python 环检测审查&lt;/td&gt;
&lt;td&gt;bug、DAG 反例、最小修复&lt;/td&gt;
&lt;td&gt;正确&lt;/td&gt;
&lt;td&gt;正确&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;实验设计&lt;/td&gt;
&lt;td&gt;同题配对、难度控制、置信区间&lt;/td&gt;
&lt;td&gt;正确&lt;/td&gt;
&lt;td&gt;正确&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;偏置硬币等待 &lt;code&gt;HHTH&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;期望约 &lt;code&gt;12.6547&lt;/code&gt; 与正确状态转移&lt;/td&gt;
&lt;td&gt;核心正确，最后一项解释因截断缺失&lt;/td&gt;
&lt;td&gt;正确且完整&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;日志聚合算法&lt;/td&gt;
&lt;td&gt;时间窗口、失败事件、缓存率、Top 用户&lt;/td&gt;
&lt;td&gt;隐藏测试通过&lt;/td&gt;
&lt;td&gt;隐藏测试通过&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;非弹性碰撞与弹簧&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;v1≈6.10&lt;/code&gt;、&lt;code&gt;v2≈2.44&lt;/code&gt;、&lt;code&gt;x≈0.302&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;正确&lt;/td&gt;
&lt;td&gt;正确&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;稳定路由算法&lt;/td&gt;
&lt;td&gt;cost、latency、reliability 与字典序规则&lt;/td&gt;
&lt;td&gt;隐藏测试通过&lt;/td&gt;
&lt;td&gt;隐藏测试通过&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  最难的概率题：答案正确不等于任务完整
&lt;/h2&gt;

&lt;p&gt;目标模式为 &lt;code&gt;HHTH&lt;/code&gt;，偏置硬币满足 &lt;code&gt;P(H)=0.62&lt;/code&gt;、&lt;code&gt;P(T)=0.38&lt;/code&gt;。题目要求用最长前后缀匹配状态建立方程，并特别解释两个容易出错的地方：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;状态 &lt;code&gt;HH&lt;/code&gt; 后再次出现 &lt;code&gt;H&lt;/code&gt;，为什么仍然停留在 &lt;code&gt;HH&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;为什么期望等待时间不能直接写成 &lt;code&gt;1/P(HHTH)&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;两款模型都得到了正确期望：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;E[N] ≈ 12.6547
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GPT-5.6-SOL 完成了全部推导，并指出模式存在重叠，因此：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;E[N] = 1 / P(HHTH) + 1 / P(H)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Opus 5 也给出了正确状态、方程、精确分数和小数结果，但响应最终为 &lt;code&gt;finish_reason=length&lt;/code&gt;。输出停在附加状态期望值处，没有完成最后一项“为什么不能直接使用倒数概率”的解释。&lt;/p&gt;

&lt;p&gt;这道题提醒我们：&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;最终数值正确，可以计入核心答案正确率；没有完成全部问题，则不能计入完整任务通过率。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;这和此前的 &lt;a href="https://crazyrouter.com/zh/blog/claude-fable-5-vs-gpt-55-max-tokens-animation-test-2026" rel="noopener noreferrer"&gt;max_tokens 截断复测&lt;/a&gt; 是同一个方法论问题：必须同时保存答案、&lt;code&gt;finish_reason&lt;/code&gt; 和输出预算，不能看到半段正确内容就宣布任务完成。&lt;/p&gt;

&lt;h2&gt;
  
  
  两道代码题：必须真正运行，而不是看起来像代码
&lt;/h2&gt;

&lt;p&gt;代码生成对比最容易被“写得很长”“注释很多”“结构优雅”误导。我们没有人工挑喜欢的实现，而是把两款模型输出保存成 &lt;code&gt;.py&lt;/code&gt; 文件，在隔离模式下执行统一测试。&lt;/p&gt;

&lt;h3&gt;
  
  
  日志聚合器
&lt;/h3&gt;

&lt;p&gt;函数需要处理：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;半开时间窗口；&lt;/li&gt;
&lt;li&gt;成功与失败请求的不同计数规则；&lt;/li&gt;
&lt;li&gt;缺失用户和模型；&lt;/li&gt;
&lt;li&gt;cache hit rate；&lt;/li&gt;
&lt;li&gt;cost 相同情况下的用户字典序排序；&lt;/li&gt;
&lt;li&gt;不修改输入对象。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;两款模型的实现都通过了隐藏测试。&lt;/p&gt;

&lt;h3&gt;
  
  
  带可靠性约束的稳定路由
&lt;/h3&gt;

&lt;p&gt;函数需要在路径搜索中同时处理：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;总成本最低；&lt;/li&gt;
&lt;li&gt;成本相同时延迟最低；&lt;/li&gt;
&lt;li&gt;再相同时可靠性最高；&lt;/li&gt;
&lt;li&gt;最后按路径字典序选择；&lt;/li&gt;
&lt;li&gt;banned nodes、最大 hops、最小可靠性和非法边。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;两款模型同样全部通过。因此本轮代码能力结论是打平，而不是根据代码长度猜测赢家。&lt;/p&gt;

&lt;p&gt;如果你希望看 GPT-5.6-SOL 在另一组复杂物理与依赖算法中的表现，可以参考 &lt;a href="https://crazyrouter.com/zh/blog/gpt-56-sol-vs-gpt-55-round6-hard-physics-code-2026" rel="noopener noreferrer"&gt;GPT-5.6-SOL vs GPT-5.5 高难物理与代码实测&lt;/a&gt;。&lt;/p&gt;

&lt;h2&gt;
  
  
  严格 JSON：这是指令遵守测试，不是数学智力题
&lt;/h2&gt;

&lt;p&gt;严格 JSON 题要求把事故数据压缩为一个对象，并明确写了：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;exactly one JSON object and no Markdown
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;两款模型都算对了失败率、渠道归属和重试后未恢复数量。差异出现在输出外壳：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GPT-5.6-SOL 首次只返回 JSON，可直接交给 &lt;code&gt;json.loads&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;Opus 5 首次添加代码围栏和 Verification；&lt;/li&gt;
&lt;li&gt;Opus 第一次复测输出紧凑 JSON，但后面继续添加 Verification；&lt;/li&gt;
&lt;li&gt;Opus 第二次复测再次添加代码围栏和解释。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;因此 Opus 是“数据正确、格式失败”，不是“不会计算”。把这一项混入智能正确率，会把两个不同问题混成一个模糊总分。&lt;/p&gt;

&lt;p&gt;生产中可以做最基本的本地验收：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="n"&gt;REQUIRED_KEYS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;window&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total_requests&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed_requests&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failure_rate_pct&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;provider_owned_failures&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;customer_owned_failures&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;recovered_by_retry&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;unrecovered_failures&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;root_cause&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;parse_incident_json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;REQUIRED_KEYS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;unexpected schema or key order&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed_requests&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;84&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed request count mismatch&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;只靠 system prompt 不能保证结构化输出。更稳妥的方式是：使用供应方支持的结构化输出参数、执行本地 schema 校验，并在解析失败时重试或切换模型。&lt;/p&gt;

&lt;h2&gt;
  
  
  如何通过同一个 API 复测
&lt;/h2&gt;

&lt;p&gt;下面的最小示例使用 OpenAI-compatible chat completions endpoint。API endpoint 本身不添加 UTM 参数。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;BASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://cn.crazyrouter.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CRAZYROUTER_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;ask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/chat/completions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;messages&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Answer accurately and follow every requested constraint.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;temperature&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;max_tokens&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;


&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-opus-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-5.6-sol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Your benchmark prompt here&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;choice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;choices&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;finish_reason&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;message&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;正式测试时还应保存 response ID、returned model、原始答案和本地验收结果。你可以在 &lt;a href="https://crazyrouter.com/models?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=opus5_gpt56sol_accuracy_20260730&amp;amp;utm_content=claude-opus-5-vs-gpt-5-6-sol-intelligence-accuracy-benchmark-2026__body_models" rel="noopener noreferrer"&gt;Crazyrouter 模型列表&lt;/a&gt;确认当前模型可见性，再用自己的业务 prompt 做小批量回归。&lt;/p&gt;

&lt;h2&gt;
  
  
  生产选型建议
&lt;/h2&gt;

&lt;h3&gt;
  
  
  两款模型都适合的场景
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;有明确参考答案的数学与物理求解；&lt;/li&gt;
&lt;li&gt;可以运行单元测试的 Python 算法；&lt;/li&gt;
&lt;li&gt;需要识别错误前提或不充分统计结论；&lt;/li&gt;
&lt;li&gt;能通过本地验证器判断任务是否成功的工作流。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  本轮更适合优先 GPT-5.6-SOL 的场景
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;每一个子要求都必须在一次响应中完成；&lt;/li&gt;
&lt;li&gt;原始正文必须是纯 JSON；&lt;/li&gt;
&lt;li&gt;希望减少从解释文本中提取结构化数据的工作。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  使用 Opus 5 时应增加的保护
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;长推导设置更充足的 &lt;code&gt;max_tokens&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;必须检查 &lt;code&gt;finish_reason&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;JSON 先解析再进入下游；&lt;/li&gt;
&lt;li&gt;对额外 Markdown 或解释文字做明确回退处理。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;这不意味着 Opus 5 的推理较弱。本轮它的 10 道核心答案全部正确，且两份代码都通过隐藏测试。差别主要体现在“是否把所有要求完整装进最终响应”。&lt;/p&gt;

&lt;p&gt;如果你还在比较 Claude 系列内部的交付行为，可以阅读 &lt;a href="https://crazyrouter.com/zh/blog/claude-opus-5-vs-claude-fable-5-api-benchmark-2026" rel="noopener noreferrer"&gt;Claude Opus 5 vs Claude Fable 5 真实 API 测试&lt;/a&gt;。&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Claude Opus 5 和 GPT-5.6-SOL 谁更聪明？
&lt;/h3&gt;

&lt;p&gt;本轮 10 道可客观验收的智能题中，双方核心答案都是 10/10，因此没有证据支持“其中一款全面更聪明”。&lt;/p&gt;

&lt;h3&gt;
  
  
  为什么完整任务通过率不是平局？
&lt;/h3&gt;

&lt;p&gt;Opus 的高难概率题输出被 &lt;code&gt;max_tokens=3200&lt;/code&gt; 截断，虽然期望值和状态方程正确，但遗漏了最后一项解释。GPT 完成了全部子要求。&lt;/p&gt;

&lt;h3&gt;
  
  
  JSON 失败应该算智能错误吗？
&lt;/h3&gt;

&lt;p&gt;不应直接算作数学或推理错误。更准确的分类是格式与指令遵守失败，因为 Opus 计算出的所有 JSON 字段和值都正确。&lt;/p&gt;

&lt;h3&gt;
  
  
  两道代码题如何评分？
&lt;/h3&gt;

&lt;p&gt;模型输出被保存为 Python 文件，然后运行相同的隐藏测试，覆盖边界条件、排序规则、非法输入和输入不可变性。两款模型都通过。&lt;/p&gt;

&lt;h3&gt;
  
  
  为什么不公布速度赢家？
&lt;/h3&gt;

&lt;p&gt;端到端速度会受到线路、渠道、缓存、上游负载和路由影响。在没有固定上游和足够重复次数时，它不能代表智能正确率。&lt;/p&gt;

&lt;h3&gt;
  
  
  10 道题足够决定长期选型吗？
&lt;/h3&gt;

&lt;p&gt;不够。这是一次小样本、可复现的能力切片。上线前应把真实业务题库重复 20–50 次，分别统计核心正确率、完整任务通过率、代码测试通过率和格式违规率。&lt;/p&gt;

&lt;h3&gt;
  
  
  我应该怎样开始自己的模型对比？
&lt;/h3&gt;

&lt;p&gt;先选择 10–30 个真实业务 prompt，为每题定义机器可执行的通过标准，再通过统一 API 发送相同输入。不要先决定赢家，再挑支持结论的案例。&lt;/p&gt;

&lt;h2&gt;
  
  
  最终结论
&lt;/h2&gt;

&lt;p&gt;这轮测试最重要的结果不是“GPT 赢”或“Opus 赢”，而是一个更可操作的判断：&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Claude Opus 5 与 GPT-5.6-SOL 在 10 道智能题上的核心答案正确率均为 10/10；GPT-5.6-SOL 在完整子要求和严格 JSON 交付上更稳定，Opus 5 则需要更严格的输出预算与格式验收。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;如果你的任务有参考答案或隐藏测试，两款模型都值得进入候选集。如果下游系统直接消费 JSON，则应把格式验证、重试和模型回退视为必要组件，而不是可选优化。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://crazyrouter.com/register?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=opus5_gpt56sol_accuracy_20260730&amp;amp;utm_content=claude-opus-5-vs-gpt-5-6-sol-intelligence-accuracy-benchmark-2026__final_cta&amp;amp;utm_term=ai+model+accuracy+benchmark" rel="noopener noreferrer"&gt;创建 Crazyrouter 账户并运行自己的 Opus 5 / GPT-5.6-SOL 测试&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>benchmark</category>
    </item>
    <item>
      <title>Claude Opus 5 vs Claude Fable 5: 7개 실제 API 테스트와 프로덕션 라우팅 제안</title>
      <dc:creator>Jenny Met</dc:creator>
      <pubDate>Sun, 26 Jul 2026 14:59:28 +0000</pubDate>
      <link>https://dev.to/xujfcn/claude-opus-5-vs-claude-fable-5-7gae-silje-api-teseuteuwa-peurodeogsyeon-rauting-jean-3h4b</link>
      <guid>https://dev.to/xujfcn/claude-opus-5-vs-claude-fable-5-7gae-silje-api-teseuteuwa-peurodeogsyeon-rauting-jean-3h4b</guid>
      <description>&lt;h1&gt;
  
  
  Claude Opus 5 vs Claude Fable 5: 7개 실제 API 테스트와 프로덕션 라우팅 제안
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F42an99lvkd0q9vo9apgv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F42an99lvkd0q9vo9apgv.png" alt="Claude Opus 5와 Claude Fable 5의 실제 API 비교" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Claude Opus 5와 Claude Fable 5, 둘 중 무엇을 골라야 할까요? 한 번의 성공 응답만 보면 두 모델 모두 아주 멋진 수학 유도까지 잘해냅니다. 하지만 실제 프로덕션 경험을 좌우하는 건 대개 다른 세 가지입니다. &lt;strong&gt;작업을 안정적으로 끝까지 전달할 수 있는지, 지연 시간이 상호작용에 적합한지, 실패 후 자동 복구가 가능한지&lt;/strong&gt;입니다.&lt;/p&gt;

&lt;p&gt;우리는 2026년 7월 25일, 동일한 OpenAI-compatible API를 통해 같은 프롬프트와 같은 파라미터로 두 모델에 대해 7종류의 작업을 테스트했습니다. 결과는 “더 큰 모델이 무조건 더 좋다”는 단순한 서사로는 설명되지 않았습니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;claude-fable-5&lt;/code&gt;는 공통 성공 작업에서 더 빠르고 더 간결했습니다.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;claude-opus-5&lt;/code&gt;는 최종적으로 7개 작업 전부를 커버했습니다.&lt;/li&gt;
&lt;li&gt;Fable 5는 일반 코드 리뷰와 사고 JSON 프롬프트에서 연속으로 &lt;code&gt;content_filter&lt;/code&gt;를 트리거했습니다.&lt;/li&gt;
&lt;li&gt;Opus 5는 물리 문제에서 처음 두 번 HTTP 200을 반환했지만, 실제로는 인사말 한 줄만 답했고, 3번째 시도에서야 정상 완료했습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;즉, 프로덕션에서의 선택 기준은 모델 ID 하나로 끝나면 안 됩니다. 더 안정적인 방식은 &lt;strong&gt;작업 유형별로 주 모델을 정하고, 그 위에 콘텐츠 검증, 재시도, 모델 폴백을 덧씌워 이상 케이스를 감싸는 것&lt;/strong&gt;입니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://crazyrouter.com/register?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=claude_opus5_fable5_benchmark_20260725&amp;amp;utm_content=claude-opus-5-vs-claude-fable-5-api-benchmark-2026-ko__hero_cta&amp;amp;utm_term=claude+opus+5+vs+fable+5" rel="noopener noreferrer"&gt;같은 API로 Opus 5와 Fable 5를 테스트하기&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  빠른 결론
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;질문&lt;/th&gt;
&lt;th&gt;이번 테스트의 답&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;어떤 모델이 더 많은 작업을 커버했나?&lt;/td&gt;
&lt;td&gt;Opus 5: 본 테스트 6/7, 재시도 후 7/7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;어떤 모델이 더 빠른가?&lt;/td&gt;
&lt;td&gt;공통 성공 작업에서 Fable 5의 P50 총 지연이 약 24% 낮음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;어떤 모델이 더 간결한가?&lt;/td&gt;
&lt;td&gt;Fable 5, 평균 가시 출력 token이 약 43% 적음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;어떤 모델이 코드 리뷰와 엄격한 JSON에 더 적합한가?&lt;/td&gt;
&lt;td&gt;이번에는 Opus 5가 더 안정적; Fable 5는 두 문제에서 연속 3회 필터링됨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTTP 200만 보면 되는가?&lt;/td&gt;
&lt;td&gt;안 된다; 두 모델 모두 HTTP 200이지만 작업이 전달되지 않은 사례가 있었다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;라우팅은 어떻게 하는 것이 좋은가?&lt;/td&gt;
&lt;td&gt;검증된 작업은 Fable 5 우선, 필터링 또는 빈 본문이면 Opus 5로 회귀; Opus의 이상 인사말은 자동 재시도&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;입력 유형이 예측 불가능하거나, 일반 비즈니스 프롬프트가 필터링되는 일을 최대한 피해야 한다면 Opus 5를 우선 고려하세요. 반대로 작업 구조가 고정돼 있고 이미 회귀 테스트를 마쳤으며, 상호작용 속도와 출력 길이가 더 중요하다면 Fable 5가 첫 번째 선택으로 더 적합합니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  테스트 방법
&lt;/h2&gt;

&lt;p&gt;테스트 전에 모델 목록 API를 호출해, 두 개의 정확한 모델 ID가 모두 보이는지 확인했습니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET https://cn.crazyrouter.com/v1/models

claude-opus-5
claude-fable-5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;모든 정식 요청은 동일한 endpoint로 보냈습니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST https://cn.crazyrouter.com/v1/chat/completions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;공통 조건은 다음과 같습니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;동일한 system prompt
동일한 user prompt
temperature = 1
각 문제에 동일한 max_tokens 사용
stream = true
도구 및 인터넷 사용 비활성화
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;통일된 system prompt는 정확한 응답과 출력 형식 준수만 요구했고, 어느 모델에도 유리한 역할 설정은 넣지 않았습니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Answer the user's task accurately. Follow every requested output format and length constraint exactly. Do not use external tools.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;우리가 기록한 것은 최종 텍스트만이 아닙니다. 다음도 함께 기록했습니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP 상태와 &lt;code&gt;finish_reason&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;response ID와 반환된 model&lt;/li&gt;
&lt;li&gt;첫 번째 가시 token 시점과 총 지연 시간&lt;/li&gt;
&lt;li&gt;completion tokens, reasoning tokens&lt;/li&gt;
&lt;li&gt;가시 응답이 작업 검증을 통과했는지 여부&lt;/li&gt;
&lt;li&gt;비정상 요청이 같은 파라미터로 재시도 시 복구되는지 여부&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;이 테스트는 특정 상위 채널 하나를 지정한 실험이 아니라, Crazyrouter 게이트웨이의 end-to-end 테스트입니다. 따라서 결과는 모델 동작뿐 아니라 상위 필터링, 게이트웨이 라우팅, 당시 채널 상태까지 함께 반영합니다. 즉, “사용자가 이 API를 통해 실제로 무엇을 겪게 되는가”를 답하는 데 적합하고, Claude 계열의 순수 오프라인 능력 순위표로 포장하기에는 적절하지 않습니다.&lt;/p&gt;

&lt;p&gt;모델 테스트에서 왜 &lt;code&gt;finish_reason&lt;/code&gt;과 출력 예산을 기록해야 하는지 궁금하다면, &lt;a href="https://crazyrouter.com/zh/blog/claude-fable-5-vs-gpt-55-max-tokens-animation-test-2026" rel="noopener noreferrer"&gt;Claude Fable 5 vs GPT-5.5의 max_tokens 재검증&lt;/a&gt;도 함께 보세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  7개 결과 총표
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdquazhd5pz4syfe2riwc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdquazhd5pz4syfe2riwc.png" alt="Claude Opus 5와 Claude Fable 5의 7개 작업 결과 매트릭스" width="800" height="525"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;테스트 항목&lt;/th&gt;
&lt;th&gt;Claude Opus 5&lt;/th&gt;
&lt;th&gt;Claude Fable 5&lt;/th&gt;
&lt;th&gt;프로덕션 영향&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;정확한 수학: 마르코프 체인&lt;/td&gt;
&lt;td&gt;통과&lt;/td&gt;
&lt;td&gt;통과&lt;/td&gt;
&lt;td&gt;두 모델 모두 1차 모멘트, 2차 모멘트, 분산을 정확히 도출&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;수치 물리: 결합 진동자&lt;/td&gt;
&lt;td&gt;처음 두 번은 인사말만, 3번째에 통과&lt;/td&gt;
&lt;td&gt;1차 호출에 통과&lt;/td&gt;
&lt;td&gt;Opus는 콘텐츠 수준 검증과 재시도가 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;제약 탐색&lt;/td&gt;
&lt;td&gt;통과&lt;/td&gt;
&lt;td&gt;통과&lt;/td&gt;
&lt;td&gt;두 모델 모두 유일해를 찾음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;통계적 오류 수정&lt;/td&gt;
&lt;td&gt;통과&lt;/td&gt;
&lt;td&gt;통과&lt;/td&gt;
&lt;td&gt;두 모델 모두 잘못된 전제를 거부하고 올바른 상한을 제시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python 코드 리뷰&lt;/td&gt;
&lt;td&gt;통과&lt;/td&gt;
&lt;td&gt;연속 3회 &lt;code&gt;content_filter&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Fable은 현재 회귀 테스트 없이 코드 리뷰 트래픽에 적합하지 않음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;엄격한 JSON 사고 요약&lt;/td&gt;
&lt;td&gt;통과&lt;/td&gt;
&lt;td&gt;연속 3회 &lt;code&gt;content_filter&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Fable은 현재 이런 유형의 운영 사고 텍스트에 적합하지 않음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;실험 설계&lt;/td&gt;
&lt;td&gt;통과&lt;/td&gt;
&lt;td&gt;통과&lt;/td&gt;
&lt;td&gt;두 모델 모두 비짝지어진 샘플과 난이도 혼합을 식별 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;주 테스트의 1회 전달률은 다음과 같습니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude Opus 5: 6 / 7 = 85.7%
Claude Fable 5: 5 / 7 = 71.4%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;재시도를 포함하면:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude Opus 5: 7 / 7
Claude Fable 5: 5 / 7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;여기서 “전달”은 요청 성공이 아니라, 비즈니스가 문제 요구사항에 맞는 가시 응답을 받는다는 뜻입니다. HTTP 200, 모델명, token usage가 존재하더라도, 본문이 비어 있거나 필터링되었거나 인사말만 돌아오면 여전히 작업 실패입니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  수학, 제약, 통계: 두 모델 모두 신뢰할 수 있음
&lt;/h2&gt;

&lt;p&gt;수학 문제는 3상태 마르코프 체인을 사용해, 상태 1에서 상태 3에 처음 도달할 때까지의 대기 시간을 계산하도록 요구했습니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;E1[τ]
E1[τ²]
Var1(τ)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;두 모델 모두 다음 값을 제시했습니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;E1[τ] = 5
E1[τ²] = 43
Var1(τ) = 18
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;또한 둘 다 transient matrix &lt;code&gt;Q&lt;/code&gt;와 1차, 2차 모멘트 방정식을 제시했습니다. 이 문제에서는 “최종 숫자는 맞지만 유도는 서로 다르다” 같은 일도 없었습니다.&lt;/p&gt;

&lt;p&gt;제약 탐색 문제는 A, B, C, D, E 다섯 개 발표를 다섯 개 시간대에 배치하되, 즉시 인접, 선후 관계, 간격, 비인접 조건을 모두 만족시키도록 요구했습니다. 두 모델 모두 다음의 유일한 순서를 찾았습니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A, C, E, B, D
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;통계 오류 수정 문제는 일부러 잘못된 결론을 제시했습니다. “평균이 10이고 분산이 4이므로 &lt;code&gt;P(X≥14)=0.5&lt;/code&gt;”라는 주장입니다. 두 모델 모두 2차 모멘트만으로는 꼬리 확률을 유일하게 정할 수 없다고 지적했고, 단측 Chebyshev/Cantelli 부등식을 통해 다음을 도출했습니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;P(X &amp;gt;= 14) &amp;lt;= 0.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;이 세 가지 작업은 Fable 5의 속도 우위가 기초 추론 정확성을 희생해서 얻어진 것이 아님을 보여줍니다. 명확하고 짧고 검증 가능한 수학·논리 작업에서는 Fable 5를 더 가벼운 첫 번째 hop으로 써도 충분합니다.&lt;/p&gt;

&lt;p&gt;이전의 &lt;a href="https://crazyrouter.com/zh/blog/claude-fable-5-vs-claude-sonnet-5-api-test-2026" rel="noopener noreferrer"&gt;Claude Fable 5 vs Claude Sonnet 5 API 테스트&lt;/a&gt;와 &lt;a href="https://crazyrouter.com/zh/blog/glm-52-vs-claude-fable-5-output-budget-test-2026" rel="noopener noreferrer"&gt;GLM-5.2 vs Fable 5 출력 예산 테스트&lt;/a&gt;도, 어떤 모델이 프로덕션에 적합한지 판단하려면 정확성, 출력 예산, 전달 형태를 함께 봐야 한다는 점을 보여줍니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  물리 문제: Fable은 1차에 완료, Opus는 3번째에 복구
&lt;/h2&gt;

&lt;p&gt;물리 문제는 접지 감쇠와 결합 감쇠가 있는 2자유도 진동자를 다루며, 두 개의 비감쇠 고유 진동수와 &lt;code&gt;ω=8 rad/s&lt;/code&gt;에서 두 질량 블록의 복소 주파수 응답을 계산하도록 요구했습니다.&lt;/p&gt;

&lt;p&gt;참고값은 다음과 같습니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ω1 = 10.0204 rad/s
ω2 = 16.2149 rad/s
|X1| = 0.14929 m, phase = -12.15°
|X2| = 0.07174 m, phase = -13.90°
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fable 5는 첫 호출에서 곧바로 모든 정답을 냈습니다. 반면 Opus 5의 처음 두 호출은 프로덕션 팀이 특히 주의해야 할 이상 징후를 보였습니다. 인터페이스는 HTTP 200과 &lt;code&gt;finish_reason=stop&lt;/code&gt;을 반환했지만, 본문은 아래 한 줄뿐이었습니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hi! How can I help you today?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;이 두 응답의 prompt tokens는 모두 10으로, 실제 입력과는 분명히 맞지 않았습니다. 같은 요청을 3번째 실행했을 때, Opus 5는 34.901초 후 완전한 응답을 반환했고, 여섯 개 수치가 모두 검증을 통과했습니다.&lt;/p&gt;

&lt;p&gt;따라서 이런 이상은 “물리 문제를 틀렸다”가 아니라 “요청 컨텍스트가 정상 처리되지”로 분류해야 합니다. 가장 간단한 방어선은 사람이 로그를 보는 일이 아니라, 호출 측에서 작업 수준의 검증을 두는 것입니다. 즉, 답변에 &lt;code&gt;ω1&lt;/code&gt;, &lt;code&gt;ω2&lt;/code&gt;, &lt;code&gt;X1&lt;/code&gt;, &lt;code&gt;X2&lt;/code&gt;가 모두 포함되어야 하며, 하나라도 빠지면 재시도해야 합니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  코드와 엄격한 JSON: 이번 라운드 최대 차이는 Fable의 필터링
&lt;/h2&gt;

&lt;p&gt;코드 문제에서는 Python DFS 사이클 탐지기를 리뷰하게 했습니다. 버그는 아주 평범했습니다. 노드의 DFS가 끝난 뒤 &lt;code&gt;visiting&lt;/code&gt; 집합에서 제거하지 않아, 이미 완료된 노드가 여전히 재귀 스택에 있는 것으로 잘못 인식되고, 그 결과 DAG에서도 순환이 있다고 오탐지하는 문제였습니다.&lt;/p&gt;

&lt;p&gt;Opus 5는 최소 수정으로 다음을 정확히 지적했습니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;visiting&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;discard&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fable 5는 코드 분석 대신 &lt;code&gt;finish_reason=content_filter&lt;/code&gt;를 반환했고, 본문은 비어 있었습니다. system prompt 편향이나 우발적 라우팅을 배제하기 위해 우리는 세 차례 테스트했습니다. 원본 테스트, 정제한 system prompt로 재검증, 독립 단문 재시도. 결과는 모두 &lt;code&gt;content_filter&lt;/code&gt;였습니다.&lt;/p&gt;

&lt;p&gt;엄격한 JSON 문제에도 위험한 내용은 없었습니다. 입력은 15분 내 요청 총수, 실패 수, 채널 귀인, 재시도 복구 수, 처리 조치만 포함했고, 출력은 JSON 객체 하나였습니다. Opus 5의 JSON은 바로 파싱 가능했지만, Fable 5는 역시 3회 연속 필터링되었습니다.&lt;/p&gt;

&lt;p&gt;이 두 실패는 &lt;strong&gt;안전 필터 자체가 모델 API의 프로덕션 능력 중 하나&lt;/strong&gt;임을 보여줍니다. 일반적인 코드 리뷰나 사고 회고 텍스트에서 안정적으로 오필터링되는 모델이라면, 수학 문제에서 더 빠르더라도 그대로 모든 업무 트래픽을 맡길 수는 없습니다.&lt;/p&gt;

&lt;p&gt;두 개의 독립 재시도 response ID는 다음과 같습니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;코드 리뷰: gen-1784915384-vGI1PtuNXZG0IJ2YiaCz
사고 JSON: gen-1784915390-buOWZQSnqjgHeJ6nUogF
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  지연 시간과 출력 길이
&lt;/h2&gt;

&lt;p&gt;실패 요청의 짧은 소요 시간을 “속도 우위”로 잘못 계산하지 않기 위해, 여기서는 두 모델이 모두 성공한 네 개 공통 작업만 비교했습니다. 수학, 제약 탐색, 통계 오류 수정, 실험 설계입니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6too5eegkodtob5tz9k7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6too5eegkodtob5tz9k7.png" alt="Claude Opus 5와 Claude Fable 5의 공통 성공 작업 지연 시간" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;지표&lt;/th&gt;
&lt;th&gt;Claude Opus 5&lt;/th&gt;
&lt;th&gt;Claude Fable 5&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;P50 총 지연&lt;/td&gt;
&lt;td&gt;10.729 s&lt;/td&gt;
&lt;td&gt;8.147 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;P50 첫 번째 가시 token&lt;/td&gt;
&lt;td&gt;8.376 s&lt;/td&gt;
&lt;td&gt;6.974 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;평균 가시 completion tokens&lt;/td&gt;
&lt;td&gt;797.5&lt;/td&gt;
&lt;td&gt;452.3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;이 작은 샘플에서는 Fable 5의 P50 총 지연이 약 24% 낮고, 첫 번째 가시 token은 약 17% 낮으며, 답변은 약 43% 짧았습니다. 채팅, 대량 요약, 고빈도 구조화 작업에서는 이런 차이가 사용자 대기 시간과 하위 처리량에 직접적인 영향을 줍니다.&lt;/p&gt;

&lt;p&gt;다만 4문항의 중앙값을 SLA처럼 쓰면 안 됩니다. 상위 부하, 캐시, 라우팅, rate limit은 모두 지연을 바꿀 수 있습니다. 정식 출시 전에는 반드시 자신의 비즈니스 프롬프트로 20~50회 반복 테스트를 하고, P50, P95, P99와 각 통과 결과의 실제 비용을 집계해야 합니다.&lt;/p&gt;

&lt;p&gt;Fable 5의 본 테스트 응답에는 &lt;code&gt;cost&lt;/code&gt; 필드가 있었고, 7회 합계는 약 &lt;code&gt;$0.24596&lt;/code&gt;였습니다. 반면 Opus 5의 usage에는 동일한 기준의 &lt;code&gt;cost&lt;/code&gt; 필드가 제공되지 않았습니다. 따라서 이 글에서는 달러 가격 우열을 판단하지 않습니다. 필드가 없다고 해서 무료라는 뜻도 아니며, 검증되지 않은 가격으로 메우는 것도 옳지 않습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  추천하는 프로덕션 라우팅 전략
&lt;/h2&gt;

&lt;p&gt;단일 모델 호출은 작성하기 가장 쉽지만, 모델의 모든 우발적 동작을 최종 사용자에게 그대로 노출합니다. 이번 두 모델에는 다음과 같은 분담이 더 합리적입니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fable 5를 첫 번째 hop으로
&lt;/h3&gt;

&lt;p&gt;다음에 적합합니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;회귀 테스트를 통과한 수학, 제약 추론, 짧은 요약&lt;/li&gt;
&lt;li&gt;첫 token과 전체 지연에 민감한 상호작용&lt;/li&gt;
&lt;li&gt;답변 길이를 통제하고 후처리 부담을 줄이고 싶은 작업&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;단, 작업군이 이미 필터링 테스트를 거쳤고, 호출 측에서 &lt;code&gt;content_filter&lt;/code&gt;, 빈 본문, 누락 필드를 검사해야 합니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  Opus 5를 고커버리지 폴백으로
&lt;/h3&gt;

&lt;p&gt;다음에 적합합니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;입력 유형이 예측 불가능한 경우&lt;/li&gt;
&lt;li&gt;코드 리뷰, 엄격한 JSON, 복잡한 물리처럼 더 넓은 작업 커버리지가 필요한 경우&lt;/li&gt;
&lt;li&gt;Fable 5가 필터링된 뒤 사용자 요청을 자동 복구해야 하는 경우&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Opus 5 역시 무검사로 둘 수는 없습니다. 이번 라운드의 인사말 이상은 HTTP 200과 &lt;code&gt;stop&lt;/code&gt;이 여전히 업무 답변이 아닐 수 있음을 보여줍니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenAI-compatible Python 예제
&lt;/h3&gt;

&lt;p&gt;아래 예제는 먼저 Fable 5를 호출하고, 필터링, 빈 본문, 검증 실패가 발생하면 Opus 5로 폴백합니다. Opus가 여전히 인사말만 반환하면 한 번 더 재시도합니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://cn.crazyrouter.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;valid_answer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;required_terms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...])&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;normalized&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;normalized&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;normalized&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hi! how can i help&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;term&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;normalized&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;term&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;required_terms&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;call_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
        &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;choice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;finish_reason&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;routed_completion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;required_terms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;attempts&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-fable-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-opus-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;attempts&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;finish_reason&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;call_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;finish_reason&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content_filter&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;break&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;valid_answer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;required_terms&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;No model produced a valid business answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;routed_completion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Return a JSON incident summary with keys total, failed, recovered.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;required_terms&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'"&lt;/span&gt;&lt;span class="s"&gt;total&lt;/span&gt;&lt;span class="sh"&gt;"'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'"&lt;/span&gt;&lt;span class="s"&gt;failed&lt;/span&gt;&lt;span class="sh"&gt;"'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'"&lt;/span&gt;&lt;span class="s"&gt;recovered&lt;/span&gt;&lt;span class="sh"&gt;"'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;프로덕션 구현에서는 model, response ID, &lt;code&gt;finish_reason&lt;/code&gt;, 총 지연 시간, 검증 실패 사유도 함께 기록해야 합니다. 그래야 모델 계산 오류, 출력 절단, 콘텐츠 필터링, 라우팅 입력 유실을 구분할 수 있습니다. 이 모든 것을 하나의 모호한 “모델 실패”로 뭉개면 안 됩니다.&lt;/p&gt;

&lt;p&gt;다중 모델 인프라를 설계 중이라면 &lt;a href="https://crazyrouter.com/zh/blog/ai-api-gateway-vs-aggregator-vs-direct-model-apis" rel="noopener noreferrer"&gt;AI API Gateway, aggregator, 직결 모델 API의 차이&lt;/a&gt;와 &lt;a href="https://crazyrouter.com/zh/blog/kimi-k3-opus48-capability-efficiency-benchmark-20260719" rel="noopener noreferrer"&gt;Kimi K3 vs Opus 4.8의 7차원 테스트&lt;/a&gt;도 참고할 만합니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  최종 제안
&lt;/h2&gt;

&lt;p&gt;이번 라운드에서 가장 가치 있는 결론은 누가 더 높은 점수를 받았느냐가 아니라, 두 모델의 실패 형태가 다르다는 점입니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fable 5의 강점은 공통 작업이 더 빠르고 더 짧다는 점입니다. 반면 일부 일반 업무 프롬프트는 안정적으로 필터링될 수 있습니다.&lt;/li&gt;
&lt;li&gt;Opus 5의 강점은 재시도 후 전체 작업을 커버한다는 점입니다. 반면 때때로 실제 입력과 무관한 인사말을 반환할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;따라서 Fable 5는 이미 검증된 고빈도 작업 앞단에 두고, Opus 5는 더 넓은 커버리지의 폴백으로 두는 것이 좋습니다. 그리고 두 경로 모두 콘텐츠 수준 검증을 적용해야 합니다. 그래야 모델 비교 결과를 실제 신뢰성으로 전환할 수 있고, 단순한 순위표에 머무르지 않을 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://crazyrouter.com/register?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=claude_opus5_fable5_benchmark_20260725&amp;amp;utm_content=claude-opus-5-vs-claude-fable-5-api-benchmark-2026-ko__body_cta&amp;amp;utm_term=claude+model+routing" rel="noopener noreferrer"&gt;API Key를 생성하고 이 듀얼 모델 라우팅을 재현하기&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Claude Opus 5가 Claude Fable 5보다 항상 더 강한가요?
&lt;/h3&gt;

&lt;p&gt;이 작은 샘플만으로 “모든 작업에서 더 강하다”고 결론내릴 수는 없습니다. 두 모델 모두 수학, 제약, 통계 오류 수정, 실험 설계에서는 통과했습니다. Fable 5는 더 빠르고 더 짧았고, Opus 5는 작업 커버리지가 더 완전했습니다. 선택은 모델 이름이 아니라 구체적인 작업 성공률에 근거해야 합니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude Fable 5는 프로덕션 환경에 적합한가요?
&lt;/h3&gt;

&lt;p&gt;회귀 테스트를 거친 작업에는 적합합니다. 이번 테스트에서는 여러 추론 작업에서 정확했고 더 빨랐지만, 코드 리뷰와 사고 JSON에서는 연속 필터링이 있었습니다. 출시 전에는 실제 프롬프트로 필터링률을 측정하고, Opus 5나 다른 모델로의 폴백을 구성해야 합니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  왜 HTTP 200인데도 실패로 보나요?
&lt;/h3&gt;

&lt;p&gt;HTTP 200은 인터페이스가 응답을 완료했다는 뜻일 뿐입니다. 본문이 비어 있거나, &lt;code&gt;finish_reason=content_filter&lt;/code&gt;이거나, 출력이 잘렸거나, 인사말만 돌아왔다면 업무를 완료할 수 없습니다. 프로덕션 지표는 HTTP 성공률이 아니라 “검증 통과율”을 집계해야 합니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  returned model이 왜 &lt;code&gt;anthropic/claude-fable-5&lt;/code&gt;인가요?
&lt;/h3&gt;

&lt;p&gt;요청은 &lt;code&gt;claude-fable-5&lt;/code&gt;를 사용했지만, 응답의 returned model은 provider 접두사가 붙은 &lt;code&gt;anthropic/claude-fable-5&lt;/code&gt;로 안정적으로 반환되었습니다. 이는 정규화된 별칭으로 볼 수 있으며, 접두사 변화만으로 모델 교체가 일어났다고 증명할 수는 없습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  두 모델의 달러 비용을 바로 비교할 수 있나요?
&lt;/h3&gt;

&lt;p&gt;이번에는 불가능합니다. Fable 5 응답에는 cost 필드가 있었지만, Opus 5는 같은 기준의 필드를 제공하지 않았습니다. 엄밀한 비용 비교는 통합 과금 로그에서 수집하고, “검증 통과 결과 1건당 비용”을 지표로 삼아야 합니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  몇 번 반복해야 출시 결정을 내릴 수 있나요?
&lt;/h3&gt;

&lt;p&gt;핵심 작업군마다 최소 20~50회는 반복하고, 정상 입력, 경계 입력, 장문 입력, 필터링을 유발하기 쉬운 입력을 모두 포함하는 것이 좋습니다. 최소한 작업 성공률, 필터링률, 빈 본문율, 절단률, P50/P95/P99 지연, 비용을 기록해야 합니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  테스트는 어떻게 시작하나요?
&lt;/h3&gt;

&lt;p&gt;OpenAI-compatible base URL로 &lt;code&gt;https://cn.crazyrouter.com/v1&lt;/code&gt;를 사용하고, &lt;code&gt;claude-opus-5&lt;/code&gt;와 &lt;code&gt;claude-fable-5&lt;/code&gt;를 각각 호출하세요. 프롬프트와 파라미터를 고정하고, 원본 응답을 저장한 뒤, 로컬 assertion 또는 구조 검증으로 작업이 실제로 완료되었는지 판정하면 됩니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://crazyrouter.com/register?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=claude_opus5_fable5_benchmark_20260725&amp;amp;utm_content=claude-opus-5-vs-claude-fable-5-api-benchmark-2026-ko__final_cta&amp;amp;utm_term=claude+api+benchmark" rel="noopener noreferrer"&gt;Claude 듀얼 모델 테스트를 시작하기&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>benchmark</category>
    </item>
    <item>
      <title>Claude Opus 5 vs Claude Fable 5: 7 bài kiểm thử API thực tế và khuyến nghị định tuyến production</title>
      <dc:creator>Jenny Met</dc:creator>
      <pubDate>Sun, 26 Jul 2026 14:58:19 +0000</pubDate>
      <link>https://dev.to/xujfcn/claude-opus-5-vs-claude-fable-5-7-bai-kiem-thu-api-thuc-te-va-khuyen-nghi-dinh-tuyen-production-2904</link>
      <guid>https://dev.to/xujfcn/claude-opus-5-vs-claude-fable-5-7-bai-kiem-thu-api-thuc-te-va-khuyen-nghi-dinh-tuyen-production-2904</guid>
      <description>&lt;h1&gt;
  
  
  Claude Opus 5 vs Claude Fable 5: 7 bài kiểm thử API thực tế và khuyến nghị định tuyến production
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyps24e8rgud9k553cjsd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyps24e8rgud9k553cjsd.png" alt="So sánh API thực tế giữa Claude Opus 5 và Claude Fable 5" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nên chọn Claude Opus 5 hay Claude Fable 5? Nếu chỉ nhìn vào một lần trả lời thành công, cả hai mô hình đều có thể viết ra lời giải toán rất đẹp. Nhưng thứ thực sự ảnh hưởng đến trải nghiệm production thường là ba vấn đề khác: &lt;strong&gt;tác vụ có được giao ổn định hay không, độ trễ có phù hợp với tương tác hay không, và sau lỗi có thể tự phục hồi hay không&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ngày 25/07/2026, chúng tôi dùng cùng một OpenAI-compatible API, cùng prompt và cùng tham số để kiểm thử hai mô hình trên 7 nhóm tác vụ. Kết quả không rơi vào câu chuyện đơn giản kiểu “mô hình lớn hơn thì chắc chắn tốt hơn”:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;claude-fable-5&lt;/code&gt; nhanh hơn và súc tích hơn trên các tác vụ mà cả hai cùng hoàn thành thành công;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;claude-opus-5&lt;/code&gt; cuối cùng bao phủ đủ cả 7 nhóm tác vụ;&lt;/li&gt;
&lt;li&gt;Fable 5 liên tục kích hoạt &lt;code&gt;content_filter&lt;/code&gt; trên prompt review code và prompt JSON sự cố vốn rất bình thường;&lt;/li&gt;
&lt;li&gt;Với bài vật lý, hai lần đầu Opus 5 trả về HTTP 200 nhưng chỉ phản hồi một câu chào không liên quan, đến lần thứ 3 mới hoàn thành bình thường.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Điều này có nghĩa là khi chọn mô hình cho production, bạn không nên chỉ có một model ID duy nhất. Cách an toàn hơn là: &lt;strong&gt;chọn mô hình chính theo loại tác vụ trước, sau đó bọc các bất thường bằng kiểm định nội dung, retry và fallback mô hình.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://crazyrouter.com/register?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=claude_opus5_fable5_benchmark_20260725&amp;amp;utm_content=claude-opus-5-vs-claude-fable-5-api-benchmark-2026-vi__hero_cta&amp;amp;utm_term=claude+opus+5+vs+fable+5" rel="noopener noreferrer"&gt;Kiểm thử Opus 5 và Fable 5 bằng cùng một API&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Kết luận nhanh
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Câu hỏi&lt;/th&gt;
&lt;th&gt;Kết quả trong vòng kiểm thử này&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Mô hình nào bao phủ nhiều tác vụ hơn?&lt;/td&gt;
&lt;td&gt;Opus 5: 6/7 ở bài kiểm thử chính, 7/7 sau retry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mô hình nào nhanh hơn?&lt;/td&gt;
&lt;td&gt;Trên các tác vụ cả hai cùng thành công, tổng độ trễ P50 của Fable 5 thấp hơn khoảng 24%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mô hình nào xuất ra ngắn gọn hơn?&lt;/td&gt;
&lt;td&gt;Fable 5, trung bình ít visible output token hơn khoảng 43%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mô hình nào phù hợp hơn cho review code và JSON nghiêm ngặt?&lt;/td&gt;
&lt;td&gt;Trong vòng này Opus 5 ổn định hơn; Fable 5 bị lọc liên tục 3 lần ở hai bài&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Có thể chỉ nhìn HTTP 200 không?&lt;/td&gt;
&lt;td&gt;Không; cả hai mô hình đều từng trả HTTP 200 nhưng không giao được tác vụ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nên định tuyến thế nào?&lt;/td&gt;
&lt;td&gt;Với tác vụ đã xác minh, ưu tiên Fable 5; khi bị lọc hoặc body rỗng thì fallback sang Opus 5; khi Opus trả câu chào bất thường thì tự động retry&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Nếu kiểu input của bạn khó dự đoán, hoặc bạn cần hạn chế tối đa việc prompt nghiệp vụ bình thường bị lọc, hãy ưu tiên cân nhắc Opus 5. Nếu cấu trúc tác vụ cố định, đã được regression test, và tốc độ tương tác cùng độ dài output quan trọng hơn, Fable 5 phù hợp hơn để làm bước gọi đầu tiên.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chúng tôi đã kiểm thử như thế nào
&lt;/h2&gt;

&lt;p&gt;Trước khi kiểm thử, chúng tôi gọi endpoint danh sách mô hình để xác nhận hai model ID chính xác đều hiển thị:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET https://cn.crazyrouter.com/v1/models

claude-opus-5
claude-fable-5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tất cả request chính thức đều đi qua cùng một endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST https://cn.crazyrouter.com/v1/chat/completions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Điều kiện chung như sau:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cùng system prompt
Cùng user prompt
temperature = 1
Mỗi bài dùng cùng max_tokens
stream = true
Không bật tool và không truy cập web
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;System prompt thống nhất chỉ yêu cầu trả lời chính xác và tuân thủ định dạng output, không thêm role setting thiên vị mô hình nào:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Answer the user's task accurately. Follow every requested output format and length constraint exactly. Do not use external tools.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Chúng tôi không chỉ ghi lại phần văn bản cuối cùng, mà còn ghi:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Trạng thái HTTP và &lt;code&gt;finish_reason&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;response ID và returned model;&lt;/li&gt;
&lt;li&gt;Thời gian đến visible token đầu tiên và tổng độ trễ;&lt;/li&gt;
&lt;li&gt;completion tokens, reasoning tokens;&lt;/li&gt;
&lt;li&gt;Câu trả lời hiển thị có đạt tiêu chí nghiệm thu tác vụ hay không;&lt;/li&gt;
&lt;li&gt;Request bất thường có thể phục hồi bằng retry với cùng tham số hay không.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Đây là một bộ kiểm thử end-to-end qua gateway Crazyrouter, không phải thí nghiệm cố định một kênh upstream duy nhất. Vì vậy, kết quả đồng thời phản ánh hành vi mô hình, bộ lọc upstream, định tuyến gateway và trạng thái kênh tại thời điểm đó. Nó phù hợp để trả lời câu hỏi “người dùng thực tế sẽ gặp gì khi đi qua API này”, nhưng không phù hợp để đóng gói thành bảng xếp hạng năng lực offline thuần túy của họ Claude.&lt;/p&gt;

&lt;p&gt;Nếu muốn hiểu vì sao kiểm thử mô hình bắt buộc phải ghi &lt;code&gt;finish_reason&lt;/code&gt; và output budget, bạn có thể đọc tiếp bài &lt;a href="https://crazyrouter.com/zh/blog/claude-fable-5-vs-gpt-55-max-tokens-animation-test-2026" rel="noopener noreferrer"&gt;kiểm thử lại max_tokens giữa Claude Fable 5 và GPT-5.5&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bảng tổng hợp kết quả 7 tác vụ
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft4wao0q9yguye8ztlty7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft4wao0q9yguye8ztlty7.png" alt="Ma trận kết quả bảy tác vụ của Claude Opus 5 và Claude Fable 5" width="800" height="525"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Chiều kiểm thử&lt;/th&gt;
&lt;th&gt;Claude Opus 5&lt;/th&gt;
&lt;th&gt;Claude Fable 5&lt;/th&gt;
&lt;th&gt;Tác động production&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Toán chính xác: chuỗi Markov&lt;/td&gt;
&lt;td&gt;Đạt&lt;/td&gt;
&lt;td&gt;Đạt&lt;/td&gt;
&lt;td&gt;Cả hai đều cho moment bậc nhất, moment bậc hai và phương sai chính xác&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vật lý số: dao động tử ghép&lt;/td&gt;
&lt;td&gt;Hai lần đầu chỉ trả câu chào, lần thứ 3 đạt&lt;/td&gt;
&lt;td&gt;Đạt ở vòng đầu&lt;/td&gt;
&lt;td&gt;Opus cần nghiệm thu ở cấp nội dung và retry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tìm kiếm ràng buộc&lt;/td&gt;
&lt;td&gt;Đạt&lt;/td&gt;
&lt;td&gt;Đạt&lt;/td&gt;
&lt;td&gt;Cả hai đều tìm được nghiệm duy nhất&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sửa lỗi thống kê&lt;/td&gt;
&lt;td&gt;Đạt&lt;/td&gt;
&lt;td&gt;Đạt&lt;/td&gt;
&lt;td&gt;Cả hai đều bác bỏ tiền đề sai và đưa ra cận trên đúng&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Review code Python&lt;/td&gt;
&lt;td&gt;Đạt&lt;/td&gt;
&lt;td&gt;3 lần liên tiếp &lt;code&gt;content_filter&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Hiện tại Fable chưa phù hợp cho lưu lượng review code chưa regression test&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tóm tắt sự cố JSON nghiêm ngặt&lt;/td&gt;
&lt;td&gt;Đạt&lt;/td&gt;
&lt;td&gt;3 lần liên tiếp &lt;code&gt;content_filter&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Hiện tại Fable chưa phù hợp với loại văn bản sự cố production này&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thiết kế thí nghiệm&lt;/td&gt;
&lt;td&gt;Đạt&lt;/td&gt;
&lt;td&gt;Đạt&lt;/td&gt;
&lt;td&gt;Cả hai đều nhận ra mẫu không bắt cặp và nhiễu do độ khó&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Tỷ lệ giao tác vụ một lần trong bài kiểm thử chính:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude Opus 5: 6 / 7 = 85.7%
Claude Fable 5: 5 / 7 = 71.4%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sau khi thêm retry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude Opus 5: 7 / 7
Claude Fable 5: 5 / 7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ở đây, “giao tác vụ” không có nghĩa là request thành công, mà là nghiệp vụ nhận được câu trả lời hiển thị đúng yêu cầu bài. Dù HTTP 200, tên mô hình và token usage đều tồn tại, nếu body rỗng, bị lọc hoặc chỉ trả câu chào, tác vụ vẫn được tính là thất bại.&lt;/p&gt;

&lt;h2&gt;
  
  
  Toán, ràng buộc và thống kê: cả hai mô hình đều đáng tin cậy
&lt;/h2&gt;

&lt;p&gt;Bài toán dùng chuỗi Markov ba trạng thái, yêu cầu tính thời gian chờ từ trạng thái 1 đến lần đầu chạm trạng thái 3:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;E1[τ]
E1[τ²]
Var1(τ)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cả hai mô hình đều đưa ra:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;E1[τ] = 5
E1[τ²] = 43
Var1(τ) = 18
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Chúng cũng đều viết ra ma trận tạm thời &lt;code&gt;Q&lt;/code&gt; và các phương trình moment bậc nhất, bậc hai. Ở bài này không xuất hiện tình huống “con số cuối cùng đúng nhưng suy luận không nhất quán”.&lt;/p&gt;

&lt;p&gt;Bài tìm kiếm ràng buộc yêu cầu xếp năm bài nói A, B, C, D, E vào năm khung thời gian, đồng thời thỏa mãn các điều kiện về liền kề ngay lập tức, thứ tự trước sau, khoảng cách và không kề nhau. Cả hai đều tìm ra thứ tự duy nhất:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A, C, E, B, D
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bài sửa lỗi thống kê cố tình đưa ra một kết luận sai: “trung bình bằng 10, phương sai bằng 4, nên &lt;code&gt;P(X≥14)=0.5&lt;/code&gt;.” Cả hai mô hình đều chỉ ra rằng hai moment đầu không đủ để xác định duy nhất xác suất đuôi, và dùng bất đẳng thức Chebyshev/Cantelli một phía để nhận được:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;P(X &amp;gt;= 14) &amp;lt;= 0.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ba nhóm tác vụ này cho thấy lợi thế tốc độ của Fable 5 không đến từ việc hy sinh độ đúng của suy luận cơ bản. Với các bài toán và logic rõ ràng, ngắn, có thể nghiệm thu được, nó hoàn toàn có thể đóng vai trò bước gọi đầu nhẹ hơn.&lt;/p&gt;

&lt;p&gt;Các bài &lt;a href="https://crazyrouter.com/zh/blog/claude-fable-5-vs-claude-sonnet-5-api-test-2026" rel="noopener noreferrer"&gt;kiểm thử API Claude Fable 5 vs Claude Sonnet 5&lt;/a&gt; và &lt;a href="https://crazyrouter.com/zh/blog/glm-52-vs-claude-fable-5-output-budget-test-2026" rel="noopener noreferrer"&gt;kiểm thử output budget GLM-5.2 vs Fable 5&lt;/a&gt; trước đó cũng cho thấy: để đánh giá một mô hình có phù hợp production hay không, cần nhìn đồng thời vào độ đúng, output budget và hình thái giao tác vụ.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bài vật lý: Fable hoàn thành ngay vòng đầu, Opus phục hồi ở lần thứ ba
&lt;/h2&gt;

&lt;p&gt;Bài vật lý yêu cầu xử lý một hệ dao động tử hai bậc tự do có damping nối đất và damping ghép, tính hai tần số riêng không damping, cũng như đáp ứng tần số phức của hai khối lượng tại &lt;code&gt;ω=8 rad/s&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Giá trị tham chiếu là:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ω1 = 10.0204 rad/s
ω2 = 16.2149 rad/s
|X1| = 0.14929 m, phase = -12.15°
|X2| = 0.07174 m, phase = -13.90°
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fable 5 đưa ra đầy đủ kết quả đúng ngay vòng đầu. Trong khi đó, hai lần gọi đầu tiên của Opus 5 xuất hiện một bất thường đáng để đội production lưu ý hơn: API trả về HTTP 200 và &lt;code&gt;finish_reason=stop&lt;/code&gt;, nhưng body chỉ có:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hi! How can I help you today?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prompt tokens của cả hai response này đều chỉ là 10, rõ ràng không khớp với input thật. Khi thực thi cùng request lần thứ 3, Opus 5 trả về đầy đủ sau 34.901 giây, và cả sáu giá trị số đều qua kiểm tra.&lt;/p&gt;

&lt;p&gt;Vì vậy, loại bất thường này không nên được phân loại là “tính sai bài vật lý”, mà nên được phân loại là “ngữ cảnh request không được xử lý đúng”. Tuyến phòng thủ đơn giản nhất không phải là để con người đọc log, mà là đặt nghiệm thu cấp tác vụ ở phía caller: câu trả lời phải chứa &lt;code&gt;ω1&lt;/code&gt;, &lt;code&gt;ω2&lt;/code&gt;, &lt;code&gt;X1&lt;/code&gt;, &lt;code&gt;X2&lt;/code&gt;; thiếu bất kỳ trường nào thì retry.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code và JSON nghiêm ngặt: bộ lọc của Fable là khác biệt lớn nhất trong vòng này
&lt;/h2&gt;

&lt;p&gt;Bài code yêu cầu mô hình review một bộ phát hiện chu trình DFS bằng Python. Bug rất thông thường: sau khi DFS xong một node, code không xóa node đó khỏi tập &lt;code&gt;visiting&lt;/code&gt;, khiến node đã hoàn tất vẫn bị xem nhầm là đang nằm trong recursion stack, từ đó báo nhầm có chu trình trên DAG.&lt;/p&gt;

&lt;p&gt;Opus 5 chỉ ra đúng bản sửa tối thiểu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;visiting&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;discard&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fable 5 không trả về phân tích code, mà là &lt;code&gt;finish_reason=content_filter&lt;/code&gt;, body rỗng. Để loại trừ thiên lệch system prompt và định tuyến ngẫu nhiên, chúng tôi làm ba vòng: kiểm thử gốc, kiểm thử lại với system prompt sạch, và retry độc lập một bài. Kết quả đều là &lt;code&gt;content_filter&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Bài JSON nghiêm ngặt cũng không có nội dung nguy hiểm. Input chỉ gồm tổng số request trong 15 phút, số lỗi, quy kết theo kênh, số lần retry phục hồi và hành động xử lý, yêu cầu output một JSON object. JSON mà Opus 5 trả về có thể parse trực tiếp; Fable 5 cũng bị lọc liên tục 3 lần.&lt;/p&gt;

&lt;p&gt;Hai nhóm thất bại này cho thấy: &lt;strong&gt;bản thân safety filter cũng là một năng lực production của API mô hình.&lt;/strong&gt; Nếu một mô hình thường xuyên lọc nhầm trên review code bình thường hoặc văn bản postmortem sự cố, thì dù nó nhanh hơn ở bài toán, nó cũng không thể trực tiếp tiếp quản toàn bộ lưu lượng nghiệp vụ.&lt;/p&gt;

&lt;p&gt;response ID của hai lần retry độc lập:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Review code: gen-1784915384-vGI1PtuNXZG0IJ2YiaCz
JSON sự cố: gen-1784915390-buOWZQSnqjgHeJ6nUogF
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Độ trễ và độ dài output
&lt;/h2&gt;

&lt;p&gt;Để tránh tính thời gian ngắn của request thất bại thành “lợi thế tốc độ”, phần này chỉ so sánh bốn tác vụ chung mà cả hai mô hình đều thành công: toán, tìm kiếm ràng buộc, sửa lỗi thống kê, thiết kế thí nghiệm.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8q5djfk3pevbnp27g9ww.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8q5djfk3pevbnp27g9ww.png" alt="Độ trễ trên các tác vụ cùng thành công của Claude Opus 5 và Claude Fable 5" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Chỉ số&lt;/th&gt;
&lt;th&gt;Claude Opus 5&lt;/th&gt;
&lt;th&gt;Claude Fable 5&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tổng độ trễ P50&lt;/td&gt;
&lt;td&gt;10.729 s&lt;/td&gt;
&lt;td&gt;8.147 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;P50 đến visible token đầu tiên&lt;/td&gt;
&lt;td&gt;8.376 s&lt;/td&gt;
&lt;td&gt;6.974 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visible completion tokens trung bình&lt;/td&gt;
&lt;td&gt;797.5&lt;/td&gt;
&lt;td&gt;452.3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Trong mẫu nhỏ này, tổng độ trễ P50 của Fable 5 thấp hơn khoảng 24%, visible token đầu tiên thấp hơn khoảng 17%, và câu trả lời ngắn hơn khoảng 43%. Với chat, tóm tắt hàng loạt và tác vụ có cấu trúc tần suất cao, những khác biệt này sẽ ảnh hưởng trực tiếp đến thời gian chờ của người dùng và khối lượng xử lý downstream.&lt;/p&gt;

&lt;p&gt;Tuy nhiên, đừng biến median của 4 bài thành SLA. Tải upstream, cache, định tuyến và rate limit đều có thể làm thay đổi độ trễ. Trước khi lên production chính thức, bạn nên lặp lại 20–50 lần bằng prompt nghiệp vụ của chính mình, rồi thống kê P50, P95, P99 và chi phí thực của mỗi kết quả đạt nghiệm thu.&lt;/p&gt;

&lt;p&gt;Response trong bài kiểm thử chính của Fable 5 cung cấp trường &lt;code&gt;cost&lt;/code&gt;, tổng 7 lần khoảng &lt;code&gt;$0.24596&lt;/code&gt;. Usage của Opus 5 không cung cấp &lt;code&gt;cost&lt;/code&gt; cùng tiêu chuẩn, nên bài viết này không kết luận thắng thua về giá USD. Thiếu field không có nghĩa là miễn phí, và cũng không nên tự điền giá chưa được xác minh.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chiến lược định tuyến production được khuyến nghị
&lt;/h2&gt;

&lt;p&gt;Gọi một mô hình duy nhất là cách dễ viết nhất, nhưng nó phơi bày toàn bộ hành vi ngẫu phát của mô hình cho người dùng cuối. Với hai mô hình trong vòng kiểm thử này, cách phân công hợp lý hơn như sau:&lt;/p&gt;

&lt;h3&gt;
  
  
  Fable 5 làm bước gọi đầu tiên
&lt;/h3&gt;

&lt;p&gt;Phù hợp với:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Toán, suy luận ràng buộc và tóm tắt ngắn đã vượt regression test;&lt;/li&gt;
&lt;li&gt;Tương tác nhạy với first token và tổng độ trễ;&lt;/li&gt;
&lt;li&gt;Tác vụ muốn kiểm soát độ dài câu trả lời và giảm gánh nặng hậu xử lý.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Điều kiện là họ tác vụ đã được kiểm thử lọc, và phía caller sẽ kiểm tra &lt;code&gt;content_filter&lt;/code&gt;, body rỗng và trường bị thiếu.&lt;/p&gt;

&lt;h3&gt;
  
  
  Opus 5 làm fallback bao phủ rộng
&lt;/h3&gt;

&lt;p&gt;Phù hợp với:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kiểu input khó dự đoán;&lt;/li&gt;
&lt;li&gt;Các tình huống cần bao phủ tác vụ rộng hơn như review code, JSON nghiêm ngặt, vật lý phức tạp;&lt;/li&gt;
&lt;li&gt;Trường hợp Fable 5 bị lọc và cần tự động phục hồi request của người dùng.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Opus 5 cũng không được miễn kiểm tra. Bất thường trả câu chào trong vòng này chứng minh rằng HTTP 200 và &lt;code&gt;stop&lt;/code&gt; vẫn có thể không có câu trả lời nghiệp vụ.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ví dụ Python OpenAI-compatible
&lt;/h3&gt;

&lt;p&gt;Ví dụ dưới đây gọi Fable 5 trước; khi gặp lọc, body rỗng hoặc không đạt nghiệm thu thì fallback sang Opus 5; nếu Opus vẫn chỉ trả câu chào, nó sẽ retry thêm một lần.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://cn.crazyrouter.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;valid_answer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;required_terms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...])&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;normalized&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;normalized&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;normalized&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hi! how can i help&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;term&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;normalized&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;term&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;required_terms&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;call_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
        &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;choice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;finish_reason&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;routed_completion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;required_terms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;attempts&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-fable-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-opus-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;attempts&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;finish_reason&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;call_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;finish_reason&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content_filter&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;break&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;valid_answer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;required_terms&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;No model produced a valid business answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;routed_completion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Return a JSON incident summary with keys total, failed, recovered.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;required_terms&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'"&lt;/span&gt;&lt;span class="s"&gt;total&lt;/span&gt;&lt;span class="sh"&gt;"'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'"&lt;/span&gt;&lt;span class="s"&gt;failed&lt;/span&gt;&lt;span class="sh"&gt;"'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'"&lt;/span&gt;&lt;span class="s"&gt;recovered&lt;/span&gt;&lt;span class="sh"&gt;"'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Triển khai production cũng nên ghi lại model, response ID, &lt;code&gt;finish_reason&lt;/code&gt;, tổng độ trễ và nguyên nhân nghiệm thu thất bại. Nhờ đó, bạn có thể phân biệt mô hình tính sai, output bị cắt, nội dung bị lọc và định tuyến làm mất input, thay vì gom tất cả vào một nhãn mơ hồ là “mô hình lỗi”.&lt;/p&gt;

&lt;p&gt;Nếu bạn đang lên kế hoạch cho hạ tầng đa mô hình, có thể tham khảo &lt;a href="https://crazyrouter.com/zh/blog/ai-api-gateway-vs-aggregator-vs-direct-model-apis" rel="noopener noreferrer"&gt;sự khác nhau giữa AI API Gateway, aggregator và API mô hình kết nối trực tiếp&lt;/a&gt;, cũng như &lt;a href="https://crazyrouter.com/zh/blog/kimi-k3-opus48-capability-efficiency-benchmark-20260719" rel="noopener noreferrer"&gt;kiểm thử bảy chiều Kimi K3 vs Opus 4.8&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Khuyến nghị cuối cùng
&lt;/h2&gt;

&lt;p&gt;Kết luận có giá trị nhất trong vòng này không phải là ai đạt điểm cao hơn, mà là hình thái thất bại của hai mô hình khác nhau:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lợi thế của Fable 5 là nhanh hơn và ngắn hơn trên các tác vụ chung; rủi ro là một số prompt nghiệp vụ bình thường có thể kích hoạt bộ lọc một cách ổn định.&lt;/li&gt;
&lt;li&gt;Lợi thế của Opus 5 là bao phủ toàn bộ tác vụ sau retry; rủi ro là đôi khi trả về câu chào không liên quan đến input thật.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vì vậy, nên đặt Fable 5 ở phía trước cho các tác vụ tần suất cao đã được xác minh, dùng Opus 5 làm fallback bao phủ rộng hơn, và thực hiện nghiệm thu cấp nội dung cho cả hai tuyến. Khi đó, kết quả so sánh mô hình mới chuyển hóa thành độ tin cậy thực tế, thay vì chỉ dừng lại ở một bảng xếp hạng.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://crazyrouter.com/register?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=claude_opus5_fable5_benchmark_20260725&amp;amp;utm_content=claude-opus-5-vs-claude-fable-5-api-benchmark-2026-vi__body_cta&amp;amp;utm_term=claude+model+routing" rel="noopener noreferrer"&gt;Tạo API Key để tái hiện bộ định tuyến hai mô hình này&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Claude Opus 5 chắc chắn mạnh hơn Claude Fable 5 không?
&lt;/h3&gt;

&lt;p&gt;Không thể từ mẫu nhỏ này kết luận rằng Opus mạnh hơn trên mọi tác vụ. Cả hai đều vượt qua toán, ràng buộc, sửa lỗi thống kê và thiết kế thí nghiệm; Fable 5 nhanh hơn, ngắn hơn, còn Opus 5 có mức bao phủ tác vụ đầy đủ hơn. Lựa chọn nên dựa trên tỷ lệ thành công của tác vụ cụ thể, không phải tên mô hình.&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude Fable 5 có phù hợp với production không?
&lt;/h3&gt;

&lt;p&gt;Có, với các tác vụ đã được regression test. Trong vòng này, nó trả lời đúng và khá nhanh trên nhiều loại tác vụ suy luận, nhưng review code và JSON sự cố lại liên tục kích hoạt bộ lọc. Trước khi triển khai, bạn nên dùng prompt thật để đo tỷ lệ lọc và cấu hình fallback sang Opus 5 hoặc mô hình khác.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vì sao HTTP 200 vẫn được tính là thất bại?
&lt;/h3&gt;

&lt;p&gt;HTTP 200 chỉ cho biết API đã hoàn tất response. Body rỗng, &lt;code&gt;finish_reason=content_filter&lt;/code&gt;, output bị cắt, hoặc chỉ trả một câu chào đều không hoàn thành tác vụ nghiệp vụ. Chỉ số production nên thống kê “tỷ lệ đạt nghiệm thu”, chứ không chỉ thống kê tỷ lệ HTTP thành công.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vì sao returned model là &lt;code&gt;anthropic/claude-fable-5&lt;/code&gt;?
&lt;/h3&gt;

&lt;p&gt;Request dùng &lt;code&gt;claude-fable-5&lt;/code&gt;, còn returned model trong response ổn định là &lt;code&gt;anthropic/claude-fable-5&lt;/code&gt; có tiền tố provider. Có thể xem đây là alias đã chuẩn hóa; chỉ riêng thay đổi tiền tố không đủ để chứng minh đã xảy ra thay thế mô hình.&lt;/p&gt;

&lt;h3&gt;
  
  
  Có thể so sánh trực tiếp chi phí USD của hai mô hình không?
&lt;/h3&gt;

&lt;p&gt;Trong vòng này thì không. Response của Fable 5 cung cấp trường cost, còn Opus 5 không cung cấp field cùng tiêu chuẩn. So sánh chi phí nghiêm ngặt nên lấy dữ liệu từ log tính phí thống nhất, và dùng chỉ số “chi phí trên mỗi kết quả đạt nghiệm thu”.&lt;/p&gt;

&lt;h3&gt;
  
  
  Nên lặp lại bao nhiêu lần trước khi quyết định triển khai?
&lt;/h3&gt;

&lt;p&gt;Khuyến nghị mỗi họ tác vụ lõi lặp lại ít nhất 20–50 lần, bao phủ input bình thường, input biên, input dài và input dễ kích hoạt bộ lọc. Tối thiểu cần ghi tỷ lệ thành công tác vụ, tỷ lệ lọc, tỷ lệ body rỗng, tỷ lệ bị cắt, độ trễ P50/P95/P99 và chi phí.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bắt đầu kiểm thử như thế nào?
&lt;/h3&gt;

&lt;p&gt;Dùng &lt;code&gt;https://cn.crazyrouter.com/v1&lt;/code&gt; làm OpenAI-compatible base URL, rồi lần lượt gọi &lt;code&gt;claude-opus-5&lt;/code&gt; và &lt;code&gt;claude-fable-5&lt;/code&gt;. Cố định prompt và tham số, lưu response gốc, sau đó dùng assertion cục bộ hoặc schema validation để xác định tác vụ có thực sự hoàn thành hay không.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://crazyrouter.com/register?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=claude_opus5_fable5_benchmark_20260725&amp;amp;utm_content=claude-opus-5-vs-claude-fable-5-api-benchmark-2026-vi__final_cta&amp;amp;utm_term=claude+api+benchmark" rel="noopener noreferrer"&gt;Bắt đầu kiểm thử Claude hai mô hình của bạn&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>benchmark</category>
    </item>
    <item>
      <title>Claude Opus 5 vs Claude Fable 5: 7 Real API Tests and Production Routing Advice</title>
      <dc:creator>Jenny Met</dc:creator>
      <pubDate>Sun, 26 Jul 2026 14:57:12 +0000</pubDate>
      <link>https://dev.to/xujfcn/claude-opus-5-vs-claude-fable-5-7-real-api-tests-and-production-routing-advice-2b24</link>
      <guid>https://dev.to/xujfcn/claude-opus-5-vs-claude-fable-5-7-real-api-tests-and-production-routing-advice-2b24</guid>
      <description>&lt;h1&gt;
  
  
  Claude Opus 5 vs Claude Fable 5: 7 Real API Tests and Production Routing Advice
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhlw5mg1py1hdosaqs3cu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhlw5mg1py1hdosaqs3cu.png" alt="Real API comparison of Claude Opus 5 and Claude Fable 5" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How should you choose between Claude Opus 5 and Claude Fable 5? If you only look at a single successful answer, both models can produce polished mathematical derivations. In production, however, the experience is usually shaped by three other questions: &lt;strong&gt;can the task be delivered reliably, is latency suitable for interactive use, and can the system recover automatically after failures?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On July 25, 2026, we tested the two models across 7 task categories through the same OpenAI-compatible API, using identical prompts and parameters. The results did not fit the simplistic story that “the larger model is always better”:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;claude-fable-5&lt;/code&gt; was faster and more concise on tasks where both models succeeded;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;claude-opus-5&lt;/code&gt; ultimately covered all 7 task categories;&lt;/li&gt;
&lt;li&gt;Fable 5 repeatedly triggered &lt;code&gt;content_filter&lt;/code&gt; on ordinary code-review and incident-JSON prompts;&lt;/li&gt;
&lt;li&gt;On the physics task, Opus 5 returned HTTP 200 twice but answered only with an unrelated greeting; it completed normally on the third attempt.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That means production model selection should not boil down to a single model ID. A safer pattern is: &lt;strong&gt;choose the primary model by task type, then wrap abnormal cases with content validation, retries, and model fallback.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://crazyrouter.com/register?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=claude_opus5_fable5_benchmark_20260725&amp;amp;utm_content=claude-opus-5-vs-claude-fable-5-api-benchmark-2026-en__hero_cta&amp;amp;utm_term=claude+opus+5+vs+fable+5" rel="noopener noreferrer"&gt;Test Opus 5 and Fable 5 through the same API&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Takeaways
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;Result in this round&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Which model covered more tasks?&lt;/td&gt;
&lt;td&gt;Opus 5: 6/7 in the main test, 7/7 after retry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Which model was faster?&lt;/td&gt;
&lt;td&gt;On mutually successful tasks, Fable 5 had roughly 24% lower P50 total latency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Which model produced shorter answers?&lt;/td&gt;
&lt;td&gt;Fable 5, with about 43% fewer average visible output tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Which model was better for code review and strict JSON?&lt;/td&gt;
&lt;td&gt;Opus 5 was more stable in this round; Fable 5 was filtered 3 times in a row on both tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Is HTTP 200 enough?&lt;/td&gt;
&lt;td&gt;No; both models had HTTP 200 responses that did not deliver the task&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recommended routing pattern?&lt;/td&gt;
&lt;td&gt;Use Fable 5 first for validated tasks, fall back to Opus 5 on filtering or empty content; automatically retry Opus when it returns an abnormal greeting&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If your input types are unpredictable, or if you need to minimize false filtering on ordinary business prompts, Opus 5 deserves priority. If the task structure is fixed, has already been regression-tested, and interactive speed and output length matter more, Fable 5 is a better first hop.&lt;/p&gt;

&lt;h2&gt;
  
  
  How We Tested
&lt;/h2&gt;

&lt;p&gt;Before testing, we called the model-list endpoint to confirm that both exact model IDs were visible:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET https://cn.crazyrouter.com/v1/models

claude-opus-5
claude-fable-5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All formal requests used the same endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST https://cn.crazyrouter.com/v1/chat/completions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The shared conditions were:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Same system prompt
Same user prompt
temperature = 1
Same max_tokens for each task
stream = true
No tools or web access enabled
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The unified system prompt only asked the model to answer accurately and follow the requested format. It did not add any role framing that favored either model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Answer the user's task accurately. Follow every requested output format and length constraint exactly. Do not use external tools.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We recorded more than the final text:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP status and &lt;code&gt;finish_reason&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;response ID and returned model;&lt;/li&gt;
&lt;li&gt;time to first visible token and total latency;&lt;/li&gt;
&lt;li&gt;completion tokens and reasoning tokens;&lt;/li&gt;
&lt;li&gt;whether the visible answer satisfied task-level acceptance checks;&lt;/li&gt;
&lt;li&gt;whether abnormal requests recovered when retried with the same parameters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is an end-to-end Crazyrouter gateway test, not an experiment pinned to a single upstream channel. The results therefore reflect model behavior, upstream filtering, gateway routing, and the channel state at that moment. They are useful for answering “what will users actually encounter through this API,” not for constructing a pure offline capability leaderboard for the Claude family.&lt;/p&gt;

&lt;p&gt;For more on why model tests must record &lt;code&gt;finish_reason&lt;/code&gt; and output budget, see the &lt;a href="https://crazyrouter.com/zh/blog/claude-fable-5-vs-gpt-55-max-tokens-animation-test-2026" rel="noopener noreferrer"&gt;Claude Fable 5 vs GPT-5.5 max_tokens retest&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary Table for the 7 Tasks
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9zcauv0lfswm3d6d5gfl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9zcauv0lfswm3d6d5gfl.png" alt="Seven-task result matrix for Claude Opus 5 and Claude Fable 5" width="800" height="525"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Test dimension&lt;/th&gt;
&lt;th&gt;Claude Opus 5&lt;/th&gt;
&lt;th&gt;Claude Fable 5&lt;/th&gt;
&lt;th&gt;Production impact&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Exact math: Markov chain&lt;/td&gt;
&lt;td&gt;Passed&lt;/td&gt;
&lt;td&gt;Passed&lt;/td&gt;
&lt;td&gt;Both produced the correct first moment, second moment, and variance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Numerical physics: coupled oscillator&lt;/td&gt;
&lt;td&gt;First two attempts returned only a greeting; third attempt passed&lt;/td&gt;
&lt;td&gt;Passed on the first run&lt;/td&gt;
&lt;td&gt;Opus needs content-level validation and retry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Constraint search&lt;/td&gt;
&lt;td&gt;Passed&lt;/td&gt;
&lt;td&gt;Passed&lt;/td&gt;
&lt;td&gt;Both found the unique solution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Statistical correction&lt;/td&gt;
&lt;td&gt;Passed&lt;/td&gt;
&lt;td&gt;Passed&lt;/td&gt;
&lt;td&gt;Both rejected the false premise and gave the correct upper bound&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python code review&lt;/td&gt;
&lt;td&gt;Passed&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;content_filter&lt;/code&gt; 3 times in a row&lt;/td&gt;
&lt;td&gt;Fable is not currently suitable for unvalidated code-review traffic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Strict JSON incident summary&lt;/td&gt;
&lt;td&gt;Passed&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;content_filter&lt;/code&gt; 3 times in a row&lt;/td&gt;
&lt;td&gt;Fable is not currently suitable for this type of production incident text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Experimental design&lt;/td&gt;
&lt;td&gt;Passed&lt;/td&gt;
&lt;td&gt;Passed&lt;/td&gt;
&lt;td&gt;Both identified the unpaired samples and difficulty confounding&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;One-shot delivery rate in the main test:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude Opus 5: 6 / 7 = 85.7%
Claude Fable 5: 5 / 7 = 71.4%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After retry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude Opus 5: 7 / 7
Claude Fable 5: 5 / 7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, “delivery” does not mean the request succeeded. It means the business received a visible answer that satisfied the task requirements. If HTTP 200, the model name, and token usage are present but the body is empty, filtered, or only returns a greeting, the task still counts as failed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Math, Constraints, and Statistics: Both Models Were Reliable
&lt;/h2&gt;

&lt;p&gt;The math task used a three-state Markov chain and asked for the waiting time until first reaching state 3 from state 1:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;E1[τ]
E1[τ²]
Var1(τ)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both models returned:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;E1[τ] = 5
E1[τ²] = 43
Var1(τ) = 18
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;They also wrote out the transient matrix &lt;code&gt;Q&lt;/code&gt; and the equations for the first and second moments. This was not a case where the final numbers were correct but the derivation was inconsistent.&lt;/p&gt;

&lt;p&gt;The constraint-search task asked the model to place talks A, B, C, D, and E into five time slots while satisfying adjacency, ordering, gap, and non-adjacency constraints. Both models found the unique sequence:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A, C, E, B, D
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The statistical-correction task deliberately supplied a false conclusion: “The mean is 10 and the variance is 4, so &lt;code&gt;P(X≥14)=0.5&lt;/code&gt;.” Both models noted that two moments are insufficient to uniquely determine the tail probability, and used the one-sided Chebyshev/Cantelli inequality to obtain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;P(X &amp;gt;= 14) &amp;lt;= 0.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These three task types show that Fable 5’s speed advantage did not come from sacrificing basic reasoning correctness. On clear, short, verifiable math and logic tasks, it can work well as the lighter first hop.&lt;/p&gt;

&lt;p&gt;Earlier tests, including &lt;a href="https://crazyrouter.com/zh/blog/claude-fable-5-vs-claude-sonnet-5-api-test-2026" rel="noopener noreferrer"&gt;Claude Fable 5 vs Claude Sonnet 5 API testing&lt;/a&gt; and the &lt;a href="https://crazyrouter.com/zh/blog/glm-52-vs-claude-fable-5-output-budget-test-2026" rel="noopener noreferrer"&gt;GLM-5.2 vs Fable 5 output-budget test&lt;/a&gt;, point to the same lesson: to judge whether a model is production-ready, you have to evaluate correctness, output budget, and delivery shape together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Physics: Fable Completed on the First Run, Opus Recovered on the Third
&lt;/h2&gt;

&lt;p&gt;The physics task involved a two-degree-of-freedom oscillator with ground damping and coupling damping. The model had to compute the two undamped natural frequencies and the complex frequency response of the two masses at &lt;code&gt;ω=8 rad/s&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The reference values were:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ω1 = 10.0204 rad/s
ω2 = 16.2149 rad/s
|X1| = 0.14929 m, phase = -12.15°
|X2| = 0.07174 m, phase = -13.90°
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fable 5 returned all correct results on the first run. Opus 5, however, showed an anomaly that production teams should pay attention to: the API returned HTTP 200 and &lt;code&gt;finish_reason=stop&lt;/code&gt;, but the body contained only:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hi! How can I help you today?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The prompt token counts for both of those responses were only 10, which clearly did not match the real input. On the third execution of the same request, Opus 5 returned a complete answer after 34.901 seconds, and all six numeric values passed validation.&lt;/p&gt;

&lt;p&gt;This should not be classified as “the model got the physics wrong.” It is better understood as “the request context was not processed normally.” The simplest protection is not manual log inspection, but task-level validation at the caller: the answer must contain &lt;code&gt;ω1&lt;/code&gt;, &lt;code&gt;ω2&lt;/code&gt;, &lt;code&gt;X1&lt;/code&gt;, and &lt;code&gt;X2&lt;/code&gt;; if any field is missing, retry.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code and Strict JSON: Fable’s Filtering Was the Biggest Difference in This Round
&lt;/h2&gt;

&lt;p&gt;The code task asked the model to review a Python DFS cycle detector. The bug was ordinary: after completing DFS for a node, the code failed to remove it from the &lt;code&gt;visiting&lt;/code&gt; set, so a completed node could still be mistaken for a node on the recursion stack, causing false cycle reports on a DAG.&lt;/p&gt;

&lt;p&gt;Opus 5 correctly identified the minimal fix:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;visiting&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;discard&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;visited&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fable 5 did not return code analysis. Instead, it produced &lt;code&gt;finish_reason=content_filter&lt;/code&gt; with an empty body. To rule out system-prompt bias and one-off routing effects, we ran three rounds: the original test, a retest with a clean system prompt, and an independent single-task retry. All three ended with &lt;code&gt;content_filter&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The strict JSON task also contained no dangerous content. The input only listed request totals over 15 minutes, failures, channel attribution, retries that recovered, and mitigation actions, and asked for a JSON object. Opus 5 returned JSON that could be parsed directly; Fable 5 was again filtered 3 times in a row.&lt;/p&gt;

&lt;p&gt;These two failures underline a production point: &lt;strong&gt;safety filtering itself is part of a model API’s production capability.&lt;/strong&gt; If a model consistently false-filters ordinary code review or incident-review text, it cannot simply take over all business traffic, even if it is faster on math tasks.&lt;/p&gt;

&lt;p&gt;The response ID values for the two independent retries were:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Code review: gen-1784915384-vGI1PtuNXZG0IJ2YiaCz
Incident JSON: gen-1784915390-buOWZQSnqjgHeJ6nUogF
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Latency and Output Length
&lt;/h2&gt;

&lt;p&gt;To avoid counting short failed requests as a “speed advantage,” this section compares only the four tasks where both models succeeded: math, constraint search, statistical correction, and experimental design.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv4n55l10plo0sghmlnv6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv4n55l10plo0sghmlnv6.png" alt="Latency on mutually successful tasks for Claude Opus 5 and Claude Fable 5" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Claude Opus 5&lt;/th&gt;
&lt;th&gt;Claude Fable 5&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;P50 total latency&lt;/td&gt;
&lt;td&gt;10.729 s&lt;/td&gt;
&lt;td&gt;8.147 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;P50 first visible token&lt;/td&gt;
&lt;td&gt;8.376 s&lt;/td&gt;
&lt;td&gt;6.974 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Average visible completion tokens&lt;/td&gt;
&lt;td&gt;797.5&lt;/td&gt;
&lt;td&gt;452.3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In this small sample, Fable 5 had about 24% lower P50 total latency, about 17% lower time to first visible token, and about 43% shorter answers. For chat, batch summarization, and high-frequency structured tasks, those differences directly affect user wait time and downstream processing volume.&lt;/p&gt;

&lt;p&gt;But do not turn the median of 4 tasks into an SLA. Upstream load, caching, routing, and rate limiting can all change latency. Before going live, repeat the test 20–50 times with your own business prompts, then calculate P50, P95, P99, and the real cost per accepted result.&lt;/p&gt;

&lt;p&gt;Fable 5’s main-test responses provided a &lt;code&gt;cost&lt;/code&gt; field, totaling about &lt;code&gt;$0.24596&lt;/code&gt; across 7 calls. Opus 5’s usage did not provide a same-basis &lt;code&gt;cost&lt;/code&gt; field, so this article does not declare a dollar-cost winner. A missing field does not mean free usage, and unverified prices should not be used to fill the gap.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recommended Production Routing Strategy
&lt;/h2&gt;

&lt;p&gt;A single-model call is the easiest to implement, but it exposes every model anomaly directly to the end user. For the two models in this round, a more reasonable division of labor is as follows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fable 5 as the First Hop
&lt;/h3&gt;

&lt;p&gt;Suitable for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Math, constraint reasoning, and short summaries that have passed regression tests;&lt;/li&gt;
&lt;li&gt;Interactions sensitive to first-token latency and overall latency;&lt;/li&gt;
&lt;li&gt;Tasks where shorter answers reduce downstream processing burden.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The prerequisite is that the task family has already been tested for filtering, and the caller checks for &lt;code&gt;content_filter&lt;/code&gt;, empty bodies, and missing required fields.&lt;/p&gt;

&lt;h3&gt;
  
  
  Opus 5 as the High-Coverage Fallback
&lt;/h3&gt;

&lt;p&gt;Suitable for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unpredictable input types;&lt;/li&gt;
&lt;li&gt;Scenarios that require broader task coverage, such as code review, strict JSON, and complex physics;&lt;/li&gt;
&lt;li&gt;Cases where Fable 5 is filtered and the user request needs to be recovered automatically.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Opus 5 still should not be trusted without validation. The greeting anomaly in this round shows that HTTP 200 plus &lt;code&gt;stop&lt;/code&gt; can still fail to produce a business answer.&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenAI-Compatible Python Example
&lt;/h3&gt;

&lt;p&gt;The example below calls Fable 5 first, falls back to Opus 5 on filtering, empty content, or failed validation, and retries once more if Opus only returns a greeting.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://cn.crazyrouter.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;valid_answer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;required_terms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...])&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;normalized&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;normalized&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;normalized&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hi! how can i help&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;term&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;normalized&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;term&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;required_terms&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;call_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
        &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;choice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;finish_reason&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;routed_completion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;required_terms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;attempts&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-fable-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-opus-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;attempts&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;finish_reason&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;call_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;finish_reason&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content_filter&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;break&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;valid_answer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;required_terms&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;No model produced a valid business answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;routed_completion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Return a JSON incident summary with keys total, failed, recovered.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;required_terms&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'"&lt;/span&gt;&lt;span class="s"&gt;total&lt;/span&gt;&lt;span class="sh"&gt;"'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'"&lt;/span&gt;&lt;span class="s"&gt;failed&lt;/span&gt;&lt;span class="sh"&gt;"'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'"&lt;/span&gt;&lt;span class="s"&gt;recovered&lt;/span&gt;&lt;span class="sh"&gt;"'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A production implementation should also log the model, response ID, &lt;code&gt;finish_reason&lt;/code&gt;, total latency, and the reason validation failed. That is how you distinguish calculation errors, output truncation, content filtering, and routing that lost the input, instead of collapsing all of them into a vague “model failure.”&lt;/p&gt;

&lt;p&gt;If you are planning multi-model infrastructure, see &lt;a href="https://crazyrouter.com/zh/blog/ai-api-gateway-vs-aggregator-vs-direct-model-apis" rel="noopener noreferrer"&gt;the differences between an AI API gateway, an aggregator, and direct model APIs&lt;/a&gt;, as well as the &lt;a href="https://crazyrouter.com/zh/blog/kimi-k3-opus48-capability-efficiency-benchmark-20260719" rel="noopener noreferrer"&gt;seven-dimension Kimi K3 vs Opus 4.8 test&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Recommendation
&lt;/h2&gt;

&lt;p&gt;The most useful finding in this round is not which model scored higher, but that the two models failed in different ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fable 5’s advantage was that it was faster and shorter on shared successful tasks; its risk was that some ordinary business prompts repeatedly triggered filtering.&lt;/li&gt;
&lt;li&gt;Opus 5’s advantage was that it covered all tasks after retry; its risk was occasional greetings unrelated to the real input.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the recommendation is to put Fable 5 in front of validated high-frequency tasks, use Opus 5 as the broader-coverage fallback, and apply content-level validation on both paths. That is how model-comparison results become real reliability improvements, instead of just another leaderboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://crazyrouter.com/register?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=claude_opus5_fable5_benchmark_20260725&amp;amp;utm_content=claude-opus-5-vs-claude-fable-5-api-benchmark-2026-en__body_cta&amp;amp;utm_term=claude+model+routing" rel="noopener noreferrer"&gt;Create an API Key and reproduce this dual-model routing test&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is Claude Opus 5 always stronger than Claude Fable 5?
&lt;/h3&gt;

&lt;p&gt;This small sample does not support the claim that it is stronger on every task. Both models passed math, constraints, statistical correction, and experimental design; Fable 5 was faster and shorter, while Opus 5 had more complete task coverage. The choice should be based on task-specific success rates, not the model name.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Claude Fable 5 suitable for production?
&lt;/h3&gt;

&lt;p&gt;It is suitable for tasks that have passed regression testing. In this round, it was correct and relatively fast on several reasoning tasks, but code review and incident JSON repeatedly triggered filtering. Before launch, test the filtering rate with real prompts and configure Opus 5 or another model as fallback.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why is HTTP 200 still considered a failure?
&lt;/h3&gt;

&lt;p&gt;HTTP 200 only means the interface completed a response. An empty body, &lt;code&gt;finish_reason=content_filter&lt;/code&gt;, truncated output, or a greeting-only answer still cannot complete the business task. Production metrics should track the acceptance pass rate, not just the HTTP success rate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why is the returned model &lt;code&gt;anthropic/claude-fable-5&lt;/code&gt;?
&lt;/h3&gt;

&lt;p&gt;The request used &lt;code&gt;claude-fable-5&lt;/code&gt;, while the returned model in responses was consistently &lt;code&gt;anthropic/claude-fable-5&lt;/code&gt; with a provider prefix. This can be treated as a normalized alias; the prefix change alone is not enough evidence that a model substitution occurred.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can we directly compare the dollar cost of the two models?
&lt;/h3&gt;

&lt;p&gt;Not in this round. Fable 5’s responses provided a cost field, while Opus 5 did not provide a same-basis field. A rigorous cost comparison should use unified billing logs and measure “cost per accepted result.”&lt;/p&gt;

&lt;h3&gt;
  
  
  How many repetitions are needed before launch?
&lt;/h3&gt;

&lt;p&gt;For each core task family, run at least 20–50 repetitions, covering normal inputs, boundary inputs, long inputs, and inputs likely to trigger filtering. At minimum, record task success rate, filtering rate, empty-body rate, truncation rate, P50/P95/P99 latency, and cost.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I start testing?
&lt;/h3&gt;

&lt;p&gt;Use &lt;code&gt;https://cn.crazyrouter.com/v1&lt;/code&gt; as the OpenAI-compatible base URL, and call &lt;code&gt;claude-opus-5&lt;/code&gt; and &lt;code&gt;claude-fable-5&lt;/code&gt; separately. Keep prompts and parameters fixed, save the raw responses, and use local assertions or schema validation to determine whether the task was actually completed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://crazyrouter.com/register?utm_source=crazyrouter_blog&amp;amp;utm_medium=article&amp;amp;utm_campaign=claude_opus5_fable5_benchmark_20260725&amp;amp;utm_content=claude-opus-5-vs-claude-fable-5-api-benchmark-2026-en__final_cta&amp;amp;utm_term=claude+api+benchmark" rel="noopener noreferrer"&gt;Start your Claude dual-model test&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>benchmark</category>
    </item>
    <item>
      <title>Kimi K3 so với GPT-5.6-SOL: thử sức thực chiến mức khó cao về toán, vật lý và lập trình</title>
      <dc:creator>Jenny Met</dc:creator>
      <pubDate>Sat, 18 Jul 2026 01:17:19 +0000</pubDate>
      <link>https://dev.to/xujfcn/kimi-k3-so-voi-gpt-56-sol-thu-suc-thuc-chien-muc-kho-cao-ve-toan-vat-ly-va-lap-trinh-4ph5</link>
      <guid>https://dev.to/xujfcn/kimi-k3-so-voi-gpt-56-sol-thu-suc-thuc-chien-muc-kho-cao-ve-toan-vat-ly-va-lap-trinh-4ph5</guid>
      <description>&lt;h1&gt;
  
  
  Kimi K3 so với GPT-5.6-SOL: thử sức thực chiến mức khó cao về toán, vật lý và lập trình
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5x6vgkqdlq09ogmnzl4s.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5x6vgkqdlq09ogmnzl4s.webp" alt="vi benchmark overview" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lần này mình không test mấy câu hỏi đáp đơn giản, mà chốt hẳn ba bài cần suy luận nhiều bước: một bài xác suất có mẫu chồng lấp và moment bậc hai, một bài vật lý có mô-men quán tính của ròng rọc và chuyển trạng thái do dây chùng sau khi chạm đất, và một bài Python phụ thuộc vào closure, dung lượng nhiều ngày và tie-break ba tầng. Hai model dùng cùng một interface, cùng prompt và mức output cap gần tương đương, không bật tool và không dùng internet.&lt;/p&gt;

&lt;p&gt;Kết luận ngắn gọn trước:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;gpt-5.6-sol&lt;/code&gt; trả lời trọn vẹn ở cả ba bài, và kết quả tham chiếu cho toán lẫn vật lý đều đúng.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;kimi-k3&lt;/code&gt; ở mức trần &lt;code&gt;6500&lt;/code&gt; token vòng đầu thì cả toán và vật lý đều kết thúc với &lt;code&gt;finish_reason=length&lt;/code&gt;, phần nhìn thấy trống rỗng; riêng bài toán, tăng trần lên &lt;code&gt;10000&lt;/code&gt; vẫn bị cắt cụt. Bài lập trình thì sau khoảng 245 giây bị đọc timeout.&lt;/li&gt;
&lt;li&gt;Phần triển khai lập trình của GPT-5.6-SOL vượt qua các kiểm tra bổ sung độc lập về closure phụ thuộc, dung lượng, tie-break, dependency không hợp lệ và vòng lặp phụ thuộc, nhưng chính nó lại kèm một assert mẫu đầu tiên có expected value sai. Điều này cho thấy “thân code đúng” và “mọi test ví dụ đều đúng” là hai việc phải kiểm riêng.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Độ trễ trong bài viết này là giá trị quan sát được của lần request này, không đại diện cho SLA cố định. Ở lượt đồng thời đầu tiên, request toán và vật lý của GPT từng nhận HTTP 408, sau đó mình chuyển sang retry tuần tự; vì vậy tốc độ chỉ dùng để quan sát trải nghiệm gọi API, không dùng để tuyên bố xếp hạng tuyệt đối.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thiết lập test
&lt;/h2&gt;

&lt;p&gt;Thời điểm test là từ giờ Bắc Kinh &lt;code&gt;2026-07-17&lt;/code&gt; đến &lt;code&gt;2026-07-18&lt;/code&gt;, interface là:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST https://cn.crazyrouter.com/v1/chat/completions
model: kimi-k3 / gpt-5.6-sol
temperature: 0.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lượt đầu tiên dùng thống nhất: toán và vật lý &lt;code&gt;max_tokens=6500&lt;/code&gt;, lập trình &lt;code&gt;max_tokens=7500&lt;/code&gt;. Mỗi bài đều yêu cầu model đưa ra suy diễn có thể kiểm tra lại hoặc code có thể chạy, đồng thời ghi lại &lt;code&gt;finish_reason&lt;/code&gt;, completion/reasoning token, độ trễ request, độ đúng số học và việc code có chạy độc lập được trong Python 3.11 hay không.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bảng tổng kết kết quả
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;kimi-k3&lt;/th&gt;
&lt;th&gt;gpt-5.6-sol&lt;/th&gt;
&lt;th&gt;Kết luận&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Toán: kỳ vọng và phương sai của HHTH&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;length&lt;/code&gt;, 186.98 s, 6500 tokens; nội dung nhìn thấy trống&lt;/td&gt;
&lt;td&gt;Retry tuần tự &lt;code&gt;stop&lt;/code&gt;, 236.07 s, 6872 tokens&lt;/td&gt;
&lt;td&gt;GPT trả lời đầy đủ; Kimi vòng đầu chưa ra được đáp án&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vật lý: ròng rọc, chạm đất, lò xo&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;length&lt;/code&gt;, 202.05 s, 6500 tokens; nội dung nhìn thấy trống&lt;/td&gt;
&lt;td&gt;Retry tuần tự &lt;code&gt;stop&lt;/code&gt;, 156.29 s, 4501 tokens&lt;/td&gt;
&lt;td&gt;GPT đầy đủ và đúng số&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lập trình: dependency closure knapsack&lt;/td&gt;
&lt;td&gt;Sau 245.54 s &lt;code&gt;TimeoutError&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;stop&lt;/code&gt;, 87.96 s, 4514 tokens&lt;/td&gt;
&lt;td&gt;GPT code chạy được; Kimi chưa trả về code hoàn chỉnh&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kimi test lại môn toán&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;length&lt;/code&gt;, 286.99 s, 10000 tokens&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Tăng budget vẫn chưa xong&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Trong các request toán và vật lý của Kimi, reasoning token do API báo cáo lần lượt gần &lt;code&gt;6497&lt;/code&gt;; ở bài toán test lại, reasoning token gần &lt;code&gt;9997&lt;/code&gt;. Điều này không có nghĩa là Kimi không có năng lực suy luận, mà chỉ cho thấy với prompt của bài này và routing hiện tại, budget suy luận rất dễ bị hút cạn, khiến bên gọi không nhận được đáp án cuối.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bài toán: chồng lấp mẫu không chỉ ảnh hưởng kỳ vọng, mà còn ảnh hưởng cả phương sai
&lt;/h2&gt;

&lt;p&gt;Đề bài là: xác suất mặt ngửa &lt;code&gt;p=3/5&lt;/code&gt;, xác suất mặt sấp &lt;code&gt;q=2/5&lt;/code&gt;, tung liên tục cho đến khi lần đầu xuất hiện &lt;code&gt;HHTH&lt;/code&gt;, cho phép chồng lấp mẫu, hãy tìm &lt;code&gt;E[T]&lt;/code&gt; và &lt;code&gt;Var(T)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Automaton tiền tố đúng có các trạng thái &lt;code&gt;S0=tiền tố rỗng&lt;/code&gt;, &lt;code&gt;S1=H&lt;/code&gt;, &lt;code&gt;S2=HH&lt;/code&gt;, &lt;code&gt;S3=HHT&lt;/code&gt;, &lt;code&gt;S4=HHTH (trạng thái hấp thụ)&lt;/code&gt;. Chuyển trạng thái quan trọng là &lt;code&gt;S2 --H--&amp;gt; S2&lt;/code&gt;: khi đã có &lt;code&gt;HH&lt;/code&gt; mà lại ra &lt;code&gt;H&lt;/code&gt;, hậu tố dài nhất vẫn là &lt;code&gt;HH&lt;/code&gt;, không được sai mà quay về trạng thái rỗng.&lt;/p&gt;

&lt;p&gt;GPT-5.6-SOL lập hệ phương trình moment bậc nhất là:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;M0 = 1 + p M1 + q M0
M1 = 1 + p M2 + q M0
M2 = 1 + p M2 + q M3
M3 = 1 + q M0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tiếp tục lập hệ phương trình moment bậc hai, ta được:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;E[T]   = 715/54       ≈ 13.2407407407
E[T²]  = 195335/729   ≈ 267.9492455418
Var(T) = 270115/2916  ≈ 92.6320301783
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kỳ vọng còn có thể kiểm chứng độc lập bằng công thức biên. &lt;code&gt;HHTH&lt;/code&gt; có biên thực sự không rỗng duy nhất là một ký tự &lt;code&gt;H&lt;/code&gt;, nên &lt;code&gt;E[T] = 1/p + 1/(p³q) = 715/54&lt;/code&gt;. Câu trả lời đầy đủ của GPT bao gồm cả chuyển trạng thái, khai triển moment bậc hai và sanity check. Kimi ở cả mức &lt;code&gt;6500&lt;/code&gt; lẫn &lt;code&gt;10000&lt;/code&gt; đều không xuất ra phần suy diễn nhìn thấy được, nên lần này không thể chấm độ đúng toán của nó, chỉ có thể ghi nhận là “chưa hoàn thành trong budget”.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bài vật lý: sau khi chạm đất, ràng buộc bị ngắt, không thể bê nguyên phương trình năng lượng cũ
&lt;/h2&gt;

&lt;p&gt;Đề bài đặt như sau: &lt;code&gt;m_A=4.0 kg&lt;/code&gt; nằm trên mặt phẳng nghiêng nhám &lt;code&gt;25°&lt;/code&gt;, &lt;code&gt;μ_k=0.18&lt;/code&gt;; &lt;code&gt;m_B=3.0 kg&lt;/code&gt; treo; ròng rọc có &lt;code&gt;M_p=1.2 kg&lt;/code&gt;, &lt;code&gt;R=0.10 m&lt;/code&gt;; B đi xuống &lt;code&gt;1.50 m&lt;/code&gt; rồi chạm đất; dây ngay lập tức chùng; A trượt lên thêm &lt;code&gt;0.10 m&lt;/code&gt; thì chạm lò xo &lt;code&gt;k=250 N/m&lt;/code&gt;; &lt;code&gt;g=9.8 m/s²&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Trước khi chạm đất, dây căng và không trượt, khối lượng quán tính tương đương của ròng rọc là &lt;code&gt;I/R²=(1/2)M_p=0.60 kg&lt;/code&gt;. Ghép phương trình động lực học của hai vật và phương trình quay của ròng rọc, ta được:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;a  ≈ 0.847 m/s²
v1 ≈ 1.59 m/s
v2 ≈ 1.18 m/s
x  ≈ 0.0835 m = 8.35 cm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sau khi chạm đất, vận tốc của B bị thay đổi do va chạm với mặt đất, A vẫn còn vận tốc hướng lên dọc mặt phẳng nghiêng, và ròng rọc cũng có thể tiếp tục quay; hơn nữa đề đã nói rõ dây ngay lập tức chùng, nên không thể tiếp tục dùng &lt;code&gt;v_A=v_B=Rω&lt;/code&gt;. Giai đoạn sau chỉ nên phân tích riêng A:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;v2² = v1² - 2g(sinθ + μ_k cosθ)d
1/2 m_A v2² = 1/2 kx² + m_A g(sinθ + μ_k cosθ)x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GPT-5.6-SOL còn kiểm tra cả đơn vị, khoảng dừng khi không có lò xo, và sự khớp giữa năng lượng đàn hồi với tổn hao do ma sát/trọng lực, số liệu tự nhất quán. Kimi ở lượt đầu không tạo ra đáp án nhìn thấy được nên không thể so sánh chất lượng mô hình hóa trung gian.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bài lập trình: thân thuật toán qua kiểm độc lập, nhưng sample test của model có bug
&lt;/h2&gt;

&lt;p&gt;Bài lập trình yêu cầu cài &lt;code&gt;optimize_release_plan(items, capacity_by_day, dependencies)&lt;/code&gt;, xử lý dung lượng theo ngày, ngày không cấu hình thì dung lượng bằng 0, closure phụ thuộc trực tiếp và gián tiếp, dependency không hợp lệ và phát hiện chu trình, cùng tie-break ba tầng &lt;code&gt;value → risk → danh sách id đã sắp xếp&lt;/code&gt;. &lt;code&gt;items &amp;lt;= 18&lt;/code&gt;, nên brute-force bằng bitmask là baseline hợp lý.&lt;/p&gt;

&lt;p&gt;GPT-5.6-SOL dùng cache closure phụ thuộc và duyệt &lt;code&gt;2^n&lt;/code&gt; tập con. Mình tách code ra và kiểm tra độc lập trong Python 3.11: closure phụ thuộc, ví dụ dung lượng nhiều ngày, tie-break ba tầng &lt;code&gt;value/risk/id&lt;/code&gt;, dung lượng ngày chưa cấu hình, dependency không tồn tại và dependency vòng lặp, tổng cộng 6 nhóm kiểm tra đều qua.&lt;/p&gt;

&lt;p&gt;Nhưng ở cuối code, model lại kèm theo assert đầu tiên bị fail: nó viết &lt;code&gt;A -&amp;gt; B -&amp;gt; C&lt;/code&gt;, đồng thời lại đưa thêm &lt;code&gt;X&lt;/code&gt; có giá trị 11. Với dung lượng đã cho, tổng giá trị của &lt;code&gt;B + C + X&lt;/code&gt; là 13, cao hơn &lt;code&gt;A + B + C&lt;/code&gt; là 12, nên hàm trả về &lt;code&gt;['B', 'C', 'X']&lt;/code&gt; mới là đúng; assert viết &lt;code&gt;['A', 'B', 'C']&lt;/code&gt; là sai ở fixture test.&lt;/p&gt;

&lt;p&gt;Chi tiết này khá điển hình: làm bài code không thể chỉ nhìn thân hàm, cũng không thể vì “kèm 8 assert” mà mặc nhiên tin bộ test đó. Dữ liệu test do model sinh ra cũng cần được người viết hoặc reference implementation kiểm lại. Request lập trình của Kimi K3 thì sau khoảng 245 giây bị đọc timeout, không lấy được code hoàn chỉnh.&lt;/p&gt;

&lt;h2&gt;
  
  
  Đánh giá tổng hợp
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Khía cạnh&lt;/th&gt;
&lt;th&gt;kimi-k3&lt;/th&gt;
&lt;th&gt;gpt-5.6-sol&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Độ đầy đủ ở bài toán&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;6500/10000&lt;/code&gt; token đều bị cắt, không thể nghiệm thu&lt;/td&gt;
&lt;td&gt;Kỳ vọng, moment bậc hai, phương sai và sanity check đều đầy đủ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mô hình hóa vật lý&lt;/td&gt;
&lt;td&gt;Bị cắt ở vòng đầu&lt;/td&gt;
&lt;td&gt;Xử lý đúng quán tính ròng rọc, dây chùng và giai đoạn lò xo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bàn giao code&lt;/td&gt;
&lt;td&gt;Lượt này timeout&lt;/td&gt;
&lt;td&gt;Thân code qua kiểm độc lập, nhưng kèm một assert sai&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Độ ổn định đầu ra&lt;/td&gt;
&lt;td&gt;Tốn reasoning nhiều, dễ không có phần nhìn thấy&lt;/td&gt;
&lt;td&gt;Cả ba bài retry tuần tự đều &lt;code&gt;stop&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tốc độ phản hồi&lt;/td&gt;
&lt;td&gt;Khoảng 187–246 s, lại còn bị cắt/timeout&lt;/td&gt;
&lt;td&gt;Request thành công khoảng 88–236 s; lượt đầu đồng thời có 408&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Kết luận chính xác hơn không phải là “model nào chắc chắn thông minh hơn”, mà là:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Với routing và budget của lần test này, GPT-5.6-SOL dễ thu gọn suy luận phức tạp thành đáp án cuối hơn, hợp với workflow cần ngay lời giải hoặc code đọc được.&lt;/li&gt;
&lt;li&gt;Vấn đề lớn nhất của Kimi K3 là hiệu quả chuyển từ reasoning budget sang output nhìn thấy; dù tăng toán lên &lt;code&gt;10000&lt;/code&gt; token, nó vẫn chưa kết thúc.&lt;/li&gt;
&lt;li&gt;Code của GPT-5.6-SOL cũng không thể tin mù quáng. Logic hàm đã qua kiểm độc lập, nhưng bộ test đi kèm có lỗi tính giá trị.&lt;/li&gt;
&lt;li&gt;Khi chọn cho production, nên ghi đồng thời &lt;code&gt;finish_reason&lt;/code&gt;, reasoning token, độ trễ và kết quả test nội bộ; không thể chỉ nhìn câu cuối cùng kiểu “đáp án đúng”.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Cách tái hiện thí nghiệm
&lt;/h2&gt;

&lt;p&gt;Script test và kết quả retry theo thứ tự của lần này được lưu tại (tóm tắt của lượt đồng thời đầu tiên cũng đã được ghi vào output của script):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.tmp/kimi_k3_vs_gpt56sol_test.py
.tmp/kimi-k3-vs-gpt56sol-results.json
.tmp/retry-gpt56sol-math.json
.tmp/retry-gpt56sol-physics.json
.tmp/retry-gpt56sol-programming.json
.tmp/retry-kimi-k3-math.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Khi chạy lại, nên cố định model ID, prompt, temperature, &lt;code&gt;max_tokens&lt;/code&gt; và mức độ đồng thời, rồi lưu riêng từng output thành file độc lập. Tải upstream, cache hit và trạng thái rate limit đều có thể ảnh hưởng đến độ trễ; trong bài này, mình ghi nhận cả HTTP 408, &lt;code&gt;length&lt;/code&gt; và đọc timeout như một phần của kết quả test, chứ không giấu chúng đi.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgolptcw6d4yigxv738fe.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgolptcw6d4yigxv738fe.webp" alt="vi comparison chart" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>benchmark</category>
    </item>
    <item>
      <title>Kimi K3 im Vergleich zu GPT-5.6-SOL: Praxistest bei schweren Aufgaben aus Mathematik, Physik und Programmierung</title>
      <dc:creator>Jenny Met</dc:creator>
      <pubDate>Sat, 18 Jul 2026 01:15:52 +0000</pubDate>
      <link>https://dev.to/xujfcn/kimi-k3-im-vergleich-zu-gpt-56-sol-praxistest-bei-schweren-aufgaben-aus-mathematik-physik-und-i0p</link>
      <guid>https://dev.to/xujfcn/kimi-k3-im-vergleich-zu-gpt-56-sol-praxistest-bei-schweren-aufgaben-aus-mathematik-physik-und-i0p</guid>
      <description>&lt;h1&gt;
  
  
  Kimi K3 im Vergleich zu GPT-5.6-SOL: Praxistest bei schweren Aufgaben aus Mathematik, Physik und Programmierung
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgvw53dv7ljnc1tusfvg1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgvw53dv7ljnc1tusfvg1.png" alt="de benchmark overview" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Diesmal geht es nicht um einfache Q&amp;amp;A, sondern um drei fest definierte Aufgaben, die mehrstufiges Schlussfolgern verlangen: eine Wahrscheinlichkeitsaufgabe mit Musterüberlappung und zweitem Moment, eine Physikaufgabe mit Trägheitsmoment der Rolle und Umschalten durch Seilentspannung sowie eine Python-Aufgabe mit Closure, mehrtägigen Kapazitäten und dreistufigem Tie-Break. Beide Modelle liefen über dieselbe Schnittstelle, mit demselben Prompt und vergleichbaren Ausgabelimits, ohne Tools und ohne Internetzugriff.&lt;/p&gt;

&lt;p&gt;Vorab das Ergebnis:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;gpt-5.6-sol&lt;/code&gt; lieferte bei allen drei Aufgaben vollständige sichtbare Antworten; die Referenzwerte in Mathematik und Physik waren korrekt.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;kimi-k3&lt;/code&gt; endete unter dem ersten &lt;code&gt;6500&lt;/code&gt;-Token-Limit bei Mathematik und Physik jeweils mit &lt;code&gt;finish_reason=length&lt;/code&gt;; die sichtbare Antwort blieb leer. Selbst nach Erhöhung des Limits auf &lt;code&gt;10000&lt;/code&gt; bei der Matheaufgabe wurde der Output wieder abgeschnitten. Die Programmieraufgabe lief nach rund 245 Sekunden in einen Read-Timeout.&lt;/li&gt;
&lt;li&gt;Die Programmierimplementierung von GPT-5.6-SOL bestand unabhängige Zusatzprüfungen zu Dependency-Closure, Kapazität, Tie-Break, ungültigen Abhängigkeiten und Zyklen. Allerdings war die erste mitgelieferte Assertions-Beispielprüfung mit einem falschen Erwartungswert versehen. Das zeigt: „Kernlogik korrekt“ und „alle Beispieltests korrekt“ sind getrennt zu bewerten.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Die hier gemessene Latenz ist der beobachtete Wert dieser Anfrage und kein fester SLA-Wert. In den ersten parallelen Requests erhielt GPT für Mathematik und Physik zunächst HTTP 408; danach wurde sequenziell erneut versucht. Daher dient die Geschwindigkeit hier nur der Beobachtung der Nutzungserfahrung, nicht als absoluter Rangvergleich.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testaufbau
&lt;/h2&gt;

&lt;p&gt;Getestet wurde vom &lt;code&gt;2026-07-17&lt;/code&gt; bis &lt;code&gt;2026-07-18&lt;/code&gt; (Beijing-Zeit), über:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST https://cn.crazyrouter.com/v1/chat/completions
model: kimi-k3 / gpt-5.6-sol
temperature: 0.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In der ersten Runde galten einheitlich: Mathematik und Physik &lt;code&gt;max_tokens=6500&lt;/code&gt;, Programmierung &lt;code&gt;max_tokens=7500&lt;/code&gt;. Jede Aufgabe verlangte entweder eine überprüfbare Herleitung oder ausführbaren Code. Zusätzlich wurden &lt;code&gt;finish_reason&lt;/code&gt;, completion/reasoning tokens, Request-Latenz, numerische Korrektheit sowie die eigenständige Ausführbarkeit in Python 3.11 protokolliert.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gesamtergebnis-Tabelle
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aufgabe&lt;/th&gt;
&lt;th&gt;kimi-k3&lt;/th&gt;
&lt;th&gt;gpt-5.6-sol&lt;/th&gt;
&lt;th&gt;Beurteilung&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Mathematik: Erwartungswert und Varianz von HHTH&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;length&lt;/code&gt;, 186.98 s, 6500 tokens; sichtbarer Inhalt leer&lt;/td&gt;
&lt;td&gt;sequenzieller Retry &lt;code&gt;stop&lt;/code&gt;, 236.07 s, 6872 tokens&lt;/td&gt;
&lt;td&gt;GPT vollständig; Kimi in Runde 1 ohne Antwort&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Physik: Rolle, Bodenkontakt, Feder&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;length&lt;/code&gt;, 202.05 s, 6500 tokens; sichtbarer Inhalt leer&lt;/td&gt;
&lt;td&gt;sequenzieller Retry &lt;code&gt;stop&lt;/code&gt;, 156.29 s, 4501 tokens&lt;/td&gt;
&lt;td&gt;GPT vollständig und numerisch korrekt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Programmierung: Dependency-Closure-Rucksackproblem&lt;/td&gt;
&lt;td&gt;nach 245.54 s &lt;code&gt;TimeoutError&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;stop&lt;/code&gt;, 87.96 s, 4514 tokens&lt;/td&gt;
&lt;td&gt;GPT-Code lauffähig; Kimi gab keinen vollständigen Code zurück&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kimi Mathe-Repeat&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;length&lt;/code&gt;, 286.99 s, 10000 tokens&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Auch mit höherem Budget kein Abschluss&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Bei Kimi meldete die Schnittstelle für Mathematik und Physik jeweils einen reasoning token-Wert nahe &lt;code&gt;6497&lt;/code&gt;; beim Mathe-Repeat lag er nahe &lt;code&gt;9997&lt;/code&gt;. Das heißt nicht, dass Kimi keine Schlussfolgerungsfähigkeit hat, sondern dass unter diesem Prompt und über diesen Router das Reasoning-Budget sehr leicht aufgebraucht wird und der Auftraggeber am Ende keine finale Antwort erhält.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mathematikaufgabe: Musterüberlappung beeinflusst nicht nur den Erwartungswert, sondern auch die Varianz
&lt;/h2&gt;

&lt;p&gt;Die Aufgabe lautet: Bei Kopf-Wahrscheinlichkeit &lt;code&gt;p=3/5&lt;/code&gt; und Zahl-Wahrscheinlichkeit &lt;code&gt;q=2/5&lt;/code&gt; wird so lange geworfen, bis erstmals &lt;code&gt;HHTH&lt;/code&gt; erscheint, wobei Überlappungen erlaubt sind. Gesucht sind &lt;code&gt;E[T]&lt;/code&gt; und &lt;code&gt;Var(T)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Die korrekten Präfix-Automat-Zustände sind &lt;code&gt;S0=leeres Präfix&lt;/code&gt;, &lt;code&gt;S1=H&lt;/code&gt;, &lt;code&gt;S2=HH&lt;/code&gt;, &lt;code&gt;S3=HHT&lt;/code&gt;, &lt;code&gt;S4=HHTH (absorbierender Zustand)&lt;/code&gt;. Der entscheidende Übergang ist &lt;code&gt;S2 --H--&amp;gt; S2&lt;/code&gt;: Nach &lt;code&gt;HH&lt;/code&gt; bleibt bei erneutem &lt;code&gt;H&lt;/code&gt; der längste Suffix weiterhin &lt;code&gt;HH&lt;/code&gt;; man darf also nicht fälschlich auf den Leerzustand zurückfallen.&lt;/p&gt;

&lt;p&gt;Die von GPT-5.6-SOL aufgestellten Gleichungen für das erste Moment waren:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;M0 = 1 + p M1 + q M0
M1 = 1 + p M2 + q M0
M2 = 1 + p M2 + q M3
M3 = 1 + q M0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nach Aufstellen der Gleichungen für das zweite Moment ergibt sich:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;E[T]   = 715/54       ≈ 13.2407407407
E[T²]  = 195335/729   ≈ 267.9492455418
Var(T) = 270115/2916  ≈ 92.6320301783
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Der Erwartungswert lässt sich außerdem unabhängig über die Randformel gegenprüfen. Die nichtleeren echten Ränder von &lt;code&gt;HHTH&lt;/code&gt; bestehen aus dem Einzelzeichen &lt;code&gt;H&lt;/code&gt;, daher gilt &lt;code&gt;E[T] = 1/p + 1/(p³q) = 715/54&lt;/code&gt;. Die vollständige GPT-Antwort deckte Zustandsübergänge, die Herleitung des zweiten Moments und den Sanity Check ab. Kimi lieferte weder bei &lt;code&gt;6500&lt;/code&gt; noch bei &lt;code&gt;10000&lt;/code&gt; Tokens eine sichtbare Herleitung, daher lässt sich die mathematische Korrektheit in dieser Runde nicht bewerten; es bleibt bei „innerhalb des Budgets nicht abgeschlossen“.&lt;/p&gt;

&lt;h2&gt;
  
  
  Physikaufgabe: Nach dem Bodenkontakt reißt die Zwangsbedingung, dieselbe Energiebilanz gilt dann nicht mehr
&lt;/h2&gt;

&lt;p&gt;Gegeben sind: &lt;code&gt;m_A=4.0 kg&lt;/code&gt; auf einer rauen Ebene mit &lt;code&gt;25°&lt;/code&gt;, &lt;code&gt;μ_k=0.18&lt;/code&gt;; &lt;code&gt;m_B=3.0 kg&lt;/code&gt; hängt frei; die Rolle hat &lt;code&gt;M_p=1.2 kg&lt;/code&gt;, &lt;code&gt;R=0.10 m&lt;/code&gt;; nach dem Absenken um &lt;code&gt;1.50 m&lt;/code&gt; trifft B auf den Boden und das Seil wird sofort locker; A gleitet danach noch &lt;code&gt;0.10 m&lt;/code&gt; nach oben und trifft auf eine Feder mit &lt;code&gt;k=250 N/m&lt;/code&gt;; &lt;code&gt;g=9.8 m/s²&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Vor dem Bodenkontakt ist das Seil gespannt und es gibt kein Schlupfen. Die äquivalente Trägheitsmasse der Rolle ist &lt;code&gt;I/R²=(1/2)M_p=0.60 kg&lt;/code&gt;. Aus der gemeinsamen Bewegung von beiden Massen und der Rotationsgleichung der Rolle folgt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;a  ≈ 0.847 m/s²
v1 ≈ 1.59 m/s
v2 ≈ 1.18 m/s
x  ≈ 0.0835 m = 8.35 cm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nach dem Bodenkontakt ändert sich die Geschwindigkeit von B durch den Aufprall am Boden, A besitzt weiterhin eine Geschwindigkeit entlang der schiefen Ebene nach oben, und auch die Rolle kann sich noch weiterdrehen. Da die Aufgabe ausdrücklich sagt, dass das Seil sofort locker wird, darf man &lt;code&gt;v_A=v_B=Rω&lt;/code&gt; nicht einfach weiterverwenden. Danach ist nur noch A separat zu betrachten:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;v2² = v1² - 2g(sinθ + μ_k cosθ)d
1/2 m_A v2² = 1/2 kx² + m_A g(sinθ + μ_k cosθ)x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GPT-5.6-SOL prüfte zusätzlich die Dimensionen, die Stoppstrecke ohne Feder sowie die Konsistenz zwischen Federenergie und den Verlusten durch Reibung und Gewichtskraft. Die Zahlen stimmen in sich. Kimi erzeugte in der ersten Runde keine sichtbare Antwort, daher gibt es keinen Vergleich der Zwischenschritte.&lt;/p&gt;

&lt;h2&gt;
  
  
  Programmieraufgabe: Der Algorithmuskern ist nach unabhängiger Prüfung ok, aber das Modell brachte einen fehlerhaften eigenen Test mit
&lt;/h2&gt;

&lt;p&gt;Die Programmieraufgabe verlangte die Implementierung von &lt;code&gt;optimize_release_plan(items, capacity_by_day, dependencies)&lt;/code&gt;. Berücksichtigt werden mussten Tageskapazitäten, Kapazität &lt;code&gt;0&lt;/code&gt; für nicht konfigurierte Tage, transitive Dependency-Closure, ungültige Abhängigkeiten und Zyklenerkennung sowie ein dreistufiger Tie-Break über &lt;code&gt;value → risk → sortierte id-Liste&lt;/code&gt;. Da &lt;code&gt;items &amp;lt;= 18&lt;/code&gt; ist, ist eine Bitmasken-Enumeration ein vernünftiger Ausgangspunkt.&lt;/p&gt;

&lt;p&gt;GPT-5.6-SOL verwendete gecachte Dependency-Closure und eine &lt;code&gt;2^n&lt;/code&gt;-Teilmenge-Enumeration. Wir haben den Code herausgelöst und in Python 3.11 unabhängig geprüft: Dependency-Closure, Mehrtages-Kapazitätsbeispiele, die dreistufige Tie-Break-Reihenfolge &lt;code&gt;value/risk/id&lt;/code&gt;, nicht konfigurierte Tageskapazität, nicht vorhandene Abhängigkeiten und Zyklusabhängigkeiten – alle 6 Prüfungen bestanden.&lt;/p&gt;

&lt;p&gt;Allerdings schlug die erste im Code angehängte Assertion fehl: Dort stand &lt;code&gt;A -&amp;gt; B -&amp;gt; C&lt;/code&gt;, gleichzeitig war aber noch &lt;code&gt;X&lt;/code&gt; mit Wert 11 enthalten. Unter der gegebenen Kapazität beträgt der Gesamtwert von &lt;code&gt;B + C + X&lt;/code&gt; 13 und liegt damit über &lt;code&gt;A + B + C&lt;/code&gt; mit 12. Daher ist &lt;code&gt;['B', 'C', 'X']&lt;/code&gt; korrekt; die Assertion mit &lt;code&gt;['A', 'B', 'C']&lt;/code&gt; war ein Fehler im Test-Setup.&lt;/p&gt;

&lt;p&gt;Dieses Detail ist sehr typisch: Bei Codeaufgaben darf man nicht nur auf die Funktionslogik schauen, und man sollte auch nicht allein wegen „8 beigefügten Assertions“ die Tests für vertrauenswürdig halten. Auch vom Modell erzeugte Testdaten brauchen eine manuelle oder referenzbasierte Gegenprüfung. Der Programmier-Request von Kimi K3 lief nach rund 245 Sekunden in einen Read-Timeout, sodass kein vollständiger Code vorlag.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gesamtbewertung
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;kimi-k3&lt;/th&gt;
&lt;th&gt;gpt-5.6-sol&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Mathematische Vollständigkeit&lt;/td&gt;
&lt;td&gt;bei &lt;code&gt;6500/10000&lt;/code&gt; Token jeweils abgeschnitten, keine Abnahme möglich&lt;/td&gt;
&lt;td&gt;Erwartungswert, zweites Moment, Varianz und Sanity Check vollständig&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Physikalisches Modellieren&lt;/td&gt;
&lt;td&gt;in Runde 1 abgeschnitten&lt;/td&gt;
&lt;td&gt;Rolle mit Trägheit, Seilentspannung und Federphase korrekt behandelt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code-Lieferung&lt;/td&gt;
&lt;td&gt;in dieser Runde Timeout&lt;/td&gt;
&lt;td&gt;Kernlogik bestand unabhängige Prüfung, aber eine beigefügte Assertion war falsch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ausgabe-Stabilität&lt;/td&gt;
&lt;td&gt;hoher Reasoning-Verbrauch, sichtbare Antwort oft nicht verfügbar&lt;/td&gt;
&lt;td&gt;bei allen drei Aufgaben sequenzieller Retry mit &lt;code&gt;stop&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reaktionsgeschwindigkeit&lt;/td&gt;
&lt;td&gt;ca. 187–246 s, dazu Abschneiden/Timeout&lt;/td&gt;
&lt;td&gt;erfolgreiche Requests ca. 88–236 s; in der ersten parallelen Runde HTTP 408&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Die treffendere Schlussfolgerung lautet also nicht „ein Modell ist generell klüger“, sondern:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Unter diesem Router und Budget bringt GPT-5.6-SOL komplexes Reasoning eher bis zu einer finalen Antwort und eignet sich damit besser für Workflows, die sofort lesbare Herleitungen oder Code benötigen.&lt;/li&gt;
&lt;li&gt;Das Hauptproblem von Kimi K3 liegt in der Umwandlung von Reasoning-Budget in sichtbare Ausgabe; selbst bei &lt;code&gt;10000&lt;/code&gt; Tokens in der Matheaufgabe kam kein Abschluss zustande.&lt;/li&gt;
&lt;li&gt;Auch GPT-5.6-SOL darf man beim Code nicht blind vertrauen. Die Funktionslogik war unabhängig korrekt, aber das mitgelieferte Test-Setup hatte einen Fehler bei der Wertberechnung.&lt;/li&gt;
&lt;li&gt;Für eine belastbare Produktionsentscheidung sollten &lt;code&gt;finish_reason&lt;/code&gt;, reasoning tokens, Latenz und lokale Testergebnisse immer gemeinsam erfasst werden. Es reicht nicht, nur den letzten Satz „Antwort ist korrekt“ zu betrachten.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Reproduktion
&lt;/h2&gt;

&lt;p&gt;Die Testskripte und die Ergebnisse der sequenziellen Retries sind hier abgelegt (inklusive des in der ersten parallelen Runde erzeugten Summaries im Skript-Output):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.tmp/kimi_k3_vs_gpt56sol_test.py
.tmp/kimi-k3-vs-gpt56sol-results.json
.tmp/retry-gpt56sol-math.json
.tmp/retry-gpt56sol-physics.json
.tmp/retry-gpt56sol-programming.json
.tmp/retry-kimi-k3-math.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Für eine erneute Messung empfiehlt es sich, Modell-ID, Prompt, temperature, &lt;code&gt;max_tokens&lt;/code&gt; und Parallelitätsgrad zu fixieren und jede Ausgabe separat zu speichern. Last auf dem Upstream-Kanal, Cache-Treffer und Rate-Limiting-Zustand beeinflussen die Latenz; in diesem Artikel wurden HTTP 408, &lt;code&gt;length&lt;/code&gt; und Read-Timeout ausdrücklich als Teil des Testergebnisses protokolliert und nicht ausgeblendet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqcy6bhsrcy6nd1s4g0bw.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqcy6bhsrcy6nd1s4g0bw.webp" alt="de comparison chart" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>benchmark</category>
    </item>
    <item>
      <title>Kimi K3 と GPT-5.6-SOL の比較：数学・物理・プログラミングの高難度実測</title>
      <dc:creator>Jenny Met</dc:creator>
      <pubDate>Sat, 18 Jul 2026 01:14:30 +0000</pubDate>
      <link>https://dev.to/xujfcn/kimi-k3-to-gpt-56-sol-nobi-jiao-shu-xue-wu-li-puroguramingunogao-nan-du-shi-ce-421o</link>
      <guid>https://dev.to/xujfcn/kimi-k3-to-gpt-56-sol-nobi-jiao-shu-xue-wu-li-puroguramingunogao-nan-du-shi-ce-421o</guid>
      <description>&lt;h1&gt;
  
  
  Kimi K3 と GPT-5.6-SOL の比較：数学・物理・プログラミングの高難度実測
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0b11gmmsrzgxt2nrnvgu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0b11gmmsrzgxt2nrnvgu.png" alt="ja benchmark overview" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;今回は簡単なQ&amp;amp;Aではなく、連続推論が必要な3問に固定しました。具体的には、パターン重なりと二次モーメントを含む確率問題、滑車の回転慣性と糸のたるみへの切り替えが入る物理問題、そして closure、多日容量、3段階の tie-break に依存する Python 問題です。両モデルには同じインターフェース、同じプロンプト、近い出力上限を使い、ツールもネット接続も有効化していません。&lt;/p&gt;

&lt;p&gt;先に結論だけまとめます。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;gpt-5.6-sol&lt;/code&gt; は3問すべてで完全な可視回答を返し、数学と物理の参照結果も正しかったです。&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;kimi-k3&lt;/code&gt; は初回の &lt;code&gt;6500&lt;/code&gt; token 上限では、数学と物理のどちらも &lt;code&gt;finish_reason=length&lt;/code&gt; で終了し、可視回答は空でした。数学は上限を &lt;code&gt;10000&lt;/code&gt; に上げてもなお途中で切れました。プログラミング問題は約 245 秒後に read timeout になりました。&lt;/li&gt;
&lt;li&gt;GPT-5.6-SOL のプログラミング実装は、依存関係の閉包、多日容量、tie-break、無効な依存、循環依存の独立追加チェックをすべて通過しましたが、自身が添付した最初の assert サンプルには期待値の誤りがありました。つまり、「コード本体が正しい」ことと「サンプルテストも全部正しい」ことは分けて評価する必要があります。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;なお、ここでの遅延は今回のリクエストで観測された値であり、固定SLAを意味しません。初回の並列リクエストでは GPT の数学と物理が HTTP 408 を返したため、その後は順次リトライに切り替えました。したがって速度はあくまで呼び出し体験の観測値であり、絶対的な順位づけには使っていません。&lt;/p&gt;

&lt;h2&gt;
  
  
  テスト設定
&lt;/h2&gt;

&lt;p&gt;テスト日時は北京時間 &lt;code&gt;2026-07-17&lt;/code&gt; から &lt;code&gt;2026-07-18&lt;/code&gt;、インターフェースは以下です。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST https://cn.crazyrouter.com/v1/chat/completions
model: kimi-k3 / gpt-5.6-sol
temperature: 0.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;初回は共通で、数学と物理は &lt;code&gt;max_tokens=6500&lt;/code&gt;、プログラミングは &lt;code&gt;max_tokens=7500&lt;/code&gt; としました。各問題では、検算可能な導出または実行可能コードの提示を求め、&lt;code&gt;finish_reason&lt;/code&gt;、completion/reasoning token、リクエスト遅延、数値の正しさ、そしてコードが Python 3.11 で独立実行できるかを記録しました。&lt;/p&gt;

&lt;h2&gt;
  
  
  結果サマリー
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;タスク&lt;/th&gt;
&lt;th&gt;kimi-k3&lt;/th&gt;
&lt;th&gt;gpt-5.6-sol&lt;/th&gt;
&lt;th&gt;判定&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;数学：HHTH の期待値と分散&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;length&lt;/code&gt;，186.98 s，6500 tokens；可視内容は空&lt;/td&gt;
&lt;td&gt;順次リトライ &lt;code&gt;stop&lt;/code&gt;，236.07 s，6872 tokens&lt;/td&gt;
&lt;td&gt;GPT は完全回答；Kimi は初回で答案形成に至らず&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;物理：滑車、着地、ばね&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;length&lt;/code&gt;，202.05 s，6500 tokens；可視内容は空&lt;/td&gt;
&lt;td&gt;順次リトライ &lt;code&gt;stop&lt;/code&gt;，156.29 s，4501 tokens&lt;/td&gt;
&lt;td&gt;GPT は完全で数値も正確&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プログラミング：依存閉包バックパック&lt;/td&gt;
&lt;td&gt;245.54 s 後に &lt;code&gt;TimeoutError&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;stop&lt;/code&gt;，87.96 s，4514 tokens&lt;/td&gt;
&lt;td&gt;GPT のコードは実行可能；Kimi は完全なコードを返さず&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kimi 数学再測定&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;length&lt;/code&gt;，286.99 s，10000 tokens&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;予算を増やしても終了せず&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Kimi の数学と物理のリクエストでは、インターフェース上の reasoning token がそれぞれ &lt;code&gt;6497&lt;/code&gt; 前後でした。数学再測定では reasoning token が &lt;code&gt;9997&lt;/code&gt; 前後でした。これは Kimi に推論力がないという意味ではなく、この問題設定と現在のルーティングでは推論予算を使い切りやすく、呼び出し側が最終答案を受け取れないことを示しています。&lt;/p&gt;

&lt;h2&gt;
  
  
  数学問題：パターン重なりは期待値だけでなく分散にも効く
&lt;/h2&gt;

&lt;p&gt;問題は、正面確率 &lt;code&gt;p=3/5&lt;/code&gt;、裏面確率 &lt;code&gt;q=2/5&lt;/code&gt; のコインを投げ続け、&lt;code&gt;HHTH&lt;/code&gt; が初めて現れるまでの回数を &lt;code&gt;T&lt;/code&gt; としたときの &lt;code&gt;E[T]&lt;/code&gt; と &lt;code&gt;Var(T)&lt;/code&gt; を求めるものです。パターン重なりは許されます。&lt;/p&gt;

&lt;p&gt;正しい前方オートマトンの状態は &lt;code&gt;S0=空前缀&lt;/code&gt;、&lt;code&gt;S1=H&lt;/code&gt;、&lt;code&gt;S2=HH&lt;/code&gt;、&lt;code&gt;S3=HHT&lt;/code&gt;、&lt;code&gt;S4=HHTH（吸収状態）&lt;/code&gt; です。重要なのは &lt;code&gt;S2 --H--&amp;gt; S2&lt;/code&gt; という遷移で、&lt;code&gt;HH&lt;/code&gt; の後にさらに &lt;code&gt;H&lt;/code&gt; が出ても、最長接尾辞は依然として &lt;code&gt;HH&lt;/code&gt; であり、誤って空状態へ戻してはいけません。&lt;/p&gt;

&lt;p&gt;GPT-5.6-SOL が立てた一次モーメント方程式は次のとおりです。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;M0 = 1 + p M1 + q M0
M1 = 1 + p M2 + q M0
M2 = 1 + p M2 + q M3
M3 = 1 + q M0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;さらに二次モーメント方程式を立てると、次が得られます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;E[T]   = 715/54       ≈ 13.2407407407
E[T²]  = 195335/729   ≈ 267.9492455418
Var(T) = 270115/2916  ≈ 92.6320301783
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;期待値は境界公式でも独立に検算できます。&lt;code&gt;HHTH&lt;/code&gt; の非空真の境界は単一文字 &lt;code&gt;H&lt;/code&gt; なので、&lt;code&gt;E[T] = 1/p + 1/(p³q) = 715/54&lt;/code&gt; です。GPT の完全回答は、状態遷移、二次モーメントの展開、sanity check まで一通り含んでいました。Kimi は &lt;code&gt;6500&lt;/code&gt; と &lt;code&gt;10000&lt;/code&gt; のどちらの上限でも可視的な導出を出せなかったため、今回は数学の正確性を採点できず、「予算内で未完了」と記録しています。&lt;/p&gt;

&lt;h2&gt;
  
  
  物理問題：着地後は拘束が切れるので、同じエネルギー方程式をそのまま延長してはいけない
&lt;/h2&gt;

&lt;p&gt;設定は次のとおりです。&lt;code&gt;m_A=4.0 kg&lt;/code&gt; は &lt;code&gt;25°&lt;/code&gt; の粗い斜面上、&lt;code&gt;μ_k=0.18&lt;/code&gt;。&lt;code&gt;m_B=3.0 kg&lt;/code&gt; は吊り下げ。滑車は &lt;code&gt;M_p=1.2 kg&lt;/code&gt;、&lt;code&gt;R=0.10 m&lt;/code&gt;。B が &lt;code&gt;1.50 m&lt;/code&gt; 下降したあとに地面へ接触し、糸は直ちにたるみます。その後 A はさらに &lt;code&gt;0.10 m&lt;/code&gt; だけ斜面上方へ滑って &lt;code&gt;k=250 N/m&lt;/code&gt; のばねに接触します。&lt;code&gt;g=9.8 m/s²&lt;/code&gt; です。&lt;/p&gt;

&lt;p&gt;着地前は、糸は張っていて滑りなしなので、滑車の等価慣性質量は &lt;code&gt;I/R²=(1/2)M_p=0.60 kg&lt;/code&gt; です。2物体と滑車の回転方程式を連立すると、次のようになります。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;a  ≈ 0.847 m/s²
v1 ≈ 1.59 m/s
v2 ≈ 1.18 m/s
x  ≈ 0.0835 m = 8.35 cm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;着地後は、B の速度は地面との衝突で変化し、A はなお斜面上向きの速度を持ち、滑車も回転を続ける可能性があります。しかし問題文では糸が直ちにたるむと明記されているため、&lt;code&gt;v_A=v_B=Rω&lt;/code&gt; はもう使えません。以後は A のみを解析すべきです。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;v2² = v1² - 2g(sinθ + μ_k cosθ)d
1/2 m_A v2² = 1/2 kx² + m_A g(sinθ + μ_k cosθ)x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GPT-5.6-SOL は、次元整合性、ばねなしでの停止距離、ばねのエネルギーと摩擦・重力損失の和まで確認しており、数値的にも整合していました。Kimi は初回で可視回答を出せなかったため、中間のモデリング品質は比較できませんでした。&lt;/p&gt;

&lt;h2&gt;
  
  
  プログラミング問題：アルゴリズム本体は独立検証で通過、ただしモデル付属サンプルにバグあり
&lt;/h2&gt;

&lt;p&gt;この問題は &lt;code&gt;optimize_release_plan(items, capacity_by_day, dependencies)&lt;/code&gt; を実装し、日別容量、未設定日の容量は 0、直接・間接依存の閉包、無効な依存と循環検出、さらに &lt;code&gt;value → risk → ソート済み id 列表&lt;/code&gt; の3段階 tie-break を扱う必要があります。&lt;code&gt;items &amp;lt;= 18&lt;/code&gt; なので、bitmask 総当たりは妥当なベースラインです。&lt;/p&gt;

&lt;p&gt;GPT-5.6-SOL は依存閉包キャッシュと &lt;code&gt;2^n&lt;/code&gt; の部分集合列挙を使っていました。コードを抽出し、Python 3.11 で独立検査を行ったところ、依存閉包、多日容量サンプル、value/risk/id の3段階 tie-break、未設定日の容量、依存なしケース、循環依存の6組すべてが通過しました。&lt;/p&gt;

&lt;p&gt;ただし、モデルがコード末尾に付けた最初の assert は失敗しました。そこでは &lt;code&gt;A -&amp;gt; B -&amp;gt; C&lt;/code&gt; を前提にしつつ、価値 11 の &lt;code&gt;X&lt;/code&gt; も入れていました。与えられた容量では、&lt;code&gt;B + C + X&lt;/code&gt; の総価値は 13 で、&lt;code&gt;A + B + C&lt;/code&gt; の 12 より大きいので、関数が &lt;code&gt;['B', 'C', 'X']&lt;/code&gt; を返すのが正解です。&lt;code&gt;['A', 'B', 'C']&lt;/code&gt; と書かれた assert はテストフィクスチャの誤りです。&lt;/p&gt;

&lt;p&gt;この点はかなり示唆的です。コード問題は関数本体だけ見ればよいわけでもなく、逆に「8個のassertが付いているからテストも正しい」とは限りません。モデル生成のテストデータも、人手または参照実装で検証する必要があります。Kimi K3 のプログラミングリクエストは約 245 秒後に read timeout となり、完全なコードは取得できませんでした。&lt;/p&gt;

&lt;h2&gt;
  
  
  総合評価
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;観点&lt;/th&gt;
&lt;th&gt;kimi-k3&lt;/th&gt;
&lt;th&gt;gpt-5.6-sol&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;数学の完全性&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;6500/10000&lt;/code&gt; token ともに途中終了、検収不可&lt;/td&gt;
&lt;td&gt;期待値、二次モーメント、分散、sanity check が揃っている&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;物理モデリング&lt;/td&gt;
&lt;td&gt;初回で途中終了&lt;/td&gt;
&lt;td&gt;滑車慣性、糸のたるみ、ばね段階を正しく処理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;プログラミング納品&lt;/td&gt;
&lt;td&gt;今回は timeout&lt;/td&gt;
&lt;td&gt;コード本体は独立検査を通過したが、付属の assert に誤りあり&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;出力安定性&lt;/td&gt;
&lt;td&gt;reasoning 消費が大きく、可視回答を得にくい&lt;/td&gt;
&lt;td&gt;3問すべて順次リトライで &lt;code&gt;stop&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;応答速度&lt;/td&gt;
&lt;td&gt;約 187–246 s で、しかも途中終了/timeout あり&lt;/td&gt;
&lt;td&gt;成功したリクエストは約 88–236 s；並列初回は 408 あり&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;より正確に言うと、結論は「どちらか一方が絶対的に賢い」という話ではありません。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;今回のルーティングと予算では、GPT-5.6-SOL のほうが複雑な推論を最終答案までまとめやすく、すぐ読める導出やコードが必要なワークフローに向いています。&lt;/li&gt;
&lt;li&gt;Kimi K3 の主な課題は、推論予算を可視出力へ変換する効率です。数学問題で &lt;code&gt;10000&lt;/code&gt; token に増やしても、なお完了しませんでした。&lt;/li&gt;
&lt;li&gt;GPT-5.6-SOL のコードも盲信は禁物です。関数ロジックは独立検査を通っても、付属テストフィクスチャに価値計算ミスがありました。&lt;/li&gt;
&lt;li&gt;本番導入の選定では、&lt;code&gt;finish_reason&lt;/code&gt;、reasoning token、遅延、ローカルテスト結果を併記して記録すべきで、最後の一文が「答えは正しい」だけでは不十分です。&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  再現実験
&lt;/h2&gt;

&lt;p&gt;今回のテストスクリプトと順次リトライ結果は以下に保存しています（並列初回の要約もスクリプト出力に書き込んであります）。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.tmp/kimi_k3_vs_gpt56sol_test.py
.tmp/kimi-k3-vs-gpt56sol-results.json
.tmp/retry-gpt56sol-math.json
.tmp/retry-gpt56sol-physics.json
.tmp/retry-gpt56sol-programming.json
.tmp/retry-kimi-k3-math.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;再測定時は、モデル ID、プロンプト、temperature、&lt;code&gt;max_tokens&lt;/code&gt;、並列度を固定し、毎回の出力を別ファイルとして保存するのがおすすめです。上流の負荷、キャッシュヒット、レート制限の状態は遅延に影響します。本記事では HTTP 408、&lt;code&gt;length&lt;/code&gt;、read timeout をいずれもテスト結果の一部として記録し、意図的に隠していません。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fflry581v81wkct0tmik6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fflry581v81wkct0tmik6.png" alt="ja comparison chart" width="800" height="672"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>benchmark</category>
    </item>
  </channel>
</rss>
