Легкий путь в Python
5.1K subscribers
97 photos
18 videos
3 files
155 links
Я — Алексей Яковенко, опытный разработчик Python. Здесь вы найдете статьи, заметки, посты и видео для прокачки навыков программирования 🐍 Интересное найдет и новичок, и профи 💡

📬По вопросам: https://t.me/yakvenalexx
🗣Сообщество: https://vk.cc/cxKNTb
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Друзья, доброе утро!

Встречайте вторую часть серии статей про создание Telegram-бота с MiniApp интерфейсом для реального анонимного чата «Тет А Тет»! 🎉

Статья получила название: «Создание анонимного чата в Telegram: Бот с MiniApp интерфейсом. Часть 2 — VueJS3 + Centrifugo с монетизацией» и уже доступна на Хабре к прочтению.

📌 В этой части мы разберём:

Разработку стильного, анимированного UI на VueJS 3 с real-time чатом.
Мгновенный обмен сообщениями через Centrifugo без лишней нагрузки на сервер.
Монетизацию Telegram MiniApp с помощью умной рекламы от RichAds.
Финальные шаги перед продакшеном и деплой проекта.

🛠 Что мы реализуем?

🔹 Экран загрузки приложения
🔹 Поиск и подбор собеседников
🔹 Экран ожидания
🔹 Сам real-time чат

📌 Основные технологии:

🚀 VueJS 3 — современный JavaScript-фреймворк
📡 Centrifugo — real-time коммуникации
📲 VUE-TG — удобная работа с Telegram MiniApp API
🛤 Vue-Router — маршрутизация

💡 Если вы хотите создать быстрый, удобный и прибыльный анонимный чат в Telegram, эта статья для вас!

🔗 Читать на Хабре:
📌 Часть 1 (Бэкенд): Статья | GitHub
📌 Часть 2 (Фронтенд + Монетизация): Статья | GitHub

🤖 Попробовать бота в Telegram: @tet_a_tetMiniAppBot

Буду рад вашим отзывам! 🚀🔥
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥11❤‍🔥87👏3🤩1👌1👀1
🔥 Фоновые задачи в FastAPI без лишних сложностей 🔥

Ещё раз приветсвую👋 Если вы следите за моим контентом, то знаете, что я уже рассказывал про фоновые задачи в Python с использованием Celery, FastStream и APScheduler. Но что, если хочется чего-то попроще, без брокеров сообщений и дополнительной настройки?

Знакомьтесь: BackgroundTasks в FastAPI! 🚀

Этот инструмент позволяет легко разгружать бэкенд, выполняя задачи в фоне, без сложных зависимостей.

Как это работает?

1️⃣ Создаем функцию, которая будет выполняться в фоне. Она принимает аргументы, которые передадим при вызове.
2️⃣ Определяем эндпоинт, который будет запускать фоновую задачу.

📌 Пример кода:

from fastapi import FastAPI, BackgroundTasks
import asyncio

app = FastAPI()

async def write_log(message: str):
await asyncio.sleep(5) # Симуляция длительной операции
with open("log.txt", "a") as f:
f.write(f"{message}\n")

@app.post("/start-task/")
async def start_task(background_tasks: BackgroundTasks, msg: str):
background_tasks.add_task(write_log, msg)
return {"message": "Задача запущена в фоне!"}


🔥 Почему это круто?

Простота – не нужно поднимать Redis, RabbitMQ и другие брокеры
Легкость – входит в стандартный функционал FastAPI
Удобство – идеально для небольших фоновых задач, таких как логирование, отправка писем, обновление кеша

Но важно помнить:

📍 BackgroundTasks работают в том же процессе, что и FastAPI, поэтому для более нагруженных задач лучше использовать Celery или другие специализированные решения.

Используете ли вы фоновые задачи в своих проектах? Делитесь опытом в комментариях! 👇🚀
1🔥21👍178🙏1🎄1
Как учитывать просмотры на бэке: быстрый и эффективный способ

Друзья, привет!

Делюсь кейсом, который поможет легко и быстро учитывать количество просмотров ваших постов, товаров и других сущностей на бекенде.

Что нам понадобится:

FastAPI
Любая табличная база данных
Redis

Задача:

Допустим, у нас есть блог, и нам нужно учитывать количество его просмотров. В таблице с блогами есть поле count_views, которое по умолчанию равно 0.

Чтобы не нагружать базу лишними запросами, используем Redis для кэширования информации о том, смотрел ли пользователь этот блог. Ключ формируем так:
redis_key = f"blog_show_{blog_id}_{user_id}"


Логика работы:

1. Проверяем наличие ключа в Redis.
2. Если он есть — пользователь уже смотрел блог, ничего не делаем.
3. Если ключа нет:

- Увеличиваем счётчик просмотров в БД.
- Записываем ключ в Redis с TTL (например, на 1 час).

Код:
@router.post("/edit_blog_show")
async def edit_project_show(
edit_blog_show: EditProjectShow,
redis_client: CustomRedis = Depends(get_redis),
):
redis_key = f"blog_show_{edit_blog_show.blog_id}_{edit_blog_show.user_id}"

exists = await redis_client.exists(redis_key)
if not exists:
async with async_session_maker() as session:
project = await BlogDAO(session).find_one_or_none_by_id(
edit_blog_show.project_id
)
if project:
project.views_count += 1
await session.commit()
await redis_client.set(redis_key, "1", ex=60 * 60)
logger.info(f"Проект {edit_blog_show.project_id} отмечен как просмотрен!")
return {"status": "ok", "msg": "Проект отмечен как просмотрен!"}
else:
logger.warning(f"Проект {edit_blog_show.project_id} уже был отмечен как просмотрен!")
return {"status": "warning", "msg": "Проект уже был отмечен как просмотрен!"}


Этот подход позволяет разгрузить базу и исключить повторные просмотры от одного и того же пользователя в течение заданного периода. Используйте микс Redis и SQLAlchemy для оптимального результата!

🔥 Делитесь своим опытом в комментариях!
2🔥257👍6💘3👏2🍾21
🔥 Анонс новой статьи на Хабре! 🔥

Друзья, скоро на Хабре выйдет мой новый материал, в котором я разберу, как подключить свою базу данных к LLM-моделям вроде Deepseek или GPT.

На простом примере покажу, как это работает:

Собираем текстовые данные (документацию, книги, корпоративную информацию).
Преобразуем их в векторную базу с помощью Python + ChromaDB.
Подключаемся к базе и учим модель искать в ней нужную информацию.
Интегрируем всё с LLM, чтобы получать точные и контекстные ответы.

Где это применимо? В бизнесе, обучении, автоматизации поддержки и не только.

📌 Подробности — скоро на Хабре! Следите за анонсом. 🚀
2🔥7611👍9🎉7🦄2🙏1🤪1
Вот наглядная демонстрация интеллектуального поиска без внешних нейросетей.

🔹 Как это работает?

1. Я загрузил в Chroma небольшой набор товаров, а для их преобразования в векторы использовал локальную нейросеть paraphrase-multilingual-MiniLM-L12-v2 (её размер ~450 МБ).
2. На основе этих данных была сформирована векторная база.
3. Подключившись к Chroma, я выполнял запросы и получал релевантные текстовые результаты (пример на скриншотах).

Теперь осталось интегрировать мощную языковую нейросеть для обработки ответов – и можно собирать полноценный сервис.

💡 На самом деле всё проще, чем кажется! 🚀
1🔥41👍138🤯2🤪1😎1👾1
Друзья, привет! 🚀

Наконец-то готов поделиться с вами проектом, который поможет разобраться с векторными базами данных и их интеграцией с мощными нейросетями, такими как ChatGPT и DeepSeek.

🔹 В первой части, которая выйдет на Хабре через пару дней, мы разберем:
Что такое векторная база данных и зачем она нужна
Как преобразовать информацию в векторный формат
Как реализовать умный поиск по смыслу, а не просто по совпадениям
Как использовать эти данные для работы с нейросетями

Исходный код проекта уже доступен на GitHub 👉 ССЫЛКА

Что там найдете?

📌 Простые примеры работы с векторной базой данных
📌 Запаковку 70 документов крупного сайта в базу и реализацию умного поиска по ним
📌 Интеграцию с ChatGPT и DeepSeek через LangChain – мощнейший инструмент для работы с AI

🔥 Пока всё работает в консоли, но во второй части я покажу, как сделать веб-приложение на FastAPI + VueJS + Centrifugo для удобного общения с AI-ассистентом.

Для тестов нужен API-токен ChatGPT или DeepSeek

Будете ждать статью?
5👍70🔥3282👏1😁1🤪1
Друзья, рассказать вам как в РФ оплатить доступ к API DeepSeek?
Anonymous Poll
83%
Конечно
5%
Я знаю как
13%
Не интересно
🔥65👌2💘2😇1
Всем привет. Если все пойдет по плану, то завтра, ближе к обеду, опубликую статью.
132🔥25👍16🙏21💘1
Привет, друзья!

На Хабре вышла моя новая статья — «Личный ИИ-ассистент на ваших данных. Часть 1: Векторная база ChromaDB + DeepSeek | GPT».

Это первая часть цикла, в котором я подробно рассказываю, как собрать собственного ИИ-ассистента, способного работать с вашими текстами и знаниями. Если статья получит отклик — в следующей части покажу, как развернуть полноценный веб-сервис на основе описанных инструментов.

В этой статье вы узнаете:

- Что такое векторная база данных и зачем она нужна
- Как превратить любую текстовую информацию в "поиск по смыслу", а не просто по ключевым словам
- Как связать такой смысловой поисковик с ChatGPT, DeepSeek и другими LLM
- Как использовать фреймворк Langchain, чтобы легко интегрировать нейросети в свои Python-проекты

Langchain позволяет в пару строк кода создать свою векторную базу и построить на ней интеллектуальный поисковик, который «понимает» смысл запроса. А дальше — просто подключаем DeepSeek или GPT, и получаем умного ассистента, который отвечает именно на ваши данные.

🔍 В статье много теории, но и практики хватает: я демонстрирую, как на базе 63 объёмных статей собрать свою базу знаний и интегрировать её с ChatGPT и DeepSeek.

📁 Весь код проекта доступен на GitHub: https://github.com/Yakvenalex/ChromaDBGPTDeepSeek

Там есть как примеры из статьи, так и удобный класс для асинхронной работы с ChromaDB.

Буду рад вопросам, комментариям и вашей обратной связи! Если тема интересна — вторая часть не заставит себя ждать 😉
14🔥72👍23❤‍🔥12🦄42🐳2🥰1👏1
Друзья, доброе утро. Была бы вам интересна информация о локальном взаимодействии с нейросетями?
4👍132🔥339🤩2👎1🤯1👀1🎄1
Друзья, добрый вечер! 😎 Надеюсь, что соскучились? 😏 Я немного увяз в рабочих проектах, но теперь, немного раскидавшись, анонсирую вторую часть из серии «Личный ИИ-ассистент на ваших данных»!

К концу недели опубликую на Хабре продолжение, в рамках которого мы будем разрабатывать полноценный веб-интерфейс для нашего ИИ-ассистента.

Для тех, кто пропустил: в первой части мы создали собственную векторную базу данных, используя личную информацию, и разобрались, как интегрировать её с нейросетями DeepSeek и OpenAI. Пока всё работало в консольной версии, но это уже был важный шаг вперёд!

Теперь мы реализуем веб-интерфейс с поддержкой стриминга ответов, как в чате ChatGPT, используя Centrifugo V6, чтобы ИИ выдавал текст постепенно — плавно и без долгих ожиданий. Также добавим простую систему авторизации для безопасного доступа и возможность выбора между моделями DeepSeek и ChatGPT прямо в интерфейсе.

Сам чат, естественно, будет завязан на векторной базе данных, которую мы уже подготовили в первой части.

Будет, как минимум, интересно так что следите за обновлениями! 🔥
2🔥5815👍1261🙈1😇1
🚀 Как конвертировать XML в JSON на Python. Простой и удобный способ 🔄

Привет, друзья! Недавно столкнулся с задачей трансформации XML-файлов в читаемый JSON — решил поделиться рабочим решением 💡

📦 Установим пару библиотек:

pip install xmltodict chardet


- xmltodict — превращает XML в питоновский словарь (json)
- chardet — автоматически определяет кодировку файла (важно для кириллицы)

🛠 Что умеет скрипт:

Автоматически определяет кодировку XML
Конвертирует структуру XML в JSON
Поддерживает кириллицу и спецсимволы
Генерирует читаемый JSON с отступами

📄 Пример скрипта:

import xmltodict
import json
import os
import chardet

def detect_encoding(file_path):
with open(file_path, "rb") as file:
raw_data = file.read()
result = chardet.detect(raw_data)
return result["encoding"]

def xml_to_json(xml_file_path):
try:
if not os.path.exists(xml_file_path):
print(f"Ошибка: Файл {xml_file_path} не найден")
return

encoding = detect_encoding(xml_file_path)
print(f"Определена кодировка файла: {encoding}")

with open(xml_file_path, "r", encoding=encoding) as xml_file:
xml_content = xml_file.read()

xml_dict = xmltodict.parse(xml_content)

json_file_path = os.path.splitext(xml_file_path)[0] + ".json"
with open(json_file_path, "w", encoding="utf-8") as json_file:
json.dump(xml_dict, json_file, ensure_ascii=False, indent=4)

print(f" Файл успешно сохранён как {json_file_path}")

except Exception as e:
print(f" Ошибка при преобразовании: {str(e)}")

if __name__ == "__main__":
xml_file_path = "my_file.xml"
xml_to_json(xml_file_path)


📎 Подходит как для небольших XML-файлов, так и для массивных выгрузок (сегодня делал тест на файле 200мб + - летает).
🔥35👍1733
This media is not supported in your browser
VIEW IN TELEGRAM
Друзья, приветствую! К сожалению, не успеваю с публикацией полноценной статьи на сегодня, но сам проект практически готов.

На приложенной анимации вы можете увидеть, как работает чат на данный момент.

Есть выбор между ChatGPT и Deepseek, ответ подгружается в формате стриминга (чанками).

Сами ответы основаны на контексте, который мы получаем из векторной базы знаний (в прошлой статье я рассказывал, что это такое и как она собирается).

Остается добавить простую авторизацию, и проект будет полностью готов.

Сегодня делюсь с вами кодом проекта.
3👍32🔥1972🥰2😱1😇1
🚀 Проект готов! Личный ИИ-ассистент на ваших данных

Друзья, рад поделиться хорошими новостями — мой проект по созданию персонального ИИ-ассистента завершён! Он работает на базе ваших собственных данных с использованием ChromaDB + DeepSeek | GPT.

🧠 Пока вторая часть статьи ещё в процессе написания, но не терпится показать вам результат. Ниже — видео с демонстрацией, а также доступ к исходному коду.

🎥 Видео-демо веб-интерфейса и возможностей ассистента:

▶️ YouTube: Смотреть на YouTube
📺 RuTube: Смотреть на RuTube

📖 Если ещё не читали первую часть статьи — рекомендую начать с неё:
«Личный ИИ-ассистент на ваших данных. Часть 1: Векторная база ChromaDB + DeepSeek | GPT»

💻 Исходный код проекта (вся логика из видео и статьи):
🔗 GitHub: ChromaDBGPTDeepSeek — article_2

Буду рад вашим вопросам, идеям и обратной связи — присоединяйтесь к обсуждению! 💬
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍38🔥278🤮1💋1🤪1
Материал второй части готов. Постараюсь опубликовать его завтра, если сегодня найду время на вычитку.
4🔥28👍15❤‍🔥51😁1😱1🤮1😍1
This media is not supported in your browser
VIEW IN TELEGRAM
🌅 Доброе утро, друзья!

Как и обещал, на Хабре вышло продолжение серии про создание ИИ-ассистента на собственной базе знаний!

В новой статье я подробно рассказываю, как превратить консольного ассистента в полноценное веб-приложение с авторизацией и стримингом ответов от нейросети. Проект изначально задумывался максимально гибким — с возможностью легко масштабировать функциональность, добавлять пользователей и подключать новые модели.

🔐 В этой части я также показал новый подход к реализации системы JWT-авторизации — просто, прозрачно и удобно.

💡 Сейчас в проекте задействованы две нейросети: DeepSeek и ChatGPT. Всё работает через стриминг, интерфейс аккуратный и современный. Думаю, вам понравится.

📖 Читайте статью:
👉 Личный ИИ-ассистент на ваших данных. Часть 2: Веб-интерфейс, авторизация и стриминг ответов от ИИ

💻 Исходники проекта (вся логика из обеих частей):
🔗 GitHub: ChromaDBGPTDeepSeek — article_2

Как всегда, буду рад вашей поддержке, комментариям и обратной связи 🙌
4🔥52👍1562👏2😁2🤗1
👋 Друзья, привет!

Ловите небольшой лайфхак для тех, кто работает с FastAPI.

Иногда возникает необходимость скрыть отдельные методы из Swagger-документации (автоматически генерируемого интерфейса). Например, если у вас есть служебные эндпоинты, которые не стоит светить наружу.

Вот как это легко сделать 👇

@router.post("/secret/", include_in_schema=False)
async def my_secret():
# Ваш код здесь
pass


💡 Ключевой параметр — include_in_schema=False. Он говорит FastAPI не включать метод в OpenAPI-схему, а значит, и в Swagger он не попадёт.

Пользуйтесь! 🚀
2👍7815🔥11🐳311👾1
Друзья, приветствую! Готовы к рассмотрению новой технологии в связке с FastApi? 😉
3👍110🔥327🤪32🎉2🤝1🦄1
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Интеграция Keycloak с FastAPI — просто о безопасности

Друзья, привет!

В честь 1 мая — Дня труда, решил не отдыхать, а поделиться полезной темой: интеграция Keycloak с FastAPI.

Для тех, кто не знаком: Keycloak — это мощная open-source система управления пользователями, авторизацией и SSO. Минимум кода — максимум защиты. Используется даже в банковских продуктах благодаря своей стабильности и гибкости.

📽 В видео, которое прикрепил к посту, вы увидите простой сценарий:

1️⃣ Пользователь с фронта перенаправляется на страницу авторизации Keycloak
2️⃣ Проходит регистрацию или вход
3️⃣ После успешного логина — возвращается в приложение с нужными токенами

🔗 Код из демонстрации доступен тут:
https://github.com/Yakvenalex/KeycloackFastApi

💡 Сейчас думаю собрать небольшой pet-проект — "хранилище мыслей" с авторизацией через Keycloak, и заодно оформить это в статью на Хабр. Если тема вам зайдёт — углубимся в детали: роли, группы, refresh токены, разграничение доступа и многое другое.

📬 Пишите в комментарии, если интересно. Будем разбирать вместе!

P.S. Всех с 1 мая! Хорошего настроения, и пусть труд будет в радость — особенно, если это труд по внедрению безопасных решений 😉
548👍42🔥19🎉3❤‍🔥21🍌1💋1
🚀 FastAPI + Keycloak: готовый проект и видеообзор

Друзья, всем привет!

Я подготовил для вас демо-проект, который показывает, как можно реализовать авторизацию с помощью Keycloak в связке с FastAPI в своем веб-приложении.

🔍 Чтобы проще разобраться, как всё работает, я записал короткий видеообзор — смотрите на удобной вам платформе:

📺 YouTube – https://www.youtube.com/watch?v=YyeB4NjWMHY&t=2s

📺 RuTube – https://rutube.ru/video/84b5021cadd5033c441ba43adcd166a8/

💡 Проект — это простое CRUD-приложение для заметок. Но основной акцент — на реализации авторизации через Keycloak.

Вот как работает процесс:

1. Пользователь переходит на страницу Keycloak (готовая форма авторизации/регистрации).

2. После входа происходит редирект обратно в ваше приложение с одноразовым кодом.

3. Приложение получает код и отправляет его обратно в Keycloak.

4. В ответ возвращаются access_token, refresh_token и id_token, которые можно сохранить в куках.

5. Далее эти токены используются для доступа к защищённым маршрутам.

🔐 Возможности Keycloak:

💎 формы регистрации/входа «из коробки»

💎 внутренняя база пользователей

💎 интеграция с email-рассылкой

💎 поддержка множества внешних провайдеров авторизации: GitHub, Google и многие другие.

🎥 В видео — демонстрация процесса. А более подробный разбор кода будет в моей статье на Хабре (скоро!).

📦 Исходный код проекта на GitHub:
🔗 github.com/Yakvenalex/KeycloackFastApi

Если остались вопросы или есть пожелания — пишите в комментариях!
Please open Telegram to view this post
VIEW IN TELEGRAM
4❤‍🔥32🔥24👍143🫡2😍1🎃1