AI-агент для проверки ТЗ: архитектура и промпты от аналитика | AiManual
AiManual Logo Ai / Manual.
04 Мар 2026 Гайд

AI-агент для проверки ТЗ: пошаговый разбор архитектуры и промптов от аналитика

Пошаговый разбор создания AI-агента для автоматической проверки технических заданий. Архитектура, промпты, ошибки и советы от Senior DevOps инженера.

ТЗ, ошибки и потерянные часы: зачем аналитику AI-агент?

Представь. Уже полночь. Ты - аналитик. Перед тобой - 50-страничное техническое задание на новую систему. Глаза слипаются, а в голове только одна мысль: "Пропущу ли я сегодня критичную неконсистентность?" Завтра с этим ТЗ пойдут работать 15 разработчиков, и каждая ошибка обернется десятками часов переделок, скандалами на демо и техническим долгом, который будет преследовать проект годами.

Знакомо? Я провел так сотни ночей. Пока не понял: человек для такой работы не создан. Мы устаем, теряем концентрацию, пропускаем мелочи. Но LLM (Large Language Model) - не устает. Идея родилась сама: создать AI-агента, который будет моим персональным ревьюером для ТЗ. Не просто чат-бот, а полноценного агента с памятью, контекстом и четкой логикой проверок. За два года экспериментов я выжал из этой идеи все, и сегодня покажу архитектуру, которая работает в продакшене.

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

Решение: не просто LLM, а агент с костями и мышцами

Главная ошибка - думать, что достаточно скормить ТЗ GPT-5 (или любой другой актуальной на 2026 год модели, вроде Claude 4 Opus или Gemini Ultra 2.0) и попросить "проверить". Реальные ТЗ - это сложные документы со структурой, требованиями, нефункциональными характеристиками, ограничениями. Агент должен понимать контекст домена, уметь строить трассировку требований, находить противоречия даже на 40-й странице.

Поэтому наш агент - это система из нескольких специализированных модулей. Вдохновлялся я архитектурой из статьи про State-of-the-Art Research Agent, но перепрофилировал ее под задачи аналитика.

1 Определяем scope: что агент проверяет на самом деле

Первое - решаем, не будем ли мы создавать технический долг, которого не видно. Агент не должен заменять аналитика. Он - его усилитель. Его scope:

  • Логическая целостность: Противоречат ли требования друг другу?
  • Полнота: Есть ли обязательные разделы (ограничения, нефункциональные требования, глоссарий)?
  • Трассируемость: Можно ли от бизнес-требования пройти к конкретной функции системы?
  • Тестопригодность: Сформулировано ли требование так, что его можно протестировать?
  • Ясность: Используются ли субъективные термины ("быстрый", "удобный") без количественных метрик?

2 Выбираем модель: хватит ли контекстного окна?

На 2026 год выбор огромен. Но для работы с объемными ТЗ критичен размер контекста. Мои фавориты:

Модель (актуальная версия на 04.03.2026) Контекст, токенов За что любим За что ругаем
Claude 4 Opus до 200K Отличное понимание нюансов, меньше галлюцинаций Цена. Медленнее некоторых конкурентов.
GPT-5 Turbo 128K Скорость, доступность API, понимание инструкций Иногда слишком "креативный" для строгой проверки.
Gemini Ultra 2.0 1M+ Гигантский контекст, мультимодальность (если в ТЗ диаграммы) API может быть менее стабильным.

Лично я использую GPT-5 Turbo для основной проверки и Claude для валидации спорных моментов. Экономично и эффективно.

3 Архитектура агента: из каких модулей он состоит

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

💡
Использую легковесный фреймворк для агентов, например, LangChain 0.2.x (актуальная на 2026 версия) или его более новые альтернативы. Главное - сохранять модульность, чтобы не попасть в ловушку монолита, о которой пишут в статье про AI-агентов и технический долг.
# Упрощенная структура классов агента
class TZValidationAgent:
    def __init__(self, llm_client):
        self.parser = DocumentParser()
        self.consistency_checker = ConsistencyChecker(llm_client)
        self.traceability_builder = TraceabilityBuilder(llm_client)
        self.report_generator = ReportGenerator(llm_client)
        self.knowledge_base = KnowledgeBase()  # Хранит шаблоны, стандарты, глоссарии

    async def validate(self, tz_document_path: str) -> ValidationReport:
        # 1. Парсинг и структурирование
        structured_doc = await self.parser.parse(tz_document_path)
        
        # 2. Проверка согласованности
        consistency_issues = await self.consistency_checker.check(structured_doc)
        
        # 3. Построение матрицы трассировки
        trace_matrix = await self.traceability_builder.build(structured_doc)
        
        # 4. Генерация отчета
        report = await self.report_generator.generate(
            structured_doc, 
            consistency_issues, 
            trace_matrix
        )
        return report

Ключевой модуль - TraceabilityBuilder. Он строит матрицу трассировки требований, связывая бизнес-цели, пользовательские истории и функциональные требования. Это то, что человек делает с трудом, а агент - за секунды.

4 Сердце системы: промпты, которые действительно работают

Вот где большинство падает. Общие промпты дают общие результаты. Нужна специфика. Я выработал формат "Роль-Контекст-Задача-Ограничения-Формат вывода".

Промпт для проверки согласованности требований. Обрати внимание на конкретику в "Ограничениях" и строгий формат JSON для вывода.

Ты - старший системный аналитик с 15-летним опытом. Твоя специализация - выявление логических противоречий в технической документации.

КОНТЕКСТ:
Ты проверяешь техническое задание для системы онлайн-банкинга. Ниже предоставлен структурированный документ с требованиями.

ЗАДАЧА:
Проанализируй предоставленные функциональные и нефункциональные требования. Найди все пары требований, которые противоречат друг другу логически или технически.

ОГРАНИЧЕНИЯ:
1. Не интерпретируй требования слишком широко. Противоречие должно быть прямым и очевидным.
2. Учитывай только информацию из предоставленного документа. Не добавляй внешних знаний.
3. Если требование сформулировано неоднозначно, отмечай это как проблему ясности, а не как противоречие.

ФОРМАТ ВЫВОДА:
Верни строго JSON-массив объектов. Каждый объект должен иметь поля:
- "requirement_id_a": ID первого требования,
- "requirement_id_b": ID второго требования,
- "conflict_description": четкое описание сути противоречия на русском языке,
- "severity": "HIGH" | "MEDIUM" | "LOW".
Если противоречий нет, верни пустой массив [].

ДОКУМЕНТ ДЛЯ ПРОВЕРКИ:
{structured_requirements}

А вот промпт для построения трассировки. Он сложнее, потому что требует понимания иерархии.

Ты - архитектор требований. Твоя задача - построить матрицу трассировки между бизнес-требованиями (BR), пользовательскими историями (US) и функциональными требованиями (FR).

ИНСТРУКЦИЯ:
1. Извлеки все BR, US и FR из документа. Их ID уже обозначены в тексте.
2. Для каждого FR определи, к какой US он относится.
3. Для каждой US определи, к какому BR она относится.
4. Если FR или US не могут быть явно связаны с верхнеуровневым требованием, пометь их флагом "ORPHAN".

ВЫХОД:
Сгенерируй CSV-строку для каждой связи. Формат:
BR_ID, US_ID, FR_ID
Если связь не найдена, используй NULL.
Пример:
BR-001, US-012, FR-045
BR-001, US-012, FR-046
BR-001, NULL, FR-047 (если FR-047 - сирота)

ДОКУМЕНТ:
{document_text}

Такие промпты дают структурированный, машиночитаемый вывод, который легко интегрировать в отчет или Jira. Это не просто текст "мне кажется, здесь проблема".

5 Интеграция и оценка: как не сломать процесс

Агент живет не в вакууме. Он должен встраиваться в Confluence, Google Docs, или хотя бы принимать Word/PDF. Я сделал простой веб-интерфейс на FastAPI, который загружает документ и возвращает интерактивный отчет с возможностью отметки ложных срабатываний.

Самое важное - оценка. Как понять, что агент стал лучше? Нужна система метрик, как в статье про оценку AI-агентов. Я отслеживаю:

  • Precision/Recall для найденных ошибок: Сравниваю вывод агента с разметкой, которую делаю я вручную (выборочно).
  • Скорость обработки: Не должна превышать 2-3 минут на 100 страниц.
  • Количество "сиротских" требований: Показывает, насколько ТЗ целостно.

Где ломается: нюансы, которые не пишут в туториалах

1. Форматирование убивает контекст. Если ТЗ в виде скана PDF или с кучей таблиц, парсер может потерять структуру. Решение: использовать мультимодальные модели (как Gemini) или предобработку OCR с инструментами вроде Azure Document Intelligence.

2. LLM ненавидят считать. Проверка числовой согласованности ("максимум 100 пользователей" vs "обрабатывает 200 транзакций в секунду на пользователя") требует отдельного логического модуля, а не промпта. Я добавил простой rule-based движок для таких проверок.

3. Устаревание знаний. Агент должен знать актуальные стандарты (например, GDPR, PCI DSS 4.0). Я подключил RAG (Retrieval-Augmented Generation) систему, которая подтягивает свежие документы из внутренней базы знаний перед проверкой.

4. Человеческий фактор не исчезает. Аналитик должен ревьюить вывод агента. Но теперь это занимает не 8 часов, а 30 минут. Агент фокусирует внимание на реальных проблемах.

Главный секрет: агент должен быть обучаемым. Каждый раз, когда аналитик отмечает "ложное срабатывание" или "пропущенную ошибку", этот кейс идет в датасет для тонкой настройки (fine-tuning) или в систему few-shot примеров для промптов. Без этого он застынет в развитии.

Вопросы, которые мне задают чаще всего

Агент заменяет аналитика?

Нет. Он заменяет утомительную, рутинную проверку на противоречия и полноту. Стратегическое мышление, общение с заказчиком, дизайн сложных процессов - все это остается за человеком. Это симбиоз, как описано в гайде Системный аналитик + ИИ.

Сколько времени ушло на разработку?

Прототип на LangChain и GPT-4 API - две недели. Доводка до продакшн-уровня с учетом всех нюансов, созданием интерфейса и метрик - еще три месяца. Но это окупилось за первые полгода: время на проверку ТЗ в команде упало на 70%.

Какие самые неочевидные ошибки нашел агент?

Однажды он обнаружил, что требование "система должна кэшировать данные на 24 часа" противоречит требованию "данные должны обновляться в реальном времени". Разработчики уже начали проектировать архитектуру, и этот конфликт стоил бы нам месяцев переделок.

Что дальше? Агент становится инженером требований

Мой следующий шаг - научить агента не только находить ошибки, но и предлагать исправления. И даже генерировать фрагменты ТЗ для типовых модулей, следуя нашему внутреннему стандарту. Это уже граничит с Agent Engineering.

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

Совет напоследок: начните не с архитектуры, а с боли. Возьмите одно конкретное, часто повторяющееся действие в проверке ТЗ (например, поиск нефункциональных требований без метрик) и автоматизируйте только его. Получите feedback. Затем масштабируйте. Так вы построите инструмент, который решает реальные проблемы, а не еще одну игрушку в портфолио.

Подписаться на канал