### **Техническое Задание на доработку AI-агента для генерации отчётов в формате Markdown (.md)** **Проект:** Модификация существующего бэкенда для генерации отчётов. #### **1. Общее описание** Целью данной доработки является замена модуля генерации PDF-файлов на более простой и быстрый модуль, который будет формировать и отдавать пользователю итоговый отчёт в текстовом формате **Markdown (`.md`)**. Бэкенд по-прежнему будет выполнять многоступенчатый процесс исследования (вызов `deep-research` API, затем синтез отчёта через `Ollama`), но финальным результатом будет текстовый `.md` файл, а не PDF. #### **2. Требования к реализации** **2.1. Модификация эндпоинта `/api/parser/report`** - **Метод:** `POST` - **Тело запроса (`Request Body`):** Остаётся без изменений (принимает `query`, `lang`, `depth` и т.д.). - **Успешный ответ (`Success Response`):** **(Ключевое изменение)** - **Код:** `200 OK` - **Заголовки:** - `Content-Type: text/markdown; charset=UTF-8` (Важно для корректного отображения кириллицы). - `Content-Disposition: attachment; filename="research_report.md"` (Этот заголовок заставит браузер скачать файл, а не просто показать его). - **Тело ответа:** Готовый текст отчёта в формате Markdown. - **Ответы с ошибками (`Error Responses`):** Остаются без изменений (`400`, `500` и т.д.). **2.2. Изменение логики работы агента** Процесс будет выглядеть так: 1. **Приём и валидация запроса:** Логика остаётся без изменений. 2. **Вызов `deep-research` API:** Логика остаётся без изменений. Бэкенд получает "сырые" `learnings` и `visitedUrls`. 3. **Вызов Ollama для синтеза:** Логика остаётся без изменений. Бэкенд получает от Ollama финальный, красиво структурированный отчёт в виде строки Markdown. 4. **ОТМЕНА:** Шаг генерации PDF полностью удаляется. Сервис `ResearchPdfService` и зависимость от библиотеки iText больше не нужны. 5. **НОВЫЙ ШАГ: Формирование итогового `.md` файла:** - Бэкенд берёт строку Markdown, полученную от Ollama. - К этой строке в конец добавляется раздел "Источники". Бэкенд должен программно сгенерировать этот раздел, добавив заголовок `## Источники` и пронумерованный список URL-адресов из `visitedUrls`. 6. **Отправка `.md` файла клиенту:** Бэкенд отправляет итоговую строку (отчёт + источники) как тело HTTP-ответа с заголовками, указанными в п. 2.1. **2.3. Формат итогового Markdown-файла** Итоговая строка, которая будет отправлена клиенту, должна иметь следующую структуру: ```markdown # {Заголовок, сгенерированный Ollama, или просто ваш query} ## Введение ... текст от Ollama ... ## Основная часть ... текст от Ollama ... ### Подраздел ... текст от Ollama ... ## Заключение ... текст от Ollama ... --- ## Источники 1. https://... 2. https://... 3. ... ``` #### **3. Технологический стек** - **Бэкенд:** Java/Spring Boot (без изменений). - **HTTP-клиент:** `WebClient` (без изменений) #### **4. Нефункциональные требования** - **Асинхронность:** Рекомендация по асинхронной обработке запроса (через `jobId` и отдельный эндпоинт для статуса) остаётся актуальной, так как сам процесс исследования по-прежнему занимает много времени. #### **5. Ожидаемый результат** При отправке `POST` запроса на эндпоинт `/api/parser/report` браузер пользователя должен инициировать скачивание файла `research_report.md`. Этот файл должен корректно открываться в любом текстовом редакторе, поддерживающем Markdown, и содержать полный, структурированный отчёт на русском языке вместе со списком источников.