Создание ИИ агента для бизнеса: от задачи до рабочего прототипа

НейросетиМария Соколова12 мин чтения
Создание ИИ агента для бизнеса: от задачи до рабочего прототипа

Создание ии агента это инженерная работа, а не настройка готового сервиса. Разработчик пишет системный промпт, описывает инструменты функциями с JSON Schema, подключает хранилище истории, ставит лимит шагов и обработку ошибок. Ниже маршрут от постановки задачи до прототипа, который прогоняется на своей машине, с опорой на документацию OpenAI Agents SDK, спецификацию Model Context Protocol и SDK российских платформ.

Что входит в создание ии агента

По итогам работы в репозитории появляются шесть артефактов: системный промпт (в Agents SDK это поле instructions объекта Agent), описания инструментов с полями type, name, description, parameters и strict по документации OpenAI, реализации этих инструментов, хранилище истории, правила остановки и набор тестовых обращений.

Цикл выполнения в документации Agents SDK описан так: вызываем модель для текущего агента с текущим входом; если ответ классифицирован как финальный, цикл заканчивается; если запрошена передача другому агенту, меняем агента и повторяем; если вернулись вызовы инструментов, выполняем их, дописываем результаты и повторяем. Остальное в проекте это обвязка вокруг четырёх веток.

Как создать ии агента: маршрут из семи шагов

Вопрос «как создать ии агента» на практике распадается на семь шагов, и порядок важнее инструмента.

  1. Выбрать один процесс и критерий успеха. Не «поддержка клиентов», а «ответ о статусе заказа без менеджера». Критерий это доля обращений, закрытых без эскалации.
  2. Собрать 30-50 настоящих обращений. Из почты, чата или тикетов, вместе с кривыми формулировками и опечатками. Это тестовый набор, а не иллюстрация.
  3. Составить список действий. Каждое превращается в функцию: посмотреть заказ, найти документ, создать задачу. Действия без API в первую версию не берутся.
  4. Написать системный промпт. Роль, границы, формат ответа, условия обращения к человеку.
  5. Описать и подключить инструменты. Схема аргументов, обработчик, поведение при ошибке.
  6. Подключить память и лимиты. Сессия для истории и предел числа шагов.
  7. Прогнать тестовый набор локально. Смотреть не только ответы, но и цепочку вызовов: какие функции выбраны и с какими аргументами.

Первый прогон почти всегда даёт три класса дефектов: агент вызывает не ту функцию, передаёт неполные аргументы или отвечает по общим знаниям модели вместо данных компании.

Системный промпт: инструкция, по которой агент принимает решения

Системный промпт это не приветствие и не описание тона, а документ, по которому модель на каждом шаге решает, вызвать инструмент, ответить текстом или остановиться. Рабочая структура состоит из пяти блоков.

  • Роль и границы. Какие обращения агент обрабатывает и какие темы не берёт.
  • Порядок работы с инструментами. Правило вида «прежде чем назвать срок доставки, вызови функцию статуса заказа; без результата вызова срок не называть».
  • Формат ответа. Длина, структура, обязательные поля. Если ответ уходит в другую систему, формат задаётся схемой, а не просьбой в тексте.
  • Условия остановки. Когда диалог передаётся человеку: жалоба, возврат денег, отсутствие данных.
  • Запрет на догадки. Прямая формулировка «если данных нет, скажи, что не знаешь, и передай человеку».

Поле instructions может быть функцией, формирующей текст динамически: имя клиента, тариф, доступные разделы. Правки промпта проверяются прогоном того же тестового набора, иначе исправление одного сценария незаметно ломает соседний.

Инструменты и вызов функций: схема, по которой агент действует

Инструмент это описание функции, которое отдаётся модели вместе с запросом. По документации OpenAI цикл вызова состоит из пяти шагов: запрос к модели со списком инструментов, ответ модели с вызовом, выполнение вашего кода с полученными аргументами, второй запрос с результатом, финальный ответ или новые вызовы.

Поле Что задаёт Практическое правило
type Тип инструмента, для функций всегда function Задаётся один раз в шаблоне
name Идентификатор функции Глагол и объект: get_order_status, а не handler2
description Когда и как вызывать функцию Пишется для модели: условия вызова и краевые случаи
parameters JSON Schema аргументов Типы, допустимые значения, описание каждого поля
strict Строгое следование схеме Все поля из properties обязаны быть в required, additionalProperties выставлен в false

Отсюда ограничение строгого режима: необязательных аргументов в привычном виде нет, документация предлагает объявлять их объединением типов, например “type”: [“string”, “null”], и обрабатывать null в коде. Второе ограничение про количество: рекомендация OpenAI звучит как «стремитесь держать меньше 20 функций, доступных в начале хода», с оговоркой, что это мягкая рекомендация. Документация связывает размер стартового набора с точностью выбора и предлагает откладывать редкие инструменты через tool_search, а не выкладывать всё сразу.

Выбор управляется параметром tool_choice: auto по умолчанию разрешает ноль, один или несколько вызовов, required требует хотя бы одного, none запрещает вызовы, allowed_tools сужает набор. Режим required это рычаг отладки: он показывает, где ошибка, в описании функции или в промпте.

В Python-версии SDK описание генерируется автоматически: декоратор function_tool берёт имя из имени функции, описание из докстринга, схему аргументов строит по аннотациям через Pydantic, разбирая докстринги в форматах google, sphinx и numpy. Докстринг становится частью контекста модели. Что добавляется к инструментам при выходе в прод, разобрано отдельно: подтверждения действий и наблюдаемость.

MCP: подключение инструментов без собственных обёрток

Model Context Protocol это открытый стандарт, по которому агент подключается к внешним системам без отдельного коннектора под каждую. Протокол построен на JSON-RPC 2.0, серверы выставляют три примитива: Tools (исполняемые функции: операции с файлами, вызовы API, запросы к базе), Resources (источники контекста: содержимое файлов, записи в базе, ответы API) и Prompts (переиспользуемые шаблоны обращений к модели).

Клиент запрашивает список методом tools/list и вызывает выбранный через tools/call с полями name и arguments. Каждый инструмент несёт name, title, description и inputSchema, то есть ту же JSON Schema, что и при обычном вызове функций. Штатных транспорта два: stdio для локальных процессов на той же машине и Streamable HTTP для удалённых серверов, с рекомендацией использовать OAuth для получения токенов.

Версию протокола стоит фиксировать явно: ревизия 2026-07-28 сделала протокол stateless, убрала рукопожатие initialize, методы ping и logging/setLevel, а версию и возможности клиента перенесла в поле _meta каждого запроса. Сервер обязан реализовать метод server/discover, отдающий поддерживаемые версии, возможности и идентификацию; клиент может вызвать его заранее или сразу слать нужный запрос и разбирать UnsupportedProtocolVersionError. Запросы сервера к пользователю (sampling/createMessage, elicitation/create) идут теперь не встречным вызовом, а результатом InputRequiredResult: сервер перечисляет нужное в поле inputRequests, клиент повторяет запрос с inputResponses. Для агента elicitation это готовый механизм «спросить человека»: форма с JSON-схемой или переход по ссылке, если данные чувствительные.

Память и контекст: что агент помнит между шагами

Модель не помнит ничего между запросами, история передаётся заново каждый раз, и её хранение это отдельный компонент. В Agents SDK он называется сессией и поддерживает четыре операции: get_items для чтения, add_items для записи, pop_item для удаления последнего элемента и clear_session для очистки.

Реализация Где применяется
SQLiteSession Локальная разработка, файл или база в памяти
SQLAlchemySession Прод на существующей базе, поддерживаемой SQLAlchemy
RedisSession Общая память между несколькими воркерами
MongoDBSession Многопроцессное горизонтально масштабируемое хранилище
EncryptedSession Обёртка поверх любого хранилища с прозрачным шифрованием

Деталь, которая ловит почти всех: SQLiteSession с одним аргументом создаёт базу в памяти, живущую столько, сколько живёт процесс. Чтобы история пережила перезапуск, вторым аргументом передаётся путь к файлу. Второй вопрос это размер: история растёт вместе с расходами и временем ответа, поэтому старые шаги сворачивают в резюме, а порог подбирают по средней длине диалога на тестовом наборе.

Ии агент в компанию: подключение к данным и системам

Агент на общих знаниях модели бесполезен внутри организации: он не знает ваш прайс, регламент возврата и остатки. Ии агент в компанию отличается от учебного прототипа этим слоем из трёх частей.

  • Поиск по документам. Регламенты, инструкции, каталог складываются в индекс, и агент отвечает по найденному фрагменту, а не по памяти модели. В SDK Yandex AI Studio есть управление индексами трёх типов: текстовый, векторный и гибридный, в Agents SDK ту же роль играет встроенный FileSearchTool.
  • Оперативные данные. Заказы, задачи, остатки берутся вызовом функции в момент запроса: они меняются быстрее, чем переиндексируется база.
  • Права и токены. Токены хранятся вне кода, вызов выполняется от имени конкретного сотрудника, иначе агент отдаст одному пользователю данные другого.

Разграничение поиска и вызова функций снимает главную проблему внедрения: агент перестаёт выдумывать, потому что на каждый тип вопроса есть точный источник. Правило: всё, что меняется реже раза в неделю, идёт в индекс, остальное запрашивается функцией.

Нужен агент под ваш процесс, а не учебный прототип

Разберём один процесс, опишем инструменты и границы, соберём агента и подключим к вашим системам с прогоном на реальных обращениях.

Обсудить задачу

Ошибки, повторы и приёмка прототипа

Агент отличается от одиночного запроса тем, что может крутиться: инструмент вернул ошибку, модель попробовала снова, и так до исчерпания бюджета. Ограничители ставятся в трёх местах.

  • Лимит шагов. За это отвечает max_turns: при превышении выбрасывается исключение MaxTurnsExceeded. Значение None отключает лимит, в прототипе так делать не стоит.
  • Поведение инструмента при сбое. По умолчанию срабатывает default_tool_error_function, которая сообщает модели об ошибке, и та может попробовать другой путь. Своя функция меняет текст сообщения, явный None пробрасывает исключение в ваш код.
  • Проверки входа и выхода. Декораторы input_guardrail и output_guardrail возвращают GuardrailFunctionOutput; при взведённом tripwire_triggered поднимаются InputGuardrailTripwireTriggered и OutputGuardrailTripwireTriggered, а для инструментов ToolInputGuardrailTripwireTriggered и ToolOutputGuardrailTripwireTriggered.

У входных проверок есть неочевидный режим: по умолчанию они выполняются параллельно с агентом, задержка меньше, но токены расходуются даже при срабатывании стоп-сигнала. Флаг run_in_parallel со значением False переводит проверку в блокирующий режим. Рядом стоит параметр is_enabled: он принимает True, False или функцию, решающую по контексту, так что неоплаченному тарифу инструмент выгрузки просто не показывают.

Прототип принимается по прогону: набор из 30-50 обращений прогнан целиком, для каждого зафиксирована цепочка вызовов с аргументами, на вопрос без данных агент отказывается, срабатывание max_turns проверено намеренно сломанным инструментом, замерено среднее число шагов. Частые дефекты: описания функций написаны для разработчика без условий вызова; инструментов сразу больше двадцати; strict включён, а схема содержит необязательные поля вне объединения с null; история лежит в базе в памяти и теряется при перезапуске.

Ии агент и ии ассистент: что меняется в коде

Пара «ии агент и ии ассистент» в инженерном смысле различается не уровнем интеллекта, а составом кода. Ассистент это один вызов модели и возврат текста: цикла нет, инструментов нет, состояние хранит интерфейс. Агент добавляет к этому цикл с разбором ответа на три ветки, инструменты, состояние в сессии и ограничители. Помимо своих функций в Agents SDK доступны встроенные WebSearchTool, FileSearchTool, CodeInterpreterTool, ImageGenerationTool и HostedMCPTool.

Отсюда вывод про бюджет: ассистент это один платный вызов модели на реплику, агент это столько вызовов, сколько шагов он сделал, причём каждый следующий несёт всю накопленную историю. Цену агента считают не по числу диалогов, а по среднему числу шагов, замеренному на тестовом наборе до запуска.

Как создать ии агента бесплатно: локальный прогон своего кода

Ответ на вопрос «как создать ии агента бесплатно» в инженерном контуре такой: бесплатны библиотеки и запуск, платными остаются вызовы модели, если она не локальная.

  • Фреймворк. OpenAI Agents SDK ставится командой pip install openai-agents, распространяется под лицензией MIT и на 22 августа 2026 года собрал около 28,8 тысячи звёзд на GitHub. Заявлена независимость от провайдера: поддерживаются Responses API и Chat Completions, а также, по формулировке репозитория, «100+ других LLM».
  • Модель локально. Ollama распространяется под лицензией MIT и запускает открытые модели на своей машине, включая gpt-oss, Qwen, Gemma и DeepSeek. Плата за токены исчезает, остаётся требование к железу.
  • Память и разбор. SQLiteSession без внешней базы плюс встроенная трассировка, которая показывает последовательность вызовов модели, инструментов и передач между агентами.

Бесплатный контур закрывает проверку гипотезы и отладку описаний инструментов. Нагрузку и качество на сложных запросах он не закрывает, поэтому на платную модель переходят, когда тестовый набор собран и есть с чем сравнивать.

Российский контур: GigaChat и Yandex AI Studio

Если данные не должны покидать российскую юрисдикцию, схема сборки не меняется, меняются имена полей и SDK. Актуальные лимиты и тарифы проверяются на страницах вендоров.

Что задаём GigaChat Yandex AI Studio
Описание инструментов Массив functions в запросе к /chat/completions с полями name, description, parameters и return_parameters OpenAI-совместимый чат-интерфейс с вызовом инструментов, Function Tool в Python SDK
Режим вызова Параметр function_call, значение auto оставляет решение модели Совместимые с OpenAI параметры выбора инструмента
Готовые функции Встроенные text2image, get_file_content, text2model3d Встроенный поиск и работа с индексами
База знаний Поиск на своей стороне Индексы трёх типов: текстовый, векторный, гибридный
Установка SDK Работа по HTTP API pip install yandex-ai-studio-sdk, синхронный и асинхронный режимы

В документации GigaChat указано, что все модели GigaChat поддерживают встроенные и пользовательские функции, а возвращаемые значения описываются явно через return_parameters, чего нет в схеме OpenAI. Гибридный индекс Yandex AI Studio снимает типовую проблему векторного поиска: когда в запросе артикул или номер договора, семантическая близость не помогает.

Частые вопросы

Сколько инструментов давать агенту в первой версии

Два-три. Документация OpenAI рекомендует держать меньше 20 функций, доступных в начале хода, и это верхняя граница, а не цель: каждая лишняя функция это ещё один способ ошибиться выбором.

Чем задаётся остановка бесконечного цикла

Параметром max_turns в Agents SDK: при превышении лимита поднимается исключение MaxTurnsExceeded. Значение None отключает ограничение, для прототипа это плохая идея.

Нужен ли MCP, если инструментов всего три

Нет. MCP окупается, когда инструменты переиспользуются несколькими агентами: он даёт единые методы tools/list и tools/call и два транспорта, stdio и Streamable HTTP. Для трёх своих функций проще обычный вызов функций.

Как хранить историю диалога, чтобы она не терялась

Передать сессии путь к файлу: SQLiteSession с одним аргументом создаёт базу в памяти на время жизни процесса. Для нескольких воркеров берут RedisSession, для существующей базы SQLAlchemySession.

Можно ли собрать агента без оплаты сервисов

Да, в контуре своего кода: OpenAI Agents SDK под лицензией MIT ставится командой pip install openai-agents, модель поднимается локально через Ollama, тоже MIT. Платить придётся за железо и, при переходе на облачную модель, за токены.

Поделиться:

About Author: Мария Соколова

nu_editor_sokolova@neurounit.ai

Редактор Neurounit. Пишет про нейросети в маркетинге и работу AI-агентов в рекламе.

Neurounit

Запустить рост с AI

Оставьте заявку или напишите в мессенджер