DZone.com Feed на русском Заметка

DZone.com Feed на русском

DZone - это комплексная онлайн-платформа, посвященная различным аспектам технологий и программирования. Сайт предоставляет обширную информацию о различных языках программирования, технологиях, фреймворках и инструментах. Среди основных возможностей и ресурсов сайта - новости и статьи о последних тенденциях и обновлениях в технологическом секторе, различные ресурсы и учебники для обучения различным навыкам программирования, а также сообщество, где пользователи могут общаться друг с другом и делиться своим опытом и знаниями. Кроме того, DZone предлагает объявления о вакансиях для технических специалистов, являясь полезным ресурсом для тех, кто интересуется технологиями и программированием.

Трэд заметок

Многие полагают, что лидерство в разработке программного обеспечения начинается только тогда, когда вы перестаете писать код и становитесь менеджером. Когда-то я разделял это убеждение, думая, что технологии проще, чем работа с людьми. Это было заблуждением. Хотя можно сосредоточить свою карьеру на коде, архитектуре, базах данных и других технических областях, проблемы, которые формируют ваше влияние, со временем становятся менее техническими. Даже лучшее архитектурное решение имеет небольшую ценность, если другие ему не доверяют, не понимают или не поддерживают.Это не означает, что каждый опытный инженер-программист должен стать менеджером. Лидерство одинаково важно и на техническом пути. От старших индивидуальных контрибьюторов, таких как штатные инженеры, архитекторы и ведущие инженеры, ожидается влияние на решения, выходящие за рамки их собственного кода. Как обсуждает Уилл Ларсон в книге "Staff Engineer", продвижение за пределы старшего инженера фокусируется на техническом лидерстве, а не на управлении людьми. Чтобы увеличить свое техническое влияние, другие должны прислушиваться к вашим идеям, доверять вашему суждению, включать вас в ключевые обсуждения и действовать в соответствии с вашими рекомендациями. Вы можете выбрать не управлять людьми, но избегание лидерства в конечном итоге ограничит ваш рост как инженера-программиста.
Каждые несколько недель кто-то из моей команды или на встрече с клиентом задает мне один и тот же вопрос: "Какой облачный сервис нам использовать для наших ИИ-нагрузок?". Я занимаюсь разработкой корпоративных интеграций уже более четырнадцати лет, и в последнее время большая часть моего времени уходит на RAG-пайплайны, векторные базы данных и оркестрацию агентов поверх этих платформ. Так что этот вопрос я слышу часто, и, честно говоря, нет единственно правильного ответа. Правильное облако зависит от того, где уже находятся ваши данные, что примет ваша команда по соблюдению нормативных требований и какие модели действительно нужны вашей архитектуре.В этой статье я хочу рассмотреть трех крупных игроков: AWS Bedrock, Google Vertex AI и Microsoft Azure AI Foundry, и поделиться тем, что я узнал, работая с этими платформами в реальных корпоративных условиях, а не только читая маркетинговые страницы.
В Части 1 я рассказал, как ИИ меняет реагирование на инциденты, от корреляционных движков, таких как BigPanda, и функций AIOps от PagerDuty, до новой категории специализированных ИИ-агентов SRE, таких как Traversal, Resolve.ai и Cleric, которые автономно расследуют инциденты, а не просто группируют уже собранные оповещения.Реагирование на инциденты оказывается в центре внимания, потому что это самая громкая и заметная часть работы. Но если отследить, на что уходит неделя SRE, значительная ее часть вовсе не связана с тушением пожаров. Это ITOps-тикеты, хаос-тестирование, расчеты SLO, планирование дежурств и медленная, изнурительная работа по написанию и поддержке инструкций, которые никто не читает до 3 часов ночи. Эта вторая часть охватывает то, где ИИ проявляется во всем этом, с тем же правилом, которое я применял в Части 1: цифры, сообщаемые поставщиками, помечаются как таковые, и я ясно указываю, где внедрение все еще низкое, независимо от того, насколько хороши стали инструменты.
Большинство руководств по RAG сосредоточены на релевантности — стратегиях разбиения на части, моделях встраивания и гибридном слиянии поиска. Что они редко затрагивают, так это безопасность. В производственной среде конвейеры извлечения данных извлекают информацию из источников с различными уровнями доступа, классификациями конфиденциальности и нормативными требованиями. Агент поддержки не должен видеть данные о вознаграждении руководства только потому, что показатель векторного сходства высок. Агент ИИ, обрабатывающий запросы клиентов, не должен возвращать результаты внутренней проверки, потому что они совпадают по лексике с вопросом.Эта статья заполняет этот пробел. Она описывает добавление элементов управления доступом, осведомленных об идентификации, к существующему конвейеру RAG в качестве тонкого слоя безопасности: принудительное применение разрешений для каждой части перед извлечением, сканирование на предмет внедрения подсказок, безопасное построение контекста для языковой модели и ведение журнала аудита для соответствия требованиям. Каждый шаг дает конкретный артефакт, который вы можете адаптировать. Все примеры используют обычный Python.
Демонстрация всегда работает. Кто-то подключает векторный индекс к базовой модели в блокноте, задает ей три вопроса по справочнику сотрудника, получает три четких ответа, и все в комнате кивают. Затем запрос становится "отправить это 4000 сотрудникам", и блокнот тихо умирает. Нет конечной точки, нет аутентификации, нет истории версий, нет способа понять, почему конкретный ответ был неправильным, и нет истории для случая, когда юристы спросят, как вы откатите промпт, который начал цитировать политику PTO 2019 года.Я видел, как несколько команд сталкивались с этой стеной. Часть RAG — разбиение, встраивание, извлечение, добавление контекста, генерация — они понимают в совершенстве. Чего им не хватает, так это скучной половины: как превратить цепочку, которая выполняется в ячейке блокнота, в управляемую, версионированную, мониторинговую конечную точку REST, которую может вызывать пользовательский интерфейс чата, которая выдержит вызов в 3 часа ночи, и которую вы сможете тестировать A/B в следующем месяце, не переразвертывая вселенную? Эта статья посвящена этой скучной половине. Мы предполагаем, что вы концептуально понимаете RAG, и пройдем весь путь Databricks: создадим цепочку, зарегистрируем ее в MLflow, зарегистрируем в Unity Catalog, развернем ее в конечной точке Model Serving, отследим каждое извлечение и генерацию, и будем эксплуатировать ее после запуска.
Несоответствия версий Docker Engine в кластере Swarm могут вызывать незначительное снижение производительности трафика. Эта проблема проявилась на управляющем узле, когда Traefik сообщил о недоступности сервиса. Предполагаемой причиной были различные правила iptables и оверлейные сети между версиями Docker 28.1.1 и 28.2.2. Эта точная проблема возникла в производственной среде крупного приложения общественного транспорта 22 июня 2025 года. Приложение поддерживает около 2 миллионов пользователей с десятками тысяч активных пользователей ежедневно. Система обрабатывает значительную нагрузку в 1000-1600 запросов в секунду. Частичные проблемы с трафиком на одной точке входа существенно повлияли на сегмент с высокой нагрузкой. Без своевременной локализации это снижение могло негативно сказаться на метриках SLA. Этот сценарий подчеркивает критическую важность согласованных версий Docker Engine в производственных средах Swarm. Поддержание единообразия предотвращает скрытые проблемы с производительностью и обеспечивает стабильность сервиса для большой пользовательской базы.
Серверы Model Context Protocol (MCP), которые отлично работают в среде разработки, могут периодически выходить из строя после развертывания на нескольких репликах за балансировщиком нагрузки. Режим сбоя заключается в потоке ошибок "сессия не найдена", которые появляются случайным образом, и причина этого — несоответствие между тем, как определенные транспорты MCP хранят состояние сессии, и тем, как балансировщики нагрузки распределяют запросы. В этой статье объясняется, почему возникает проблема, когда она применима, и конкретный шаблон для ее решения с использованием общего хранилища сессий.Проблему легко упустить на ранних этапах разработки, поскольку она проявляется только при наличии более чем одного экземпляра сервера. Развертывание с одним экземпляром хранит каждую сессию в локальной памяти, поэтому каждый запрос естественным образом находит свою сессию. Добавьте реплики, и это предположение незаметно нарушается.
Большие языковые модели эволюционировали от простых чат-интерфейсов до автономных систем, способных планировать, рассуждать и взаимодействовать с внешними инструментами. Следующим этапом этой эволюции является многоагентная разработка программного обеспечения, где специализированные ИИ-агенты сотрудничают для решения сложных бизнес-процессов, вместо того чтобы полагаться на одну монолитную модель. Планировщик может декомпозировать работу, агенты-исследователи извлекать корпоративные знания, агенты-разработчики генерировать реализации, агенты-рецензенты проверять результаты, а агенты-исполнители выполнять одобренные действия. Хотя эта архитектура выглядит привлекательной, производственные развертывания показывают, что координация нескольких агентов больше похожа на создание распределенной системы, чем на написание цепочек подсказок.Основная проблема заключается не в интеллекте модели, а в надежности системы. Каждый дополнительный агент создает новую возможность для галлюцинаций, потери контекста, задержек, повторных попыток и каскадных сбоев. Рабочий процесс, содержащий пять агентов с индивидуально высокой точностью, все равно может давать непоследовательные результаты, поскольку каждая передача становится еще одним источником неопределенности. Таким образом, инженерная задача смещается от инженерии подсказок к оркестровке, управлению состоянием, отказоустойчивости и наблюдаемости.
Проблемы корпоративного риска часто начинаются с проблем платформы данных. Трудности включают фрагментированные сигналы, несогласованные определения, отсутствие контекста, слабую прослеживаемость и несвоевременные оповещения. При оценке транзакций, сообщений поддержки, изображений или метрик главный вопрос: как превратить несовершенные доказательства в объяснимые, обоснованные решения?Наблюдения, сделанные во время хакатона, выявили повторяющиеся проблемы проектирования в проектах цифровой безопасности. Местный язык и контекст существенно влияли на результаты. Доступ к сети часто был ненадежным. Ни один детектор не оказался достаточным. Оценочные баллы риска без четких обоснований было трудно интерпретировать. Хотя это и не универсальное решение, эти выводы поддерживают практическое руководство: поддерживать пути принятия решений, которые являются локальными, модульными и проверяемыми.
Эра Arm64 как перспективной технологии для вычислений определенно закончилась. Arm64 перешла от архитектуры, ориентированной на встраиваемые системы и исследования, к основной, первоклассной платформе в Linux. Этот сдвиг был подчеркнут в беседе между Дэйвом Нири из Ampere Computing и Грегом Кроа-Хартманом, известным сопровождающим ядра Linux. Кроа-Хартман, чья карьера в Linux началась с встраиваемых систем в конце 1990-х годов, наблюдал значительное созревание сообщества разработчиков Linux. Изначально разработчики Linux в значительной степени заимствовали функциональность у других операционных систем, таких как Unix. Со временем Linux эволюционировал от имитации к инновациям, возглавив собственное развитие. Это развитие означает, что разработчики больше не воспроизводят существующие модели, а создают новую инфраструктуру, интерфейсы и масштабируемые процессы. Фокус сместился с обеспечения работоспособности на создание с соблюдением высочайших стандартов. Это делает Arm64 ключевым компонентом в текущих стратегиях разработки, развертывания и обслуживания Linux. Следовательно, Arm64 теперь является центральной и полностью поддерживаемой архитектурой в экосистеме Linux.
Многие платформы данных считают готовность к аудиту второстепенным вопросом, решаемым после разработки. Они отдают приоритет созданию конвейеров и панелей мониторинга, прежде чем рассматривать нормативные запросы. Это часто приводит к реактивным решениям, таким как поиск резервных копий или восстановление данных из журналов. Иногда необходимые исторические данные просто отсутствуют. Такой подход описывает архитектуру "галочки для соответствия требованиям". Альтернатива, "готовая к аудиту по дизайну", рассматривает три свойства как фундаментальные ограничения. Эти основные свойства — происхождение данных, реконструкция в определенный момент времени и неизменяемость. Реализация этих свойств в качестве архитектурных ограничений с самого начала имеет решающее значение. В отличие от добавленных скриптов, архитектурные ограничения нельзя легко игнорировать под давлением. Такой проактивный дизайн обеспечивает истинную аудируемость.
1. Почему большинство инструментов QA на базе ИИ терпят неудачу в продакшенеСхема уже знакома: команда интегрирует LLM в свой рабочий процесс QA, демонстрация впечатляет заинтересованные стороны, а через три месяца инструмент тихо выводится из эксплуатации. Сгенерированные им тесты требовали ручной доработки. Анализ первопричин был настолько общим, что подходил к любому сбою. Предоставление данных приводило к несогласованному состоянию сред. Инженер, находящийся на дежурстве, перестает ему доверять и возвращается к ручной работе.Проблема редко заключается в самой модели. Она кроется в инженерии, окружающей модель. Производственные системы ИИ требуют такой же строгости, как и любое другое программное обеспечение: контрольные точки качества, ограниченные режимы отказа, проверяемые выходные данные и четкие контракты о том, что система будет делать, а что не будет делать автономно. Большинство интеграций QA на базе ИИ пропускают все это, выпускают тонкую обертку вокруг промпта и удивляются, почему внедрение застопорилось.
AI Red Team в NVIDIA провела шестимесячную оценку корпоративных ИИ-агентов в 2026 году. Обзор показал, что ИИ-агенты, которые потерпели неудачу, сделали это по четырем основным причинам, включая отсутствие средств контроля доступа и возможностей для выполнения произвольного кода. Агенты также не имели ограничений на исходящие сетевые подключения или сегментацию, и им были доступны секреты в открытом виде. Проблема с этими ИИ-агентами носит в своей основе архитектурный характер, что затрудняет защиту от сбоев. Плоскость управления модели не является надежным механизмом защиты из-за ее статистической природы. Защиту, полагающуюся на плоскость управления, можно обойти тремя основными способами, включая маскировку вредоносных действий под законные. Другой способ обойти защиту — постепенная эскалация диалога до тех пор, пока не накопится достаточно истории для установления законности команд. Третий способ включает встраивание выполнения кода в законное поведение, например, при установке пакета. Результаты обзора подчеркивают необходимость более надежных мер безопасности для предотвращения сбоев ИИ-агентов. В целом, обнаружение этих уязвимостей подчеркивает важность устранения архитектурных недостатков в ИИ-агентах для обеспечения их безопасной и надежной работы.
Спонсор: Nutanix. Следующий материал является спонсорским. Он может не отражать взгляды нашей редакции.Проблема масштабирования Kubernetes, о которой никто не говоритКоманды корпоративных платформ раз за разом сталкиваются с одной и той же ситуацией: платформа Kubernetes работает достаточно хорошо, чтобы никто не хотел ее менять.Это происходит постепенно, по мере того как команды принимают разумные технологические решения: выбирают различные контроллеры входящего трафика, инструменты управления секретами, платформы непрерывной поставки или программное обеспечение для наблюдения. По отдельности ни одно из этих решений не является проблемой. Однако спустя месяцы они создают среду Kubernetes, которую понимает лишь горстка людей. Как только этот человек заболевает или уходит из компании, поддержка или улучшение платформы становится намного сложнее.
Презентация мультиоблачной стратегии всегда звучит безупречно. Избегайте привязки к поставщику. Оптимизируйте затраты, запуская рабочие нагрузки у того провайдера, который дешевле для конкретной задачи. Повышайте отказоустойчивость, распределяя ресурсы по независимым доменам сбоя. На бумаге это убедительный аргумент. На практике же команды, работающие с мультиоблачными развертываниями, часто описывают нечто противоположное: удвоенную операционную сложность, сниженную вдвое наблюдаемость и категорию проблем с надежностью, которые возникают только потому, что вместо одного облака их два.Команда, с которой я тесно сотрудничал, перенесла рабочие нагрузки на AWS и конвейеры инференса машинного обучения на GCP из-за лучшей доступности и ценообразования GPU в то время, и следующие восемь месяцев они боролись с классом инцидентов, который не предвидели: сбоями, которые были не виной приложения и не виной ни одного из облачных провайдеров, но существовали на границе между ними. Всплески задержки передачи данных, которые появлялись только под нагрузкой. Краевые случаи истечения срока действия токенов аутентификации, которые срабатывали только во время межоблачных вызовов. Взаимодействие сетевых политик, которое проходило все предпроизводственные тесты и давало сбой в продакшене в 3 часа ночи. Отдельные проблемы не были сложными. Они были сложными, потому что диагностические инструменты каждого облака смотрели внутрь, а сбой жил в пространстве, которое ни один из инструментов не охватывал.
Несколько месяцев назад я писал о Loop Engineering: The Layer After Prompt, Context, and Harness Engineering, утверждая, что как только ваши промпты настроены, ваш контекст собран, а ваша обвязка подключена, именно цикл, в котором работает агент, определяет, работает ли он: как он решает продолжать, останавливаться, повторять попытку или передавать. Несколько читателей задали справедливый уточняющий вопрос после этой статьи: циклы над чем именно? Что происходит, когда одна задача перестает быть работой, достойной одного цикла?Этот вопрос оказался с ответом, который уже формировался в мире ИИ-инженерии к тому времени, когда я начал его искать. Середина июля 2026 года ознаменовалась быстрыми и шумными дебатами в X именно по этому поводу, начавшимися с вопроса создателя OpenClaw Питера Штайнбергера о том, не перешла ли дискуссия уже от циклов к графам. Через пару дней у этого появилось название: Graph Engineering. Я хочу подробно рассмотреть, что это на самом деле означает, где это пересекается с Loop Engineering, и где, по моему мнению, скептики в той дискуссии были правы.
Где на самом деле находятся данныеКаждое предприятие, с которым я работал, упирается в одну и ту же стену. Горы данных. Склады, системы заявок, PDF-файлы, старые архивы электронной почты. Большая часть этих данных не готова для использования ИИ. Руководство хочет чат-бота, который может отвечать на вопросы о политике и спецификациях продуктов. Но никто не знает, где находятся данные или как их подготовить. Большая модель не решит эту проблему. Это решается инженерией данных. Шаблон, который появляется снова и сноваЧат-бот, подключенный напрямую к базовой модели, без слоя извлечения. Он отвечает по памяти и допускает ошибки в деталях. Документы, хранящиеся в пяти разных системах, ни одна из которых не управляется одинаково. Векторные представления вычисляются один раз, при запуске, и больше никогда не обновляются. Конвейер RAG построен без проверки того, кто имеет права на запись в исходные документы.Проблема никогда не в модели. Проблема в том, что происходит до того, как модель увидит вопрос.
Запуск ресурсов AWS локально меняет правила игры для ускорения разработки, оптимизации затрат и самостоятельности разработчиков. Традиционно тестирование облачной инфраструктуры требовало развертывания непосредственно в тестовой или песочнице учетной записи AWS. Этот рабочий процесс создавал болезненные точки трения: ожидание медленных циклов облачного выделения ресурсов, отслеживание заброшенных ресурсов, которые увеличивают ежемесячный счет, и необходимость постоянного высокоскоростного подключения к Интернету.LocalStack решает эту проблему, эмулируя основные сервисы AWS, такие как S3, SQS, DynamoDB и другие сервисы, непосредственно на вашем локальном компьютере внутри контейнера Docker. В сочетании с Terraform вы можете безопасно писать, планировать и применять шаблоны конфигурации инфраструктуры как кода (IaC) к этому локальному симулятору.
Дебаты о фреймворках для агентов — это в основном "ощущения". Один инженер клянется, что LangGraph быстрее, другой предпочитает OpenAI Agents SDK, кто-то хочет Google ADK, потому что он кажется перспективным. Команда выбирает один, подключает рабочий процесс к его SDK, и выбор закрепляется. Изменение фреймворков позже означает удаление подключения для одного SDK и перестройку рабочего процесса на другом, что является дорогостоящей переделкой, на которую мало кто из команд решается.Этот учебник делает это решение обратимым, а затем закрепляет его данными. Вы помещаете граф агента в LaunchDarkly и запускаете четыре фреймворка (LangGraph, Strands, OpenAI Agents SDK и Google ADK) на одной и той же топологии, с зафиксированной моделью, так что фреймворк является единственной переменной. Эксперимент LaunchDarkly ранжирует их по задержке графа и использованию токенов, а LLM-судья контролирует качество. Таблица результатов покажет вам, какой фреймворк работает с вашим графом быстрее всего, не ухудшая его.
Несколько недель назад я участвовал в 24-часовом хакатоне по ИИ, где мы создавали продукт с использованием ИИ. Были предоставлены необходимые инструменты, с энтузиазмом участвовало большое количество инженеров, а также присоединились несколько специалистов по бизнесу, чтобы воплотить свои идеи в реальный продукт с использованием ИИ.Во время мозгового штурма люди составляли диаграммы сквозных процессов и начинали разработку, используя все последние доступные модели и платформы для создания своих продуктов. Когда время разработки подошло к концу, настало время презентаций. Наблюдая, как каждая команда представляет свои результаты, я заметил, что они не смогли автоматизировать сквозной процесс. То, что они планировали во время мозгового штурма, не превратилось в полноценный, сквозной продукт. Большинство решений следовали одному и тому же шаблону: они делали что-то в одном продукте, брали результат и передавали его в другой продукт, а результат этого продукта отправлялся куда-то еще, чтобы завершить цикл.
Надежная оркестрация для малых языковых моделей зависит от надежного потока событий и управления состоянием. Предлагаемая архитектура использует малые экземпляры моделей с минимальным локальным состоянием. Kafka служит основой для событий, обеспечивая высокую пропускную способность и упорядочивание в пределах раздела. Temporal выступает в качестве слоя оркестрации, управляя устойчивым состоянием и перезапуская выполнение после сбоев. Вызовы моделей рассматриваются как повторяемые побочные эффекты в рамках этой конструкции. История событий рабочего процесса Temporal служит окончательной записью хода беседы. В то время как Kafka предлагает надежные гарантии в пределах своих собственных границ транзакций, взаимодействие с внешними системами требует различных подходов. Корректность при взаимодействии с внешними системами зависит от идемпотентности, дедупликации, проверки последовательности и сверки. Глобальная семантика "ровно один раз" не может быть достигнута во всех компонентах. Эта конструкция отдает приоритет долговечности и возможности повторного выполнения для стабильной оркестрации.