Comments 29
Как мне кажется, не долго осталось до того момента, когда появятся "личные" ии-агенты, которые будут с рождения отслеживать и состояние здоровья, и активность и всё остальное прочее у конкретного человека, что-то вроде личной няньки. А всего каких-то лет 15 назад в такое даже верилось с трудом.
Основная проблема то не в анализе данных, а получить эти самые данные точно.
Фитнес-часы и браслеты не самые точные штуки и часто я себя чувствую отлично, а часы говорят, что я истощен. Делаю 2-3 часа трени и все отлично. То есть часы врали.
Основная проблема в том, что никто не понимает какая задача решается, и зачем ее воще нужно решать. Что это воще такое? Генератор отчетов о тренировках? Кому его показывать? Персональный тренер? Непохоже.
Для меня геймификация. Тренируюсь и смотрю как растут графики и цифры тренированности. Больше никакой пользы не нашел.
Спорт сам по себе геймификация.
Геймификация это не вся польза, а один из сценариев, и не самый интересный. Можно спросить не «как растёт график», а «почему нагрузка растёт, а восстановление нет», и это уже не про красивые цифры, а про риск перетрена. Просто это другой вопрос, чем тот, который ты задавал.
Конкретно: это агент, который отвечает по твоим собственным данным Garmin в диалоге, а не общими фразами. Закрывает несколько задач:
Тренер: разбирает пульс, зоны, восстановление, историю тренировок, может сам создать и запланировать тренировку в Garmin по запросу.
Аналитик: отвечает на разовые вопросы типа «сколько я пробежал в мае» или «сравни эту неделю с прошлой по пульсу», без ручного копания в приложении.
Нутрициолог, но только если сам расскажешь ему, что ел, тогда сопоставит с тренировками и калориями. Само по себе питание не трекает.
Память: держит контекст за месяцы, а не только последний скрин, который принёс в чат.
Это не диагностика и не медицинский совет, просто разбор твоих же цифр вместо ручного анализа.
просто 5 баллов за комментарий. у меня были разные часы и трекеры. отключил большую часть уведомлений и отслеживалок, потому что это генератор красивых чисел и графиков. в какой-то момент просто пришло осознание, что вся эта жизнь по графику от задачника и фитнес-трекера не для меня. сразу снизился уровень тревожности и стал лучше спать и продуктивнее работать. при этом задачником от тудуист продолжаю активно пользоваться, но не для самоконтроля, а чтобы не забыть важные дела или перенести их на более удобные даты, если сегодня не до них или банально не хочется. и это намного более приятное применение, чем успешно-успешное стремление к выполнению какого-то надуманного плана описанного в книге про планирование задач автор которой в результате повесился.
Тут соглашусь наполовину. Часы не идеальны, это правда. У меня кроме часов ещё нагрудный датчик пульса, который включаю именно на тренировках, для пульса это точнее часов. А вот сон, HRV, стресс, Body Battery всё равно только с часов, там альтернативы нет. Так что часть данных надёжнее часов, часть завязана на них полностью, и это ограничение я не скрываю.
Как именно вы получаете доступ к данным гармин? Я не нашел нормального способа выцарапать их
Через python-garminconnect (cyberjunky на GitHub) неофициальную библиотеку, которая имитирует запросы из веб-версии Garmin Connect: логинишься своей учёткой, дальше через неё дёргаешь эндпоинты, которые обычно ходят из браузера. Официального публичного API у Garmin для такого нет, поэтому это ровно reverse-engineered доступ, а не что-то задокументированное самим Garmin.
Про архитектуру и детали, что конкретно тянется и как кэшируется, у меня отдельная статья, там технически: https://habr.com/ru/articles/1071224/.
Я не могу понять, вот ИИ скажет вам завтра бегать с 19:00 до 19:30 и вы побежите? Т.е. не вы принимаете решение, а ИИ? А может вам с 19:30 удобнее?
А чего не поставить https://www.bevel.health/ и там все эти данные подтянутся из часов скорее всего и будет тоже какая никакая аналитика типа вупа.
Bevel реальный, по отзывам неплохой. Но у меня другая задача: важно было именно свои данные из Garmin донести до моего ChatGPT, у меня там переписка с 2023 года, ещё с версией GPT-3.5, и весь контекст моего образа жизни уже накоплен в ней. Заводить отдельного встроенного коуча в новом закрытом приложении смысла не было, хотелось кормить данными именно этот чат.
Плюс Bevel облачная подписка, закрытый код, только iOS, и по Garmin историю тянет всего месяц (ограничение самого Garmin API, в их же фидбеке люди жалуются и ссылаются на ту же библиотеку, что у меня, как на обходной путь). У меня открытый код, локальный кэш без такого ограничения, и агент, который не только показывает цифры, но может создать тренировку прямо в Garmin.
А вот эта вот чехарда она везде. У гармин еще совершенно лайтовая версия. Бытует мнение что все самозабвенно делают дурные деньги на продажи массивов данных и потому везде так.
Спасибо что поделились своим опытом. Даже задумался над тем, чтобы и свои данные покрутить с ИИшкой.
Радует, что у меня Polar, который предоставляет API для доступа к данным (и для желающих - SDK для работы со своими датчиками по Bluetooth):
Polar с официальным API это прямо тот случай про открытость к другим устройствам: если данные можно получить легально через API, а не выцарапывать руками, задача сильно проще, чем то, что было с Garmin.
Готов посмотреть на Polar AccessLink и попробовать собрать под него ту же логику: кэш, отчёты, бот. Но у меня самого нет Polar, вслепую писать интеграцию рискованно, легко сделать то, что выглядит правильно в коде, но ломается на реальных данных. Если вы готовы потестировать на своём аккаунте, получить токены, прогнать пару запросов, проверить, что реально приходит, можно собрать рабочий прототип. Пиши, договоримся, как организовать.
А поддержка часов серии CMF рассматривается? Как я понимаю с их приложения Nothing X без костылей данные вообще никак не вытащить.
Сомнительно, у CMF/Nothing X закрыто, публичного API не нашёл. Данные с часов уходят в Apple Health на iOS и в Health Connect на Android через само приложение, но это не облачный API, который можно дёргать с сервера, а хранилище на самом телефоне. Чтобы забрать оттуда данные, нужен не скрипт, а отдельное мобильное приложение с разрешением на чтение Health Connect/HealthKit, это совсем другая по объёму задача, чем с Garmin или Polar, где есть облачный API.
Единственный официальный путь без костылей, письмо на privacy@nothing.tech с запросом выгрузки по EU Data Act, но это разовый архив, а не что-то, что можно синхронизировать регулярно.
Так что пока не обещаю, слишком другая архитектура интеграции.
Чтобы забрать оттуда данные, нужен не скрипт, а отдельное мобильное приложение с разрешением на чтение Health Connect/HealthKit, это совсем другая по объёму задача, чем с Garmin или Polar, где есть облачный API.
А не надо его делать - тот же rouse context можно использовать(если что - он в исходниках, с openwebui интеграции делается гдето за полчаса, с chatgpt free/plus(именно Plus) НЕ делается, вроде Pro надо, с Claude Free - ограничено).
Спасибо, не знал про Rouse Context,гляну. Действительно закрывает именно ту часть, о которой я писал: не нужно самому писать Android-приложение для чтения Health Connect, кто-то уже это сделал и раздаёт как MCP-сервер.
Но тут есть нюанс, который сам же и назвал: это решает задачу "достать данные", только если у пользователя вообще есть AI-клиент с поддержкой произвольных MCP-серверов. С ChatGPT Free/Plus, как понимаю, не заведётся вообще, с Claude Free ограниченно, нормально работает с openwebui/Cursor/Claude Pro. У меня в проекте задача была прямо противоположная: чтобы человек без всякого MCP и без платных тарифов просто поставил бота в Telegram и написал ему текстом. Rouse Context, получается, отличный вариант для тех, кто уже сидит в экосистеме MCP-клиентов, но не отменяет отдельную задачу для тех, кто в неё не встроен.
Для CMF/Nothing X всё равно придётся смотреть отдельно, сам факт, что данные лежат в Health Connect, не значит, что телефон должен быть постоянно доступен как сервер, плюс не проверял, что там по факту приходит от CMF конкретно. Но как отправная точка, спасибо, буду иметь в виду
Интересный кейс. А где у вас сейчас проходит граница между решениями LLM и обычной детерминированной логикой?
Например, когда бот собирает интервальную тренировку: модель непосредственно формирует структуру шагов/зон/повторов, которая потом уходит в Garmin, или LLM только переводит запрос пользователя в промежуточную модель, а уже её отдельно валидирует код?
История с 30-минутной тренировкой, превратившейся в четырёхчасовую, как раз заставляет задуматься, насколько далеко вообще безопасно пускать LLM в write-операции :)
Модель придумывает саму тренировку какие шаги, сколько интервалов, какие пульсовые зоны. Но записать это в Garmin напрямую она не может. Между её ответом и реальной записью стоит обычный код с жёсткими проверками: если суммарная длительность выходит за разумные границы или структура похожа на тот самый баг (когда одна тренировка на 30 минут превращается в повторяющийся блок на 4 часа) код просто отказывается отправлять план дальше, до Garmin он не доходит вообще.
И даже если проверки пройдены, бот не отправляет тренировку сразу. Он показывает мне готовый план текстом (сколько по времени, что за шаги, какие зоны) и ждёт, что я нажму подтвердить или отменить. То есть модель придумывает содержание, а решение "действительно отправлять или нет" всегда остаётся за проверкой кода и за мной, а не за LLM.
Написал боту «как прошла неделя». Он сам полез в Garmin и ответил