TL;DR
Structured SVG Maps — способ подать LLM карту не скриншотом, а текстом в формате SVG. Дороги, объекты и их названия записаны как строки с координатами от 0 до 100, центр карты всегда (50, 50). Модель читает координаты и названия напрямую и не разбирает пиксели.
Если дать модели карту картинкой, ей приходится одновременно читать мелкие подписи и понимать, кто где стоит. Подписи она распознаёт с ошибками, а расстояния оценивает «на глаз». Результат нестабилен. На одной и той же карте с тем же вопросом текстовая версия работала не хуже картинки, а чаще заметно лучше. У открытой модели Gemma3 точность выросла вдвое: с 14% до 27% на выборе ориентира у поворота. У GPT-5.2 на втором задании она выросла с 40% до 55%.
Суть метода в трёх вещах:
- структура: дороги, точка-цель и объекты лежат в отдельных группах;
- нормализованные координаты: у каждого объекта есть название, категория и положение относительно центра;
- строгий вывод: ответ просят в JSON с одним полем
name, значение которого обязано совпасть с одним из названий на карте.
Схема метода
ШАГ 1: Собрать данные карты (дороги + объекты с названиями) → список с координатами
ШАГ 2: Нормализовать координаты: левый верх (0,0), правый низ (100,100),
цель (перекрёсток/точка назначения) = (50,50) → SVG-текст
ШАГ 3: Разложить по группам: road_network / navigation_vectors / pois
(у каждого объекта data-name, data-category) → структурированный текст
ШАГ 4: Один промпт: «проанализируй расположение, выбери один ориентир,
верни JSON {"name": "..."}» → строго одно название из списка
Всё идёт в одном запросе. Подготовка данных (шаги 1–3) делается отдельно, один раз.
Пример применения
Задача: Владелец кофейни на Рубинштейна в Петербурге пишет раздел «Как нас найти» для сайта и карточки в Яндекс Картах. Хочется не «300 метров от метро», а «рядом с Пятёрочкой». Нужно сначала выбрать, по какому из соседних заведений людям проще ориентироваться.
Промпт:
Ты помогаешь написать инструкцию «как найти нас» для посетителей кофейни.
Ниже локальная карта в формате SVG. Координаты нормализованы:
левый верхний угол = (0,0), правый нижний = (100,100).
Кофейня находится в центре (50,50). Масштаб карты ~124×124 м.
Задача: выбери ОДИН объект, который лучше всего описывает положение
кофейни в формате «рядом с …». Учитывай не только расстояние:
ориентир должен быть известным и заметным для обычного человека.
Верни только JSON: {"name": "<точное название из data-name>"}
Результат: Модель вернёт короткий JSON с одним названием из списка. Название будет совпадать с тем, что записано в data-name. Дальше можно отдельным запросом попросить написать фразу для сайта на основе выбранного ориентира. Помните: модель выбирает ориентир, который вероятнее всего назвал бы человек. Это не гарантия, что выбор верный. Проверьте его на месте.
Почему это работает
Слабость: картинка заставляет делать две сложные вещи сразу. Модель должна прочитать мелкий текст на карте и тут же определить, где что находится. Ошибки в распознавании названий накладываются на ошибки в оценке расстояний. Подпись «Ригла» может прочитаться иначе, а «слева-сверху от центра» превращается в догадку.
Сильная сторона: LLM хорошо читает структурированный текст. Названия записаны точно, символами. Координаты — это числа, а числа модель сравнивает уверенно: (51, 32) относительно (50, 50) — «чуть правее и выше». Эффект получается за счёт явной структуры: у каждого объекта есть имя, категория и положение, и всё лежит на своём месте.
Как метод использует это. Он убирает распознавание пикселей и оставляет модели одну задачу — выбор. Рычаги управления:
- Нормализация и центр (50,50) → модель не работает с широтой и долготой, положение «относительно цели» читается сразу. Для своей задачи ставьте в центр то, что важно (вход, точка доставки, ваша точка).
- Список кандидатов → чем длиннее список, тем выше риск ошибиться. Сузьте его до тех объектов, которые реально могут быть ориентирами.
- Формат вывода (JSON с одним
name) → вы получаете проверяемый ответ. Название можно сверить со списком, и придуманного не окажется. - Критерий выбора в промпте → добавьте «заметный, известный, не скрыт зданиями». В статье показано, что ближайший объект не всегда лучший выбор.
Шаблон промпта
Ты помогаешь выбрать ориентир для описания маршрута.
Ниже локальная карта в формате SVG. Координаты нормализованы:
левый верхний угол = (0,0), правый нижний = (100,100).
{что_в_центре} находится в центре (50,50).
Масштаб карты примерно {размер_области} м.
Задача: {что_выбрать}.
Учитывай расположение на карте, а также то, насколько объект узнаваем
и полезен человеку для ориентирования.
Верни только JSON: {"name": "<точное название из data-name>"}
{что_в_центре}— перекрёсток, вход, адрес, точка выдачи.{что_выбрать}— например, «выбери ориентир для поворота налево» или «выбери ориентир рядом с точкой назначения».- Блок
navigation_vectorsнужен, только если задача про поворот. Для описания «рядом с точкой» его можно убрать. - Координаты и названия берите из своих данных. Для карт это OpenStreetMap; для планов помещений — свои измерения.
🚀 Быстрый старт — вставь в чат:
Вот шаблон структурированной SVG-карты для выбора ориентира.
Адаптируй под мою задачу: [твоя задача — кафе, склад, офис, маршрут курьера].
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит, что находится в центре, какие объекты вокруг и где они расположены относительно друг друга, нужен ли поворот и что именно выбирать. Эти вопросы нужны, потому что метод держится на трёх вещах: нормализованных координатах, названиях и категориях объектов, строгом формате вывода. Она соберёт SVG по вашим данным и подставит в шаблон.
Ограничения
⚠️ Абсолютная точность невысокая: даже лучшая модель выбрала «человеческий» ориентир чуть больше, чем в половине случаев, а на остальных заданиях точность составляла 25–35%. Выбор модели — это подсказка, а не готовое решение. Результат надо проверять глазами.
⚠️ Не всегда выигрыш: у GPT-5.2 на задаче «ориентир у поворота» картинка и текст дали одинаковый результат. Прирост от текста заметнее на открытых моделях и на задаче «ориентир рядом с точкой».
⚠️ «Верно» = «как выбрал человек»: метрика — совпадение с ориентиром, который назвал автор реального описания. Другой подходящий ориентир засчитан как ошибка, поэтому реальная польза может быть выше. Но и проверить «правильность» без людей нельзя.
⚠️ Нужна подготовка данных: SVG нужно собрать из карты. Для одной-двух точек можно вручную. Для сотен адресов нужен небольшой скрипт, а его можно написать с помощью LLM.
⚠️ Узкая проверка: исследовали только небольшие карты (около 124×124 м) и японские описания ресторанов. Как метод поведёт себя на больших картах и в других языках, статья не показывает.
⚠️ Дообучение — не для читателя: вторая часть статьи про fine-tuning открытых моделей. Для практика в чате и с агентами она неприменима. На одном из заданий результат у Gemma3 даже немного упал.
Как исследовали
Исследователи взяли описания проезда из каталога ресторанов Hot Pepper (136 тысяч текстов) и оставили те, где человек называет конкретный ориентир: «поверните направо у Starbucks» или «рядом с McDonald's». Затем вручную привязали каждый ориентир к объекту в OpenStreetMap, чтобы знать «правильный» ответ. Получили два набора: 500 примеров для поворотов и 339 для назначения. Для проверки использовали по 100 примеров.
Главная идея дизайна — честное сравнение. Одни и те же данные карты подавали моделям двумя способами: как PNG-картинку и как SVG-текст. Промпты по смыслу одинаковые, формат ответа тоже. Менялась только форма карты. Сравнили пять моделей, три из них открытые. Текст почти везде выигрывал или держал паритет. Авторы объясняют это тем, что при текстовом входе нет ошибок чтения подписей и положение объектов задано явно.
Во второй части на трёх открытых моделях проверили дообучение. Оно подняло точность на повороте почти вдвое. На втором задании эффект был слабее, а у одной модели даже отрицательный. Практический вывод для нас: главное в статье — сам формат подачи данных. Выигрыш от формата получается без обучения.
Адаптации и экстраполяции
🔧 Техника: добавить критерий «заметности» → ориентир ближе к человеческому выбору
Авторы отмечают, что ближайший объект не всегда лучший: его могут заслонять, он может быть неизвестным. Поэтому добавьте в промпт:
Не выбирай ближайший объект автоматически. Выбери тот, который
узнаваем для обычного человека и виден с улицы. Если подходят
несколько, назови один, самый известный.
Это ваша адаптация, в статье её отдельно не проверяли.
Экстраполяция: тот же принцип для планов помещений. Нормализованные координаты и структурированный текст можно использовать не только для карт улиц. Например, для схемы склада или офиса:
Вот план этажа в виде структурированного текста.
Координаты нормализованы: (0,0) — левый верх, (100,100) — правый низ.
Ресепшен — в центре (50,50).
Напиши инструкцию для курьера: как дойти от ресепшена до отдела продаж,
используя в качестве ориентиров другие помещения. Не используй метры.
В статье это не проверялось. Принцип «данные в структурированном виде с координатами» перенесён по аналогии, результат нужно проверять.
Ресурсы
- Работа: Structured Maps for Landmark-Based Route Instructions with LLMs
- Авторы: Mifu Matsumoto, Yuki Nakanishi, Tomoya Hashiguchi, Hiroaki Ohshima — University of Hyogo, Япония
- Данные и инструменты из статьи: OpenStreetMap, OSMnx, Hot Pepper Gourmet Search API, Unsloth (для дообучения)
- Связанное: CartoMapQA — бенчмарк чтения карт мультимодальными моделями
