Mojarung Investments API - это комплексная платформа для анализа финансовых новостей и управления инвестиционным портфелем. Система автоматически собирает и обрабатывает новости из различных источников, использует AI (LLM) для их анализа, обогащения и классификации, а также интегрируется с API Тинькофф Инвестиций (в режиме песочницы) для симуляции торговых операций.
Платформа предоставляет пользователям персонализированную новостную ленту, основанную на их интересах и отслеживаемых компаниях, и позволяет управлять своим виртуальным портфелем.
- Бэкенд: Python, FastAPI
- База данных: PostgreSQL (с использованием SQLAlchemy ORM)
- Обработка данных и AI:
transformers,torch,sentence-transformersдля NLP-задач.- Внешний LLM-сервис для генерации и анализа текста.
- Парсинг:
BeautifulSoup,requests - Аутентификация: JWT-токены с
passlibиpython-jose. - Асинхронность:
asyncio,uvicorn. - Работа с API:
tinkoff-investments(для песочницы),tpulse(для соцсети "Пульс").
- Управление пользователями: Регистрация, аутентификация, управление профилем (включая токены для API и Telegram ID).
- Персонализация: Система лайков/дизлайков для новостей, которая формирует рейтинг тегов для каждого пользователя.
- Отслеживание компаний: Пользователи могут добавлять тикеры компаний в "Избранное".
- Агрегация и обработка данных:
- Парсинг компаний: Сбор информации о компаниях с TradingView, обогащение данных (описание, теги, логотип) с помощью LLM.
- Парсинг новостей: Сбор новостей из источников (например, РБК), сохранение сырых данных, обработка через LLM для анализа тональности, генерации тегов, поиска упоминаний компаний и сохранения в чистовом виде.
- Интеграция с Tinkoff:
- Sandbox API: Полный набор функций для работы с песочницей: управление счетами, пополнение, получение баланса, совершение сделок, просмотр истории операций.
- Pulse API: Получение информации о пользователях и постах по тикеру из социальной сети "Пульс".
- Прямой доступ к LLM: Эндпоинт для прямого взаимодействия с языковой моделью.
- GET
/api/health- Описание: Проверка работоспособности сервиса.
- Ответ:
{"status": "ok"}
- POST
/api/auth/register- Описание: Регистрация нового пользователя.
- Тело запроса:
UserCreate(email, username, password). - Ответ:
User
- POST
/api/auth/login- Описание: Вход в систему, получение JWT.
- Тело запроса: Form data (username, password).
- Ответ:
Token
- GET
/api/auth/me- Описание: Получение профиля текущего пользователя.
- Ответ:
User
- PUT
/api/auth/me- Описание: Обновление профиля текущего пользователя.
- Тело запроса:
UserUpdate - Ответ:
User
- PUT
/api/auth/me/invest-token- Описание: Обновление токена Tinkoff Invest.
- Тело запроса:
{"invest_token": "string"}
- PUT
/api/auth/me/telegram-id- Описание: Обновление ID пользователя в Telegram.
- Тело запроса:
{"telegram_id": "string"}
- GET
/api/users/me/tags- Описание: Получить рейтинг тегов пользователя для персонализации.
- POST
/api/users/me/like- Описание: Лайкнуть новость (повышает рейтинг тегов новости).
- Тело запроса:
{"news_id": integer}
- POST
/api/users/me/dislike- Описание: Дизлайкнуть новость (понижает рейтинг тегов).
- Тело запроса:
{"news_id": integer}
- GET
/api/users/me/tickers- Описание: Получить список отслеживаемых тикеров.
- POST
/api/users/me/tickers- Описание: Добавить тикер в отслеживаемые.
- Тело запроса:
{"company_id": integer}
- DELETE
/api/users/me/tickers/{ticker}- Описание: Удалить тикер из отслеживаемых.
- GET
/api/news/- Описание: Получение списка новостей. Можно фильтровать по интересам пользователя (
filter=true).
- Описание: Получение списка новостей. Можно фильтровать по интересам пользователя (
- GET
/api/news/{news_id}- Описание: Получить новость по ID.
- GET
/api/invest/sandbox/accounts- Описание: Получить все счета в песочнице.
- POST
/api/invest/sandbox/accounts- Описание: Открыть новый счет в песочнице.
- DELETE
/api/invest/sandbox/accounts/{account_id}- Описание: Закрыть счет в песочнице.
- GET
/api/invest/sandbox/balance- Описание: Получение баланса в песочнице.
- POST
/api/invest/sandbox/topup- Описание: Пополнение баланса в песочнице.
- POST
/api/invest/sandbox/orders- Описание: Совершить сделку (купить/продать) в песочнице.
- GET
/api/invest/sandbox/tradable-shares- Описание: Получить список доступных для торговли акций.
- GET
/api/invest/sandbox/operations- Описание: Получить историю операций по счету.
- POST
/api/tradingview/parse- Описание: Запустить фоновую задачу парсинга компаний с TradingView.
- GET
/api/tradingview/companies- Описание: Получить список компаний из БД с пагинацией.
- GET
/api/tradingview/companies/{ticker}- Описание: Получить информацию о компании по тикеру.
- POST
/api/parsers/run- Описание: Запустить фоновую задачу парсинга и обработки новостей.
- GET
/api/parsers/news- Описание: Получить список обработанных новостей.
- GET
/api/parsers/raw-news- Описание: Получить список сырых (необработанных) новостей.
- GET
/api/pulse/user/{username}- Описание: Получить информацию о пользователе из соцсети "Пульс".
- GET
/api/pulse/user/{user_id}/posts- Описание: Получить все посты пользователя "Пульс" по ID.
- GET
/api/pulse/ticker/{ticker}/posts- Описание: Получить посты из "Пульса" по тикеру.
- POST
/api/llm- Описание: Прямой доступ к LLM для генерации ответа по промпту.
- Тело запроса:
LLMRequest(prompt, model, и др. параметры).
В проекте используются следующие модели SQLAlchemy для представления данных в базе:
-
User (
users):- Хранит информацию о пользователях, включая аутентификационные данные, персональные настройки (токены, Telegram ID), отслеживаемые тикеры и веса интересов по тегам для персонализации новостной ленты.
-
RawNews (
raw_news):- Таблица для хранения "сырых" новостей, полученных напрямую из парсеров. Используется для предотвращения дублирования перед дорогостоящей обработкой в LLM.
-
NewsArticle (
news_articles):- Основная таблица для новостей, которые были обработаны, очищены и обогащены с помощью LLM. Содержит заголовок, полный текст, краткое содержание, тональность, теги и упомянутые тикеры.
-
TradingViewCompany (
tradingview_companies):- Содержит информацию о компаниях, полученную с TradingView. Включает тикер, название, ссылку, а также обогащенные LLM-моделью данные: описание, теги и URL изображения.
- User: Представляет пользователя в системе.
id,email,username,is_active,invest_token,telegram_id,created_at,updated_at.
- NewsArticle: Представляет обработанную новость.
id,title,full_text,summary,is_positive,is_ai_generated,tags,tickers,created_at.
- RawNews: Представляет сырую новость до обработки LLM.
id,title,full_text,source,created_at.
- TradingViewCompany: Представляет компанию, спарсенную с TradingView.
id,ticker,company_name,link,image_url,description,tags,created_at.
-
Клонируйте репозиторий:
git clone <repository-url> cd Vnedraid_Tbank
-
Создайте и активируйте виртуальное окружение:
python -m venv .venv source .venv/bin/activate -
Установите зависимости:
pip install -r requirements.txt
-
Настройте переменные окружения:
- Создайте файл
.envпо примеру.env.example. - Укажите данные для подключения к базе данных PostgreSQL.
- Создайте файл
-
Примените миграции (если используются):
- Убедитесь, что таблицы созданы. Можно использовать
create_tables.py, если он настроен.
- Убедитесь, что таблицы созданы. Можно использовать
-
Запустите приложение:
uvicorn app.main:app --reload
Сервис будет доступен по адресу http://127.0.0.1:8000. Документация OpenAPI (Swagger) будет доступна по адресу http://127.0.0.1:8000/docs.