В августе я дал моделям Anthropic 10 задач по арифметике для SaaS и забрал у них все инструменты. Одна из задач была прогнозом остатка на счёте: в начале там $420 000, расход $40 000 в месяц, выручка начинается с $18 000 и растёт на 11% в месяц. Opus 5 посчитал её до доллара. Haiku 4.5 не смог. Его промах я дважды приводил публично. 12 августа в X ответ был на $5775 меньше правильного. 18 августа в LinkedIn, после повторного прогона на 4 моделях, ответ ошибся на $8451. Я ещё добавил, что число всё равно выглядит правильным. Об этом я и писал: в ответе нет ничего, что говорило бы об ошибке.
Пример был удобный и я пользовался им как фактом про Haiku. Но у меня было 2 ответа, по одному на прогон. Они даже по знаку не совпадали. Каким окажется третий ответ, я не спрашивал.
Есть ляп и помельче. В обоих постах это названо прогнозом на 5 лет, а в вопросе 36 месяцев. В results.json того прогона стоит months: 36. А таблица в публичном репозитории показывает 60. Ещё в 2 строках этой таблицы число месяцев тоже неверное.
150 вызовов на один вопрос
12 октября я задал этот вопрос много раз. Запускал Claude Code 2.1.292 через claude -p из пустой папки, с --tools "" и пустым конфигом MCP, так что считать модели нечем. Ответившая модель сверяется по modelUsage, а не берётся из флага. Правильный ответ я посчитал в Python через Decimal, он равен $5 822 959,30.
Сначала я прогнал исходный промпт с одной строкой ANSWER: <number>: 30 раз на Haiku и 10 на Opus. Opus ответил точно 9 раз из 10, десятый ответ отличался на $4,19. Haiku точно не ответил ни разу из 30. 23 ответа легли в пределах $17 тысяч от правильного, медианный промах составил $2556, 9 ответов оказались выше правильного и 14 ниже. Остальные 7 легли около $6 507 000, это на $684 тысячи больше.
Поначалу я решил, что в этих 7 модель неправильно прочитала вопрос. Я начал считать месяцы. Выручка за 37 месяцев даёт $6 593 685, расходы за 35 месяцев дают $5 862 959. Ни то ни другое не подходит. Подходит деление суммы ряда на 0,10 вместо 0,11:
420000 + 18000 * (1.11^36 - 1) / 0.10 - 40000 * 36 = 6,507,255
Все 7 ответов лежат в пределах $6600 от этого числа. В этом промпте хода решения в ответе нет, так что для этих 7 деление на 0,10 выведено из совпадения чисел, а не увидено в решении.
Откуда берётся 0,10
Чтобы увидеть это своими глазами, я попросил модель расписать решение и сделал ещё 20 вызовов. 11 из 20 закончились около $6,5 миллиона, чаще, чем в коротком промпте. Во всех 11 ход решения делит на 0.10 или 0.1. Все 9 верных делят на 0.11. В 6 из 11 строкой выше знаменатель записан правильно:
Total Revenue = $18,000 × (1.11³⁶ - 1)/(1.11 - 1)
= $18,000 × (1.11³⁶ - 1)/0.10
Модель пишет общую формулу, подставляет 1,11 и на следующей строке 1.11 - 1 уже 0.10. В 3 из 11 этот шаг вообще не записан и решение сразу делит на 0.10. Это ошибка в одной цифре на самом простом шаге задачи. Именно эта цифра умножает выручку на 1,1.
Промах на $8k был другой ошибкой
Августовские промахи, минус $5775 и плюс $8451, вызваны не этой ошибкой. Они похожи на 23 близких ответа. Весь прогноз зависит от одного числа, 1,11 в степени 36, оно равно 42,818. В выручке оно умножается на 18 000 / 0,11, поэтому ошибка степени на 0,001 стоит в ответе $164.
Я проверил это за 30 вызовов промптом, который просит 3 строки: степень, выручку и ответ. Степени получились от 42,736 до 42,929. Медианный промах ответа был $742 и ошибка собственной степени модели, умноженная на 163 636, объясняет из них $741. В 27 из 30 ответ совпал с тем, что даёт собственная степень модели, с точностью до $10, в остальных 3 разница была от $200 до $1636. Отсюда не видно, считала ли модель сначала степень или подогнала напечатанную степень под уже готовый ответ. Сказать можно, где напечатанная степень расходится с верной: первая неверная цифра стоит в третьем знаке после запятой в 14 ответах из 30, в первом или втором в 13. Когда я 20 раз спросил одну только степень, Haiku ни разу не ответил 42,818084. В долларах прогноза разброс был от −$32 741 до +$41 223.
В этом промпте ошибки с 0.10 не было вообще, 0 из 30. Почему, я не знаю. Можно предположить, что, когда выручка пишется отдельной строкой, модель считает деление отдельно. Я этого не проверял и 30 вызовов это мало.
Попросить сказать, когда не уверен
Последнее, что я хотел узнать, это чувствует ли Haiku, что ошибся. Я взял тот же короткий промпт и добавил одно предложение: если ты не уверен, что число точное до доллара, допиши второй строкой UNSURE. Вызовов снова было 30.
Haiku написал UNSURE 7 раз. Все 7 пришлись на ответы, которые ошибались не больше чем на $2817. 4 ответа пришли с ошибкой +$684 тысячи. Ни один из них не был помечен. Opus с тем же предложением пометил 3 ответа из 10, хотя все 10 были точными.
Пометка, значит, есть, но она стоит на ответах, которые и так близки к правильному. И у многих близких ответов её тоже нет. 4 худших ответа пришли совсем без пометки.
Что для меня меняется
Пример, который я приводил в августе, был настоящим, но мелким. На этом вопросе ответ Haiku обычно отличается от правильного на несколько тысяч долларов, иногда до $17 тысяч. В промпте из 3 строк этот дрейф объясняет напечатанная степень. В 7 вызовах из 30 на исходном промпте Haiku ошибся на $684 тысячи, потому что 1.11 - 1 стало 0.10. Я цитировал дрейф и не видел этой ошибки, потому что смотрел на 1 ответ за прогон.
Если по числу я собираюсь что-то решать, модель не должна делить вообще. Это я говорил и в августе. Теперь я знаю, какой шаг ломается и как это выглядит на странице: (1.11 - 1) на одной строке и 0.10 на следующей.
Чего я не проверял
Я проверил только Haiku 4.5 и Opus 5 и только на одном вопросе. В других числах рядом с 0.11 может и не оказаться 0.10. Каждая серия это одна сессия от 10 до 30 вызовов, ни одну я не повторял, так что 7 из 30 против 0 из 30 против 11 из 20 это в лучшем случае намёк. Для больших ответов я проверил 2 других объяснения, оба про число месяцев, прежде чем сошлось деление на 0,10. Инструменты были выключены намеренно, хотя в жизни такое считают с инструментами.