Делаем свой reasoning dataset

от автора

Привет, Хабр!

Туториал посвящен подготовке узкоспециализированного русскоязычного медицинского датасета для последующего файнтюнинга (тонкой настройки) открытых языковых моделей.

Описанная методика выверена методом многочисленных проб и ошибок. Русификация тут приведена больше как пример того, как при помощи сырого набора данных, можно сгенерировать качественные данные под узкую задачу с минимальными затратами.

В данном туториале описан процесс создания русского медицинского датасета из англоязычного для файнтюнинга собственной медицинской модели medicus (примеры её генерации приведены на странице модели).

Мы сделаем следующее:

  1. Загрузим датасет с huggingface и подготовим грубый машинный перевод;

  2. Сгенерируем из него качественный перевод при помощи большой открытой модели.

Я пользовался Колабом арендованного pod, поэтому код будет адаптирован для него

Загрузка датасета и машинный перевод

!pip install datasets xlsxwriter -q from datasets import load_dataset import pandas as pd  dataset = load_dataset("FreedomIntelligence/medical-o1-reasoning-SFT", 'en') med_reasoning_ds = dataset['train'].to_pandas() print(f'SHAPE: {med_reasoning_ds.shape}\nCOLUMNS: {med_reasoning_ds.columns}') #>>> SHAPE: (25371, 3) #>>> COLUMNS: Index(['Question', 'Complex_CoT', 'Response'], dtype='object')  # разделим весь датасет на несколько, чтобы количество rows в каждом было по 1000 chunk_size = 1000 chunks = [med_reasoning_ds[i:i + chunk_size] for i in range(0, med_reasoning_ds.shape[0], chunk_size)] len(chunks) #>>> 26  # save each chunk to Excel for idx, chunk in enumerate(chunks):     chunk.to_excel(f'./hf_ds/hf_med_reasoning_ds_with_eng_{idx}.xlsx', engine='xlsxwriter', index=False)
  1. Мы загрузили медицинский датасет с huggingface и конвертировали его в pandas;

  2. Сделали из него 26 датасетов по <=1000 rows каждый. Мы планируем использовать Google Translator, который бесплатно не переводит большие excel файлы;

  3. Сохранили каждый небольшой датасет как отдельный.

Теперь откроем Google переводчик в режиме перевода документов и поочередно загрузим и переведем каждый файл из папки ./hf_ds

Теперь объединим все переведенные файлы и сохраним в формате parquet для экономии памяти

path_to_excel = './hf_reasoning_ds/rus/*.xlsx' file_list = glob.glob(path_to_excel) data_frames = []  for file in file_list:   df = pd.read_excel(file)   df['file_id'] = os.path.basename(file)   data_frames.append(df)  combined_df = pd.concat(data_frames, ignore_index=True)  # Добавим названия файлов combined_df['file_id'] = combined_df['file_id'].map(lambda x: x.split('.')[0].split('_')[-2])  # На всякий случай, добавим оригинал в наш датасет file_ids = combined_df['file_id'].map(lambda x: int(x)).unique() datasets = []  for id in file_ids:   translated_ds = combined_df[combined_df['file_id']==str(id)]   eng_ds = chunks[id]   translated_ds['Question_eng'] = eng_ds['Question']   translated_ds['Complex_CoT_eng'] = eng_ds['Complex_CoT']   translated_ds['Response_eng'] = eng_ds['Response']   datasets.append(translated_ds)  rus_eng_ds = pd.concat(datasets, ignore_index=True)  # Сохраним в формате parquet для экономии места и быстрой загрузки rus_eng_ds.to_parquet('./hf_med_reasoning_ds_rus_eng.parquet.gzip')

Итак первая часть готова. Такой перевод не подходит для обучения модели, но у нас есть сырые данные, на основании которых мы получим то, что нам нужно.

Создание русскоязычного датасета

Собственно, суть статьи именно в этом разделе. Мы сделаем следующее:

  1. Арендуем сервер;

  2. Развернем инференс открытой языковой модели (в нашем случае Mistral-Small-3.1-24B-Instruct-2503) при помощи ollama;

  3. Создадим синтетический reasoning датасет на основании грубого машинного перевода.

Аренда сервера

Существует 2 варианта аренды мощности для запуска модели:

  1. Runpod — сложнее оплатить из-за невозможности пополнения с русских карт. Но развертывание модели проще, быстрее и дешевле;

  2. immers.cloud — простая оплата, но развертывание сложнее из-за того, что отсутствует встроенный Colab.

Я использовал Runpod с видеокартой RTX A6000 48 Gb VRAM за 0.33$ в час.

в момент скриншота pod был недоступен

в момент скриншота pod был недоступен

Необходимо изменить конфигурацию сервера в Pod Template Overrides:

Container Disk ставим на 70 Gb, Volume Disk на 0 Gb, чтобы после того, как мы удалим Pod, у нас удалялся диск и мы за него не платили.

После нажатия на Deploy on-Demand, в списке Pods появляется наш сервер. Ждем 2-3 минуты, пока он запустится, после чего нажимаем на Connect и подключаемся к Jupiter.

Инсталлируем библиотеки

!pip install -U langchain-community langchain-ollama pandas pyarrow fastparquet -q

Открываем ПЕРВЫЙ терминал, скачиваем и запускаем сервер ollama

curl -fsSL https://ollama.com/install.sh | sh ollama serve

Открываем ВТОРОЙ терминал и скачиваем модель

ollama run mistral-small:24b-instruct-2501-q8_0

После загрузки, проверяем, что модель установлена корректно командой ollama list

Должны увидеть скачанную модель

root@e8c66ac18178:/workspace# ollama list NAME                                    ID              SIZE     MODIFIED     mistral-small:24b-instruct-2501-q8_0    20ffe5db0161    25 GB    4 hours ago 

Переходим к Jupiter

Для работы с моделью мы будем пользоваться библиотекой langchain.

import pandas as pd  from langchain_ollama.chat_models import ChatOllama from langchain_core.messages import SystemMessage  from IPython.display import Markdown  model = ChatOllama(     model="mistral-small:24b-instruct-2501-q8_0",     temperature=0.7,     keep_alive='3h',     num_gpu=500,     num_thread=64 )

Тестируем модель

model.invoke('Привет')

>>>AIMessage(content='Привет! Как я могу помочь?', additional_kwargs={}, response_metadata={'model': 'mistral-small:24b-instruct-2501-q8_0', 'created_at': '2025-03-29T09:10:39.643200702Z', 'done': True, 'done_reason': 'stop', 'total_duration': 10260052119, 'load_duration': 9562317910, 'prompt_eval_count': 163, 'prompt_eval_duration': 324688113, 'eval_count': 10, 'eval_duration': 358386035, 'message': Message(role='assistant', content='', images=None, tool_calls=None)}, id='run-a68a2fa4-a621-4e5e-ba88-6561de95b0fc-0', usage_metadata={'input_tokens': 163, 'output_tokens': 10, 'total_tokens': 173})

Теперь, если вы откроете консоль с работающим ollama сервером, вы увидите, как загружалась модель, api запросы и время выполнения

[GIN] 2025/03/29 - 13:25:47 | 200 | 27.347612159s | 127.0.0.1 | POST "/api/chat"

Важным моментом для нас является время выполнения. Оно зависит от количества токенов, которые модель генерирует. Забегая вперед, в случае с моделью mistral-small:24b-instruct-2501-q8_0 и текущей задачей, время одной генерации будет составлять от 10 до 40 секунд.

Загрузка датасета

В левом боковом меню создадим папку ./dataset и перетащим наш hf_med_reasoning_ds_rus_eng.parquet.gzip

Загрузим датасет hf_ds = pd.read_parquet('./dataset/hf_med_reasoning_ds_rus_eng.parquet.gzip')

hf_ds.loc[3, 'Вопрос']

>>> Пациент с псориазом лечился системными стероидами, и после прекращения лечения у него появились генерализованные пустулы по всему телу. Какова наиболее вероятная причина этого состояния?

hf_ds.loc[3, ' Ответ']

>>> Развитие генерализованных пустул у пациента с псориазом после прекращения лечения системными стероидами, скорее всего, вызвано состоянием, называемым генерализованным пустулезным псориазом (ГПП). Это состояние может возникнуть как обратный эффект, когда системные стероиды внезапно прекращаются или быстро снижаются. У пациентов с псориазом стероиды могут подавлять иммунную систему и смягчать симптомы. Когда эти препараты отменяются слишком быстро, иммунная система может реагировать чрезмерно остро, что приводит к более тяжелым симптомам, включая трансформацию псориаза в пустулезную форму. Тщательное ведение и медленное снижение дозы стероидов имеют решающее значение для пациентов с псориазом, чтобы предотвратить такие обострения.

Видим, что машинный перевод не подходит для файнтюнинга. Для улучшения качества ОТВЕТА и РАССУЖДЕНИЙ мы будем использовать загруженную Мистраль.

Составление промптов и конвейера генерации

Написание качественных промптов — процесс творческий и зависит от задачи. В нашем случае задача сделать reasoning датасет, как в оригинальном: ВОПРОС — РАЗМЫШЛЕНИЯ — ОТВЕТ.

Этапы генерации:

  1. Модель берёт ПЕРЕВОД вопроса и ПЕРЕВОД ответа. На основании них генерирует СИНТЕТИЧЕСКИЕ рассуждения;

  2. Модель берет ПЕРЕВОД вопроса, СИНТЕТИЧЕСКИЕ рассуждения и ПЕРЕВОД ответа как подсказку. На основании них генерирует СИНТЕТИЧЕСКИЙ ответ.

Протестируем генерации

prompt_formatter = """ВОПРОС: {question}  Ты подумал и ответил: ТВОЙ ОТВЕТ: {answer}  Напиши мысли, благодаря которым ты пришел к таким выводам Ответ только в виде мыслей Начинай думать от общего к частному Не пиши конкретные дозировки Используй метод дедукции при анализе каждой мысли Используй клиническое мышление Анализируй, какие факты говорят за какое решение Анализируй непонятные или противоречивые моменты Меньше структуры, больше текста Делай текст понятным для русского читателя"""  idx = 3 question = hf_ds.loc[idx, 'Вопрос'] answer = hf_ds.loc[idx, ' Ответ']  prompt = prompt_formatter.format(question=question, answer=answer) result = model.invoke([SystemMessage(content=prompt)])  Markdown(result.content)

Генерализованные пустулы по всему телу у пациента с псориазом после прекращения лечения системными стероидами — это серьезное состояние, которое требует внимательного анализа. Начнем с общего: системные стероиды часто используются для лечения воспалительных заболеваний кожи, включая псориаз, благодаря их мощному противовоспалительному эффекту. Однако, когда такие препараты отменяются или резко снижается их доза, это может вызвать реактивное обострение заболевания.

Следующий шаг — рассмотреть возможные причины такого состояния. Одной из основных причин является так называемый «синдром отмены стероидов». Когда организм привыкает к постоянному присутствию стероидов, внезапное их прекращение может вызвать стресс для иммунной системы, что приводит к гиперреакции и обострению симптомов. В случае псориаза это может проявиться в виде генерализованного пустулезного псориаза (ГПП), который характеризуется появлением пустул по всему телу.

Важно также учитывать, что псориаз — это хроническое заболевание с воспалительными и иммунологическими компонентами. Снижение или отмена стероидов может вызвать неконтролируемое воспаление, которое приводит к образованию пустул. Это состояние требует немедленного медицинского вмешательства, так как оно может быть очень тяжелым и даже угрожающим жизни.

Непосредственно у пациента с псориазом, который лечился системными стероидами, появление генерализованных пустул после прекращения лечения может быть связано именно с резким изменением терапии. Это указывает на необходимость постепенного снижения дозы стероидов и тщательного контроля состояния пациента.

Важно также исключить другие возможные причины, такие как инфекционные заболевания или аллергические реакции, которые могли бы вызвать подобные симптомы. Однако, учитывая историю лечения системными стероидами и наличие псориаза, наиболее вероятной причиной остается генерализованный пустулезный псориаз.

В заключение, клиническое мышление подсказывает, что резкое прекращение лечения системными стероидами у пациента с псориазом может привести к тяжелому обострению заболевания в виде генерализованного пустулезного псориаза. Это состояние требует немедленного медицинского вмешательства и корректировки терапии для предотвращения дальнейших осложнений.

Время генерации 34 сек.

Теперь сгенерируем СИНТЕТИЧЕСКИЙ ответ

thoughts_to_answer_prompt = """Ты врач  К тебе обратился пациент с вопросом: ВОПРОС: {question}  Твои мысли по поводу вопроса: {thinking}  Напиши ответ на основании мыслей Используй структуру Разъясняй подробно каждый пункт Не пиши конкретные дозировки  ПОДСКАЗКА: {hint} Не пиши никаких имен в ответе"""      formatted_thoughts_to_answer_prompt = thoughts_to_answer_prompt.format(question = question, hint = answer, thinking=result.content) thoughts_to_answer_result = model.invoke([SystemMessage(content=formatted_thoughts_to_answer_prompt)])  Markdown(result.content)

Развитие генерализованных пустул у пациента с псориазом после прекращения лечения системными стероидами, скорее всего, вызвано состоянием, называемым генерализованным пустулезным псориазом (ГПП). Давайте рассмотрим это состояние подробнее:

  1. Механизм действия системных стероидов:

    • Системные стероиды являются мощными противовоспалительными препаратами, которые часто используются для лечения различных воспалительных заболеваний кожи, включая псориаз.

    • Эти препараты подавляют иммунную систему и уменьшают воспаление, что приводит к улучшению симптомов псориаза.

  2. Синдром отмены стероидов:

    • Когда системные стероиды внезапно прекращаются или их доза резко снижается, организм может реагировать на это стрессом.

    • Это может привести к так называемому «синдрому отмены стероидов», когда иммунная система начинает активно реагировать на отсутствие препарата.

  3. Реактивное обострение псориаза:

    • В случае псориаза, это может привести к реактивному обострению заболевания.

    • Гиперреакция иммунной системы вызывает более тяжелые симптомы, включая появление пустул по всему телу.

  4. Генерализованный пустулезный псориаз (ГПП):

    • Генерализованные пустулы — это характерный признак ГПП.

    • Это состояние требует немедленного медицинского вмешательства, так как оно может быть очень тяжелым и даже угрожающим жизни.

  5. Важность постепенного снижения дозы:

    • Для пациентов с псориазом, которые лечатся системными стероидами, важно постепенно снижать дозировку этих препаратов.

    • Это позволяет организму адаптироваться к изменению уровня стероидов и минимизировать риск обострения заболевания.

  6. Дифференциальная диагностика:

    • Важно исключить другие возможные причины появления генерализованных пустул, такие как инфекционные заболевания или аллергические реакции.

    • Однако, учитывая историю лечения системными стероидами и наличие псориаза, наиболее вероятной причиной остается ГПП.

  7. Необходимость медицинского вмешательства:

    • Если у пациента с псориазом после прекращения лечения системными стероидами появились генерализованные пустулы, это требует немедленного обращения к врачу.

    • Врач должен тщательно оценить состояние пациента и скорректировать терапию для предотвращения дальнейших осложнений.

В заключение, развитие генерализованных пустул у пациента с псориазом после прекращения лечения системными стероидами является серьезным состоянием, которое требует немедленного медицинского вмешательства. Тщательное ведение и постепенное снижение дозы стероидов имеют решающее значение для предотвращения таких обострений.

Время генерации 30 сек.

Видно, что модель хорошо следует инструкциям. Мысли генерируются постепенно, начиная от общих моментов к частным.

Ответ хорошо структурирован и разъяснен.

Запустим генерацию по всему датасету

# Функция для сохранения генерации def doc_saver(data, filename):   path = f"./dataset/{filename}.jsonl"   directory = os.path.dirname(path)   os.makedirs(directory, exist_ok=True)   with open(path, 'a', encoding='utf-8') as file:     json_string = json.dumps(data, ensure_ascii=False)     file.write(json_string + '\n')  # Генерация датасета for idx, row in thoughts_ds.iterrows():   question = row['Вопрос']   answer = row[' Ответ']    question_to_thoughts_prompt = """ВОПРОС: {question}  Ты подумал и ответил: ТВОЙ ОТВЕТ: {answer}  Напиши мысли, благодаря которым ты пришел к таким выводам Ответ только в виде мыслей Начинай думать от общего к частному Не пиши конкретные дозировки Используй метод дедукции при анализе каждой мысли Используй клиническое мышление Анализируй, какие факты говорят за какое решение Анализируй непонятные или противоречивые моменты Меньше структуры, больше текста Делай текст понятным для русского читателя"""    formatted_question_to_thoughts_prompt = question_to_thoughts_prompt.format(question = question, answer = answer)   question_to_thougts_result = model.invoke([SystemMessage(content=formatted_question_to_thoughts_prompt)])    thoughts_to_answer_prompt = """Ты врач  К тебе обратился пациент с вопросом: ВОПРОС: {question}  Твои мысли по поводу вопроса: {thinking}  Напиши ответ на основании мыслей Используй структуру Разъясняй подробно каждый пункт Не пиши конкретные дозировки  ПОДСКАЗКА: {hint} Не пиши никаких имен в ответе"""        formatted_thoughts_to_answer_prompt = thoughts_to_answer_prompt.format(question = question, hint = answer, thinking=question_to_thougts_result.content)   thoughts_to_answer_result = model.invoke([SystemMessage(content=formatted_thoughts_to_answer_prompt)])           data = {'question': question, 'raw_answer': answer, 'cot': question_to_thougts_result.content, 'answer': thoughts_to_answer_result.content, 'old_index': row['index']}    doc_saver(data, filename='mistral_med_reasoning_translation_ds')    if idx%100==0:     print(f"{idx} items obtained")

Вы можете открывать mistral_med_reasoning_translation_ds.js и просматривать генерации на возможные ошибки.

Расчёт времени:

Одна итерация требует 2 запроса к модели на генерацию рассуждений и нового ответа, то есть будет занимать от 20 до 60 секунд.

Размер датасета 25371. Приблизительное время генерации должно занять максимум 25371/ 60 / 24 = 17 дней. При стоимости аренды 0.33$ в час, стоимость датасета составит максимум 25371/ 60 * 0.33 = 139$. Я генерил не весь датасет. Мне для обучения хватило 17000 строк. Заплатил около 90$.

Про выбор модели

На момент публикации урока, оптимальными моделями для генерации являются:

Они очень хорошо пишут на русском, следуют инструкциям и при этом относительно недороги.

Модель Gemma3 пишет детальнее и объемнее, поэтому время генерации увеличивается примерно в 1.5 раза.

До написания статьи я генерил на старой Gemma2-27b-it. Итоговый датасет содержал очень много азиатских символов и английских выражений, что требовало очень большого объема ручной работы.

Новый датасет генерировался в момент написания статьи. Как доделаю и обучу модель, открою его и покажу модель. Думаю, качество будет намного лучше, чем medicus.

Если результат будет хорошим, напишу туториал по файнтюнингу.

Примеры применения

Как я писал выше использование англоязычного датасета приведено просто для примера. Вы можете взять любой источник информации: сборник статей, учебник, список товаров, и.т.д.

Например, вам необходимо создать датасет для файнтюнинга RAG модели онлайн магазина кроссовок.

Сформулируем задачу

  1. Пользователь вводит запрос, напр. «Нужны кросы для похода в горы»

  2. Если пользователь зарегистрирован, вместе с запросом вводится информация о нем, напр. «ПОЛ: мужской; РАЗМЕР НОГИ: 37; …»

  3. Данные RAG: «Кроссовки мужские RIIIbok Nite X; Nite X от RIIIbok — кроссовки, в которых тебе будет удобно ходить в поход; Особенности: материал подошвы: Fuel Foam, МАТЕРИАЛ: текстиль, ЗАЩИТА ОТ ВЛАГИ: да, и т.д.»

Разработка датасета:

  1. База пользователей. Лучше, если у нас есть готовая база. При ее отсутствии, можем сгенерировать;

  2. Базу данных кроссовок;

  3. База описаний свойств, например: Fuel Foam — Технология, которая обеспечивает оптимальный баланс амортизации и отзывчивости. Уникальная система с функцией сохранения и возврата энергии.

Собираем датасет с columns: ‘user’, ‘shoes’ и ‘main_features’

Формулируем промпт для генерации запроса пользователя например:

Ты ассистент обувного магазина.
К тебе зашел пользователь: мужчина, 37 размер ноги.
Пользователь задал вопрос про кроссовки и ты нашел следующие модели:

  1. **Salomon X Ultra 4 GTX

  • Размер: EU 37

  • Материал подошвы: Contagrip® MA — обеспечивает отличное сцепление на мокрой, сухой, жёсткой или рыхлой поверхности.

  • Материал верха: Синтетика + водонепроницаемая мембрана GORE-TEX

  • Особенности:

    • ADV-C Chassis – технология стабилизации, поддерживает стопу, особенно при спусках.

    • GORE-TEX® – защищает от влаги и сохраняет дышащие свойства.

    • Quicklace™ – система быстрой шнуровки для удобства и надёжной фиксации.

  1. The North Face VECTIV Exploris 2 Futurelight

  • Размер: EU 37

  • Материал подошвы: SurfaceCTRL™ с 4 мм шипами — устойчивая и долговечная резина для агрессивного сцепления.

  • Материал верха: Синтетический текстиль + мембрана FUTURELIGHT™

  • Особенности:

    • VECTIV™ – технология, направляющая энергию шага вперёд, снижает утомляемость.

    • FUTURELIGHT™ – водонепроницаемая, дышащая мембрана на основе нанотехнологий.

    • Улучшенная защита носка и пятки для каменистой местности.

  1. La Sportiva Ultra Raptor II GTX

  • Размер: EU 37

  • Материал подошвы: FriXion® XF — устойчивая резина с хорошим сцеплением на скальных поверхностях.

  • Материал верха: Воздухопроницаемая сетка + GORE-TEX® Extended Comfort

  • Особенности:

    • Impact Brake System – специальный рисунок протектора для улучшенного торможения при спуске.

    • EVA-мидсоль – для дополнительной амортизации и защиты стопы.

    • Усиленные боковые вставки для устойчивости на неровной поверхности.

      Сгенерируй детальный запрос пользователя. Ответ только в виде запроса пользователя

Модель сгенерирует запрос: Здравствуйте! Я ищу кроссовки размером EU 37 для мужчины. Меня интересуют модели, которые подходят для активного отдыха на природе, таких как треккинг или походы. Важно, чтобы кроссовки были водонепроницаемыми, дышащими и имели хорошее сцепление на различных поверхностях. Также хотелось бы узнать о наличии дополнительных технологий, которые обеспечивают комфорт и защиту стопы. Пожалуйста, подскажите, какие модели у вас есть в наличии и какие у них особенности.

Теперь сделаем промпт для ответа модели на основании запроса:

Ты ассистент обувного магазина.
К тебе зашел пользователь: мужчина, 37 размер ноги.
Запрос:
Здравствуйте! Я ищу кроссовки размером EU 37 для мужчины. Меня интересуют модели, которые подходят для активного отдыха на природе, таких как треккинг или походы. Важно, чтобы кроссовки были водонепроницаемыми, дышащими и имели хорошее сцепление на различных поверхностях. Также хотелось бы узнать о наличии дополнительных технологий, которые обеспечивают комфорт и защиту стопы. Пожалуйста, подскажите, какие модели у вас есть в наличии и какие у них особенности.
У тебя есть следующие модели:

  1. **Salomon X Ultra 4 GTX

  • Размер: EU 37

  • Материал подошвы: Contagrip® MA — обеспечивает отличное сцепление на мокрой, сухой, жёсткой или рыхлой поверхности.

  • Материал верха: Синтетика + водонепроницаемая мембрана GORE-TEX

  • Особенности:

    • ADV-C Chassis – технология стабилизации, поддерживает стопу, особенно при спусках.

    • GORE-TEX® – защищает от влаги и сохраняет дышащие свойства.

    • Quicklace™ – система быстрой шнуровки для удобства и надёжной фиксации.

  1. The North Face VECTIV Exploris 2 Futurelight

  • Размер: EU 37

  • Материал подошвы: SurfaceCTRL™ с 4 мм шипами — устойчивая и долговечная резина для агрессивного сцепления.

  • Материал верха: Синтетический текстиль + мембрана FUTURELIGHT™

  • Особенности:

    • VECTIV™ – технология, направляющая энергию шага вперёд, снижает утомляемость.

    • FUTURELIGHT™ – водонепроницаемая, дышащая мембрана на основе нанотехнологий.

    • Улучшенная защита носка и пятки для каменистой местности.

  1. La Sportiva Ultra Raptor II GTX

  • Размер: EU 37

  • Материал подошвы: FriXion® XF — устойчивая резина с хорошим сцеплением на скальных поверхностях.

  • Материал верха: Воздухопроницаемая сетка + GORE-TEX® Extended Comfort

  • Особенности:

    • Impact Brake System – специальный рисунок протектора для улучшенного торможения при спуске.

    • EVA-мидсоль – для дополнительной амортизации и защиты стопы.

    • Усиленные боковые вставки для устойчивости на неровной поверхности.

Опиши ассортимент. Для каждой модели описывай только 1-2 самых важных особенностей. Сравни цены моделей и кратно резюмируй

Ответ модели:

Здравствуйте! У нас есть несколько моделей кроссовок, которые подходят для активного отдыха на природе и соответствуют вашим требованиям. Вот краткое описание каждой модели:

  1. Salomon X Ultra 4 GTX

    • Цена: 15,000 рублей

    • Особенности:

      • GORE-TEX® – защищает от влаги и сохраняет дышащие свойства.

      • ADV-C Chassis – технология стабилизации, поддерживает стопу, особенно при спусках.

  2. The North Face VECTIV Exploris 2 Futurelight

    • Цена: 18,000 рублей

    • Особенности:

      • FUTURELIGHT™ – водонепроницаемая, дышащая мембрана на основе нанотехнологий.

      • VECTIV™ – технология, направляющая энергию шага вперёд, снижает утомляемость.

  3. La Sportiva Ultra Raptor II GTX

    • Цена: 16,500 рублей

    • Особенности:

      • Impact Brake System – специальный рисунок протектора для улучшенного торможения при спуске.

      • EVA-мидсоль – для дополнительной амортизации и защиты стопы.

Резюме:

  • Salomon X Ultra 4 GTX – наиболее доступная модель с отличной водонепроницаемостью и стабилизацией стопы.

  • The North Face VECTIV Exploris 2 Futurelight – самая дорогая модель, но с уникальной технологией FUTURELIGHT™ и снижением утомляемости.

  • La Sportiva Ultra Raptor II GTX – средняя по цене, с отличным сцеплением и амортизацией, идеальна для скальных поверхностей.

Если у вас есть дополнительные вопросы или вам нужна помощь в выборе, пожалуйста, дайте знать!


ссылка на оригинал статьи https://habr.com/ru/articles/895594/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *