[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"content-post-poisk-po-smyslu-vektornaya-baza":3},{"post":4,"related":149,"status":10},{"id":5,"title":6,"slug":7,"excerpt":8,"cover_alt":9,"cover_position":10,"reading_time":11,"seo_title":12,"seo_description":13,"date_published":14,"date_modified":10,"source_lead":10,"tag":15,"blocks":19,"cover":146},"25708556-4348-4e69-8cad-64ded3ab4fee","Поиск по смыслу: когда векторная база окупается, а когда это лишний слой","poisk-po-smyslu-vektornaya-baza","\"Нам нужна база знаний, чтобы бот отвечал по нашим документам\" - за этой фразой стоит векторный поиск. Разбираю, где он окупается, где вместо него нужен обычный запрос, и почему уменьшение числа найденных фрагментов с 30 до 15 улучшило ответы и удешевило работу.","Облако точек со скоплениями, тонкие лучи от одной точки к ближайшим",null,3,"Векторный поиск и RAG: когда он нужен бизнесу, а когда нет","Чем поиск по смыслу отличается от поиска по словам, где он реально окупается, почему больше найденных фрагментов ухудшает ответ и что ломается при внедрении.","2026-08-27T17:14:48.000Z",{"name":16,"slug":17,"color":18},"Инструменты","instrumenty","#3F7300",[20,26,30,35,39,43,47,51,55,59,63,67,71,75,79,83,87,91,95,99,103,107,111,115,119,123,127],{"sort":21,"collection":22,"item":23},1,"block_text",{"body":24,"is_lead":25,"footnote":10},"Каждый второй разговор про ИИ в компании рано или поздно приходит к фразе \"нам нужна база знаний, чтобы бот отвечал по нашим документам\". За этой фразой стоит конкретная технология - векторный поиск, он же поиск по смыслу. Иногда он решает задачу целиком. Иногда это дорогой способ сделать хуже, чем обычный фильтр в базе данных.",false,{"sort":27,"collection":22,"item":28},2,{"body":29,"is_lead":25,"footnote":10},"Разберу, чем он отличается от привычного поиска, где выигрывает, и что ломается при внедрении - на том, что видел в проде.",{"sort":11,"collection":31,"item":32},"block_heading",{"heading":33,"level":34},"В чём разница","h2",{"sort":36,"collection":22,"item":37},4,{"body":38,"is_lead":25,"footnote":10},"Обычный поиск ищет слова. Вы вводите \"рассрочка\", он находит документы, где написано \"рассрочка\". Если в документе написано \"оплата частями\", вы его не найдёте.",{"sort":40,"collection":22,"item":41},5,{"body":42,"is_lead":25,"footnote":10},"Векторный поиск работает иначе. Каждый кусок текста заранее превращается в набор чисел, описывающий его смысл, и складывается в специальную базу. Запрос превращается в такой же набор чисел, и система ищет ближайшие по смыслу. \"Оплата частями\" и \"рассрочка\" оказываются рядом, хотя ни одна буква не совпадает.",{"sort":44,"collection":22,"item":45},6,{"body":46,"is_lead":25,"footnote":10},"Отсюда и область применения: он нужен там, где одно и то же говорят разными словами.",{"sort":48,"collection":31,"item":49},7,{"heading":50,"level":34},"Где он реально окупается",{"sort":52,"collection":22,"item":53},8,{"body":54,"is_lead":25,"footnote":10},"**Люди и их описания.** Задача, на которой я это видел лучше всего: закрытая платформа, где участники ищут друг друга под конкретный запрос - \"кто у нас разбирается в логистике для маркетплейсов\". Профили заполнены свободным текстом, каждый пишет о себе как умеет. Никакой фильтр по полям тут не работает, а поиск по смыслу работает.",{"sort":56,"collection":22,"item":57},9,{"body":58,"is_lead":25,"footnote":10},"**Обращения и заявки.** \"Не приходит письмо со ссылкой\", \"не могу подтвердить почту\", \"не активируется аккаунт\" - это одна проблема, описанная тремя людьми. Поиск по смыслу связывает их с одной инструкцией.",{"sort":60,"collection":22,"item":61},10,{"body":62,"is_lead":25,"footnote":10},"**Внутренние документы и регламенты.** Классический случай: сотрудник задаёт вопрос человеческим языком, а ответ лежит в регламенте, написанном канцеляритом.",{"sort":64,"collection":31,"item":65},11,{"heading":66,"level":34},"Где он не нужен",{"sort":68,"collection":22,"item":69},12,{"body":70,"is_lead":25,"footnote":10},"Здесь я обычно останавливаю разговор на входе, потому что векторную базу часто просят там, где нужен обычный запрос.",{"sort":72,"collection":22,"item":73},13,{"body":74,"is_lead":25,"footnote":10},"Всё, что описывается точными признаками, надо искать обычными средствами: заказы за период, клиенты из города, договоры на сумму больше миллиона, товар с артикулом. Смысл тут ни при чём, а нечёткий поиск по числам и датам даёт нечёткие результаты - что как раз плохо.",{"sort":76,"collection":22,"item":77},14,{"body":78,"is_lead":25,"footnote":10},"Правильная схема почти всегда гибридная: сначала обычные фильтры сужают выборку по точным признакам, потом поиск по смыслу ранжирует то, что осталось. Порядок именно такой - он и точнее, и дешевле.",{"sort":80,"collection":22,"item":81},15,{"body":82,"is_lead":25,"footnote":10},"И отдельно: если ваши документы - это пятнадцать страниц регламента, векторная база не нужна. Современная модель прочитает их целиком за один запрос. Технология начинает окупаться, когда документов сотни и в контекст они не помещаются.",{"sort":84,"collection":31,"item":85},16,{"heading":86,"level":34},"Больше найденного - хуже ответ",{"sort":88,"collection":22,"item":89},17,{"body":90,"is_lead":25,"footnote":10},"Самое неочевидное для тех, кто внедряет впервые.",{"sort":92,"collection":22,"item":93},18,{"body":94,"is_lead":25,"footnote":10},"Логика подсказывает: чем больше подходящих фрагментов мы отдадим модели, тем полнее будет ответ. На практике наоборот. Мы снижали количество подтягиваемых фрагментов с 25-31 до 15, а в одном процессе - с 60 до 20. Расход на модель заметно упал, а качество ответов не изменилось.",{"sort":96,"collection":22,"item":97},19,{"body":98,"is_lead":25,"footnote":10},"Причина понятна, если посмотреть на это глазами модели. Пятнадцать фрагментов, из которых три релевантны, - это три полезных куска и двенадцать отвлекающих. Модель тратит внимание на мусор и иногда цепляется за него в ответе. Меньше, но точнее - лучше, чем много и приблизительно.",{"sort":100,"collection":22,"item":101},20,{"body":102,"is_lead":25,"footnote":10},"Практический вывод: количество фрагментов - это настройка, которую надо подбирать замером на реальных вопросах, а не ставить \"побольше, на всякий случай\".",{"sort":104,"collection":31,"item":105},21,{"heading":106,"level":34},"Что ломается при внедрении",{"sort":108,"collection":22,"item":109},22,{"body":110,"is_lead":25,"footnote":10},"**Нарезка документов.** Главный рычаг качества и место, где обычно всё портится. Если резать текст механически по количеству символов, таблица разъедется пополам, а пункт регламента потеряет заголовок и станет бессмысленным. Резать надо по смысловым границам, а к каждому куску добавлять контекст: из какого документа, из какого раздела.",{"sort":112,"collection":22,"item":113},23,{"body":114,"is_lead":25,"footnote":10},"**Устаревание.** Данные меняются, а индекс - нет. Регламент обновили, а бот полгода отвечает по старой редакции и делает это уверенно. Нужен процесс переиндексации, привязанный к изменению документа, а не к календарю.",{"sort":116,"collection":22,"item":117},24,{"body":118,"is_lead":25,"footnote":10},"**Векторная база - это состояние.** Её содержимое не восстанавливается из репозитория, как код. У нас автоматическое обновление таких сервисов сознательно выключено: любое неаккуратное движение может пересоздать хранилище и потерять данные. Плата за это - нужно помнить о ручном шаге при развёртывании; один раз про него забыли, и сервис неделю висел без единого работающего экземпляра. Тихо, разумеется.",{"sort":120,"collection":22,"item":121},25,{"body":122,"is_lead":25,"footnote":10},"**Оценка качества.** Без набора реальных вопросов с проверенными ответами вы не отличите хорошую настройку от плохой. Сорок вопросов, собранных у сотрудников, - это полдня работы, и они окупаются на первой же итерации.",{"sort":124,"collection":31,"item":125},26,{"heading":126,"level":34},"Что забрать себе",{"sort":128,"collection":129,"item":130},27,"block_list",{"list_style":131,"items":132},"dash",[133,136,138,140,142,144],{"lead":134,"text":135,"highlight":25},"","Векторный поиск нужен там, где одно и то же называют разными словами. Для точных признаков используйте обычный запрос.",{"lead":134,"text":137,"highlight":25},"Гибрид почти всегда лучше: сначала фильтры, потом смысл.",{"lead":134,"text":139,"highlight":25},"Если документов десятки, а не сотни, отдайте их модели целиком и не стройте инфраструктуру.",{"lead":134,"text":141,"highlight":25},"Больше найденных фрагментов - не лучше. Подбирайте количество замером, обычно оптимум ниже, чем кажется.",{"lead":134,"text":143,"highlight":25},"Заложите переиндексацию при изменении документов. Уверенно отвечающий по старой редакции бот хуже, чем отсутствие бота.",{"lead":134,"text":145,"highlight":25},"Сделайте набор контрольных вопросов до внедрения, а не после.",{"id":147,"modified_on":148},"0eaa4b61-42ab-4d12-b6d0-8bf934a901f9","2026-08-27T18:13:16.901Z",[150,269,361],{"id":151,"title":152,"slug":153,"excerpt":154,"cover_alt":155,"cover_position":10,"reading_time":11,"seo_title":156,"seo_description":157,"date_published":158,"date_modified":10,"source_lead":10,"tag":159,"blocks":160,"cover":266},"a3bdafa1-370e-4669-a460-69d658ee9330","Локально или в облаке: где своё железо реально выигрывает у API","lokalno-ili-v-oblake","Одна и та же задача на одном и том же сервере: в первом варианте 25 секунд речи обрабатывались две минуты, во втором - за десять секунд. Разбираю на замерах, где локальная модель реально выигрывает у облачного API, а где это самообман, и по какому фильтру я прохожу эту развилку.","Весы: монолитный блок против лёгкой формы из тонких линий","Локальные модели или облачный API: как выбрать на реальных замерах","Где локальная модель дешевле и лучше облачного API, а где это самообман. Реальные замеры на распознавании речи: RTF 5 против 0,12 и 208-кратная скорость на Neural Engine.","2026-08-27T17:42:48.000Z",{"name":16,"slug":17,"color":18},[161,164,167,170,173,176,179,182,185,188,191,194,197,200,203,206,209,216,219,222,225,236,239,250,253,255],{"sort":21,"collection":22,"item":162},{"body":163,"is_lead":25,"footnote":10},"Вопрос \"локальная модель или облачный API\" почти всегда обсуждают идеологически: одни за приватность, другие за удобство. Между тем это обычная инженерная развилка, у которой есть числовой ответ - разный для разных задач.",{"sort":27,"collection":22,"item":165},{"body":166,"is_lead":25,"footnote":10},"У меня накопились замеры на одной задаче, где я прошёл оба пути до конца, - распознавание речи. Расскажу, что получилось, и заодно сформулирую фильтр, по которому эту развилку стоит проходить в любом другом проекте.",{"sort":11,"collection":31,"item":168},{"heading":169,"level":34},"Задача",{"sort":36,"collection":22,"item":171},{"body":172,"is_lead":25,"footnote":10},"Голосовой ввод на сайте и в личных инструментах: человек говорит, получает готовый текст. К этому же классу относится расшифровка звонков и встреч - обычно самый первый реальный ИИ-проект в компании, потому что польза очевидна и данные уже есть.",{"sort":40,"collection":22,"item":174},{"body":175,"is_lead":25,"footnote":10},"Требования были такие: русский язык, приемлемая задержка, и аудио не должно уезжать в чужие руки без необходимости. Последнее - не паранойя: в звонках клиентов лежат персональные данные, и отправка их наружу превращает техническую задачу в юридическую.",{"sort":44,"collection":31,"item":177},{"heading":178,"level":34},"Первый заход: сделать красиво",{"sort":48,"collection":22,"item":180},{"body":181,"is_lead":25,"footnote":10},"Первым делом я взял готовую потоковую обёртку - из тех, что показывают текст прямо во время речи, слово за словом. Выглядит эффектно, и на демо-роликах всё летает.",{"sort":52,"collection":22,"item":183},{"body":184,"is_lead":25,"footnote":10},"На процессорном сервере она дала показатель реального времени около 5. Расшифровка означает следующее: 25 секунд речи обрабатываются две минуты. Пользоваться этим нельзя.",{"sort":56,"collection":22,"item":186},{"body":187,"is_lead":25,"footnote":10},"Важно, что дело было не в железе - это отдельный сервер с быстрыми ядрами, взятый специально под задачу. Дело в подходе: потоковое распознавание постоянно пересчитывает уже сказанное, чтобы уточнить гипотезу, и на процессоре эта переработка съедает всё.",{"sort":60,"collection":31,"item":189},{"heading":190,"level":34},"Второй заход: сделать просто",{"sort":64,"collection":22,"item":192},{"body":193,"is_lead":25,"footnote":10},"Я выбросил потоковость и сделал скучно: человек говорит целиком, запись уходит на сервер одним куском, модель распознаёт её за один проход.",{"sort":68,"collection":22,"item":195},{"body":196,"is_lead":25,"footnote":10},"Показатель реального времени - 0,26. Сорок секунд речи обрабатываются за десять. После настройки - 0,12, то есть быстрее реального времени в восемь раз.",{"sort":72,"collection":22,"item":198},{"body":199,"is_lead":25,"footnote":10},"Заодно ушла вторая проблема, о которой я не думал заранее: потоковая выдача даёт рваный текст. Пока модель уточняет гипотезу, фраза на экране дёргается и переписывается. На записи целиком результат сразу чистый.",{"sort":76,"collection":31,"item":201},{"heading":202,"level":34},"Третий заход: посчитать на своём железе",{"sort":80,"collection":22,"item":204},{"body":205,"is_lead":25,"footnote":10},"Отдельная история - обработка на ноутбуке. На современном Маке есть отдельный ускоритель для нейросетей, и модель, собранная под него, показывает 208-кратную скорость относительно реального времени. Часовой разговор расшифровывается за считанные секунды, разделение на говорящих - примерно так же быстро.",{"sort":84,"collection":22,"item":207},{"body":208,"is_lead":25,"footnote":10},"Здесь же я собрал грабли, которые стоит знать заранее:",{"sort":88,"collection":129,"item":210},{"list_style":131,"items":211},[212,214],{"lead":134,"text":213,"highlight":25},"Безвентиляторный ноутбук перегревается, если гнать распознавание и разделение говорящих одновременно. Последовательно - те же секунды, но без троттлинга. Параллелить на одном ускорителе бессмысленно.",{"lead":134,"text":215,"highlight":25},"Затравка модели (список терминов, чтобы правильно писала специальные слова) должна быть обычной фразой, а не списком. Список, начинающийся со слова \"Термины:\", модель вставляла прямо в расшифровку, а на плохом звуке зацикливалась и повторяла его. Модель затравку продолжает, а не исполняет. После переписывания живым предложением мусор исчез, и скорость выросла втрое.",{"sort":92,"collection":31,"item":217},{"heading":218,"level":34},"Фильтр: когда локально выигрывает",{"sort":96,"collection":22,"item":220},{"body":221,"is_lead":25,"footnote":10},"Из этой и соседних задач сложилось правило, по которому я развилку прохожу.",{"sort":100,"collection":22,"item":223},{"body":224,"is_lead":25,"footnote":10},"**Локально выигрывает, когда:**",{"sort":104,"collection":129,"item":226},{"list_style":131,"items":227},[228,230,232,234],{"lead":134,"text":229,"highlight":25},"нагрузка постоянная и предсказуемая - расшифровка всех звонков, обработка всех документов;",{"lead":134,"text":231,"highlight":25},"данные чувствительные и их отправка наружу создаёт отдельную юридическую задачу;",{"lead":134,"text":233,"highlight":25},"задача узкая, и под неё есть небольшая специализированная модель;",{"lead":134,"text":235,"highlight":25},"нужна независимость от чужой доступности, тарифов и геополитики.",{"sort":108,"collection":22,"item":237},{"body":238,"is_lead":25,"footnote":10},"**Облако выигрывает, когда:**",{"sort":112,"collection":129,"item":240},{"list_style":131,"items":241},[242,244,246,248],{"lead":134,"text":243,"highlight":25},"нагрузка редкая или рваная - железо будет простаивать;",{"lead":134,"text":245,"highlight":25},"задача требует рассуждений, а не распознавания: разбор смысла, написание текста, принятие решений;",{"lead":134,"text":247,"highlight":25},"вам нужен лучший результат сегодня, а не приемлемый;",{"lead":134,"text":249,"highlight":25},"вы ещё проверяете гипотезу и не знаете, взлетит ли вообще.",{"sort":116,"collection":22,"item":251},{"body":252,"is_lead":25,"footnote":10},"Практически это чаще всего означает гибрид, и у меня он именно такой: распознавание речи - локально, на своём железе, а причёсывание расшифровки в читаемый текст - облачной моделью. Аудио наружу не уходит, а за интеллект платится там, где он действительно нужен.",{"sort":120,"collection":31,"item":254},{"heading":126,"level":34},{"sort":124,"collection":129,"item":256},{"list_style":131,"items":257},[258,260,262,264],{"lead":134,"text":259,"highlight":25},"Развилка решается замером, а не убеждениями. Полдня на прототип обоих вариантов окупаются.",{"lead":134,"text":261,"highlight":25},"Красивое решение и работающее - разные вещи. Потоковая выдача выглядит лучше, а даёт хуже и медленнее.",{"lead":134,"text":263,"highlight":25},"Считайте не стоимость запроса, а стоимость месяца при вашей нагрузке. При постоянном потоке своё железо окупается быстро, при редких обращениях не окупается никогда.",{"lead":134,"text":265,"highlight":25},"Гибрид - нормальный ответ. Тяжёлое и однообразное держите у себя, интеллект берите в облаке.",{"id":267,"modified_on":268},"64bd6f0e-23d1-44b4-9f73-ecf6098c1280","2026-08-27T18:12:51.408Z",{"id":270,"title":271,"slug":272,"excerpt":273,"cover_alt":274,"cover_position":10,"reading_time":11,"seo_title":275,"seo_description":276,"date_published":277,"date_modified":10,"source_lead":10,"tag":278,"blocks":279,"cover":358},"b4b00a32-20a6-4557-b217-16867693b50b","Работает, но врёт: как геоблокировки ломают ИИ-систему незаметно","geobloki-i-tihie-otkazy","Поиск в системе не работал минимум три недели, а мониторинг был зелёный: ИИ-агент съедал ошибку инструмента и спокойно отвечал по памяти. Разбираю класс поломок, при которых всё \"работает\", - блокировки по географии, тихие отказы и то, как их вообще заметить.","Ровный ряд горящих индикаторов и оборванный кабель за панелью","Геоблокировки и ИИ-сервисы: тихие отказы, которые не видно в мониторинге","Поиск не работал три недели, а система считала запуски успешными: ИИ-агент съедал ошибку инструмента и отвечал по памяти. Как ловить тихие отказы и что делать с блокировками по IP.","2026-08-27T17:35:48.000Z",{"name":16,"slug":17,"color":18},[280,283,286,289,292,295,298,301,304,307,310,313,316,319,322,325,328,331,334,337,340,343,345],{"sort":21,"collection":22,"item":281},{"body":282,"is_lead":25,"footnote":10},"Самая дорогая поломка - не та, при которой всё падает. Падение видно сразу, его чинят за час. Дорого стоит поломка, при которой система продолжает отвечать, отчётность зелёная, а результат тихо стал хуже.",{"sort":27,"collection":22,"item":284},{"body":285,"is_lead":25,"footnote":10},"Расскажу про класс таких поломок, с которым в России теперь сталкивается любой, кто строит ИИ-системы: отказ внешнего сервиса по географическому признаку.",{"sort":11,"collection":31,"item":287},{"heading":288,"level":34},"Что случилось",{"sort":36,"collection":22,"item":290},{"body":291,"is_lead":25,"footnote":10},"В одной системе ИИ-ассистент умеет искать в интернете - это отдельный инструмент, который он вызывает, когда своих знаний не хватает. Я полез в журналы по другому поводу и от нечего делать посмотрел статистику вызовов поиска.",{"sort":40,"collection":22,"item":293},{"body":294,"is_lead":25,"footnote":10},"За всё окно хранения журналов - две недели, 335 вызовов - успешных не было ни одного. Ноль. Поиск был мёртв как минимум с начала месяца.",{"sort":44,"collection":22,"item":296},{"body":297,"is_lead":25,"footnote":10},"При этом в системе не горело ничего. Запуски числились успешными, пользователи не жаловались, поддержка была спокойна. Причина проста и от этого неприятна: ИИ-агент устроен так, что ошибку инструмента он обрабатывает сам. Инструмент не ответил - агент пожал плечами и ответил по памяти. Формально диалог завершён успешно. Фактически человек получил ответ без свежих данных и не узнал об этом.",{"sort":48,"collection":31,"item":299},{"heading":300,"level":34},"Почему это гео, а не сломанный ключ",{"sort":52,"collection":22,"item":302},{"body":303,"is_lead":25,"footnote":10},"Дальше началась диагностика, которая заняла бы дни, если бы не одна привычка: при странном отказе внешнего сервиса первым делом сравнить его поведение из разных точек.",{"sort":56,"collection":22,"item":305},{"body":306,"is_lead":25,"footnote":10},"Сервис отвечал кодом 403 и html-страницей балансировщика вместо нормального json. С зарубежного адреса тот же самый ключ давал 200. С двух независимых российских адресов - 403. Запрос вообще без ключа с тех же российских адресов получал аккуратный 401 в json - то есть сеть проходит, адрес не забанен, отвечает именно приложение. Режется конкретно аутентифицированный вызов.",{"sort":60,"collection":22,"item":308},{"body":309,"is_lead":25,"footnote":10},"Это важное различение. Битый ключ даёт 401 и внятное сообщение. Гео даёт 403 и страницу-заглушку. Разница в одну цифру, а выводы противоположные: в первом случае перевыпускаете ключ, во втором перевыпуск не поможет никогда.",{"sort":64,"collection":22,"item":311},{"body":312,"is_lead":25,"footnote":10},"Отдельная ловушка того же семейства: один известный шлюз к языковым моделям отвечает на запросы из дата-центров кодом 403 с формулировкой про политику безопасности, а в другом сценарии - кодом 401. То есть 401 от него с сервера - это не протухший ключ, а тот же самый блок. Я потратил на эту догадку время дважды и теперь держу её записанной.",{"sort":68,"collection":31,"item":314},{"heading":315,"level":34},"Масштаб проблемы шире, чем кажется",{"sort":72,"collection":22,"item":317},{"body":318,"is_lead":25,"footnote":10},"Проверка соседних сервисов с тех же адресов дала пёструю картину: часть поисковых API режет российские адреса наглухо, часть работает без вопросов. Отдельная история - мессенджеры: исходящие в один популярный мессенджер из российского облака стабильно упираются в таймаут. У этого есть красивое следствие: если алерты о сбоях настроены туда же, то оповещатель падает на отправке оповещения. Про аварии не узнаёт никто, и мониторинг снова зелёный.",{"sort":76,"collection":22,"item":320},{"body":321,"is_lead":25,"footnote":10},"Общий вывод простой: в 2026 году доступность внешнего сервиса - это не константа, а переменная, зависящая от того, откуда вы вышли в интернет. Причём меняется она без предупреждения и без письма на почту.",{"sort":80,"collection":31,"item":323},{"heading":324,"level":34},"Что с этим делать",{"sort":84,"collection":22,"item":326},{"body":327,"is_lead":25,"footnote":10},"**Считать внешний сервис ненадёжным по умолчанию.** Не потому, что он плохой, а потому, что канал до него вам не принадлежит.",{"sort":88,"collection":22,"item":329},{"body":330,"is_lead":25,"footnote":10},"**Ловить тихие отказы отдельно.** Мониторинг \"процесс завершился успешно\" здесь бесполезен. Нужны метрики результата: сколько вызовов инструмента вернули данные, а не ошибку; какая доля ответов агента опиралась на поиск. Хорошая проверка на здравый смысл - раз в месяц открыть журналы и посмотреть, что вообще происходит внутри успешных запусков.",{"sort":92,"collection":22,"item":332},{"body":333,"is_lead":25,"footnote":10},"**Не гасить ошибки внутри агента молча.** Если инструмент не ответил, это должно попадать в журнал сбоев и в оповещения, даже если агент справился без него. Умение агента выкручиваться - достоинство для пользователя и катастрофа для эксплуатации.",{"sort":96,"collection":22,"item":335},{"body":336,"is_lead":25,"footnote":10},"**Держать канал наружу отдельным узлом.** У меня весь исходящий трафик к зарубежным сервисам идёт через один управляемый шлюз. Когда точка выхода перестаёт работать, я меняю её в одном месте, а не в пятнадцати интеграциях. За последний год я менял её дважды - оба раза внезапно.",{"sort":100,"collection":22,"item":338},{"body":339,"is_lead":25,"footnote":10},"**Иметь запасного поставщика.** Не абстрактно, а конкретно: проверенный и настроенный второй сервис того же назначения, на который переключаются одной настройкой.",{"sort":104,"collection":22,"item":341},{"body":342,"is_lead":25,"footnote":10},"**Не строить алерты на канале, который может отвалиться.** Оповещения о сбоях должны идти по маршруту, независимому от того, что они охраняют.",{"sort":108,"collection":31,"item":344},{"heading":126,"level":34},{"sort":112,"collection":129,"item":346},{"list_style":131,"items":347},[348,350,352,354,356],{"lead":134,"text":349,"highlight":25},"Успешный запуск не равно полученный результат. Особенно у ИИ-агентов: они умеют молча работать без инструментов.",{"lead":134,"text":351,"highlight":25},"При странной ошибке от внешнего сервиса сравните ответ с другой точки выхода до того, как перевыпускать ключи.",{"lead":134,"text":353,"highlight":25},"403 со страницей-заглушкой и 401 в json - разные диагнозы. Смотрите не только на код, но и на формат ответа.",{"lead":134,"text":355,"highlight":25},"Точка выхода в интернет - это архитектурный элемент. Заложите её отдельно, чтобы менять в одном месте.",{"lead":134,"text":357,"highlight":25},"Канал оповещений о сбоях не должен зависеть от того же, что ломается.",{"id":359,"modified_on":360},"9f4b69c4-2c6f-438a-abc2-5de5ab33ab96","2026-08-27T18:12:56.230Z",{"id":362,"title":363,"slug":364,"excerpt":365,"cover_alt":366,"cover_position":10,"reading_time":11,"seo_title":367,"seo_description":368,"date_published":369,"date_modified":10,"source_lead":10,"tag":370,"blocks":371,"cover":468},"e72b3463-3c8c-4645-84c6-09dfee440a20","Почему письма уходят в спам: SPF, DKIM и DMARC простыми словами","pochemu-pisma-uhodyat-v-spam","У моего домена почта работала, письма отправлялись, всё выглядело нормально - а двух из трёх записей, отвечающих за доверие к отправителю, не было вовсе. Объясняю SPF, DKIM и DMARC человеческим языком: что каждая делает, в каком порядке ставить и как проверить результат за две минуты.","Три конверта проходят через арки-штампы, четвёртый отложен в тень","SPF, DKIM, DMARC: как настроить, чтобы письма доходили","Три записи в DNS, без которых рассылка и даже обычные письма уезжают в спам. Что каждая означает, в каком порядке их ставить и как проверить результат за две минуты.","2026-08-27T17:21:48.000Z",{"name":16,"slug":17,"color":18},[372,375,378,381,384,387,390,393,396,399,402,405,408,411,414,417,420,423,426,429,432,435,438,441,450,453,455],{"sort":21,"collection":22,"item":373},{"body":374,"is_lead":25,"footnote":10},"Я собирался включить на своём сайте почтовую рассылку и по привычке начал с проверки домена. Оказалось, что у него настроены только базовые вещи: почта работает, письма отправляются, всё выглядит нормально. Двух из трёх записей, отвечающих за доверие к отправителю, не было вовсе.",{"sort":27,"collection":22,"item":376},{"body":377,"is_lead":25,"footnote":10},"Это типичная ситуация. Почта \"просто работает\" ровно до того момента, когда вы начинаете отправлять что-то массовое или важное - и тогда выясняется, что половина писем не доходит, а вы об этом не знаете, потому что уведомлений о попадании в спам не бывает.",{"sort":11,"collection":22,"item":379},{"body":380,"is_lead":25,"footnote":10},"Разберу три записи по-человечески, без RFC.",{"sort":36,"collection":31,"item":382},{"heading":383,"level":34},"SPF: кому разрешено писать от вашего имени",{"sort":40,"collection":22,"item":385},{"body":386,"is_lead":25,"footnote":10},"Представьте, что кто угодно может отправить бумажное письмо на бланке вашей компании. Примерно так устроена почта по умолчанию: адрес отправителя в письме - это просто текст, его можно написать любой.",{"sort":44,"collection":22,"item":388},{"body":389,"is_lead":25,"footnote":10},"SPF - это список: с каких серверов разрешено отправлять письма от вашего домена. Он лежит в настройках домена, и почтовые системы его проверяют. Пришло письмо от вас с сервера, которого нет в списке, - повод для подозрений.",{"sort":48,"collection":22,"item":391},{"body":392,"is_lead":25,"footnote":10},"Эта запись есть почти у всех, потому что хостинг обычно ставит её сам при подключении почты. Дальше начинается то, что сам себя не поставит.",{"sort":52,"collection":31,"item":394},{"heading":395,"level":34},"DKIM: подпись, которую нельзя подделать",{"sort":56,"collection":22,"item":397},{"body":398,"is_lead":25,"footnote":10},"SPF говорит \"письмо пришло с правильного сервера\". DKIM говорит \"письмо действительно ваше и его не меняли по дороге\": исходящая почта подписывается криптографической подписью, а проверить её можно открытым ключом, который лежит в настройках домена.",{"sort":60,"collection":22,"item":400},{"body":401,"is_lead":25,"footnote":10},"Разница практическая. SPF ломается при пересылке письма: адрес отправителя остался ваш, а сервер уже чужой. DKIM пересылку переживает, потому что подпись живёт в самом письме.",{"sort":64,"collection":22,"item":403},{"body":404,"is_lead":25,"footnote":10},"Именно этой записи у меня не было. И тут выяснилась деталь, из-за которой её и не бывает у многих: на моём хостинге DKIM не включается кнопкой в панели - его включает поддержка по обращению. Пишете тикет, просите подписывать исходящую почту, и запись появляется в настройках домена сама. Пять минут работы и ноль рублей, но об этом надо знать.",{"sort":68,"collection":31,"item":406},{"heading":407,"level":34},"DMARC: что делать с письмами, которые не прошли проверку",{"sort":72,"collection":22,"item":409},{"body":410,"is_lead":25,"footnote":10},"Первые две записи описывают, как проверить письмо. DMARC отвечает на следующий вопрос: а что делать, если проверка не прошла?",{"sort":76,"collection":22,"item":412},{"body":413,"is_lead":25,"footnote":10},"Вариантов три: ничего не делать и просто наблюдать, отправить в спам или отклонить совсем. Плюс адрес, на который почтовые системы будут присылать отчёты - кто и откуда шлёт письма от вашего имени.",{"sort":80,"collection":22,"item":415},{"body":416,"is_lead":25,"footnote":10},"Порядок здесь важен, и его нарушение - главная ошибка самостоятельной настройки. Нельзя начинать со строгого режима: если DKIM не настроен или какой-то ваш сервис шлёт письма мимо списка, вы своими руками отправите в спам собственную почту.",{"sort":84,"collection":22,"item":418},{"body":419,"is_lead":25,"footnote":10},"Правильная последовательность: сначала мягкий режим наблюдения с отчётами, потом настройка DKIM, потом проверка боем, и только потом ужесточение. Я именно так и делал: поставил DMARC, добился DKIM, убедился, что обе проверки проходят, и после этого поднял режим до отправки подозрительного в спам.",{"sort":88,"collection":31,"item":421},{"heading":422,"level":34},"Как проверить за две минуты",{"sort":92,"collection":22,"item":424},{"body":425,"is_lead":25,"footnote":10},"Не надо ставить инструменты и разбираться в заголовках. Есть бесплатные сервисы-автоответчики: вы отправляете письмо со своего рабочего адреса на специальный адрес и получаете в ответ полный разбор - прошёл ли SPF, прошёл ли DKIM, что видит принимающая сторона.",{"sort":96,"collection":22,"item":427},{"body":428,"is_lead":25,"footnote":10},"Я пользуюсь таким после каждого изменения. Ответ приходит за минуту, и в нём прямым текстом написано pass или fail по каждому пункту. Это единственный способ убедиться, что вы настроили не то, что хотели, а то, что получилось.",{"sort":100,"collection":22,"item":430},{"body":431,"is_lead":25,"footnote":10},"Отдельная грабля, если правите настройки домена через программный интерфейс хостинга, а не руками: у некоторых провайдеров операция изменения записей перезаписывает всю группу целиком и молча удаляет то, что вы не передали. После любой такой правки проверяйте, на месте ли записи почты и адреса сайта. Я проверяю всегда.",{"sort":104,"collection":31,"item":433},{"heading":434,"level":34},"Бонус: аватар отправителя",{"sort":108,"collection":22,"item":436},{"body":437,"is_lead":25,"footnote":10},"Раз уж речь о доверии к письму - вопрос, который мне задают чаще, чем про DKIM: как сделать, чтобы рядом с письмом показывалась картинка компании, а не серый кружок с буквой.",{"sort":112,"collection":22,"item":439},{"body":440,"is_lead":25,"footnote":10},"Ответ неприятный и разный для разных почт:",{"sort":116,"collection":129,"item":442},{"list_style":131,"items":443},[444,446,448],{"lead":134,"text":445,"highlight":25},"В Gmail единственный официальный путь - технология BIMI, а она требует сертификата, подтверждающего права на товарный знак. Это от 1000 долларов в год и обязательный зарегистрированный знак. Для индивидуального предпринимателя без товарного знака - недоступно в принципе.",{"lead":134,"text":447,"highlight":25},"В Mail.ru делается бесплатно через кабинет почтмейстера: подтверждаете домен записью в его настройках и загружаете картинку. Требования простые - квадрат, непрозрачный фон, читаемость в мелком размере.",{"lead":134,"text":449,"highlight":25},"В Яндексе встроенного способа нет, работает сервис глобальных аватаров, привязанный к адресу отправителя.",{"sort":120,"collection":22,"item":451},{"body":452,"is_lead":25,"footnote":10},"Но заниматься этим стоит только после того, как настроены DKIM и DMARC. Без них у вас проблема не с картинкой, а с тем, что красивое письмо просто не увидят.",{"sort":124,"collection":31,"item":454},{"heading":126,"level":34},{"sort":128,"collection":129,"item":456},{"list_style":131,"items":457},[458,460,462,464,466],{"lead":134,"text":459,"highlight":25},"Три записи, в этом порядке: SPF (обычно уже есть), DKIM (чаще всего нет), DMARC (почти никогда нет).",{"lead":134,"text":461,"highlight":25},"DMARC начинать с режима наблюдения, ужесточать после того, как DKIM подтверждён проверкой.",{"lead":134,"text":463,"highlight":25},"Проверять результат письмом на сервис-автоответчик, а не глазами по документации.",{"lead":134,"text":465,"highlight":25},"Если DKIM не включается из панели - это не значит, что его нет. Напишите в поддержку хостинга, обычно это одна заявка.",{"lead":134,"text":467,"highlight":25},"Всё вместе занимает час и не стоит ничего. Один этот час решает большую часть вопросов \"почему нашу рассылку никто не читает\".",{"id":469,"modified_on":470},"2191cc54-9d87-49bc-bd39-b656d1a2a18f","2026-08-27T18:13:09.511Z"]