Skip to content

Commit 3c6cd79

Browse files
committed
task-tracker: summarization service and LLM integration
1 parent 713f526 commit 3c6cd79

1 file changed

Lines changed: 39 additions & 29 deletions

File tree

‎content/projects/task-tracker.md‎

Lines changed: 39 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ weight = 7
2222
- SQL
2323
- Spring Data JPA
2424
- Миграции
25-
- [Frontend](../technologies/frontend.md) - HTML/CSS, Bootstrap, Javascript, Ajax
2625
- [Docker и микросервисы](../technologies/microservices.md)
2726
- Контейнеры, образы, volumes, написание Dockerfile, Docker Compose
2827
- Брокер сообщений Kafka
@@ -37,6 +36,7 @@ weight = 7
3736
- Практика с Docker и Docker Compose, докеризация Spring Boot приложение (упаковка его в Docker образ)
3837
- Знакомство и практика с брокером сообщений Kafka
3938
- Самостоятельная разработка части схемы REST API
39+
- Интеграция с LLM/AI
4040

4141
Дисклеймер. Планировщик задач - довольно простой и легковесный проект для микросервисного подхода. Но проект достаточной сложности вышел бы за рамки учебного по объёму и сложности.
4242

@@ -56,11 +56,11 @@ weight = 7
5656

5757
Оповещение пользователей по email:
5858
- Приветственное письмо
59-
- Каждый день в полночь оповещение о том, сколько задач было сделано за прошедшие сутки, и какое количество осталось невыполненными
59+
- Каждый день в полночь отчёт о том, какие задачи были сделаны за прошедшие сутки, какое количество осталось невыполненными
6060

6161
## Интерфейс приложения
6262

63-
Веб-приложение является одностраничным, всё общение с сервером происходит с помощью JavaScript/Ajax, интерфейс обновляется через jQuery.
63+
Веб-приложение является одностраничным, всё общение с сервером происходит с помощью JavaScript/Ajax, интерфейс обновляется динамически.
6464

6565
- Заголовок
6666
- Для неавторизованных пользователей - кнопки регистрации и авторизации
@@ -80,14 +80,13 @@ weight = 7
8080
- Чекбокс, чтобы пометить задачу сделанной (и обратно - пометить несделанной)
8181
- Кнопка "удалить"
8282

83-
8483
У формы модального окна нет кнопки "сохранить". JavaScript должен сохранять состояние задачи с помощью Ajax запросов, каждый раз когда пользователь нажимает на чекбокс, или редактирует поля ввода.
8584

8685
## SQL база данных
8786

8887
В этом проекте студент самостоятельно разрабатывает структуру базы данных для хранения пользователей и задач. Отношение между пользователем и задачами - один ко многим.
8988

90-
Как и в предыдущем проекте, в таблице `Users` ориентироваться стоит на интеграцию с Spring Security. Эта библиотека экосистемы Spring подразумевает определённые атрибуты, которыми должен обладать пользователь, и список которых и станет основой колонок для таблицы.
89+
Как и в предыдущем проекте, в таблице `Users` ориентироваться стоит на интеграцию с Spring Security. Эта библиотека экосистемы Spring подразумевает определённые атрибуты, которыми должен обладать пользователь, и список которых станет основой колонок для таблицы.
9190

9291
Таблица `Tasks` должна содержать поля для описания заметки - заголовок, текст, владелец, статус, и время (timestamp), когда задача была помечена как сделанная.
9392

@@ -155,17 +154,19 @@ Spring Boot приложение, реализующее REST API для раб
155154

156155
### Фронтенд
157156

158-
Набор статических файлов:
159-
- HTML разметка структуры главной страницы (динамические данные вставляются через JavaScript/jQuery)
160-
- CSS
161-
- JavaScript
157+
Предлагаю ограничиться разработкой REST API. А для использования функционала проекта реализовать коллекцию REST запросов через Postman, REST Client в Intellij IDEA или аналогичный инструмент.
158+
159+
Альтернативно, по желанию, вы можете реализовать веб-приложение на React/Vue/Angular.
160+
161+
### Summarization сервис
162+
163+
Составление отчета по задачам через LLM.
164+
165+
Необходимо написать отдельный сервис, который будет интегрироваться с LLM по API и делать суммаризацию - генерировать отчет по итогам дня, сделанным и несделанным задачам.
162166

163-
При разработке, файлы можно раздавать локальным сервером встроенным в Intellij IDEA. В контексте Docker Compose стека, образ фронтенд сервиса будет содержать веб-сервер Nginx, раздающий статику.
167+
Сервис принимает сообщение через кафку с данными по задачам за определенный период, полученный результат он также отправляет в кафку инициирующему сервису, реализуя паттерн RPC.
164168

165-
- При загрузке страницы, JavaScript делает запрос на получение текущего пользователя. Ответ 401 HTTP означает, что пользователь неавторизован, 200 - авторизован. Для авторизованного пользователя мы можем запросить и отобразить список задач
166-
Работа с JavaScript/Ajax:
167-
- Формы авторизации и регистрации должны быть сверстаны с помощью тега `form`, но вместо обработчика по-умолчанию (POST запрос и перезагрузка страницы), jQuery будет переопределять обработчик, исполнять POST запрос через Ajax и реагировать на результат, в соответствии с кодом ошибки
168-
- Веб-страница и REST API будут доступны на разных портах - 80 и 8080. Для вызова методов REST API через Ajax может потребоваться выдача разрешения браузеру через CORS - https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
169+
Также данный сервис может иметь свой отдельный экземпляр базы данных для хранения обработанных запросов и результатов.
169170

170171
### Рассыльщик писем
171172

@@ -179,13 +180,12 @@ Spring Boot приложение с двумя модулями - Spring Mail и
179180

180181
Spring Boot приложение с двумя модулями - Spring Scheduler и Spring Kafka.
181182

182-
Задача сервиса - раз в сутки итерировать всех пользователей, и формировать для них отчёты о задачах и изменениях в них за сутки.
183+
Задача сервиса - раз в сутки итерировать всех пользователей, и формировать для них отчёты о задачах и изменениях в них за сутки. Отчёт генерируется LLM через Summarization сервис
183184

184-
- Пользователям, у которых на конец дня есть невыполненные задача, отправляется емейл вида "У вас осталось N несделанных задач". Тело письма содержит заголовки этих задач (не более какого-то разумного количества, например 5)
185-
- Пользователям, у которых за последние сутки 1 или более задач были отмечены как сделанные, отправляется емейл вида "За сегодня вы выполнили N задач". Тело письма содержит заголовки выполненных задач
186-
- Пользователям, для которых верны оба условия выше, отправляется емейл и со списком несделанных, и сделанных за последние сутки задач
187-
188-
Spring Scheduler по Cron выражению каждую полночь вызывает метод, читающий список пользователей, анализирующий их заметки, и формирующий емейлы для отправки. Сформированные емейлы упаковываются в классы-модели и отправляются в Kafka топик.
185+
Планировщик является оркестратором данного процесса:
186+
- По расписанию находит всех пользователей, у которых есть сделанные за последние сутки задачи, и(или) остались несделанные
187+
- Для каждого пользователя генерируем отчёт, запросив его по Kafka RPC у Summarization сервиса
188+
- Сформированный отчёт, готовый к отправке, упаковываются в DTO и пересылается к сервис-рассыльщик писем через Kafka топик
189189

190190
## Работа с Kafka
191191

@@ -194,13 +194,24 @@ Kafka в контексте Docker Compose стека запускается о
194194
- Задачи для отправки емейлов будут попадать в топик `EMAIL_SENDING_TASKS`
195195
- Бэкенд сервис и планировщик записывают сообщения в топик, рассыльщик писем - читает
196196
- Формат сообщений - JSON, сереализуемый и десериализуемый по модели, описанной с помощью класса Java, подобно моделям для контроллеров REST API. Сообщения в топике `EMAIL_SENDING_TASKS` должны содержать следующие поля - адрес получателя, заголовок и текст письма
197+
- Отдельно, необходимы топики для RPC общения планировщика с Summarization сервисом по RPC
197198
- Для интеграции Spring c Kafka можно использовать модуль Spring Kafka
198199

199-
## Mailjet
200+
## Работа с LLM
201+
202+
Предполагается напрямую интегрироваться с API LLM по HTTP, можно выбрать:
203+
- Прямое использование [OpenAI API](https://developers.openai.com/api/reference/resources/chat/subresources/completions/methods/create)
204+
- Прокси сервисы - [пример](https://aitunnel.ru/)
205+
- Доступные в РФ LLM - [GigaCode](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/post-chat), [YaGPT](https://aistudio.yandex.ru/docs/ru/ai-studio/concepts/api.html)
206+
207+
Необходимо поработать над системным промптом, предоставить желаемый формат и примеры, поработать с контекстом модели.
208+
Предполагается прямое использование API, не используя SDK или библиотеки для агентов. Практикуемся работать с внешним API.
209+
210+
## Сервис для отправки писем
200211

201-
Для отправки SMTP нужны логин, пароль, хост и порт SMTP сервера. У емейл сервисов, например Gmail, mail.ru, есть SMTP сервера, с которыми работают емейл-клиенты. Теоретически, можно воспользоваться их сервером, и отправлять письма, авторизовываясь логином и паролем своего ящика, но в реальности, для писем и рассылок обычно пользуются специальными для этого созданными сервисами, например Mailjet, Mailchimp, Mailgun (и десятками аналогичных).
212+
Для отправки SMTP нужны логин, пароль, хост и порт SMTP сервера. У емейл сервисов, например Gmail, mail.ru, есть SMTP сервера, с которыми работают емейл-клиенты. Теоретически, можно воспользоваться их сервером, и отправлять письма, авторизовываясь логином и паролем своего ящика, но в реальности, для писем и рассылок обычно пользуются специальными для этого созданными сервисами, например Unisender, Mailchimp, Mailgun (и десятками аналогичных).
202213

203-
Для примера рассмотрим [Mailjet](https://www.mailjet.com/). Бесплатный лимит сервиса - 200 писем на отправку в сутки. Необходимо зарегистрироваться там, сконфигурировать sender адрес (адрес отправителя писем), получить credentials (логин и пароль) и остальные SMTP настройки.
214+
Предлагаю использовать [Unisender](https://www.unisender.com/). Необходимо зарегистрироваться там, сконфигурировать sender адрес (адрес отправителя писем), получить credentials (логин и пароль) и остальные настройки.
204215

205216
Логин и пароль - секретные данные, которые не должны попасть в git репозиторий. При запуске приложения из IDE или Docker Compose стека, секреты можно подключить к приложению через переменные окружения.
206217

@@ -215,9 +226,9 @@ Kafka в контексте Docker Compose стека запускается о
215226

216227
Сервисы:
217228
- task-tracker-backend (порт 8080)
218-
- task-tracker-frontend (порт 80)
219229
- task-tracker-scheduler
220230
- task-tracker-email-sender
231+
- task-tracker-summarization-server
221232
- Postgres
222233
- Kafka
223234

@@ -234,7 +245,7 @@ Kafka в контексте Docker Compose стека запускается о
234245
Приложение целиком будем деплоить через Docker.
235246

236247
Шаги:
237-
- С помощью GitHub Actions (детали ниже) автоматизировать сборку докер образов для сервисов task-tracker-backend, task-tracker-frontend, task-tracker-scheduler, task-tracker-email-sender
248+
- С помощью GitHub Actions (детали ниже) автоматизировать сборку докер образов для сервисов проекта
238249
- В хостинг-провайдере по выбору арендовать облачный сервер на Linux
239250
- Установить Docker
240251
- Скопировать на удалённый сервер Docker Compose файл для запуска сервисов приложения, запустить
@@ -255,17 +266,16 @@ Kafka в контексте Docker Compose стека запускается о
255266
- Docker Compose - добавить Postgres, Kafka
256267
- Backend - работа с пользователями
257268
- Backend - работа с JWT, авторизация
258-
- Frontend - структура страницы, интерфейс и Javascript для регистрации и авторизации
259269
- Backend - работа с задачами
260-
- Frontend - листинг, добавление, редактирование, удаление задач
261270
- Email sender - реализация получения сообщений от Kafka и отправки емейлов
262-
- Backend - отправка приветственного письма при регистрации
271+
- Отправка приветственного письма при регистрации
272+
- Summarization сервис
263273
- Scheduler - отправка пользовательских отчетов по сделанным и оставшимся задачам
264274
- CI/CD, деплой
265275

266276
## Ресурсы для работы над ошибками
267277

268-
- [Реализации проекта](../finished-projects/task-tracker.md.md) другими студентами и мои ревью этих реализаций
278+
- [Реализации проекта](../finished-projects/task-tracker.md.md) другими студентами и ревью этих реализаций
269279

270280
## Ревью на ваш проект
271281

0 commit comments

Comments
 (0)