Хакатон AI Challenge
Для корректной работы должны быть установлены переменные окружения, необходимые для работы с Yandex Cloud
pip install requirements.txt
cd ai_manager
python manage.py ruserver
- ai_manager - основной Django-проект
- mail_interactions - взаимодействие с электронной почтой (отправка и получение сообщений)
- llm - взаимодействие с LLM моделями при помощи Yandex Cloud
- web_app - веб-приложение, взаимодействие с запросами и БД
- Заходит в ящик hacatontest@gmail.com
- Просматривает первое непрочитанное письмо на электронной почте hacatontest@gmail.com и берет оттуда:
- Дату отправления письма(в формате: "Mon, year day Nov 23:59:59 -1100 PST")
- Адрес ящика с которого было отправленно письмо на почту банка
- Тему сообщения
- Текст сообщения
- Все приложенные файлы
- Собирает массив из этих данных и отправляет в базу данных
- Выходит из ящика
Входные данные:
- mail - адрес электронной почты на которую нужно отправить сообщение
- subject - тема сообщения
- text - тело сообщения
- *args - названия вложенных в письмо файлов
- Входит в ящик hacatontest@gmail.com
- Собирает письмо по отправленным в нее данным
- Отправляет письмо на выбранную почту
- Выходит из аккаунта
Генерация промптов для имитации поведеления сотрудника банка
bank_employee_base_prompt.txt, bank_employee_examples.txt, bank_employee_routing_examples.txt, bank_employee_constants.py
Файлы, хранящие тексты промптов (основной промпт, примеры, запись промпта в константы)
Класс, содержащий функции - типы запросов (задач), которые обрабатывает сотрудник банка. Исходя из переданных аргументов и промпта создаётся запрос в LLM по API
Определеяеи категорию письма (запрос документов/жалоба/etc)
- param: author: автор письма
- param: letter: текст письма
- return: ответ LLM (json с определённой категорией обращения)
make_routes(self, author: str, person_info: str, letter: str, category: str, is_correct: str, comment: str) -> str:
Определение отделов, в которые необходимо перенеправить письмо
- param: author: автор письма
- param: person_info: информация об авторе
- param: letter: текст письма
- param: category: категория письма
- param: is_correct: корректность письма с юридической точки зрения
- param: comment: комментарий по наличию противоречий с законодательством или их отсутствии
- return: ответ LLM (json с перечнем отделов, в которые необходимо перенапрвить, объяснением причины, текстами писем для отделов)
make_answer(self, author: str, person_info: str, letter: str, category: str, is_correct: str, comment: str, routes: str, correspondence_context: str) -> str:
Написание ответа на письмо
- param: author: автор письма
- param: person_info: информация об авторе
- param: letter: текст письма
- param: category: категория письма
- param: is_correct: корректность письма с юридической точки зрения
- param: comment: комментарий по наличию противоречий с законодательством или их отсутствии
- param: routes: информация о необходимости перенаправления в другие отделы
- param: correspondence_context: информация о предыдущем контексте переписки с данным отправителем
- return: ответ LLM (json с ответом на письмо)
Генерация промптов для имитации поведеления юриста
Файлы, хранящие тексты промптов (основной промпт, примеры, запись промпта в константы)
Класс, содержащий функции - типы запросов (задач), которые обрабатывает юрист. Исходя из переданных аргументов и промпта создаётся запрос в LLM по API
Функция, проверяющая письмо на корректность с юридической точки зрения
- param: author: автор письма
- param: letter: текст письма
- param: category: категория письма
- return: ответ LLM (json с вердиктом о корректности письма, комментарием насчёт наличия противоречий с законодательством, перечнем связанных законов, найденной информации об авторе письма)
Модуль веб-приложения, написанного на Django
Функции для обработки запросов
Обработка запросов, поступающих на главную страницу
- Получает данные о письме
- При GET-запросе получает данные о самом раннем непрочитанном письме в ящике. Если письмо найдено, получает данные об авторе и тексте письма. Если письмо не найдено, отображает форму для ручного ввода
- При POST-запросе получает данные об авторе и тексте письма, введённые пользователем в форму
- Отправляет данные в LLM с помощью методов классов LlmBankEmployee и LlmLawyer: сначала определяется категория письма, после заключение юриста, после отделы, которым необходимо перенаправить письмо. Исходя из полученных сведений и данных о предыдущем контексте переписки с данным отправителем генерируется ответ на письмо. Письмо добавляется в БД.
- Результаты взаимодействия с LLM передаются в контекст, пользователь видит отображение с помощью html
Обработка запросов, поступающих на url для автоматической отправки писем. Поддерживает отправку без перезагрузки предыдущей страницы, если в ней прописан AJAX-запрос.
- Из тела запроса получаются данные об адресе электронной почты, теме и тексте письма
- Отправляется письмо с полученными данными
Классы форм
Класс формы для ввода письма
- author: автор письма
- letter: текст письма
Классы моделей для БД
Отправитель письма
- name: наименование организации
- email: адрес электронной почты
Письмо
- author: автор письма. ForeingKey к классу Sender
- text: текст письма