---
type: Evaluation
title: "Независимая оценка ответа Haiku — пост 2026-09-02__msk__46316286 «Чиптрип-экспедиция «Краски Марокко»», prompt-v2"
description: "Оценщик Claude Opus сверил ответ Haiku с текстом поста по заданию EVALUATION-RUBRIC v2: страна, 10 мест маршрута, отели, единственное предложение экспедиции, дата, условия цены, перелёт, дословные поля, сомнения модели. Ожидаемый ответ агента и скрипт price-v1 не открывались."
resource: trip-places-hotels-prices-llm/posts-one-folder-per-post/2026-09-02__msk__46316286/prompt-v2/EVALUATION-independent-check-of-haiku-answer.md
tags: [cheaptrip, llm, haiku, evaluation, morocco, expedition]
generated: { by: claude-code/claude-opus-5-5, at: 2026-10-09T09:01:25Z }
status: stable
sources:
  - id: rubric
    resource: trip-places-hotels-prices-llm/prompt-v2/EVALUATION-RUBRIC-for-independent-opus-check-of-haiku-answer.md
    title: Задание оценщику
  - id: input
    resource: trip-places-hotels-prices-llm/posts-one-folder-per-post/2026-09-02__msk__46316286/prompt-v2/INPUT-user-message-exactly-as-sent-to-haiku.md
    title: Пост, как его видела модель
  - id: answer
    resource: trip-places-hotels-prices-llm/posts-one-folder-per-post/2026-09-02__msk__46316286/prompt-v2/ANSWER-haiku-json-for-this-post.json
    title: Ответ Haiku
  - id: check
    resource: trip-places-hotels-prices-llm/posts-one-folder-per-post/2026-09-02__msk__46316286/prompt-v2/CHECK-as-in-post-fields-found-in-post-text-report.md
    title: Отчёт скрипта о дословных полях
  - id: prompt
    resource: trip-places-hotels-prices-llm/posts-one-folder-per-post/2026-09-02__msk__46316286/prompt-v2/PROMPT-system-exactly-as-sent-to-haiku.md
    title: Системный промпт, как его видела модель
---

# Итог

- **Справилась с ошибками.** Всё, что видит покупатель, верно: страна «Марокко», все 10 мест маршрута, единственная цена «1859 € — без перелета*», дата «с 17 по 27 октября» → 2026-10-17, 10 ночей.
- Две мелкие ошибки на покупателя не влияют: дата вылета переписана не дословно; у «Сахары» неверный тип места.

# Счёт

| Что | В посте | В ответе | Дословно из поста |
|---|---|---|---|
| Страны | 1 | 1 | «Краски Марокко» (заголовок), метка «Марокко» |
| Места мельче страны | 10 | 10 | «Касабланка → Рабат (1 ночь) → Шефшауэн (1 ночь) → Фес (2 ночи) → Мерзуга (Сахара, 1 ночь) → Варзазат (1 ночь) → Айт-Бен-Хадду → Марракеш (2 ночи) → Эссуэйра (2 ночи) → Касабланка» — 9 разных мест плюс «Сахара» |
| Отели | 0 | 0 | названий нет, только «жить в сказочных риадах» |
| Туры без отелей | 1 | 1 | «Чиптрип-экспедиция «Краски Марокко»» |
| Предложения с ценой | 1 | 1 | «1859 € — без перелета*» |
| Лишние суммы, не предложения | 1 | 0 в `offers` | «* Стоимость перелета Москва — Касабланка — Москва от 750 €» — сноска о перелёте, верно не взята |

- Москва в посте есть только в сноске о перелёте: «Стоимость перелета Москва — Касабланка — Москва от 750 €». В счёт мест не входит: по промпту город вылета в `places` не пишется (см. замечание З3).
- «Северной Африки» — часть света, крупнее страны; не место и не страна, верно пропущено.

# Ошибки

| № | Что не так | Дословно из поста | Что в ответе | Как это скажется на покупателе |
|---|---|---|---|---|
| 1 | `departure_date_as_in_post` не дословный: модель собрала дату из диапазона. Скрипт эту строку в посте не нашёл | «Даты экспедиции: с 17 по 27 октября» | `"departure_date_as_in_post": "17 октября"` | Никак: `departure_date: "2026-10-17"` верен (публикация «2026-09-02», октябрь того же года). Пострадает только автоматическая проверка дословности — предложение попадёт в отчёт «не найдено» |
| 2 | `place_type` у Сахары — «регион или провинция»; Сахара — пустыня, в закрытом списке ей соответствует «природный объект: гора, озеро, река, лес» | «Мерзуга (Сахара, 1 ночь)»; «отправиться в Сахару и провести там ночь, посмотреть закат в пустыне» | `"place_name_nominative": "Сахара", "place_type": "регион или провинция"` | Слабо: если страница «Сахара» на сайте заведена как природный объект, сопоставление по типу может её не найти; по названию найдёт |

## Замечания — не ошибки, но стоит учесть

| № | Что | Дословно из поста | Что в ответе |
|---|---|---|---|
| З1 | `flight_included_evidence_as_in_post` пуст, хотя кусок о перелёте в посте есть. Поле в промпте описано только для случая «перелёт включён», поэтому модель формально права | «1859 € — без перелета*» | `"flight_included_evidence_as_in_post": null`; при этом у предложения верно `"flight_included": false` |
| З2 | Сахара взята из описания, а не из маршрута, хотя маршрут лучше показывает роль (ночёвка) и даёт название в именительном падеже. Правило промпта: «Бери кусок поста, из которого лучше всего видна роль» | «Мерзуга (Сахара, 1 ночь)» — маршрут; «отправиться в Сахару» — описание | `"place_name_as_in_post": "Сахару", "found_in": "другой текст поста"` |
| З3 | Город вылета оставлен пустым. Решение спорное, но объяснено в `doubts_comment`: перелёт в цену не входит, Москва названа только в сноске | «* Стоимость перелета Москва — Касабланка — Москва от 750 €» | `"departure_city_as_in_post": null`; в `doubts_comment` — та же цитата |
| З4 | Места с ночёвками получили роль «место по маршруту или программе», а не «место отеля». Модель выполнила шаг 6 промпта дословно, но определение «место отеля — турист там живёт» к ним тоже подходит | «Рабат (1 ночь)», «Фес (2 ночи)», «жить в сказочных риадах» | у всех 10 мест `"place_role_in_trip": "место по маршруту или программе"` |
| З5 | В `doubts_comment` объяснение типа Сахары противоречит выбранному значению: модель сама называет её пустыней, но ставит «регион» | «посмотреть закат в пустыне» | «тип Сахары («Сахара») выбран как регион — место не отеля, а пустыни» |
| З6 | Сахары нет в `route_place_names_as_in_post`, хотя она стоит в строке маршрута в скобках. Допустимо: это уточнение к Мерзуге, а в `places` Сахара есть | «Мерзуга (Сахара, 1 ночь)» | маршрут из 10 названий без «Сахара» |

## Разбор отчёта скрипта «не найдено»

| Поле | Значение в ответе | Что в посте | Вывод |
|---|---|---|---|
| `tours_without_hotel[0].offers[0].departure_date_as_in_post` | «17 октября» | «с 17 по 27 октября» | Ошибка модели (№ 1), не разница в пробелах: такой подстроки в посте нет |

# Что сделано хорошо

- **Пост распознан как экспедиция без отелей.** Отелей в посте нет — «жить в сказочных риадах» без названий; модель вернула `"hotels": []` и один тур в `tours_without_hotel`.
- **Маршрут — полностью и по порядку**, с Касабланкой в начале и в конце, как в «Касабланка → Рабат … → Эссуэйра (2 ночи) → Касабланка».
- **Все 9 городов маршрута и Сахара — в `places`**, с верными типами: «Мерзуга» и «Айт-Бен-Хадду» — «курорт или посёлок», остальные — «город».
- **Сноска о перелёте не стала предложением.** «Стоимость перелета Москва — Касабланка — Москва от 750 €» в `offers` нет; предложение одно — «1859 €».
- **Цена и условия точны.** `price_amount: 1859`, `price_currency: "EUR"`; `price_conditions_as_in_post` — дословно «Стоимость на 10 ночей на 1 человека:»; `price_is_for: "с человека, размещение не сказано"` — ровно по описанию из промпта для экспедиций.
- **Ночи сходятся с постом дважды:** «Стоимость на 10 ночей» и «с 17 по 27 октября» → `nights: 10`.
- **Перелёт верно не включён:** «без перелета*» → `flight_included: false`.
- **Год даты верен:** публикация «2026-09-02», «17 октября» → `2026-10-17`.
- **`room_category_as_in_post: null`** — категории номера в посте нет.
- **`doubts_comment` по делу и с цитатами** — объяснено, почему пуст город вылета, с дословной сноской.

# Что поправить в промпте

- **К ошибке 1** — в шаге 5, в блоке «Как читать строку цены», и в описании `departure_date_as_in_post` в схеме добавить:
  - «Даты диапазоном — „с 17 по 27 октября“, „17–27 октября“: в `departure_date_as_in_post` копируй весь диапазон дословно — „с 17 по 27 октября“; в `departure_date` — первый день: 2026-10-17. Не собирай дату „17 октября“ из частей — такой строки в посте нет».
- **К ошибке 2** — в описании `place_type` в схеме добавить пример:
  - «Пустыня, горы, озеро, река, лес — „природный объект: гора, озеро, река, лес“: „Сахара“ → природный объект, не „регион или провинция“».
- **К замечанию З1** — в шаге 2 и в описании `flight_included_evidence_as_in_post`:
  - «Кусок, по которому видно, что перелёт **не** входит, — тоже доказательство: „1859 € — без перелета*“ → `flight_included_evidence_as_in_post: "без перелета"`».
- **К замечанию З2** — в шаге 4, в правиле «Одно место — одна запись», добавить:
  - «Если место есть в строке маршрута, бери его оттуда: „Мерзуга (Сахара, 1 ночь)“ → „Сахара“, `found_in: "маршрут или программа тура"`».
- **К замечанию З3** — в шаге 2 решить и записать явно одно из двух:
  - «Перелёт не входит, но в сноске назван город вылета („Стоимость перелета Москва — Касабланка — Москва“) — это город вылета: „Москва“»;
  - или «… — город вылета не сказан, `null`».
- **К замечанию З4** — в шаге 6 уточнить роль мест с ночёвками в туре без отелей:
  - «Место маршрута, где группа ночует („Рабат (1 ночь)“), — роль „место отеля“ / роль „место по маршруту или программе“» — выбрать одно, чтобы определение роли «место отеля — турист там живёт» не спорило с шагом 6.
