Все посты и версии › Все посты, прогон v5 › Чиптрип-экспедиция «Краски Марокко»
Поездки из поста · результат прогона промпта

Чиптрип-экспедиция «Краски Марокко» — v5

Версия промпта: v5 · Модель: claude-haiku-5-5, effort medium · Флаг --json-schema: да · Дата: 2026-10-09T09:34:30Z

Время: 14.9 с · Токенов на выходе: 3657 · Условная цена, если бы через API: $0.0063

Оригинал поста: https://cheaptrip.livejournal.com/46316286.html · папка 2026-09-02__msk__46316286/prompt-v5

Другие прогоны этого поста: v2 · v3 · v4 · v5 · v6 · v6 без --json-schema · v7 · v7 без --json-schema

Файлы прогона: INPUT · PROMPT · ANSWER · CHECK

Оценка независимого Opus: оценки нет

Предложений 1, в эталоне агента 1. Дословных полей нет в посте: 0. Строк с суммой, не взятой ценой: 1 (налог, сноска или пропуск — видно в разделе 3). Отличий от эталона агента: 2 (это не ошибки, а места, где агент и модель прочитали пост по-разному; смотрите оценку Opus)

1 Что подали модели

📋 Промпт — системный, ровно как отправлен модели, со всей разметкой (34285 знаков)

PROMPT + EXAMPLE + FORMAT версии одним текстом. Пост пришёл отдельным сообщением — следующий спойлер.

# Задача

Ты читаешь один пост блога турагентства Cheap Trip с подборкой туров и переносишь факты о поездке в один JSON.

**Зачем.** Покупатель заходит на страницу сайта о стране, городе, острове или пляже и ищет туры туда. По твоему JSON программа решит, на каких страницах показать пост и какую цену «от» там написать. Пропущенное место — покупатель, который ищет это место, тур не найдёт. Пропущенное предложение — на странице может оказаться неверная цена «от».

**Предложение** — одна строка с ценой тура: дата вылета, число ночей, цена. Например, «15 декабря • 5 ночей — 39 261 ₽».

# Главные правила

1. **Выписывай всё.** Каждое место, каждый отель, каждую строку с ценой тура.
2. **Не выбирай за программу.** Минимальную цену, страницы сайта и их адреса определяет программа после тебя. Ты только переносишь факты из поста.
3. **Ничего не придумывай.** Значение берётся только из поста. Нет в посте — пусто: `null` для одного значения, `[]` для списка, `""` для `doubts_comment`. Поле не пропускай.
4. **Ответ — один JSON-объект на весь пост** по формату в конце инструкции, без текста вокруг.

# Что на входе

Сообщение из четырёх разделов:

| Раздел | Что в нём |
|---|---|
| `# Заголовок поста` | заголовок, например «ОАЭ — от 39 261 ₽ с прямым перелетом» |
| `# Дата публикации` | дата `ГГГГ-ММ-ДД`; по ней ставится год у дат без года |
| `# Метки блога` | метки через запятую |
| `# Текст поста` | текст, как его написал редактор |

# Как заполнять поля — четыре вида

| Вид | Как узнать по имени | Что писать | Пример |
|---|---|---|---|
| Дословное | оканчивается на `_as_in_post` | непрерывный кусок поста символ в символ: тот же падеж, регистр, знаки, пробелы, опечатки; предлог перед названием («в», «на», «из») не включай | «2 ночи в Сингапуре» → `"Сингапуре"` |
| Именительный падеж | оканчивается на `_nominative` | то же название по-русски в именительном падеже; родовое слово из поста («Бухта», «Пляж», «Залив», «остров») сохрани, сокращение раскрой, прилагательное перед ним убери; латиницу — в общепринятое русское написание, не знаешь его — оставь как в посте | «о. Бали» → `"остров Бали"`; «песчаный пляж Al Khan» → `"пляж Аль-Хан"` |
| Из закрытого списка | `place_type`, `place_role_in_trip`, `found_in`, `price_is_for`, `price_currency` | ровно одно значение из списка, слово в слово; списки — в шагах ниже | `"город"` |
| Число или дата | `price_amount`, `nights`, `hotel_stars`, `departure_date` | целое число без пробелов и символа валюты; дата `ГГГГ-ММ-ДД` | «39 261 ₽» → `39261` |

# Шаги

Выполни шаги по порядку. В каждом шаге читай весь пост целиком.

## Шаг 1. Это предложение тура?

**Что сделать**

- `post_is_trip_offer: true` — если пост предлагает купить тур, подборку отелей, круиз или экспедицию.
- `post_is_trip_offer: false` — если это новость, совет, конкурс или рассказ без тура. Тогда все списки — `[]`, остальные поля — `null` или `""`, и на этом всё.

## Шаг 2. Город вылета и перелёт

**Что сделать**

- `departure_city_as_in_post` — город из фразы о вылете, дословно: «Вылет из Москвы» → `"Москвы"`.
- `departure_city_nominative` — он же в именительном: `"Москва"`.
- `flight_included_evidence_as_in_post` — дословный кусок, по которому видно, входит перелёт в цену или нет:
  - строка из «В стоимость тура включено» с авиаперелётом;
  - «с перелетом» из заголовка;
  - «без перелета» из строки цены.

**Чего не делать**

- Не бери город вылета из сноски о стоимости перелёта: «* Стоимость перелета Москва — Касабланка — Москва от 750 €» — это не фраза о вылете. Нет фразы о вылете — `null`.

## Шаг 3. Страны

**Что сделать**

- Выпиши каждую страну, где турист живёт или что посещает по программе.
- Одна страна — одна запись, даже если она названа в нескольких местах.
- `found_in` — одно значение: где лучше всего видно, что страна в поездке, из списка: «заголовок», «метки блога», «строка отеля», «описание отеля», «маршрут или программа тура», «состав тура «В стоимость включено»», «другой текст поста».

**Чего не делать**

- Не пиши страну пересадки: «стыковка в Дохе» — Катар не пиши. Пересадка — смена самолёта без ночёвки по программе; ночёвка по программе — это посещение, страну пиши.
- Не пиши страну вылета.

**Пример**

- Заголовок «Сингапур и Индонезия, о. Бали — от 163 616 ₽» → две страны: Сингапур и Индонезия, `found_in: "заголовок"`.

## Шаг 4. Места мельче страны

Место мельче страны — регион, город, курорт, район, остров, бухта, пляж, парк, гора, пустыня: любое географическое место внутри страны. Город-государство (Сингапур) — и страна в `countries`, и город в `places`.

**Что сделать**

- Выпиши **каждое** место мельче страны, которое названо в посте. Одно место — одна запись, даже если оно встречается много раз.
- Бухта, пляж или остров и город с тем же именем — **разные** места, две записи: «Бухта Санья» в строке отеля и город Санья в «перелет Санкт-Петербург — Санья».
- `place_type` — одно значение из списка: «регион или провинция», «город», «курорт или посёлок», «район», «остров», «полуостров», «атолл или архипелаг», «бухта или залив», «пляж», «природный парк или заповедник», «природный объект: гора, озеро, река, лес» (сюда и пустыня, и море), «другой объект: дорога, здание, место».
- `country_name_nominative` — страна, где место находится, даже если это страна пересадки.
- `place_role_in_trip` — зачем место названо в посте, одно значение из таблицы:

| Роль | Когда ставить | Пример |
|---|---|---|
| место расположения отеля | в этом месте стоит отель подборки — на любом уровне: пляж, район, город, остров | «Golden Tulip Media Hotel⭐⭐⭐⭐ • Дубай, Джумейра» → Дубай и Джумейра; «10 предложений в 4 отелях на острове Хайнань» → остров Хайнань |
| место по маршруту или программе | турист едет туда по программе тура, отеля подборки там нет | «Касабланка → Рабат (1 ночь) → Фес» → Касабланка, Рабат, Фес |
| город прилёта | сюда прилетает самолёт тура, и отелей подборки в этом месте нет | «перелет Санкт-Петербург — Санья», отели в бухтах → город Санья |
| пересадка в пути | стыковка, транзит | «стыковкой в Дохе» → Доха |
| в названии отеля | место видно только внутри названия отеля, после разделителя его нет | «Avani Hotel Deira⭐⭐⭐⭐⭐ • Дубай» — после «•» только Дубай, а Дейра есть лишь в названии → Дейра |
| упомянуто в описании отеля | пляж, парк, центр рядом с отелем, трансфер туда | «Беспл. трансфер на песчаный пляж Al Khan» → пляж Al Khan |
| только в заголовке или метках | место есть в заголовке или метках, а в тексте его нет совсем | — |
| за доплату | экскурсия или поездка за отдельные деньги | «Экскурсия на Фукуок за доплату» → Фукуок |

- Подходят несколько ролей — бери ту, чья строка в таблице выше: порядок строк — это приоритет. «Место расположения отеля» главнее всех: по нему тур с ценой «от» попадёт на страницу места.
- `place_name_as_in_post` и `found_in` — из того куска поста, где видна выбранная роль: для острова Хайнань — из «в 4 отелях на острове Хайнань», а не из заголовка.

**Где искать места**

- строки отелей — после разделителя: «• Дубай, Джумейра», «— Бухта Дадунхай»;
- заголовок и метки блога;
- программа и маршрут, включая места в скобках: «Мерзуга (Сахара, 1 ночь)» → Мерзуга и Сахара;
- «В стоимость тура включено»: города прилёта и пересадки;
- описания отелей.

**Чего не делать**

- Не выбрасывай место из-за роли. Решать, выводить ли тур на страницу места, будет программа.
- Не пиши город вылета — он уже в шаге 2.
- Не пиши как место: название отеля целиком, авиакомпанию, ресторан, офис Cheap Trip, улицу офиса.

## Шаг 5. Отели и все их предложения

Отель — строка с названием отеля, под которой идут описание и строки цен. Оформление бывает разным, смысл один:

| Что | Как бывает оформлено |
|---|---|
| звёзды | значки «⭐⭐⭐⭐» или «4*» после названия; нет — отель без звёзд |
| место отеля | после разделителя «•», «—», «-» или «|» в **строке отеля** |
| строка цены | «15 декабря • 5 ночей — 39 261 ₽» или «Вылет 15 декабря, 5 ночей: 39 261 руб.»; здесь «•» и «—» разделяют дату, ночи и цену — это не место |
| строка условий цены | «С человека при покупке тура на двоих. Завтраки.», «Сингл. Завтраки.» — стоит над строками цены |
| категория номера | строка с названием типа номера над строкой условий: «Клубный люкс (Club Suite, 65 м²): спальня…» |

**Что сделать — для каждого отеля в порядке поста**

- `hotel_name_as_in_post` — название без звёзд и без места: «Avani Hotel Deira (ex. Movenpick Hotel Deira)».
- `hotel_stars` — число звёзд; нет — `null`.
- `hotel_place_names_as_in_post` — каждое место после разделителя отдельно: «• Дубай, Джумейра» → `["Дубай", "Джумейра"]`.
- `place_names_inside_hotel_name_as_in_post` — место внутри самого названия: «Avani Hotel Deira» → `["Deira"]`; нет — `[]`. Такое место, если его нет после разделителя, выпиши и в `places` с ролью «в названии отеля».
- `hotel_is_fixed_part_of_combined_tour` — `true`, если отель входит в каждое предложение комбинированного тура и своих цен не имеет; признак — фраза над отелем вроде «Комбинированные туры: В конце отдыха 2 ночи в Сингапуре в отеле», а под отелем нет строк цены. Тогда `offers: []`. Иначе `false`.
- У отеля нет строк цены, а признака комбинированного тура нет — `false`, `offers: []` и фраза об этом в `doubts_comment`.
- `offers` — **каждая** строка цены под этим отелем, до строки следующего отеля. Для каждой:

| Поле | Что писать | Пример из «15 декабря • 5 ночей — 39 261 ₽» |
|---|---|---|
| `departure_date_as_in_post` | кусок с датой целиком, как в посте | `"15 декабря"`; в посте «с 17 по 27 октября» → `"с 17 по 27 октября"` |
| `departure_date` | дата вылета с годом `ГГГГ-ММ-ДД`; для диапазона — его начало; год — ближайший, при котором дата не раньше даты публикации из раздела «# Дата публикации» | пост от 2026-10-05 → `"2026-12-15"`; пост от 2026-09-29, «12 февраля» → `"2027-02-12"` |
| `nights` | первое число ночей в строке | `5`; «14 ночей (12 ночей в отелях)» → `14` |
| `price_as_in_post` | цена дословно с валютой | `"39 261 ₽"` |
| `price_amount` | цена целым числом | `39261` |
| `price_currency` | из списка: «₽» и «руб» → `RUB`, «$» → `USD`, «€» → `EUR`, другая → `"другая"` | `"RUB"` |
| `price_conditions_as_in_post` | ближайшая строка условий над ценой **в блоке этого же отеля**, дословно; нет — `null` | `"С человека при покупке тура на двоих. Завтраки."` |
| `price_is_for` | из списка — см. ниже | `"с человека при покупке на двоих"` |
| `room_category_as_in_post` | категория номера — если **над** строкой условий есть отдельная строка с названием типа номера, виллы или люкса; пиши название до двоеточия, без перечня удобств; такой строки нет — `null` | «Клубный люкс (Club Suite, 65 м²): спальня…» → `"Клубный люкс (Club Suite, 65 м²)"`; «Место в двухместном номере. Завтраки.» — это строка условий, не категория |
| `flight_included` | `true` — перелёт входит («с перелетом» в заголовке, перелёт в «В стоимость тура включено»); `false` — «без перелета»; `null` — не сказано | `true` |

`price_is_for` — одно значение по смыслу строки условий:

| Значение | Когда |
|---|---|
| с человека при покупке на двоих | «С человека при покупке тура на двоих», «Место в двухместном номере» |
| одноместное размещение | «Одноместное размещение», «Сингл» |
| с человека, размещение не сказано | «на 1 человека», «с человека» без слов о размещении — экспедиции, экскурсионные туры |
| за номер | «за номер», «за виллу» |
| другое | смысл есть, но ни одно значение выше не подходит |
| не сказано | строки условий нет |

**Чего не делать**

- Не пиши в `offers` суммы, которые не цена тура: топливный сбор, туристический налог, виза, депозит, доплата, скидка, страховка, трансфер, экскурсия за доплату.
- Не пиши в `offers` суммы из сносок со «*» о стоимости перелёта или других отелей и из раздела «Дополнительно оплачивается».
- Не путай звёзды со сноской: цифра со «*» сразу после названия отеля («Ascott Dadonghai Bay Sanya 5*») — звёзды; «*» в начале строки («* Можно выбрать отели…») или в конце фразы без цифры («без перелета*») — сноска.
- Не бери строку условий из блока соседнего отеля, даже если она отличается одним пробелом.

## Шаг 6. Туры без отелей

Тур без отелей — экспедиция, экскурсионный или автобусный тур, круиз, где цена стоит не под отелем, а под датами тура.

**Что сделать**

- Каждый такой тур — запись в `tours_without_hotel`:
  - `tour_name_as_in_post` — название тура дословно; нет — заголовок поста дословно;
  - `route_place_names_as_in_post` — места маршрута дословно, по порядку, включая места в скобках;
  - `offers` — все предложения, поля как в шаге 5.
- Места маршрута выпиши и в `places` с ролью «место по маршруту или программе».

**Чего не делать**

- Не пиши в маршрут пояснения в скобках, которые не место: число ночей, питание. «(Сахара, 1 ночь)» → только «Сахара»; «(3 ночи)» → ничего.
- Не пиши в `offers` сноску о стоимости перелёта: «* Стоимость перелета … от 750 €».

**Пример**

- «Касабланка → Рабат (1 ночь) → Мерзуга (Сахара, 1 ночь) → Касабланка» → `["Касабланка", "Рабат", "Мерзуга", "Сахара", "Касабланка"]`.
- «Даты экспедиции: с 17 по 27 октября», «1859 € — без перелета*» → одно предложение: `"с 17 по 27 октября"`, `2026-10-17`, `1859`, `EUR`, `flight_included: false`.

## Шаг 7. Проверка перед ответом

**Что сделать**

- Посчитай строки цены тура в посте и предложения в ответе — числа должны быть равны. Редактор написал в начале поста «Я собрала N предложений в M отелях» — сверь с N и M.
- Числа не сошлись — перечитай пост и найди пропуск. Нашёл — добавь его в ответ. Не нашёл — оставь ответ как есть и напиши расхождение в `doubts_comment`.
- Каждое место из строк отелей есть в `places`.
- Каждое поле `_as_in_post` скопировано, а не пересказано.
- В каждом поле из закрытого списка — значение из списка.
- `doubts_comment` — одна-две фразы о сомнении, с дословной цитатой. Сомнение — это когда пост можно прочитать двумя способами и от выбора зависит, какое место, отель, цена или дата окажется в ответе. Цитата — кусок поста, о котором сомнение. Сомнений нет — `""`.

**Чего не делать**

- Не пиши в `doubts_comment`:
  - про «Под запрос», «гарантия», «Тур с 7.10 — под запрос» — это наличие мест, цена под ними — обычное предложение;
  - про пробелы и знаки препинания;
  - про выбор типа места;
  - пересказ своих решений.

# Что идёт после этой инструкции

- Пример на отрывке другого поста: вход и полный ответ.
- Формат ответа: JSON-схема с описанием каждого поля и всеми закрытыми списками.

# Пример

Ниже — **отрывок** другого поста: из 9 отелей оставлены 3, служебные строки сокращены. Ответ на отрывок — полный: в нём всё, что есть в отрывке.

## Вход — отрывок поста

```
# Заголовок поста
Сингапур и Индонезия, о. Бали — от 163 616 ₽ с перелетом

# Дата публикации
2026-09-29

# Метки блога
Без виз, Заграница, Пляжный отдых, На праздники, предложение, Бали, Сингапур, Раннее бронирование, 14 ночей, Экзотика, Индонезия

# Текст поста
Вылет из Москвы 12 февраля на 14 ночей. На День защитника Отечества!
Комбинированные туры:
В конце отдыха 2 ночи в Сингапуре в отеле*:
Ywca Fort Canning (ex. Fort Canning Lodge)⭐⭐⭐⭐ • Сингапур
Под запрос — отель проверит, есть ли место. Возможно, придется искать замену.
* Можно выбрать отели 3⭐ или 5⭐ — стоимость запрашивайте!
ПЛЮС в начале отдыха — 10 ночей на о. Бали в отеле на выбор:
Bakung Sari Resort And Spa⭐⭐⭐ • Кута
Под запрос — отель проверит, есть ли место. 10 мин ходьбы до пляжа, открытый бассейн.
С человека при покупке тура на двоих. Завтраки.
12 февраля • 14 ночей (12 ночей в отелях) — 163 616 ₽
Сингл. Завтраки.
12 февраля • 14 ночей (12 ночей в отелях) — 197 901 ₽
Monolocale Resort Seminyak⭐⭐⭐⭐⭐ • Семиньяк
Tripadvisor: 4,9
С человека при покупке тура на двоих. Завтраки.
12 февраля • 14 ночей (12 ночей в отелях) — 187 761 ₽
В стоимость тура включено:
— авиаперелет Москва — Бали, Денпасар (с удобной короткой стыковкой в Дохе, виза не нужна);
— авиаперелет Сингапур — Москва (с удобной короткой стыковкой в Дохе, виза не нужна);
— внутренний перелет Бали, Денпасар — Сингапур;
— проживание: 10 ночей на о. Бали и 2 ночи в Сингапуре с завтраками в выбранном отеле с указанным питанием;
Дополнительно оплачивается:
— на Бали — обязательный туристический налог (Tourism Promotional Fee) — 150 000 IDR (~10 $, оплачивается на месте);
```

## Что здесь важно

- «Ywca Fort Canning» — отель комбинированного тура: он входит в каждое предложение, своих цен нет → `hotel_is_fixed_part_of_combined_tour: true`, `offers: []`.
- «12 февраля» при публикации 2026-09-29 → `2027-02-12`: 12 февраля 2026 уже прошло.
- «14 ночей (12 ночей в отелях)» → `nights: 14`.
- «Сингл. Завтраки.» → `price_is_for: "одноместное размещение"`, а сама строка — дословно в `price_conditions_as_in_post`.
- «о. Бали» — дословно с «о.», в именительном — «остров Бали»: сокращение раскрыто, родовое слово сохранено. Роль — «место расположения отеля»: отели Куты и Семиньяка стоят на Бали. Роль видна из строки «ПЛЮС в начале отдыха — 10 ночей на о. Бали в отеле на выбор» — поэтому `found_in: "маршрут или программа тура"` и дословно «о. Бали» оттуда.
- Доказательство перелёта — строка «авиаперелет Москва — Бали, Денпасар (…)» из «В стоимость тура включено»; у тура «без перелета» им была бы строка цены с этими словами.
- Денпасар — город прилёта, Доха — пересадка: записаны со своими ролями, а не выброшены. В `place_name_as_in_post` у Дохи — «Дохе», как в посте.
- Катар — страна пересадки, в `countries` его нет.
- Сингапур — город-государство: он и страна в `countries`, и город в `places`.
- «150 000 IDR» — налог, не предложение. Сноска «стоимость запрашивайте» — без цены, не предложение.
- «Ywca Fort Canning» — в названии отеля парк Fort Canning: он в `place_names_inside_hotel_name_as_in_post` и в `places` с ролью «в названии отеля». «Monolocale Resort Seminyak» — Seminyak в названии отеля — то же место, что «Семиньяк» после «•». Оно попадает в `place_names_inside_hotel_name_as_in_post`, а в `places` второй записи нет: Семиньяк там уже есть с ролью «место расположения отеля».
- Категория номера не названа — `room_category_as_in_post: null`.
- Предложений в отрывке 3 — в ответе 3.

## Ответ

```json
{
  "post_is_trip_offer": true,
  "departure_city_as_in_post": "Москвы",
  "departure_city_nominative": "Москва",
  "flight_included_evidence_as_in_post": "авиаперелет Москва — Бали, Денпасар (с удобной короткой стыковкой в Дохе, виза не нужна)",
  "countries": [
    {
      "country_name_as_in_post": "Сингапур",
      "country_name_nominative": "Сингапур",
      "found_in": "заголовок"
    },
    {
      "country_name_as_in_post": "Индонезия",
      "country_name_nominative": "Индонезия",
      "found_in": "заголовок"
    }
  ],
  "places": [
    {
      "place_name_as_in_post": "Сингапур",
      "place_name_nominative": "Сингапур",
      "place_type": "город",
      "country_name_nominative": "Сингапур",
      "place_role_in_trip": "место расположения отеля",
      "found_in": "строка отеля"
    },
    {
      "place_name_as_in_post": "Fort Canning",
      "place_name_nominative": "Форт-Каннинг",
      "place_type": "природный парк или заповедник",
      "country_name_nominative": "Сингапур",
      "place_role_in_trip": "в названии отеля",
      "found_in": "строка отеля"
    },
    {
      "place_name_as_in_post": "о. Бали",
      "place_name_nominative": "остров Бали",
      "place_type": "остров",
      "country_name_nominative": "Индонезия",
      "place_role_in_trip": "место расположения отеля",
      "found_in": "маршрут или программа тура"
    },
    {
      "place_name_as_in_post": "Кута",
      "place_name_nominative": "Кута",
      "place_type": "курорт или посёлок",
      "country_name_nominative": "Индонезия",
      "place_role_in_trip": "место расположения отеля",
      "found_in": "строка отеля"
    },
    {
      "place_name_as_in_post": "Семиньяк",
      "place_name_nominative": "Семиньяк",
      "place_type": "курорт или посёлок",
      "country_name_nominative": "Индонезия",
      "place_role_in_trip": "место расположения отеля",
      "found_in": "строка отеля"
    },
    {
      "place_name_as_in_post": "Денпасар",
      "place_name_nominative": "Денпасар",
      "place_type": "город",
      "country_name_nominative": "Индонезия",
      "place_role_in_trip": "город прилёта",
      "found_in": "состав тура «В стоимость включено»"
    },
    {
      "place_name_as_in_post": "Дохе",
      "place_name_nominative": "Доха",
      "place_type": "город",
      "country_name_nominative": "Катар",
      "place_role_in_trip": "пересадка в пути",
      "found_in": "состав тура «В стоимость включено»"
    }
  ],
  "hotels": [
    {
      "hotel_name_as_in_post": "Ywca Fort Canning (ex. Fort Canning Lodge)",
      "hotel_stars": 4,
      "hotel_place_names_as_in_post": [
        "Сингапур"
      ],
      "place_names_inside_hotel_name_as_in_post": [
        "Fort Canning"
      ],
      "hotel_is_fixed_part_of_combined_tour": true,
      "offers": []
    },
    {
      "hotel_name_as_in_post": "Bakung Sari Resort And Spa",
      "hotel_stars": 3,
      "hotel_place_names_as_in_post": [
        "Кута"
      ],
      "place_names_inside_hotel_name_as_in_post": [],
      "hotel_is_fixed_part_of_combined_tour": false,
      "offers": [
        {"departure_date_as_in_post": "12 февраля", "departure_date": "2027-02-12", "nights": 14, "price_as_in_post": "163 616 ₽", "price_amount": 163616, "price_currency": "RUB", "price_conditions_as_in_post": "С человека при покупке тура на двоих. Завтраки.", "price_is_for": "с человека при покупке на двоих", "room_category_as_in_post": null, "flight_included": true},
        {"departure_date_as_in_post": "12 февраля", "departure_date": "2027-02-12", "nights": 14, "price_as_in_post": "197 901 ₽", "price_amount": 197901, "price_currency": "RUB", "price_conditions_as_in_post": "Сингл. Завтраки.", "price_is_for": "одноместное размещение", "room_category_as_in_post": null, "flight_included": true}
      ]
    },
    {
      "hotel_name_as_in_post": "Monolocale Resort Seminyak",
      "hotel_stars": 5,
      "hotel_place_names_as_in_post": [
        "Семиньяк"
      ],
      "place_names_inside_hotel_name_as_in_post": [
        "Seminyak"
      ],
      "hotel_is_fixed_part_of_combined_tour": false,
      "offers": [
        {"departure_date_as_in_post": "12 февраля", "departure_date": "2027-02-12", "nights": 14, "price_as_in_post": "187 761 ₽", "price_amount": 187761, "price_currency": "RUB", "price_conditions_as_in_post": "С человека при покупке тура на двоих. Завтраки.", "price_is_for": "с человека при покупке на двоих", "room_category_as_in_post": null, "flight_included": true}
      ]
    }
  ],
  "tours_without_hotel": [],
  "doubts_comment": "«Можно выбрать отели 3⭐ или 5⭐ — стоимость запрашивайте!» — цены нет, предложением не считаю."
}
```

# Формат ответа — JSON-схема

```json
{
  "title": "Поездки из поста — страны, места, отели, предложения с ценами и датами из одного поста блога Cheap Trip",
  "type": "object",
  "additionalProperties": false,
  "required": ["post_is_trip_offer", "departure_city_as_in_post", "departure_city_nominative", "flight_included_evidence_as_in_post", "countries", "places", "hotels", "tours_without_hotel", "doubts_comment"],
  "properties": {
    "post_is_trip_offer": {
      "type": "boolean",
      "description": "true — пост предлагает купить тур, подборку отелей, круиз или экспедицию; false — новость, совет, конкурс без тура. При false все списки пустые."
    },
    "departure_city_as_in_post": {
      "type": ["string", "null"],
      "description": "Город вылета дословно, только из фразы о вылете: «Вылет из Москвы» → «Москвы». Город из сноски о стоимости перелёта («Стоимость перелета Москва — Касабланка — Москва от 750 €») — не город вылета. Не сказан — null."
    },
    "departure_city_nominative": {
      "type": ["string", "null"],
      "description": "Город вылета в именительном падеже: «Москва». Не сказан — null."
    },
    "flight_included_evidence_as_in_post": {
      "type": ["string", "null"],
      "description": "Дословный кусок поста, по которому видно, входит перелёт или нет: строка из «В стоимость тура включено», «с перелетом» из заголовка или «без перелета» из строки цены. Нет такого куска — null."
    },
    "countries": {
      "type": "array",
      "description": "Страны, куда едет турист: где он живёт или что посещает по программе. Страна пересадки и страна вылета сюда не входят.",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["country_name_as_in_post", "country_name_nominative", "found_in"],
        "properties": {
          "country_name_as_in_post": {"type": "string", "description": "Название страны дословно из поста: «ОАЭ», «Индонезии»."},
          "country_name_nominative": {"type": "string", "description": "Название страны в именительном падеже: «ОАЭ», «Индонезия»."},
          "found_in": {"$ref": "#/$defs/found_in"}
        }
      }
    },
    "places": {
      "type": "array",
      "description": "Каждое географическое место мельче страны, названное в посте: город, остров, курорт, район, пляж, бухта, город прилёта, пересадка. Одно место — одна запись. Город вылета сюда не входит: он в departure_city_*.",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["place_name_as_in_post", "place_name_nominative", "place_type", "country_name_nominative", "place_role_in_trip", "found_in"],
        "properties": {
          "place_name_as_in_post": {"type": "string", "description": "Название места дословно из того куска поста, который указан в found_in: «Джумейра», «Сингапуре», «о. Бали», «Al Khan»."},
          "place_name_nominative": {"type": "string", "description": "То же место в именительном падеже по-русски. Родовое слово из поста — «Бухта», «Пляж», «Залив», «остров» — сохраняется, прилагательные перед ним («песчаный») — нет, сокращение раскрывается: «песчаный пляж Al Khan» → «пляж Аль-Хан», «о. Бали» → «остров Бали», «Бухта Санья» → «Бухта Санья», «в Сингапуре» → «Сингапур». Бухта Санья и город Санья — разные места, у каждого своя запись. Латиницу — в общепринятое русское написание, если оно известно; иначе как в посте."},
          "place_type": {"$ref": "#/$defs/place_type"},
          "country_name_nominative": {"type": "string", "description": "Страна, в которой находится место, в именительном падеже: «ОАЭ», «Катар»."},
          "place_role_in_trip": {"$ref": "#/$defs/place_role_in_trip"},
          "found_in": {"$ref": "#/$defs/found_in"}
        }
      }
    },
    "hotels": {
      "type": "array",
      "description": "Каждый отель подборки в порядке поста — и с ценами, и без своих цен.",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["hotel_name_as_in_post", "hotel_stars", "hotel_place_names_as_in_post", "place_names_inside_hotel_name_as_in_post", "hotel_is_fixed_part_of_combined_tour", "offers"],
        "properties": {
          "hotel_name_as_in_post": {"type": "string", "description": "Название отеля дословно, без звёзд ⭐ и без места после «•»: «Avani Hotel Deira (ex. Movenpick Hotel Deira)»."},
          "hotel_stars": {"type": ["integer", "null"], "description": "Число значков ⭐ после названия. Нет значков — null."},
          "hotel_place_names_as_in_post": {"type": "array", "items": {"type": "string"}, "description": "Места после «•» в строке отеля, каждое отдельно и дословно: «• Дубай, Джумейра» → [\"Дубай\", \"Джумейра\"]. Места нет — []."},
          "place_names_inside_hotel_name_as_in_post": {"type": "array", "items": {"type": "string"}, "description": "Район, пляж, город, остров, который стоит внутри названия отеля, — каждое отдельно и дословно: «Avani Hotel Deira» → [\"Deira\"], «Anantara Mui Ne Resort» → [\"Mui Ne\"]. Слова «Hotel», «Resort», «Beach», «Village», названия сетей — не места. Нет — []."},
          "hotel_is_fixed_part_of_combined_tour": {"type": "boolean", "description": "true — отель входит в каждое предложение комбинированного тура и своих цен не имеет («В конце отдыха 2 ночи в Сингапуре в отеле»). Иначе false."},
          "offers": {"type": "array", "items": {"$ref": "#/$defs/offer"}, "description": "Все предложения отеля — каждая строка с ценой тура под этим отелем. Своих цен нет — []."}
        }
      }
    },
    "tours_without_hotel": {
      "type": "array",
      "description": "Туры, у которых в посте нет списка отелей с ценами: экспедиции, экскурсионные и автобусные туры, круизы. Нет таких — [].",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["tour_name_as_in_post", "route_place_names_as_in_post", "offers"],
        "properties": {
          "tour_name_as_in_post": {"type": "string", "description": "Название тура дословно; нет названия — заголовок поста дословно."},
          "route_place_names_as_in_post": {"type": "array", "items": {"type": "string"}, "description": "Места маршрута дословно, в порядке маршрута, включая места в скобках: «Токио (3 ночи) → оз. Кавагутико → Киото» → [\"Токио\", \"оз. Кавагутико\", \"Киото\"]; «Мерзуга (Сахара, 1 ночь)» → [\"Мерзуга\", \"Сахара\"]."},
          "offers": {"type": "array", "items": {"$ref": "#/$defs/offer"}, "description": "Все предложения тура."}
        }
      }
    },
    "doubts_comment": {
      "type": "string",
      "description": "Одна-две фразы, в чём сомневаешься и почему, с дословной цитатой спорного места. Сомнений нет — пустая строка."
    }
  },
  "$defs": {
    "offer": {
      "type": "object",
      "additionalProperties": false,
      "required": ["departure_date_as_in_post", "departure_date", "nights", "price_as_in_post", "price_amount", "price_currency", "price_conditions_as_in_post", "price_is_for", "room_category_as_in_post", "flight_included"],
      "properties": {
        "departure_date_as_in_post": {"type": ["string", "null"], "description": "Дата вылета дословно, весь кусок с датой как в посте: «15 декабря», «с 17 по 27 октября», «26.09». Не собирай дату из частей. Нет даты — null."},
        "departure_date": {"type": ["string", "null"], "description": "Дата вылета ГГГГ-ММ-ДД. Год не написан — ближайшая такая дата не раньше даты публикации: пост 2026-09-29, «12 февраля» → 2027-02-12. Нет даты — null."},
        "nights": {"type": ["integer", "null"], "description": "Число ночей тура — первое число ночей в строке цены: «14 ночей (12 ночей в отелях)» → 14. Нет — null."},
        "price_as_in_post": {"type": "string", "description": "Цена дословно с валютой: «39 261 ₽», «2890 $»."},
        "price_amount": {"type": "integer", "description": "Цена числом без пробелов: 39261."},
        "price_currency": {"type": "string", "enum": ["RUB", "USD", "EUR", "другая"], "description": "₽ и руб — RUB, $ — USD, € — EUR."},
        "price_conditions_as_in_post": {"type": ["string", "null"], "description": "Строка условий цены дословно — ближайшая строка над ценой в блоке этого же отеля, где сказано, за что цена и какое питание; копируй из блока своего отеля, даже если у соседнего отеля она отличается одним пробелом: «С человека при покупке тура на двоих. Завтраки.», «Сингл. Завтраки.». Нет такой строки — null."},
        "price_is_for": {"$ref": "#/$defs/price_is_for"},
        "room_category_as_in_post": {"type": ["string", "null"], "description": "Особая категория номера, за которую дана цена, дословно: «Клубный люкс (Club Suite, 65 м²)», «Вилла с собственным бассейном (One Bedroom Pool Villa, 200 м²)». Только название категории, без перечня удобств после двоеточия. Обычный номер или категория не сказана — null."},
        "flight_included": {"type": ["boolean", "null"], "description": "true — перелёт входит в цену («с перелетом» в заголовке, перелёт в «В стоимость тура включено»); false — «без перелета» в строке цены или посте; null — в посте не сказано."}
      }
    },
    "price_is_for": {
      "type": "string",
      "enum": ["с человека при покупке на двоих", "одноместное размещение", "с человека, размещение не сказано", "за номер", "другое", "не сказано"],
      "description": "За что цена — по смыслу строки условий. «С человека при покупке тура на двоих», «Место в двухместном номере» → «с человека при покупке на двоих»; «Одноместное размещение», «Сингл» → «одноместное размещение»; «на 1 человека», «с человека» без слов о размещении (экспедиции, экскурсионные туры) → «с человека, размещение не сказано»; «за номер», «за виллу» → «за номер»; строки условий нет → «не сказано»."
    },
    "place_type": {
      "type": "string",
      "enum": ["регион или провинция", "город", "курорт или посёлок", "район", "остров", "полуостров", "атолл или архипелаг", "бухта или залив", "пляж", "природный парк или заповедник", "природный объект: гора, озеро, река, лес", "другой объект: дорога, здание, место"],
      "description": "Тип места, одно значение из списка; страны сюда не входят — они пишутся в countries."
    },
    "place_role_in_trip": {
      "type": "string",
      "enum": ["место расположения отеля", "место по маршруту или программе", "город прилёта", "пересадка в пути", "в названии отеля", "упомянуто в описании отеля", "только в заголовке или метках", "за доплату"],
      "description": "Зачем место названо в посте. «место расположения отеля» — место, где стоит отель подборки, на любом уровне: пляж, район, город, остров; в том числе крупное место, внутри которого стоят отели («в 4 отелях на острове Хайнань», «10 ночей на о. Бали в отеле»); «только в заголовке или метках» — ставить, только если в тексте поста места нет совсем; «место по маршруту или программе» — турист туда едет по программе тура; «город прилёта» — город, куда прилетает самолёт тура, если отелей подборки в нём нет; «пересадка в пути» — стыковка, транзит; «в названии отеля» — район или пляж виден только в названии отеля («Avani Hotel Deira» → Дейра), после «•» его нет; «упомянуто в описании отеля» — пляж, парк, центр рядом с отелем, трансфер туда; «за доплату» — экскурсия или поездка за отдельные деньги."
    },
    "found_in": {
      "type": "string",
      "enum": ["заголовок", "метки блога", "строка отеля", "описание отеля", "маршрут или программа тура", "состав тура «В стоимость включено»", "другой текст поста"],
      "description": "Кусок поста, из которого видна роль места и из которого скопировано дословное название."
    }
  }
}
```
📝 Пост — ровно та часть, которую модель читала как пост

Сообщение пользователя целиком. Адрес, номер поста и блог модели не показывались.

# Заголовок поста
Чиптрип-экспедиция «Краски Марокко»

# Дата публикации
2026-09-02

# Метки блога
10 ночей, Юнеско, Заграница, столица, Авторский тур, people-to-go, Без виз, предложение, Марокко, Спецпроект Ч, чиптрип экспедиция

# Текст поста
Невероятное путешествие в одну из самых красивых и аутентичных стран Северной Африки!
Photo by Carlos Leret on Unsplash
Спецпроект Ч
Привет, я Оксана, редактор Чиптрип.
Приглашаю вас в великолепное Королевство Марокко по маршруту: Касабланка → Рабат (1 ночь) → Шефшауэн (1 ночь) → Фес (2 ночи) → Мерзуга (Сахара, 1 ночь) → Варзазат (1 ночь) → Айт-Бен-Хадду → Марракеш (2 ночи) → Эссуэйра (2 ночи) → Касабланка
Это страна тысячи красок, в существование которых так трудно верится, но когда вы увидите это собственными глазами, то удивитесь.
Во время путешествия нам предстоит: попробовать национальные марокканские блюда — тажин и кускус, любоваться красотой мавританских дворцов и садов в вечно вибрирующем Марракеше, жить в сказочных риадах, залезть на португальские бастионы и объесться свежей рыбой и морепродуктами в Эссуэйре.
А еще — увидеть, как обрабатывают кожу точно так же, как и сто лет назад, восхититься размерами медины Феса, пить много мятного чая и свежевыжатого апельсинового сока всегда и везде, отправиться в Сахару и провести там ночь, посмотреть закат в пустыне и прокатиться на верблюдах по песчаным барханам.
И, наконец, мы побываем в Касабланке, прогуляемся по знаменитому синему городу Шефшауэну, накупим всего-всего на рынках и полюбим Марокко за его бесконечное разнообразие!
Язык общения — русский! Сопровождать экспедицию будет опытный адепт Чиптрипа + будут экскурсии с местными гидами.
Даты экспедиции: с 17 по 27 октября
Стоимость на 10 ночей на 1 человека:
1859 € — без перелета*
* Стоимость перелета Москва — Касабланка — Москва от 750 €, стоимость дана ориентировочная, актуальные цены уточняйте при бронировании!
❗️ Забронировать экспедицию удаленно:
✉️ Почта — cheaptripexpedition@gmail.com
ПРОГРАММУ ЭКСПЕДИЦИИ ПОДРОБНО И ЧТО ВКЛЮЧЕНО ▶ СМОТРИ ЗДЕСЬ ◀
🧭 Как устроен вызов
claude -p ▶️ один вызов на пост, один ответ
├── --system-prompt 📋 PROMPT + EXAMPLE + FORMAT одним текстом — одинаково для всех постов
├── сообщение пользователя 📝 пост: # Заголовок поста / # Дата публикации / # Метки блога / # Текст поста
└── --json-schema 🔒 та же схема ещё раз: Claude Code проверяет по ней форму ответа
↓модель прочитала всё это и вернула

2 Что вернула модель

предложение тура: дагород вылета: —стран: 1мест: 10отелей: 0туров без отелей: 1предложений: 1минимальная цена в рублях: —

Перелёт, доказательство: «1859 € — без перелета*»

Страны

Как в постеИменительныйГде найдено
МароккоМароккозаголовок

Места

Как в постеИменительныйТипСтранаРоль в поездкеГде найдено
КасабланкаКасабланкагородМароккоместо по маршруту или программемаршрут или программа тура
РабатРабатгородМароккоместо по маршруту или программемаршрут или программа тура
ШефшауэнШефшауэнгородМароккоместо по маршруту или программемаршрут или программа тура
ФесФесгородМароккоместо по маршруту или программемаршрут или программа тура
МерзугаМерзугакурорт или посёлокМароккоместо по маршруту или программемаршрут или программа тура
СахараСахараприродный объект: гора, озеро, река, лесМароккоместо по маршруту или программемаршрут или программа тура
ВарзазатВарзазатгородМароккоместо по маршруту или программемаршрут или программа тура
Айт-Бен-ХаддуАйт-Бен-Хаддукурорт или посёлокМароккоместо по маршруту или программемаршрут или программа тура
МарракешМарракешгородМароккоместо по маршруту или программемаршрут или программа тура
ЭссуэйраЭссуэйрагородМароккоместо по маршруту или программемаршрут или программа тура

Тур без отелей: Чиптрип-экспедиция «Краски Марокко»

Маршрут: Касабланка → Рабат → Шефшауэн → Фес → Мерзуга → Сахара → Варзазат → Айт-Бен-Хадду → Марракеш → Эссуэйра → Касабланка

Дата в постеДатаНочейЦена в постеСуммаВалютаУсловия цены в постеЗа что ценаКатегория номераПерелёт
с 17 по 27 октября2026-10-17101859 €1859EURСтоимость на 10 ночей на 1 человека:с человека, размещение не сказано—нет

Сомнения модели: —

🧩 Ответ как JSON, только симпатично

Ровно поля и значения ответа модели (часть answer), без пересказа: слева имя поля, справа значение; "строка", число, true / false, null. Карточка — объект, номер — место в списке; списки сворачиваются. Наведите на имя поля — описание и закрытый список из формата v5.

post_is_trip_offertrue
departure_city_as_in_postnull
departure_city_nominativenull
flight_included_evidence_as_in_post"1859 € — без перелета*"
countries
список, элементов: 1
1
country_name_as_in_post"Марокко"
country_name_nominative"Марокко"
found_in"заголовок"
places
список, элементов: 10
1
place_name_as_in_post"Касабланка"
place_name_nominative"Касабланка"
place_type"город"
country_name_nominative"Марокко"
place_role_in_trip"место по маршруту или программе"
found_in"маршрут или программа тура"
2
place_name_as_in_post"Рабат"
place_name_nominative"Рабат"
place_type"город"
country_name_nominative"Марокко"
place_role_in_trip"место по маршруту или программе"
found_in"маршрут или программа тура"
3
place_name_as_in_post"Шефшауэн"
place_name_nominative"Шефшауэн"
place_type"город"
country_name_nominative"Марокко"
place_role_in_trip"место по маршруту или программе"
found_in"маршрут или программа тура"
4
place_name_as_in_post"Фес"
place_name_nominative"Фес"
place_type"город"
country_name_nominative"Марокко"
place_role_in_trip"место по маршруту или программе"
found_in"маршрут или программа тура"
5
place_name_as_in_post"Мерзуга"
place_name_nominative"Мерзуга"
place_type"курорт или посёлок"
country_name_nominative"Марокко"
place_role_in_trip"место по маршруту или программе"
found_in"маршрут или программа тура"
6
place_name_as_in_post"Сахара"
place_name_nominative"Сахара"
place_type"природный объект: гора, озеро, река, лес"
country_name_nominative"Марокко"
place_role_in_trip"место по маршруту или программе"
found_in"маршрут или программа тура"
7
place_name_as_in_post"Варзазат"
place_name_nominative"Варзазат"
place_type"город"
country_name_nominative"Марокко"
place_role_in_trip"место по маршруту или программе"
found_in"маршрут или программа тура"
8
place_name_as_in_post"Айт-Бен-Хадду"
place_name_nominative"Айт-Бен-Хадду"
place_type"курорт или посёлок"
country_name_nominative"Марокко"
place_role_in_trip"место по маршруту или программе"
found_in"маршрут или программа тура"
9
place_name_as_in_post"Марракеш"
place_name_nominative"Марракеш"
place_type"город"
country_name_nominative"Марокко"
place_role_in_trip"место по маршруту или программе"
found_in"маршрут или программа тура"
10
place_name_as_in_post"Эссуэйра"
place_name_nominative"Эссуэйра"
place_type"город"
country_name_nominative"Марокко"
place_role_in_trip"место по маршруту или программе"
found_in"маршрут или программа тура"
hotels[] пусто
tours_without_hotel
список, элементов: 1
1
tour_name_as_in_post"Чиптрип-экспедиция «Краски Марокко»"
route_place_names_as_in_post1"Касабланка"2"Рабат"3"Шефшауэн"4"Фес"5"Мерзуга"6"Сахара"7"Варзазат"8"Айт-Бен-Хадду"9"Марракеш"10"Эссуэйра"11"Касабланка"
offers
список, элементов: 1
1
departure_date_as_in_post"с 17 по 27 октября"
departure_date"2026-10-17"
nights10
price_as_in_post"1859 €"
price_amount1859
price_currency"EUR"
price_conditions_as_in_post"Стоимость на 10 ночей на 1 человека:"
price_is_for"с человека, размещение не сказано"
room_category_as_in_postnull
flight_includedfalse
doubts_comment""
Исходные данные — JSON, как вернула модель
{
  "run": {
    "prompt_version": "v5",
    "prompt_folder": "trip-places-hotels-prices-llm/prompt-v5",
    "post_folder": "trip-places-hotels-prices-llm/posts-one-folder-per-post/2026-09-02__msk__46316286",
    "model": "claude-haiku-5-5",
    "effort": "medium",
    "finished_at": "2026-10-09T09:34:30Z",
    "duration_seconds": 14.9,
    "input_tokens_full_price": 2,
    "input_tokens_cache_read": 0,
    "input_tokens_cache_write": 22497,
    "output_tokens": 3657,
    "conditional_price_usd_if_it_were_api": 0.0063281
  },
  "answer": {
    "post_is_trip_offer": true,
    "departure_city_as_in_post": null,
    "departure_city_nominative": null,
    "flight_included_evidence_as_in_post": "1859 € — без перелета*",
    "countries": [
      {
        "country_name_as_in_post": "Марокко",
        "country_name_nominative": "Марокко",
        "found_in": "заголовок"
      }
    ],
    "places": [
      {
        "place_name_as_in_post": "Касабланка",
        "place_name_nominative": "Касабланка",
        "place_type": "город",
        "country_name_nominative": "Марокко",
        "place_role_in_trip": "место по маршруту или программе",
        "found_in": "маршрут или программа тура"
      },
      {
        "place_name_as_in_post": "Рабат",
        "place_name_nominative": "Рабат",
        "place_type": "город",
        "country_name_nominative": "Марокко",
        "place_role_in_trip": "место по маршруту или программе",
        "found_in": "маршрут или программа тура"
      },
      {
        "place_name_as_in_post": "Шефшауэн",
        "place_name_nominative": "Шефшауэн",
        "place_type": "город",
        "country_name_nominative": "Марокко",
        "place_role_in_trip": "место по маршруту или программе",
        "found_in": "маршрут или программа тура"
      },
      {
        "place_name_as_in_post": "Фес",
        "place_name_nominative": "Фес",
        "place_type": "город",
        "country_name_nominative": "Марокко",
        "place_role_in_trip": "место по маршруту или программе",
        "found_in": "маршрут или программа тура"
      },
      {
        "place_name_as_in_post": "Мерзуга",
        "place_name_nominative": "Мерзуга",
        "place_type": "курорт или посёлок",
        "country_name_nominative": "Марокко",
        "place_role_in_trip": "место по маршруту или программе",
        "found_in": "маршрут или программа тура"
      },
      {
        "place_name_as_in_post": "Сахара",
        "place_name_nominative": "Сахара",
        "place_type": "природный объект: гора, озеро, река, лес",
        "country_name_nominative": "Марокко",
        "place_role_in_trip": "место по маршруту или программе",
        "found_in": "маршрут или программа тура"
      },
      {
        "place_name_as_in_post": "Варзазат",
        "place_name_nominative": "Варзазат",
        "place_type": "город",
        "country_name_nominative": "Марокко",
        "place_role_in_trip": "место по маршруту или программе",
        "found_in": "маршрут или программа тура"
      },
      {
        "place_name_as_in_post": "Айт-Бен-Хадду",
        "place_name_nominative": "Айт-Бен-Хадду",
        "place_type": "курорт или посёлок",
        "country_name_nominative": "Марокко",
        "place_role_in_trip": "место по маршруту или программе",
        "found_in": "маршрут или программа тура"
      },
      {
        "place_name_as_in_post": "Марракеш",
        "place_name_nominative": "Марракеш",
        "place_type": "город",
        "country_name_nominative": "Марокко",
        "place_role_in_trip": "место по маршруту или программе",
        "found_in": "маршрут или программа тура"
      },
      {
        "place_name_as_in_post": "Эссуэйра",
        "place_name_nominative": "Эссуэйра",
        "place_type": "город",
        "country_name_nominative": "Марокко",
        "place_role_in_trip": "место по маршруту или программе",
        "found_in": "маршрут или программа тура"
      }
    ],
    "hotels": [],
    "tours_without_hotel": [
      {
        "tour_name_as_in_post": "Чиптрип-экспедиция «Краски Марокко»",
        "route_place_names_as_in_post": [
          "Касабланка",
          "Рабат",
          "Шефшауэн",
          "Фес",
          "Мерзуга",
          "Сахара",
          "Варзазат",
          "Айт-Бен-Хадду",
          "Марракеш",
          "Эссуэйра",
          "Касабланка"
        ],
        "offers": [
          {
            "departure_date_as_in_post": "с 17 по 27 октября",
            "departure_date": "2026-10-17",
            "nights": 10,
            "price_as_in_post": "1859 €",
            "price_amount": 1859,
            "price_currency": "EUR",
            "price_conditions_as_in_post": "Стоимость на 10 ночей на 1 человека:",
            "price_is_for": "с человека, размещение не сказано",
            "room_category_as_in_post": null,
            "flight_included": false
          }
        ]
      }
    ],
    "doubts_comment": ""
  }
}

3 Где в посте то, что выписано

Подсветка: город вылета перелёт: доказательство страна место отель дата вылета условия цены цена сумма не взята ценой — наведите на подсветку, чтобы увидеть поля ответа.

# Заголовок поста
Чиптрип-экспедиция «Краски Марокко»

# Дата публикации
2026-09-02

# Метки блога
10 ночей, Юнеско, Заграница, столица, Авторский тур, people-to-go, Без виз, предложение, Марокко, Спецпроект Ч, чиптрип экспедиция

# Текст поста
Невероятное путешествие в одну из самых красивых и аутентичных стран Северной Африки!
Photo by Carlos Leret on Unsplash
Спецпроект Ч
Привет, я Оксана, редактор Чиптрип.
Приглашаю вас в великолепное Королевство Марокко по маршруту: Касабланка → Рабат (1 ночь) → Шефшауэн (1 ночь) → Фес (2 ночи) → Мерзуга (Сахара, 1 ночь) → Варзазат (1 ночь) → Айт-Бен-Хадду → Марракеш (2 ночи) → Эссуэйра (2 ночи) → Касабланка
Это страна тысячи красок, в существование которых так трудно верится, но когда вы увидите это собственными глазами, то удивитесь.
Во время путешествия нам предстоит: попробовать национальные марокканские блюда — тажин и кускус, любоваться красотой мавританских дворцов и садов в вечно вибрирующем Марракеше, жить в сказочных риадах, залезть на португальские бастионы и объесться свежей рыбой и морепродуктами в Эссуэйре.
А еще — увидеть, как обрабатывают кожу точно так же, как и сто лет назад, восхититься размерами медины Феса, пить много мятного чая и свежевыжатого апельсинового сока всегда и везде, отправиться в Сахару и провести там ночь, посмотреть закат в пустыне и прокатиться на верблюдах по песчаным барханам.
И, наконец, мы побываем в Касабланке, прогуляемся по знаменитому синему городу Шефшауэну, накупим всего-всего на рынках и полюбим Марокко за его бесконечное разнообразие!
Язык общения — русский! Сопровождать экспедицию будет опытный адепт Чиптрипа + будут экскурсии с местными гидами.
Даты экспедиции: с 17 по 27 октября
Стоимость на 10 ночей на 1 человека:
1859 € — без перелета*
* Стоимость перелета Москва — Касабланка — Москва от 750 €, стоимость дана ориентировочная, актуальные цены уточняйте при бронировании!
❗️ Забронировать экспедицию удаленно:
✉️ Почта — cheaptripexpedition@gmail.com
ПРОГРАММУ ЭКСПЕДИЦИИ ПОДРОБНО И ЧТО ВКЛЮЧЕНО ▶ СМОТРИ ЗДЕСЬ ◀

4 Проверки

⚖️ Оценка независимого Claude Opus — главная: справилась ли модель и что заденет покупателя

Оценки нет.

🔎 Скрипт вхождений: все ли дословные поля ответа есть в посте — не выдумала ли модель
📐 Отличия от эталона агента — вспомогательно

Эталон — ответ, который до прогона написал по тому же промпту агент Claude, прочитав пост вручную. Модели он не показывается. Отличие — не обязательно ошибка: в спорных местах агент и модель часто выбирают разные допустимые прочтения (тип места, роль, где найдено). Ошибки определяет оценка Opus выше; эта таблица помогает быстро найти, где смотреть.

ПолеВ ответе моделиВ эталоне агента
flight_included_evidence_as_in_post"1859 € — без перелета*""1859 € — без перелета"
tours_without_hotel[0].tour_name_as_in_post"Чиптрип-экспедиция «Краски Марокко»""Краски Марокко"

Файл эталона: EXPECTED-answer-format-v5-written-by-agent-before-run-not-shown-to-haiku.json