Skip to content

Mojarung/Vnedraid_Tbank

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

96 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mojarung Investments API

О проекте

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: Эндпоинт для прямого взаимодействия с языковой моделью.

API Эндпоинты

Health Check 👌

  • GET /api/health
    • Описание: Проверка работоспособности сервиса.
    • Ответ: {"status": "ok"}

Auth 🔑

  • 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"}

Users 🙋‍♂️

  • 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}
    • Описание: Удалить тикер из отслеживаемых.

News 🗞️

  • GET /api/news/
    • Описание: Получение списка новостей. Можно фильтровать по интересам пользователя (filter=true).
  • GET /api/news/{news_id}
    • Описание: Получить новость по ID.

Invest 💸 (Tinkoff Sandbox)

  • 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
    • Описание: Получить историю операций по счету.

Companies parsers 🏢 (TradingView)

  • POST /api/tradingview/parse
    • Описание: Запустить фоновую задачу парсинга компаний с TradingView.
  • GET /api/tradingview/companies
    • Описание: Получить список компаний из БД с пагинацией.
  • GET /api/tradingview/companies/{ticker}
    • Описание: Получить информацию о компании по тикеру.

News parsers 🔍

  • POST /api/parsers/run
    • Описание: Запустить фоновую задачу парсинга и обработки новостей.
  • GET /api/parsers/news
    • Описание: Получить список обработанных новостей.
  • GET /api/parsers/raw-news
    • Описание: Получить список сырых (необработанных) новостей.

Pulse 💬

  • GET /api/pulse/user/{username}
    • Описание: Получить информацию о пользователе из соцсети "Пульс".
  • GET /api/pulse/user/{user_id}/posts
    • Описание: Получить все посты пользователя "Пульс" по ID.
  • GET /api/pulse/ticker/{ticker}/posts
    • Описание: Получить посты из "Пульса" по тикеру.

LLM 🤖

  • POST /api/llm
    • Описание: Прямой доступ к LLM для генерации ответа по промпту.
    • Тело запроса: LLMRequest (prompt, model, и др. параметры).

Модели базы данных (SQLAlchemy)

В проекте используются следующие модели SQLAlchemy для представления данных в базе:

  • User (users):

    • Хранит информацию о пользователях, включая аутентификационные данные, персональные настройки (токены, Telegram ID), отслеживаемые тикеры и веса интересов по тегам для персонализации новостной ленты.
  • RawNews (raw_news):

    • Таблица для хранения "сырых" новостей, полученных напрямую из парсеров. Используется для предотвращения дублирования перед дорогостоящей обработкой в LLM.
  • NewsArticle (news_articles):

    • Основная таблица для новостей, которые были обработаны, очищены и обогащены с помощью LLM. Содержит заголовок, полный текст, краткое содержание, тональность, теги и упомянутые тикеры.
  • TradingViewCompany (tradingview_companies):

    • Содержит информацию о компаниях, полученную с TradingView. Включает тикер, название, ссылку, а также обогащенные LLM-моделью данные: описание, теги и URL изображения.

Схемы данных (Pydantic Models)

  • 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.

Установка и запуск

  1. Клонируйте репозиторий:

    git clone <repository-url>
    cd Vnedraid_Tbank
  2. Создайте и активируйте виртуальное окружение:

    python -m venv .venv
    source .venv/bin/activate
  3. Установите зависимости:

    pip install -r requirements.txt
  4. Настройте переменные окружения:

    • Создайте файл .env по примеру .env.example.
    • Укажите данные для подключения к базе данных PostgreSQL.
  5. Примените миграции (если используются):

    • Убедитесь, что таблицы созданы. Можно использовать create_tables.py, если он настроен.
  6. Запустите приложение:

    uvicorn app.main:app --reload

Сервис будет доступен по адресу http://127.0.0.1:8000. Документация OpenAPI (Swagger) будет доступна по адресу http://127.0.0.1:8000/docs.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •