Легкий путь в Python
5.81K subscribers
143 photos
22 videos
3 files
181 links
Я Алексей Яковенко, senior-разработчик Python. Здесь вы найдете статьи, заметки, посты и видео для прокачки навыков программирования. Интересно и новичку, и профи 💡

По вопросам: https://t.me/yakvenalexx
Download Telegram
🚀 Заставляем работать ChatGPT, Claude, Copilot и Gemini в РФ — без VPN и платных прокси

Да, это реально. Достаточно поменять DNS — и большинство ИИ-сервисов, которые «не работают в России», снова открываются 👇

🔧 Что за магия и почему это работает

Comss.one DNS — публичные DNS-серверы на базе PowerDNS с поддержкой:

* 🔐 DNS-over-HTTPS (DoH)
* 🔐 DNS-over-TLS (DoT)
* 🔐 DNS-over-QUIC
* 🛡 Блокировка рекламы, трекеров, фишинга и вредоноса

💡 Фишка: через эти DNS снимаются региональные ограничения для ряда ИИ-сервисов — без VPN и туннелей.

🤖 Какие ИИ реально запускаются

По официальному списку и отзывам пользователей:

ChatGPT — веб + приложения (Windows, macOS, Android, iOS)
Claude AI — веб (включая Claude Code!)
Google Gemini — веб, Android, Chrome
Microsoft Copilot — веб, Windows, Android, iOS
GitHub Copilot
Google ImageFX, Sora, Designer, xAI Grok и др.

⚠️ Список периодически обновляется — актуальный всегда на сайте Comss.one

🌍 DNS-адреса Comss.one

Обычный DNS (IPv4):
83.220.169.155
212.109.195.93


DNS-over-HTTPS (DoH):

https://dns.comss.one/dns-query


DNS-over-TLS (DoT):

dns.comss.one


🪟 Windows

🔹 Вариант 1: системный DNS (лучший)

1. Параметры → Сеть и Интернет → Свойства подключения
2. DNS → «Вручную»
3. Введите DNS:
83.220.169.155
212.109.195.93

4. Включите шифрование DNS (DoH)
5. Добавьте:
https://dns.comss.one/dns-query

6. Переподключите сеть

🔹 Вариант 2: только в браузере

Подходит для Chrome / Edge / Brave / Opera:

* Настройки → Конфиденциальность → Безопасный DNS
* Пользовательский DNS:
https://dns.comss.one/dns-query


Перезапустите браузер

🍏 macOS

🔹 Системный DNS

1. Системные настройки → Сеть
2. Подключение → Подробно → DNS
3. Удалите старые и добавьте:
83.220.169.155
212.109.195.93

4. Переподключите Wi-Fi

🔹 Через браузер (DoH)

Аналогично Windows — включаем «Безопасный DNS» и указываем:

https://dns.comss.one/dns-query


🐧 Linux

🔹 Быстро (GUI)

В настройках сети → IPv4 → DNS:
83.220.169.155, 212.109.195.93


🔹 Через systemd-resolved (DoT)

sudo nano /etc/systemd/resolved.conf


[Resolve]
DNS=83.220.169.155#dns.comss.one 212.109.195.93#dns.comss.one
DNSOverTLS=yes

sudo systemctl restart systemd-resolved
resolvectl status


Как проверить

* Зайдите на страницу проверки DNS от Comss.one
* Откройте:

* https://chatgpt.com
* https://claude.ai
* https://gemini.google.com

Если сервисы грузятся без региональных заглушек — всё работает 🔥

⚠️ Важно знать

* ❗️ Это не VPN — шифруется только DNS, не весь трафик
* ❗️ Некоторые API или студии могут всё ещё быть недоступны
* Зато работает быстро, стабильно и без подписок

👍 Сохраняйте, делитесь и не теряйте доступ к ИИ.
1🔥379👍7🤗2🥰1🤔1🎄1
🚀 Статья опубликована (да, с небольшим запозданием)

На Хабре вышел мой большой практический туториал:

👉 Как поднять мультимодальный AI-сервис (OCR, ASR, LLM, TTS) на одной GPU 16GB без облачных API

Это реальный продакшен-сетап
, а не демо и не «игрушка».


🧠 4 нейросети на одном GPU (RTX A4000, 16GB)

OCR → ASR → LLM → TTS

Стек технологий:

FastAPI + PyTorch + Transformers

Используемые модели:

- 🖼 DeepSeek OCR
- 🎙 Whisper RU
- 🤖 Qwen2.5
- 🗣 MMS-TTS (RU)

Что внутри статьи

⚙️ Подготовка VPS: Ubuntu + CUDA + драйверы

🧮 Управление VRAM без CUDA OOM (fp16, lazy loading, torch.no_grad, освобождение памяти)

🚀 Продакшен без Docker: systemd, virtualenv, автозапуск

🌐 Nginx + HTTPS + домен

🧪 Тестирование через Swagger

Итог

Локальный AI-сервис «под ключ»:

- предсказуемые расходы (VPS с GPU ≈ 12к/мес)
- полная приватность данных
- база для AI-продукта или стартапа

📦 Полный исходный код проекта 👉 GitHUB

💬 Материал получился непростым, поэтому если остались вопросы — пишите тут 👇 или в комментариях на Хабре. По возможности всем отвечу.

P.S. Искренне постараюсь сделать всё, чтобы в 2026 году таких больших пауз по публикациям больше не было 🙂

Всех с прошедшими праздниками. Начинаем! 🚀
3🔥6013👍84🙉2🥰1🤔1🥱1
Хабр только у меня лежит?
😭11👾5🤪4👍3🔥1
😁8610👍8😱3🐳2👀1👾1
🚀 За 5 минут сделал свою базу знаний с ИИ на Python

Создал AI-блокнот, загрузил туда топовые книги по продуктивности и мотивации и написал простой Python-скрипт для чата с ними.

📸 На скрине — живой пример

Я задаю вопрос из терминала:

👉 «топ-10 основных принципов из книги “Атомные привычки”»

Скрипт в ответ:

- делает структурированную выжимку
- отвечает строго по загруженной книге
- показывает источники и конкретные фрагменты текста

По сути, это ChatGPT на моих книгах:

без галлюцинаций
с цитатами
запускается одной командой

⬇️ Ниже — инструкция, как повторить это за 5 минут на любом наборе документов (PDF, видео, статьи, текстовые файлы). Понадобится аккаунт Google и VPN⬇️
2🔥20👍12🍌32😍2🥱1😇1
🔹 ИНСТРУКЦИЯ: как повторить за 5 минут

📘 Что такое NotebookLM (коротко и по делу)

NotebookLM — это AI-блокнот от Google, в который ты загружаешь свои источники, а ИИ:

- отвечает строго по этим материалам
- показывает цитаты и источники
- не галлюцинирует

Поддерживаются:

- PDF, DOCX, Markdown
- статьи и сайты
- видео (ссылки)

Лимиты:

* 🆓 бесплатно — до 50 источников в одном блокноте
* ⭐️ Pro — до 300 источников

⚙️ Шаг 1. Подготовка окружения

mkdir my-knowledge-base && cd my-knowledge-base
python -m venv .venv && source .venv/bin/activate
pip install notebooklm-py==0.3.1 playwright==1.57.0
playwright install chromium


🔐 Шаг 2. Авторизация в Google (один раз)

notebooklm login


При первом запуске откроется браузер для входа в Google. После этого cookies сохраняются в storage_state.json, и повторная авторизация не нужна.

📚 Шаг 3. Проверяем доступ и смотрим свои блокноты

Создаём файл auth.py — он проверяет авторизацию и выводит все доступные блокноты.

# auth.py — сохрани и запусти
import asyncio
from notebooklm import NotebookLMClient

async def test_auth():
# from_storage() использует сохранённые куки
async with await NotebookLMClient.from_storage() as client:
print(" Авторизация успешна!\n")

notebooks = await client.notebooks.list()
print("📚 Твои блокноты:")
for nb in notebooks:
print(f" - {nb.title} (ID: {nb.id})")

asyncio.run(test_auth())


После запуска ты увидишь список всех своих блокнотов и их ID — он понадобится дальше.

💬 Шаг 4. Чат с блокнотом (RAG без галлюцинаций)

Создаём chat.py — скрипт для общения с выбранным блокнотом.

# chat.py — отправка запросов в NotebookLM
import asyncio
from notebooklm import NotebookLMClient

# ID блокнота для тестов
NOTEBOOK_ID = "NOTEBOOK_ID"

# Системный промпт для русского языка
SYSTEM_PROMPT = "Всегда отвечай на русском языке. Будь кратким и информативным."

async def ask_notebook(question: str, show_sources: bool = True):
"""Отправить вопрос в блокнот и получить ответ с информативными источниками"""
async with await NotebookLMClient.from_storage() as client:
print(f"📤 Вопрос: {question}")
print("-" * 50)

# Добавляем системный промпт к вопросу
full_question = f"{SYSTEM_PROMPT}\n\nВопрос: {question}"
result = await client.chat.ask(NOTEBOOK_ID, full_question)

print(f"📥 Ответ:\n{result.answer}")

# Выводим информативные источники
if show_sources and hasattr(result, 'references') and result.references:
# Получаем список источников блокнота для маппинга id -> title
sources = await client.sources.list(NOTEBOOK_ID)
source_map = {src.id: src for src in sources}

print("\n" + "=" * 50)
print("📚 ИСТОЧНИКИ:")
print("=" * 50)

# Группируем цитаты по номеру
seen_citations = set()
for ref in result.references:
if ref.citation_number in seen_citations:
continue
seen_citations.add(ref.citation_number)

source = source_map.get(ref.source_id)
source_title = source.title if source else "Неизвестный источник"

# Обрезаем цитату если слишком длинная
cited_text = ref.cited_text or ""
if len(cited_text) > 150:
cited_text = cited_text[:150] + "..."

print(f"\n[{ref.citation_number}] {source_title}")
print(f" 💬 \"{cited_text}\"")

return result


async def main():
# Тестовый запрос
question = input("Введите вопрос: ") if __name__ == "__main__" else "О чём этот блокнот?"
await ask_notebook(question, show_sources=False)


if __name__ == "__main__":
asyncio.run(main())

Запуск:

python chat.py
433👍19🔥11🤔1👌1🥱1🎃1
Все мы можем тупануть. Главное - вовремя исправиться😁

Я тут к общему хайпу вокруг OpenClaw присоединился и получились интересные наработки. Будет интересно в одной из следующих статей на Хабре узнать подробнее о данном звере и о том, как его подружить с Python?
🔥4414👍9😁6🤔1
🧠 Как работает агентская сетка (на примере Claude Code)

Знаю, для многих тема агентных систем до сих пор звучит как «магия из будущего». На самом деле всё довольно логично. Разберём на простом примере.

Рассмотрим на примере Claude Code.

Когда ты просишь его:
 «Изучи проект и расскажи структуру базы данных…»


Кажется, что модель сама читает весь проект и всё держит в голове.

Но на практике архитектура может выглядеть иначе.

🎯 Что реально происходит

1. Основная модель (главный агент). Формирует задачу. Например:
   Explore the project at /home/project.
Find database models, migrations, product tables...
Report with file paths and code snippets.

2. Задача передаётся субагенту

Специальный внутренний агент получает конкретную, узкую задачу:

- пройтись по директориям
- найти models/, migrations/, alembic/
- вытащить SQLAlchemy классы
- собрать ключевые фрагменты кода

3. Субагент возвращает отчёт. Уже структурированный:

- пути к файлам
- выдержки кода
- анализ связей таблиц

4. Главный агент работает только с отчётом

Он не держит в «контексте» весь репозиторий. Ему достаточно компактного summary от своего субагента.

И вот этот отчёт уже попадает в пользовательскую сессию.

🏗 Почему это важно

🔹 Экономия контекста
🔹 Масштабируемость
🔹 Возможность распараллеливания
🔹 Модульность логики

Главная модель — это оркестратор. Субагенты — специализированные исполнители.

Это и есть агентская сетка.

💻 Можно ли так сделать самому?

Да. В Python это спокойно собирается через:

- LangChain
- LangGraph
- инструменты (tools)
- кастомные функции

Упрощённая схема:

from langchain.agents import initialize_agent, Tool
from langchain.chat_models import ChatOpenAI

def explore_repo(path: str) -> str:
# логика обхода файловой системы
# поиск моделей, миграций и т.д.
return "Structured report..."

tools = [
Tool(
name="RepoExplorer",
func=explore_repo,
description="Searches project and reports DB structure"
)
]

llm = ChatOpenAI(model="gpt-4o-mini")

agent = initialize_agent(
tools,
llm,
agent="zero-shot-react-description",
verbose=True
)

agent.run("Explore /home/project and report DB structure")


Если делать более продвинутую архитектуру — лучше использовать LangGraph, где можно явно описать:

- узел «Планировщик»
- узел «Исследователь репозитория»
- узел «Анализатор моделей»
- узел «Сборщик отчёта»

И построить полноценный граф агентов.

🧩 Ключевая идея

Агентская система — это не «одна умная модель». Это:
Оркестратор + специализированные LLM + инструменты + отчёты между ними.


Главная модель не обязана знать всё. Она должна уметь правильно делегировать.
🔥199👍7
🚀 Собственная облачная LLM на 16 ГБ VRAM

Статья уже готова и сейчас находится на этапе вычитки и редактуры.

В ней я подробно показываю, как:

- поднять LLM через vLLM всего на 16 ГБ VRAM
- развернуть её на удалённом сервере с GPU
- подключить домен и настроить доступ
- превратить модель в полноценный удалённый “мозг” уровня GPT
- добавить tools, интеграции и MCP
- подключаться к ней через LangChain, LangGraph или прямыми HTTP-запросами

Без воды. Полный фарш — от покупки домена и аренды GPU до production-подключения.

🧠 Что в итоге получаем

Собственную LLM, которая:

- работает как OpenAI-совместимый API
- живёт в облаке
- масштабируется
- подключается к агентным системам
- управляется вами

И всё это — на 16 ГБ VRAM.

Без магии и без бюджета OpenAI.

Пока статья готовится к публикации, можно протестировать репозиторий:

👉 https://github.com/Yakvenalex/VllmQwen3AiProject

Подходит как для локальных нейронок, так и для обычных API-моделей.

Если вам интересно строить свою инфраструктуру, а не просто пользоваться чужими API — это будет полезный материал.

Скоро опубликую статью на Хабре 👀
🔥679👍65❤‍🔥2🎉1🥱1
Философский понедельник😅
😁25🤔11👍6🤣3🤯2👎1🔥1🤬1😢1
Если не брать Claude модели, то такой зоопарк можно поднять бесплатно. Целая куча китайских моделей. Рассказать как такое собирается?
1👍108🔥25💯113
🚀 Собственная языковая модель на 16 ГБ видеопамяти

Подробная статья о том, как развернуть свою языковую модель на сервере с графическим ускорителем уже опубликована в Академии Selectel.

Пошагово показываю:

— запуск модели на 16 ГБ видеопамяти
— развёртывание на удалённом сервере
— настройку защищённого доступа
— подключение инструментов
— превращение модели в полноценный серверный сервис

В итоге получаем собственную языковую модель, которая:

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

Без дорогостоящих ускорителей и без бюджета крупных ИИ-сервисов. На сервере от Selectel, который можно запустить за пару минут.

Подойдёт тем, кто хочет строить собственную инфраструктуру, а не только пользоваться внешними сервисами.

Реклама. АО «Селектел», erid: 2VtzqxRq3Yp
12👍10🔥9🤬1🎉1
Будущее уже наступило😊
🔥24👍7😁3😱3🤯1
🚀 Собственная языковая модель на 16 ГБ видеопамяти — продолжение скоро!

Первая часть уже вышла: в ней я подробно показал, как развернуть свою языковую модель на сервере с GPU, настроить защищённый доступ, подключить инструменты и превратить всё это в полноценный серверный сервис.

Во второй части изначально я хотел пойти дальше по классическому пути: вручную поднимать API на FastAPI, оборачивать модель, настраивать MCP, инструменты, эндпоинты и продакшен-логику. Но в процессе понял, что такой подход слишком быстро превращается в инфраструктуру ради инфраструктуры: слишком много boilerplate и ручной обвязки вокруг того, что по-хорошему должно жить в графе взаимодействия модели.

Поэтому продолжение будет про другой подход — через LangGraph CLI. И в этом как раз главный интерес: вместо того чтобы вручную собирать API-сервис, я описываю граф, инструменты и логику работы модели, а специальный рантайм сам поднимает API вокруг графа и даёт готовый веб-интерфейс для тестирования и отладки (и все это абсолютно бесплатно).

По сути, это логичное развитие первой части: сначала мы поднимаем собственную LLM-инфраструктуру, а затем переходим от ручной REST-обвязки к более нативной архитектуре LLM-сервиса.

Тем более что в предыдущих статьях на Хабре я уже писал про графовый подход — так что здесь будет уже практическое продолжение: как превратить граф на базе собственной LLM (или облачной, тут как вам удобнее) в реально работающий сервис.
🔥20👍86
24🥰6❤‍🔥4👎2😎1
AI-кодинг наглядно😂
2😁42🤣126🐳3👏2🗿1
Кейс: Идеальное создание вакансий через ИИ

Задача: Превратить «кривое» описание от пользователя в красиво оформленную и структурированную вакансию в базе данных.

Раньше создание вакансии висело на AI-агенте с кучей тулзов. Это превращалось в бесконечные циклы: дорого, медленно и с галлюцинациями в ID городов.

Как я это решил (схема на фото):

1. Pre-fetching вместо Tools. Первый узел — обычный скрипт. Он заранее берет из БД справочники (города, скиллы) и кладет их в State.

2. Один запрос. Нейронка получает текст + готовые списки ID. Задача: «Выбери из списка и верни JSON». Никаких метаний и лишних вызовов.

3. Pydantic-валидатор. Если модель ошиблась в ID — граф сам кидает её на круг исправления с описанием ошибки.

4. Чистый финал. Когда JSON идеален, скрипт делает POST в API.

Результат:

🚀 Скорость выше в 3-4 раза.
📉 Расходы на токены упали (минус агентский оверхед).
🛡 В базе — только валидные данные без «фантазий» ИИ.

Агенты — для сложной аналитики, детерминированный граф — для четкого бизнеса. 🛠
👍126🔥43👏2
Активно готовлю материал к новой статье. Кто угадает где такая красота автоматически генерируется?😏

PS. Ответ в обсуждении 👇
3🔥16👍63🤯2
Кто уже обкатал фичу? Как вам?🗣
🔥6🎉1🤩1
🎙 Микро-Voice-to-Text за час: как я подружил зажатую кнопку с локальным гигантом

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

Задача: Хотелось моментально переводить голос в текст в любом приложении (будь то блокнот, браузер или Telegram) без танцев с бубном и облачными лагами.

Что имеем:

В наличии сервер с 8 ГБ видеопамяти. Этого добра часто хватает с запасом для многих Open Source моделей.

Решение за 60 минут:

1. Основа (5 минут): Поднял локальный faster-whisper (Large-v3). Он идеально лег на 8 ГБ, работает быстро и спокойно выдерживает нагрузку, если кидать задачи пачками. Самое крутое — если есть железо, поднимается за пару минут через стандартный контейнер.

2. Механика (40 минут): Написал простой Python-скрипт-«прослушку». Как только я зажимаю кнопку Scroll Lock — скрипт начинает писать временный аудиофайл. Отпускаю кнопку — запись останавливается.

3. Транскрибация (10 минут): Свежий аудиофайл улетает на локальный эндпоинт виспера. Кстати, тут важный момент: если есть хотя бы 6 ГБ видеопамяти, модель буквально «летает» — расшифровка занимает доли секунды.

4. Финал (5 минут): Полученный текст через простую библиотеку автоматически вставляется прямо в то место, где у меня стоял курсор.

Итог:

Сижу, зажимаю Scroll Lock, говорю пару фраз, отпускаю — и текст уже в поле ввода. Никаких платных API, никакой отправки аудио в "облака" и задержек.

Мораль:

Если у вас завалялся сервер с видеопамятью от 6 ГБ, не обязательно гонять там только тяжелые LLM. Такие утилитарные вещи, как локальный Voice-to-Text, экономят уйму времени и собираются за час. Это тот случай, когда маленькая автоматизация делает большое дело. 🔥
🔥47👍10🤯31🤔1