Вот 🔥 очень простой и наглядный пример асинхронности в Python с
⚡️ Пример: Асинхронный vs Синхронный вызов
🔍 Что происходит?
* Синхронно: задачи идут одна за другой → итог 4 секунды.
* Асинхронно: обе задачи запускаются одновременно → итог 2 секунды.
---
## 📦 Вывод для Telegram-поста
Подпишись 👉🏻 @KodduuPython 🤖
asyncio. Демонстрация, как async работает быстрее, чем обычный sleep.⚡️ Пример: Асинхронный vs Синхронный вызов
import asyncio
import time
# Синхронная версия
def sync_task(name, delay):
print(f"[{name}] Начинаю задачу")
time.sleep(delay)
print(f"[{name}] Закончил через {delay} сек")
# Асинхронная версия
async def async_task(name, delay):
print(f"[{name}] Начинаю задачу")
await asyncio.sleep(delay)
print(f"[{name}] Закончил через {delay} сек")
# Сравнение
def run_sync():
start = time.time()
sync_task("A", 2)
sync_task("B", 2)
print(f"⏱️ Синхронно заняло {time.time() - start:.2f} сек")
async def run_async():
start = time.time()
await asyncio.gather(
async_task("A", 2),
async_task("B", 2),
)
print(f"⏱️ Асинхронно заняло {time.time() - start:.2f} сек")
# Запуск
if __name__ == "__main__":
print("=== Синхронный запуск ===")
run_sync()
print("\n=== Асинхронный запуск ===")
asyncio.run(run_async())
🔍 Что происходит?
* Синхронно: задачи идут одна за другой → итог 4 секунды.
* Асинхронно: обе задачи запускаются одновременно → итог 2 секунды.
---
## 📦 Вывод для Telegram-поста
Синхронность:
[Task A] Начинаю задачу
[Task A] Закончил через 2 сек
[Task B] Начинаю задачу
[Task B] Закончил через 2 сек
⏱️ Синхронно заняло 4.00 сек
Асинхронность:
[Task A] Начинаю задачу
[Task B] Начинаю задачу
[Task A] Закончил через 2 сек
[Task B] Закончил через 2 сек
⏱️ Асинхронно заняло 2.00 сек
Подпишись 👉🏻 @KodduuPython 🤖
Вот второй, тоже 🔥наглядный пример: асинхронная загрузка нескольких URLов. Он отлично показывает, как
⚡️ Пример: Асинхронная загрузка страниц
🧠 Что это демонстрирует
* Каждое
* Даже если 1 сайт тормозит (например,
* Всё работает одновременно, а не "по очереди".
📦 Как это будет выглядеть в Telegram
Если бы это был синхронный код — заняло бы 1 + 2 + 3 = 6 секунд, а не 3. Вот и вся магия асинхронности ✨
Подпишись 👉🏻 @KodduuPython 🤖
asyncio + aiohttp позволяет скачать сразу кучу страниц в разы быстрее, чем по одной.⚡️ Пример: Асинхронная загрузка страниц
import asyncio
import aiohttp
import time
urls = [
"https://example.com",
"https://httpbin.org/delay/2",
"https://httpbin.org/delay/3",
"https://httpbin.org/delay/1",
]
# Асинхронная загрузка
async def fetch(session, url):
print(f"📡 Загружаю: {url}")
async with session.get(url) as response:
text = await response.text()
print(f"✅ Готово: {url} ({len(text)} символов)")
return text
async def main():
start = time.time()
async with aiohttp.ClientSession() as session:
tasks = [fetch(session, url) for url in urls]
await asyncio.gather(*tasks)
print(f"\n⏱️ Все загружено за {time.time() - start:.2f} сек")
if __name__ == "__main__":
asyncio.run(main())
🧠 Что это демонстрирует
* Каждое
fetch() ждет ответ от сервера, но другие задачи не простаивают.* Даже если 1 сайт тормозит (например,
delay/3), остальные уже выполняются.* Всё работает одновременно, а не "по очереди".
📦 Как это будет выглядеть в Telegram
📡 Загружаю: https://example.com
📡 Загружаю: https://httpbin.org/delay/2
📡 Загружаю: https://httpbin.org/delay/3
📡 Загружаю: https://httpbin.org/delay/1
✅ Готово: https://example.com (1256 символов)
✅ Готово: https://httpbin.org/delay/1 (437 символов)
✅ Готово: https://httpbin.org/delay/2 (437 символов)
✅ Готово: https://httpbin.org/delay/3 (437 символов)
⏱️ Все загружено за 3.00 сек
Если бы это был синхронный код — заняло бы 1 + 2 + 3 = 6 секунд, а не 3. Вот и вся магия асинхронности ✨
Подпишись 👉🏻 @KodduuPython 🤖
🎯 Как встроить семантический кэш в RAG и перестать зря гонять LLM
Ускорь ответы, сократи расходы и добавь ум в своего ассистента! 💡
Вот реальный пример кода, который:
* 🔐 Сохраняет пары "вопрос — ответ"
* 🧠 Находит похожие вопросы через cosine similarity
* ⚡️ Возвращает готовый ответ без вызова модели или retrieval
👇 Код:
🧠 Как это помогает в RAG:
* 💥 Если похожий вопрос уже был — мы возвращаем ответ мгновенно
* 💸 Экономим токены и не делаем повторный вызов LLM
* 📚 Учится на лету — чем больше вопросов, тем больше кэш
Пример использования:
Подпишись 👉🏻 @KodduuPython 🤖
Ускорь ответы, сократи расходы и добавь ум в своего ассистента! 💡
Вот реальный пример кода, который:
* 🔐 Сохраняет пары "вопрос — ответ"
* 🧠 Находит похожие вопросы через cosine similarity
* ⚡️ Возвращает готовый ответ без вызова модели или retrieval
👇 Код:
from sentence_transformers import SentenceTransformer, util
import re
import hashlib
import logging
logger = logging.getLogger(__name__)
def short_hash(text: str) -> str:
return hashlib.md5(text.encode("utf-8")).hexdigest()[:10]
class SemanticCache:
def __init__(self, model_name="paraphrase-multilingual-mpnet-base-v2"):
self.model = SentenceTransformer(model_name)
self.entries = [] # список словарей {"question": ..., "answer": ..., "embedding": ..., "hash": ...}
self.hash_map = {} # hash → normalized question
def normalize(self, text: str) -> str:
text = text.lower()
text = re.sub(r"[^\w\s]", "", text)
text = re.sub(r"\s+", " ", text).strip()
return text
def add(self, question: str, answer: str) -> str:
normalized = self.normalize(question)
embedding = self.model.encode(normalized, convert_to_tensor=True)
h = short_hash(normalized)
self.entries.append({
"question": question,
"normalized": normalized,
"answer": answer,
"embedding": embedding,
"hash": h
})
self.hash_map[h] = normalized
return h
def get(self, query: str, threshold: float = 0.89) -> str | None:
if not self.entries:
return None
normalized_query = self.normalize(query)
query_embedding = self.model.encode(normalized_query, convert_to_tensor=True)
scores = [util.pytorch_cos_sim(query_embedding, e["embedding"]).item() for e in self.entries]
best_idx = max(range(len(scores)), key=lambda i: scores[i])
if scores[best_idx] >= threshold:
return self.entries[best_idx]["answer"]
return None
def remove_by_hash(self, h: str):
before = len(self.entries)
self.entries = [e for e in self.entries if e["hash"] != h]
after = len(self.entries)
if before == after:
logger.info(f"❌ Хэш {h} не найден.")
else:
logger.info(f"🗑 Удалено {before - after} записей по хэшу {h}")
self.hash_map.pop(h, None)
🧠 Как это помогает в RAG:
* 💥 Если похожий вопрос уже был — мы возвращаем ответ мгновенно
* 💸 Экономим токены и не делаем повторный вызов LLM
* 📚 Учится на лету — чем больше вопросов, тем больше кэш
Пример использования:
cache = SemanticCache()
cache.add("Как работает кэш?", "Кэш хранит ответы на похожие вопросы.")
answer = cache.get("Объясни что такое кеширование") # ← вернёт готовый ответ
Подпишись 👉🏻 @KodduuPython 🤖
Forwarded from AIGENTTO
Новый обязательный вопрос на интервью разработчиков
Сейчас ведём найм backend-разработчиков, и на screening-интервью я добавил новый обязательный вопрос: А как вы используете LLM или IDE с LLM для написания кода?
Отвечать на такой вопрос — почти не использую, всё пишу сам — это примерно как отвечать 100 лет назад, что автомобиль пока не использую, лошадь надёжнее и понятнее.
LLM и всякие Cursor, Anthropic уже несколько лет с нами, вы просто обязаны их использовать для увеличения своей производительности 🚀
👉 Первый уровень — это обычно просто web-чат с ChatGPT по конкретному коду
👉 Второй уровень — это IDE с настройкой system prompt под свой проект (чтобы оно не тупило и не делало плохие штуки)
👉 Третий уровень — это подключение всяких JIRA, Wiki через MCP, чтобы бизнес-документация сама бралась в LLM, и задачки в JIRA сами двигались по workflow
Второй и третий уровень требуют усилий по настройке и тюнингу под ваши проекты, но если вы этого не сделаете, то и в XXI веке всё ещё будете использовать надёжную, хорошую, проверенную веками лошадь 🐴
Подпишись 👉🏻 @aigentto 🤖
Сейчас ведём найм backend-разработчиков, и на screening-интервью я добавил новый обязательный вопрос: А как вы используете LLM или IDE с LLM для написания кода?
Отвечать на такой вопрос — почти не использую, всё пишу сам — это примерно как отвечать 100 лет назад, что автомобиль пока не использую, лошадь надёжнее и понятнее.
LLM и всякие Cursor, Anthropic уже несколько лет с нами, вы просто обязаны их использовать для увеличения своей производительности 🚀
👉 Первый уровень — это обычно просто web-чат с ChatGPT по конкретному коду
👉 Второй уровень — это IDE с настройкой system prompt под свой проект (чтобы оно не тупило и не делало плохие штуки)
👉 Третий уровень — это подключение всяких JIRA, Wiki через MCP, чтобы бизнес-документация сама бралась в LLM, и задачки в JIRA сами двигались по workflow
Второй и третий уровень требуют усилий по настройке и тюнингу под ваши проекты, но если вы этого не сделаете, то и в XXI веке всё ещё будете использовать надёжную, хорошую, проверенную веками лошадь 🐴
Подпишись 👉🏻 @aigentto 🤖
🔥3❤2
Вот третий 🔥наглядный пример — асинхронный Telegram-бот на `aiogram`, который параллельно обрабатывает несколько пользователей. Отлично показывает, как
🤖 Асинхронный Telegram-бот на
⚙️ Как это работает
1. Пользователь пишет
2. Через 5 секунд отвечает "✅ Готово!"
3. Если 10 пользователей напишут одновременно — каждый получит ответ без задержек, параллельно.
🧪 Проверь сам
1. Запусти бота.
2. Открой 2 Telegram-аккаунта (или попроси друга).
3. Одновременно напиши
4. Каждый увидит мгновенный ответ, без блокировки друг друга.
🤔 Почему это важно
Если бы бот был синхронным, то пока обрабатывался один запрос (5 сек), все остальные бы тупо ждали. А с
Подпишись 👉🏻 @KodduuPython 🤖
asyncio даёт каждому пользователю "свою сессию", и никто не блокируется.🤖 Асинхронный Telegram-бот на
aiogramfrom aiogram import Bot, Dispatcher, types
from aiogram.types import Message
from aiogram.utils import executor
import asyncio
import logging
API_TOKEN = 'YOUR_TELEGRAM_BOT_TOKEN'
logging.basicConfig(level=logging.INFO)
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
# Эмуляция долгой операции (например, генерация отчета)
async def long_operation(user_id: int):
await bot.send_message(user_id, "⌛️ Обрабатываю ваш запрос (5 сек)...")
await asyncio.sleep(5)
await bot.send_message(user_id, "✅ Готово!")
@dp.message_handler(commands=["start", "go"])
async def handle_command(message: Message):
await long_operation(message.from_user.id)
if __name__ == "__main__":
executor.start_polling(dp, skip_updates=True)
⚙️ Как это работает
1. Пользователь пишет
/start — бот отвечает "⌛️ Обрабатываю..."2. Через 5 секунд отвечает "✅ Готово!"
3. Если 10 пользователей напишут одновременно — каждый получит ответ без задержек, параллельно.
🧪 Проверь сам
1. Запусти бота.
2. Открой 2 Telegram-аккаунта (или попроси друга).
3. Одновременно напиши
/start.4. Каждый увидит мгновенный ответ, без блокировки друг друга.
🤔 Почему это важно
Если бы бот был синхронным, то пока обрабатывался один запрос (5 сек), все остальные бы тупо ждали. А с
aiogram всё идёт в параллель, благодаря async def.Подпишись 👉🏻 @KodduuPython 🤖
❤1
Вот пример сложного и реалистичного случая асинхронщины, где всё может пойти не так — и это отлично демонстрирует, почему нужно уметь работать с ошибками, таймаутами и отменой задач в `asyncio`.
💣 Сценарий: параллельная загрузка API, где всё может сломаться
* Несколько API-эндпоинтов вызываются параллельно.
* Некоторые из них "висят", некоторые возвращают ошибку.
* Ты должен:
✅ получить успешные,
⚠️ обработать ошибки,
⏱️ отменить долгие.
⚙️ Код: асинхронная загрузка с таймаутами, отменой и ошибками
📦 Telegram-вывод:
🧠 Что демонстрирует
* 🔄
* ⏱️ Таймауты контролируют "висящие" запросы.
* ❌ Ошибки ловятся явно, без падения всего процесса.
* 🤯 Этот паттерн нужен в реальных ботах, где:
* LLM может зависнуть,
* вебхуки не отвечают,
* юзер отменил команду,
* Slack/Jira/GitHub API дали 500.
Подпишись 👉🏻 @KodduuPython 🤖
💣 Сценарий: параллельная загрузка API, где всё может сломаться
* Несколько API-эндпоинтов вызываются параллельно.
* Некоторые из них "висят", некоторые возвращают ошибку.
* Ты должен:
✅ получить успешные,
⚠️ обработать ошибки,
⏱️ отменить долгие.
⚙️ Код: асинхронная загрузка с таймаутами, отменой и ошибками
import asyncio
import aiohttp
import random
urls = [
"https://httpbin.org/delay/1", # быстрый
"https://httpbin.org/delay/5", # медленный (возможен таймаут)
"https://httpbin.org/status/500", # ошибка сервера
"https://httpbin.org/delay/2", # нормальный
]
async def fetch(session, url):
try:
timeout = aiohttp.ClientTimeout(total=3) # 3 секунды таймаут на каждый запрос
async with session.get(url, timeout=timeout) as resp:
if resp.status != 200:
raise Exception(f"Ошибка {resp.status}")
data = await resp.text()
print(f"✅ Успешно: {url[:30]}... ({len(data)} символов)")
return data
except asyncio.TimeoutError:
print(f"⏱️ Таймаут: {url}")
except Exception as e:
print(f"❌ Ошибка: {url} — {e}")
async def main():
async with aiohttp.ClientSession() as session:
tasks = [fetch(session, url) for url in urls]
results = await asyncio.gather(*tasks, return_exceptions=True)
print("\n🏁 Готово.")
if __name__ == "__main__":
asyncio.run(main())
📦 Telegram-вывод:
✅ Успешно: https://httpbin.org/delay/1... (437 символов)
⏱️ Таймаут: https://httpbin.org/delay/5
❌ Ошибка: https://httpbin.org/status/500 — Ошибка 500
✅ Успешно: https://httpbin.org/delay/2... (437 символов)
🏁 Готово.
🧠 Что демонстрирует
* 🔄
gather(..., return_exceptions=True) позволяет не падать при ошибке.* ⏱️ Таймауты контролируют "висящие" запросы.
* ❌ Ошибки ловятся явно, без падения всего процесса.
* 🤯 Этот паттерн нужен в реальных ботах, где:
* LLM может зависнуть,
* вебхуки не отвечают,
* юзер отменил команду,
* Slack/Jira/GitHub API дали 500.
Подпишись 👉🏻 @KodduuPython 🤖
❤2
🌌 Крутая 3D-спираль на Python с Pygame — живой движок прямо у тебя на экране!
📌 Простая 3D-спираль с проекцией на 2D экран, вращающаяся в реальном времени.
📌 Использует Pygame для визуализации и базовую математику для 3D-проекций.
📌 Установи pygame: pip install pygame
📌 Запусти и наслаждайся плавной анимацией!
Подпишись 👉🏻 @KodduuPython 🤖
import pygame
import math
import sys
pygame.init()
screen = pygame.display.set_mode((600, 600))
clock = pygame.time.Clock()
points = []
for i in range(1000):
angle = i * 0.1
x = 200 * math.cos(angle)
y = 200 * math.sin(angle)
z = i * 0.5
points.append([x, y, z])
def project(x, y, z, screen_width, screen_height, fov, viewer_distance):
factor = fov / (viewer_distance + z)
x = x * factor + screen_width / 2
y = -y * factor + screen_height / 2
return int(x), int(y)
angle = 0
fov = 256
viewer_distance = 4
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
screen.fill((10, 10, 30))
angle += 0.01
for p in points:
# вращаем точки вокруг оси Y
x = p[0] * math.cos(angle) - p[2] * math.sin(angle)
z = p[0] * math.sin(angle) + p[2] * math.cos(angle)
y = p[1]
px, py = project(x, y, z, 600, 600, fov, viewer_distance)
shade = max(0, min(255, int(255 - z)))
pygame.draw.circle(screen, (shade, shade, 255), (px, py), 2)
pygame.display.flip()
clock.tick(60)
📌 Простая 3D-спираль с проекцией на 2D экран, вращающаяся в реальном времени.
📌 Использует Pygame для визуализации и базовую математику для 3D-проекций.
📌 Установи pygame: pip install pygame
📌 Запусти и наслаждайся плавной анимацией!
Подпишись 👉🏻 @KodduuPython 🤖
❤1⚡1
🧠 Сделай ИИ-аватара из своего лица за 20 секунд
Генерируем мультикартинку в стиле Pixar с помощью OpenAI + PIL
📌 Берёт твоё фото, стилизует его под мультяшку и показывает
📌 Используется
📌 Установи:
📌 Нужно своё фото (портрет) и OpenAI API-ключ
📌 Работает на GPT-4+ DALL·E через OpenAI API
Подпишись 👉🏻 @KodduuPython 🤖
Генерируем мультикартинку в стиле Pixar с помощью OpenAI + PIL
from PIL import Image, ImageDraw, ImageFont
import openai
import requests
from io import BytesIO
openai.api_key = "sk-..." # вставь свой ключ
def cartoonify(image_url, style="Pixar-style 3D render"):
response = openai.Image.create_variation(
image=openai.Image.create_edit(
image=openai.Image.from_url(image_url),
prompt=style,
n=1,
size="512x512"
)
)
return response['data'][0]['url']
img_url = "https://i.imgur.com/your_photo.jpg" # замени на своё фото
new_img_url = cartoonify(img_url)
img = Image.open(BytesIO(requests.get(new_img_url).content))
img.show()
📌 Берёт твоё фото, стилизует его под мультяшку и показывает
📌 Используется
openai, PIL, requests📌 Установи:
pip install openai pillow requests📌 Нужно своё фото (портрет) и OpenAI API-ключ
📌 Работает на GPT-4+ DALL·E через OpenAI API
Подпишись 👉🏻 @KodduuPython 🤖
🧲 Курсор как магнит: тянем шарик мышкой без кликов!
Интерактивная физика с
📌 Шарик "прилипает" к курсору и двигается с инерцией
📌 Используется только
📌 Установи:
📌 Подходит для визуализации физики или мини-игры
Подпишись 👉🏻 @KodduuPython 🤖
Интерактивная физика с
pygame за 25 строкimport pygame, sys
pygame.init()
screen = pygame.display.set_mode((600, 400))
clock = pygame.time.Clock()
x, y, vx, vy = 300, 200, 0, 0
while True:
for e in pygame.event.get():
if e.type == pygame.QUIT:
pygame.quit(); sys.exit()
mx, my = pygame.mouse.get_pos()
dx, dy = mx - x, my - y
ax, ay = dx * 0.01, dy * 0.01
vx += ax; vy += ay
vx *= 0.9; vy *= 0.9
x += vx; y += vy
screen.fill((30, 30, 40))
pygame.draw.circle(screen, (255, 100, 100), (int(x), int(y)), 20)
pygame.display.flip()
clock.tick(60)
📌 Шарик "прилипает" к курсору и двигается с инерцией
📌 Используется только
pygame📌 Установи:
pip install pygame📌 Подходит для визуализации физики или мини-игры
Подпишись 👉🏻 @KodduuPython 🤖
❤1
🧘 Успокаивающий дыхательный таймер
Текстовый цикл «вдох — пауза — выдох» прямо в терминале
📌 Показывает дыхательные фазы с точками — помогает успокоиться
📌 Идеален для короткой медитации в перерывах
📌 Использует только стандартный
📌 Без зависимостей, без графики — минимализм и польза
Подпишись 👉🏻 @KodduuPython 🤖
Текстовый цикл «вдох — пауза — выдох» прямо в терминале
import time
def breathe(cycle=3):
while True:
for phase, secs in [("Вдох", 4), ("Задержка", 2), ("Выдох", 6), ("Пауза", 2)]:
print(f"{phase}... ", end="", flush=True)
for i in range(secs):
print(".", end="", flush=True)
time.sleep(1)
print()
try:
breathe()
except KeyboardInterrupt:
print("\nВы завершили практику 🙏")
📌 Показывает дыхательные фазы с точками — помогает успокоиться
📌 Идеален для короткой медитации в перерывах
📌 Использует только стандартный
time📌 Без зависимостей, без графики — минимализм и польза
Подпишись 👉🏻 @KodduuPython 🤖
👨💻2
Forwarded from AIGENTTO
Еще одна невероятная способность LLM 🔥
Есть очевидная, но достаточно мало используемая способность LLM — это возможность восстанавливать битый текст.
В нашем случае есть расчетный лист с очень плохим качеством в виде пиксельного PDF. Распознавая его в текст, мы получаем битый текст (70% может быть битым), но LLM все воспринимает как последовательность токенов, и имея даже 30% информации, она достаточно легко догадывается, что было в 70% битых процентах.
Если у вас есть задачи, где входящая информация не качественная, то использование LLM — самый лучший и надежный вариант для ее восстановления.
Древние рукописи с бересты можно восстановить🙂
Подпишись 👉🏻 @aigentto 🤖
Есть очевидная, но достаточно мало используемая способность LLM — это возможность восстанавливать битый текст.
В нашем случае есть расчетный лист с очень плохим качеством в виде пиксельного PDF. Распознавая его в текст, мы получаем битый текст (70% может быть битым), но LLM все воспринимает как последовательность токенов, и имея даже 30% информации, она достаточно легко догадывается, что было в 70% битых процентах.
Если у вас есть задачи, где входящая информация не качественная, то использование LLM — самый лучший и надежный вариант для ее восстановления.
Древние рукописи с бересты можно восстановить🙂
Подпишись 👉🏻 @aigentto 🤖
❤2
🧠 Мини-LLM своими руками: предсказание текста с нуля
Токенизация, матрицы, softmax — всё на чистом Python
📌 Минималистичная языковая модель, обученная предсказывать след. символ
📌 Используются
📌 Установи:
📌 По сути — крошечный LLM на пальцах, работает за 2 секунды
Подпишись 👉🏻 @KodduuPython 🤖
Токенизация, матрицы, softmax — всё на чистом Python
import numpy as np
text = "hello world"
chars = sorted(set(text))
stoi = {ch: i for i, ch in enumerate(chars)}
itos = {i: ch for ch, i in stoi.items()}
vocab_size = len(chars)
# Подготовка обучающих данных
xs = [stoi[ch] for ch in text[:-1]]
ys = [stoi[ch] for ch in text[1:]]
# One-hot
X = np.eye(vocab_size)[xs]
Y = np.array(ys)
# Весовая матрица
W = np.random.randn(vocab_size, vocab_size) * 0.1
# Тренировка
for epoch in range(500):
logits = X @ W
probs = np.exp(logits) / np.exp(logits).sum(axis=1, keepdims=True)
loss = -np.log(probs[range(len(Y)), Y]).mean()
# Градиент
probs[range(len(Y)), Y] -= 1
grad = X.T @ probs / len(Y)
W -= 0.5 * grad # шаг обучения
# Генерация
ix = stoi["h"]
for _ in range(10):
x = np.eye(vocab_size)[ix]
logits = x @ W
probs = np.exp(logits) / np.exp(logits).sum()
ix = np.random.choice(vocab_size, p=probs)
print(itos[ix], end="")
📌 Минималистичная языковая модель, обученная предсказывать след. символ
📌 Используются
numpy, softmax, one-hot, градиентный спуск📌 Установи:
pip install numpy📌 По сути — крошечный LLM на пальцах, работает за 2 секунды
Подпишись 👉🏻 @KodduuPython 🤖
🧬 Генетический алгоритм на минималках
Эволюционируем строку до цели без нейросетей
📌 Эмулирует "эволюцию" строки путём мутаций и отбора
📌 Без библиотек, чистый Python и немного теории Дарвина
📌 Отличный способ понять основы генетических алгоритмов
📌 Работает быстро, прикольно смотреть за процессом
Подпишись 👉🏻 @KodduuPython 🤖
Эволюционируем строку до цели без нейросетей
import random
TARGET = "hello world"
CHARS = "abcdefghijklmnopqrstuvwxyz "
def mutate(s):
i = random.randrange(len(s))
return s[:i] + random.choice(CHARS) + s[i+1:]
def fitness(s):
return sum(a == b for a, b in zip(s, TARGET))
def evolve():
population = [''.join(random.choices(CHARS, k=len(TARGET))) for _ in range(100)]
for gen in range(1000):
population.sort(key=lambda x: -fitness(x))
print(f"{gen:3}: {population[0]} ({fitness(population[0])})")
if population[0] == TARGET:
break
next_gen = population[:10]
while len(next_gen) < 100:
parent = random.choice(next_gen)
child = mutate(parent)
next_gen.append(child)
population = next_gen
evolve()
📌 Эмулирует "эволюцию" строки путём мутаций и отбора
📌 Без библиотек, чистый Python и немного теории Дарвина
📌 Отличный способ понять основы генетических алгоритмов
📌 Работает быстро, прикольно смотреть за процессом
Подпишись 👉🏻 @KodduuPython 🤖
🔒 Безопасная работа с временными файлами в Python
📌 Зачем это нужно:
При записи конфигов, отчётов, логов и кэшей важно не допустить порчи файлов при сбое питания, исключении или параллельной записи. Этот приём — промышленный стандарт для надёжной записи (используется, например, в системах сборки и редакторах кода).
🛠 Библиотеки: только стандартная библиотека Python 🐍.
Подпишись 👉🏻 @KodduuPython 🤖
import tempfile
import shutil
from pathlib import Path
def safe_write_to_file(target_path: Path, content: str):
"""Атомарная запись в файл: безопасна при сбоях и многопоточности."""
target_path = Path(target_path)
target_path.parent.mkdir(parents=True, exist_ok=True)
with tempfile.NamedTemporaryFile("w", delete=False, dir=target_path.parent, encoding="utf-8") as tmp:
tmp.write(content)
temp_path = Path(tmp.name)
temp_path.replace(target_path) # атомарно заменяет, даже если файл уже существует
# Пример использования
if __name__ == "__main__":
safe_write_to_file("data/config.json", '{"debug": false}')
📌 Зачем это нужно:
При записи конфигов, отчётов, логов и кэшей важно не допустить порчи файлов при сбое питания, исключении или параллельной записи. Этот приём — промышленный стандарт для надёжной записи (используется, например, в системах сборки и редакторах кода).
🛠 Библиотеки: только стандартная библиотека Python 🐍.
Подпишись 👉🏻 @KodduuPython 🤖
❤2
🌐 Повтор HTTP-запроса с логированием и бэкофом
📌 **Зачем это нужно**:
Нестабильные внешние API могут временно «падать» или отвечать с ошибками. Этот код делает повторные попытки с экспоненциальной задержкой и логирует проблему. Отлично подходит для API-клиентов, ETL-сборщиков и мониторинга.
🛠
Подпишись 👉🏻 @KodduuPython 🤖
import logging
import time
import requests
from requests.exceptions import RequestException
logging.basicConfig(level=logging.INFO)
def fetch_with_retry(url, retries=3, backoff=2):
"""Повторяет запрос с увеличением интервала в случае ошибки."""
for attempt in range(1, retries + 1):
try:
response = requests.get(url, timeout=5)
response.raise_for_status()
return response.text
except RequestException as e:
logging.warning(f"Attempt {attempt} failed: {e}")
if attempt < retries:
time.sleep(backoff ** attempt)
else:
logging.error("All attempts failed")
raise
# Пример использования
if __name__ == "__main__":
content = fetch_with_retry("https://httpbin.org/status/503") # измените на нужный URL
print(content)
📌 **Зачем это нужно**:
Нестабильные внешние API могут временно «падать» или отвечать с ошибками. Этот код делает повторные попытки с экспоненциальной задержкой и логирует проблему. Отлично подходит для API-клиентов, ETL-сборщиков и мониторинга.
🛠
pip install requestsПодпишись 👉🏻 @KodduuPython 🤖
🕒 Фоновый таймер с автоматической остановкой
📌 Зачем это нужно:
Используется для повторяющихся задач в фоне — опрос сервисов, автообновление кэша, heartbeat. Не блокирует основной поток и автоматически завершает выполнение.
🛠 Только стандартная библиотека Python:
Подпишись 👉🏻 @KodduuPython 🤖
import threading
import time
import logging
logging.basicConfig(level=logging.INFO)
class RepeatingTimer:
def __init__(self, interval, function, max_runs=None):
self.interval = interval
self.function = function
self.max_runs = max_runs
self._counter = 0
self._stop_event = threading.Event()
self._thread = threading.Thread(target=self._run, daemon=True)
def _run(self):
while not self._stop_event.is_set():
self.function()
self._counter += 1
if self.max_runs and self._counter >= self.max_runs:
break
time.sleep(self.interval)
def start(self):
self._thread.start()
def stop(self):
self._stop_event.set()
self._thread.join()
# Пример использования
if __name__ == "__main__":
def say_hi():
logging.info("👋 Привет!")
timer = RepeatingTimer(interval=2, function=say_hi, max_runs=3)
timer.start()
timer._thread.join() # или time.sleep(...) в реальных скриптах
📌 Зачем это нужно:
Используется для повторяющихся задач в фоне — опрос сервисов, автообновление кэша, heartbeat. Не блокирует основной поток и автоматически завершает выполнение.
🛠 Только стандартная библиотека Python:
threading, time, logging ✅Подпишись 👉🏻 @KodduuPython 🤖
❤3
👉 4 курса 207 уроков 504 теста и 171 задача 🔥
Именно такой объем в программе Junior Python Developer и Data Scientist +интервью тесты 👈👈👈
Все это со скидкой 50% до конца июня 👏
Подпишись 👉🏻 @KodduuPython 🤖
Именно такой объем в программе Junior Python Developer и Data Scientist +интервью тесты 👈👈👈
Все это со скидкой 50% до конца июня 👏
Подпишись 👉🏻 @KodduuPython 🤖
Forwarded from AIGENTTO
Хорошая подборка MCP серверов
Полезные для кодинга в Cursor/Anthropic MCP сервера. Так же можно применять и для своих систем Agentic AI.
👉 https://github.com/punkpeye/awesome-mcp-servers
👉 https://github.com/modelcontextprotocol/servers
💬 telegram-bot-mcp
🔧 Категория: Communication
Кейс: агент получает сообщение от пользователя с задачей ("подскажи, как это починить") → распознаёт intent → отвечает или делегирует другому агенту.
📌 Полезно для: запуска цепочек из Telegram, двустороннего общения, получения задач от реальных людей.
📚 wikipedia-mcp
🔧 Категория: Knowledge
Кейс: агент-помощник по обучению или ассистент для доклада автоматически ищет и вставляет пояснения или определения из Wikipedia.
📌 Полезно для: автоответов, генерации контекста, справки по терминам.
📊 notion-mcp
🔧 Категория: Notes & Docs
Кейс: агент-планировщик проекта добавляет задачи в Notion после обсуждения в Slack или анализа документа.
📌 Полезно для: ведения документации, действий после обсуждений, напоминаний и отчетов.
☁️ github-mcp
🔧 Категория: Developer Tools
Кейс: DevOps-агент обнаруживает баг в тестах, создаёт issue, затем другой агент комментирует и предлагает PR.
📌 Полезно для: автогенерации issue, отслеживания багов, CI/CD по запросу от LLM.
📅 google-calendar-mcp
🔧 Категория: Events & Calendars
Кейс: агент-секретарь анализирует переписку, предлагает время встречи, и сразу бронирует слот в календаре.
📌 Полезно для: интеграции с реальным расписанием, агент-планировщик.
🌍 serpapi-mcp
🔧 Категория: Internet APIs
Кейс: агент-журналист собирает свежую информацию по теме (например, новости, статистику) через Google Search API.
📌 Полезно для: агентов-исследователей, real-time актуализация информации.
📈 prometheus-mcp
🔧 Категория: Monitoring
Кейс: агент-монитор следит за нагрузкой на сервис, и если CPU > 80% → вызывает алерт-агента в Telegram.
📌 Полезно для: автономного мониторинга, оповещений, self-healing-сценариев.
📮 rabbitmq-mcp
🔧 Категория: Messaging Queues
Кейс: один агент планирует задачи, другой выполняет — они обмениваются сообщениями через очередь.
📌 Полезно для: построения очередей заданий между агентами, масштабирования.
🧠 replicate-mcp
🔧 Категория: ML & AI
Кейс: агент вызывает внешнюю модель — например, генерацию изображения, голоса или сегментацию.
📌 Полезно для: мультимодальных агентов, генеративных задач (text-to-image/audio).
Подпишись 👉🏻 @aigentto 🤖
Полезные для кодинга в Cursor/Anthropic MCP сервера. Так же можно применять и для своих систем Agentic AI.
👉 https://github.com/punkpeye/awesome-mcp-servers
👉 https://github.com/modelcontextprotocol/servers
💬 telegram-bot-mcp
🔧 Категория: Communication
Кейс: агент получает сообщение от пользователя с задачей ("подскажи, как это починить") → распознаёт intent → отвечает или делегирует другому агенту.
📌 Полезно для: запуска цепочек из Telegram, двустороннего общения, получения задач от реальных людей.
📚 wikipedia-mcp
🔧 Категория: Knowledge
Кейс: агент-помощник по обучению или ассистент для доклада автоматически ищет и вставляет пояснения или определения из Wikipedia.
📌 Полезно для: автоответов, генерации контекста, справки по терминам.
📊 notion-mcp
🔧 Категория: Notes & Docs
Кейс: агент-планировщик проекта добавляет задачи в Notion после обсуждения в Slack или анализа документа.
📌 Полезно для: ведения документации, действий после обсуждений, напоминаний и отчетов.
☁️ github-mcp
🔧 Категория: Developer Tools
Кейс: DevOps-агент обнаруживает баг в тестах, создаёт issue, затем другой агент комментирует и предлагает PR.
📌 Полезно для: автогенерации issue, отслеживания багов, CI/CD по запросу от LLM.
📅 google-calendar-mcp
🔧 Категория: Events & Calendars
Кейс: агент-секретарь анализирует переписку, предлагает время встречи, и сразу бронирует слот в календаре.
📌 Полезно для: интеграции с реальным расписанием, агент-планировщик.
🌍 serpapi-mcp
🔧 Категория: Internet APIs
Кейс: агент-журналист собирает свежую информацию по теме (например, новости, статистику) через Google Search API.
📌 Полезно для: агентов-исследователей, real-time актуализация информации.
📈 prometheus-mcp
🔧 Категория: Monitoring
Кейс: агент-монитор следит за нагрузкой на сервис, и если CPU > 80% → вызывает алерт-агента в Telegram.
📌 Полезно для: автономного мониторинга, оповещений, self-healing-сценариев.
📮 rabbitmq-mcp
🔧 Категория: Messaging Queues
Кейс: один агент планирует задачи, другой выполняет — они обмениваются сообщениями через очередь.
📌 Полезно для: построения очередей заданий между агентами, масштабирования.
🧠 replicate-mcp
🔧 Категория: ML & AI
Кейс: агент вызывает внешнюю модель — например, генерацию изображения, голоса или сегментацию.
📌 Полезно для: мультимодальных агентов, генеративных задач (text-to-image/audio).
Подпишись 👉🏻 @aigentto 🤖
GitHub
GitHub - punkpeye/awesome-mcp-servers: A collection of MCP servers.
A collection of MCP servers. Contribute to punkpeye/awesome-mcp-servers development by creating an account on GitHub.