InquirerSara Duterte trial: Prosecution forgoes CSC exec as witnessPunchSoludo’s wife donates relief materials to rehabilitated inmatesRTP DesportoJoão Ferreira e Filipe Palmeiro venceram a Baja de ReguengosBollywood HungamaEXCLUSIVE: Nani, Raghav Juyal, Sonali Kulkarni and Kayadu Lohar to attend MEGA The Paradise event in Mumbai ahead of releaseInquirer EntertainmentKim Chiu’s sis Lakam under police custody after arrest for qualified theftUOLVeja a previsão do tempo para Ivaiporã nesta segunda (21)ColliderThe Biggest Sci-Fi Hit of 2026 Is Officially Back in the Streaming SpotlightAntara NewsIndonesia eyes coal liquefaction to boost energy securityDeadlineEagle Eye Drama Acquires ‘The Great Dictator’, Matthew Sweet’s Biography Of Barbara Cartlandالشرقوزير الخارجية السعودي يبحث مستجدات الأوضاع الإقليمية هاتفياً مع نظرائه في الكويت ومصر وتركياCBS NewsIran warns new U.S. assault would see it expand "geography of the war"Egypt IndependentPM, CBE Governor discuss economic reforms, FX reserves
The Daily Newsstand · Free, Always
Monday, September 21, 2026

Помощник первой линии, которого никто не звал: как мы переложили подсказку внутрь заявки

Translate

Меня зовут Александр Жогов, я основатель ИТ-компании “+Альянс”.

Больше всего времени в сборке помощника первой линии съело не написание MCP-сервера, а встраивание его в Copilot Studio. Живого человека за агентом у нас нет, и на аутентификации сервера это сказалось целиком. После статьи вы сможете проверить свою систему заявок на пригодность для фонового помощника и закрыть до начала работ три вопроса: откуда возьмутся свежие данные, как подключить MCP-сервер, за которым нет живого пользователя, и кто пишет правило подтверждения, когда агент начинает действовать.

Первая линия у нас - 20 операторов Okdesk, кейс внутренний. Начиналось всё с чат-бота в мессенджере, собранного на API ChatGPT. Мешали две вещи. Первый ход оставался за человеком: специалист сначала вспоминал про бота, потом заходил к нему в диалог. И данных компании у бота не было - отвечал он тем, что нашлось в открытом вебе. Доступа к нашим обращениям мы тому боту не давали: дело в нашей сборке, а не в OpenAI.

Во второй версии первый ход мы отдали агенту. Подсказка приходит в заявку сама: триггер - назначение ответственного, форма - скрытый комментарий, клиенту он не виден, решение принимает оператор.

Прежде чем ставить у себя фонового помощника, задайте своей системе заявок два вопроса. Есть ли событие, на которое повесить запуск? Лежит ли в заявке текст решения? Если решение пишут в переписке, а в заявку падает “сделано”, брать подсказку агенту неоткуда.

Кнопку согласия нажать некому

MCP-сервер, через который агент ходит в историю заявок, стоит у нас в контейнере на своём железе, отвечает по Streamable HTTP, а Copilot Studio держит этот сервер как инструмент агента. Что Copilot Studio поддерживает по транспорту и аутентификации MCP-сервера, я разбирал отдельным текстом, с цитатами документации. Здесь только то, что определило нашу сборку.

Режим stateless: сессия между вызовами не держится, терять при остановке нечего - контейнер при долгом простое гасится в ноль. Первое включение стоит примерно 10-15 секунд, оператор их не замечает: комментарий приходит через API.

Коннектор в Copilot Studio у нас подключён без аутентификации: в настройках выбран тип “None”. Причина в том, как устроен OAuth 2.0, когда за агентом нет живого человека.

Адрес авторизации руководство Copilot Studio по подключению существующего MCP-сервера (https://learn.microsoft.com/en-us/microsoft-copilot-studio/mcp-add-existing-server-to-agent) описывает так: агент отправляет туда пользователя войти и выдать разрешения. Карточка согласия показывается в переписке с агентом - “consent card presented in the agent chat”. Дальше в сервер агент ходит под именем этого человека - “The access token lets your agent use the MCP server on behalf of the user”.

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

Если бы я планировал такой проект заново, первым вопросом к платформе был бы именно этот: что она делает, когда живого пользователя в чате нет.

Отсюда наша схема: аутентификации у MCP-сервера нет, а пропуском работает секрет в адресе. Маршруты живут под 24-байтным hex-префиксом, вне него сервер отдаёт 404 - открытым оставлен только /v1/health, иначе ломаются health-пробы контейнера. Swagger и OpenAPI тоже уведены под префикс, иначе они бы секрет и выдали. Компромисс очевиден: секрет в пути аутентификацию не заменяет, он оседает в логах прокси и в истории запросов.

Красивее у меня не получилось.

Час отставания, который мы выбрали сами

Из индекса Microsoft Search агент берёт корпоративные данные: файлы SharePoint, проекты Azure DevOps, сделки Битрикс24. Такие примеры источников привёл наш разработчик 14 сентября 2026 года.

Свежие записи в Microsoft Search кладёт наш синхронизатор, запуск ежечасный; выбор частоты разработчик объяснил консистентностью данных. Цена прямая: в индексе нет событий последней минуты, отставание - до часа. Отставание мы приняли осознанно, и то, что должно быть свежим, агент запрашивает через MCP-сервер, живьём.

Коннектор под Битрикс24 мы писали сами. Среди систем, для которых страница “Copilot connectors overview” (https://learn.microsoft.com/en-us/microsoft-365/copilot/connectors/overview) перечисляет готовые коннекторы, Битрикс24 не назван. Объём такой работы та же страница описывает прямо - “Building a custom connector requires a developer to define a schema, register the connection in Microsoft Entra ID, and write code to pull and push data”.

Рейт-лимитера на MCP-сервере нет

Ни счётчиков, ни 429, ни троттлинга на MCP-сервере нет вообще.

Сервер обслуживает одного агента, тот работает через очередь и ходит в инструменты последовательно внутри заявки: конкурентной нагрузки не возникает. Настоящий ограничитель лежит снаружи - это API системы заявок. Наш замер: при активном агенте меньше 20 запросов в минуту, в среднем треть запроса в секунду; пиковую секунду мы не мерили. Лимит в 2 запроса в секунду назвала техподдержка Okdesk, её ответ передал нам разработчик.

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

Потолок выдачи есть у каждого инструмента: список последних заявок отдаёт 50 штук по умолчанию, до 500 по запросу. Полезна здесь механика: упёрлись в потолок - в ответе появляется флаг усечения. Без него “нашлось 50 заявок” при трёхстах в базе звучит уверенно, и перепроверять никто не станет.

Два слоя промпта и правила, которые появились по ходу

Верхний слой - instructions агента в Copilot Studio: пока агент не сходил в свой инструмент Chat Copilot, ответ “у меня нет доступа” ему запрещён. Нижний слой - промпты-обёртки в Azure Function, и начинает их дешёвый гейт “да/нет”: есть ли агенту что сказать по этой заявке. Без гейта помощник писал бы в каждую заявку - это шум.

В присланном мне фрагменте против выдумывания стоят пять правил, полная версия длиннее, предупредил разработчик. Вот два из них. Агенту нельзя отвечать по памяти и общим знаниям: перед ответом обязателен поиск в корпоративных источниках и в самой заявке. Нашлось пусто или данных мало - правило требует сказать об этом прямо готовой фразой “не нашёл информации по этому вопросу” и не даёт заполнять пробелы вымышленными фактами.

Ещё два правила разработчик дописал по факту работы. Объём ответа держит строка системного промпта: “Лучше 3 точных шага, чем 14 на всякий случай”. Второе живёт в блоке обёрток и касается истории: решением считать “ТОЛЬКО то, по чему видно, что оно сработало”. Агент читает историю заявок, а там лежат и расписанные шаги, которые ни к чему не привели, в том числе его собственные.

У Claude Code в режиме auto действие, попавшее в правила allow, ask или deny, решается сразу: “Actions matching your allow, ask, or deny rules resolve immediately” - цитата из документации (https://code.claude.com/docs/en/permission-modes). То есть правила разработчика срабатывают без обращения к модели. Границы, которые человек назвал прямо в переписке, правилами там не сохраняются - “Boundaries are not stored as rules”; за гарантией та же страница документации Claude Code отправляет в явный запрет: “For a hard guarantee, add a deny rule instead”.

Claude Code - чужой инструмент, и правила в нём про действия, у нас про ответы. Переносимо само разделение: часть поведения держит текст промпта, часть - код вокруг модели.

Где кончается подсказка

14 сентября 2026 года агент из Okdesk попробовал завести заявку и не достучался до основного агента в Copilot Studio: в ответ прилетала карточка авторизации Microsoft. Флаги авторизации разработчик разобрал из HTML-страницы кодом - чтобы кнопку подтверждения агент нажимал сам. Приём домашний, для чужого контура не годится, и работает ли он сегодня, я не спрашивал.

Правило подтверждения лучше задать заранее - у другого вендора это прямо параметр: в документации Responses API OpenAI (https://developers.openai.com/api/docs/guides/tools-connectors-mcp) подтверждение перед вызовом MCP-инструмента задаёт поле require_approval - “always”, “never” или список инструментов. Обмен описан там же: когда одобрение требуется, в выдаче ответа появляется запрос на него - элемент mcp_approval_request, а решение разработчик присылает следующим запросом, с mcp_approval_response. Решает это разработчик, а не модель по ходу разговора. Наш случай 14 сентября лежит в другом узле цепочки, и карточка авторизации пришла на вызове основного агента. Объяснять свой эпизод чужим параметром я не берусь.

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

Среднее время первичной диагностики было у нас порядка 60 минут, стало 31; меряем его от взятия заявки в работу до названной причины сбоя. Верным с первого раза я считаю тот вывод, исправление по которому сняло проблему; таких стало 73 процента, месяцем раньше было 55. Числа - внутренняя оценка на своём потоке заявок: база в 60 минут оценочная, а размер выборки и месяцы сравнения я не записал.

Границу между “советует” и “делает” я для себя пока не провёл. Подсказку в скрытом комментарии не жалко, оператор отбрасывает её за секунду; заявка, созданная агентом, - уже действие, под ним стоит чья-то учётная запись. Где проходит эта граница у вас - по обратимости действия или по тому, чьими правами агент ходит?

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

View the original on Хабр

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.

Помощник первой линии, которого никто не звал: как мы переложили подсказку внутрь заявки — KioskNews