🐍 Итоги недели в мире Python и обзоры новых инструментов: пора переключаться с бэкенда на ИИ-разработку

🐍 Итоги недели в мире Python и обзоры новых инструментов: пора переключаться с бэкенда на ИИ-разработку

Привет!

Всю неделю мы мониторим интернет, чтобы в воскресенье прислать тебе интересное письмо. Наша цель – держать читателей в курсе последних открытий и тенденций в мире Python. В еженедельных письмах ты найдешь:

  • Новые возможности в последних версиях Python
  • Работа с базами данных и SQL в Python.
  • Веб-разработка на Django и Flask.
  • Машинное обучение и анализ данных с помощью Python.
  • Автоматизация и работа с API на Python.
  • Тестирование и отладка кода на Python.
  • Задачи для новичков с решениями.

Hatchet – новая система распределения задач; Niquests – продвинутая альтернатива Requests; Переключение на разработку ИИ сейчас – оптимальное решение для питонистов.

💬 Как использовать графы знаний для повышения качества ответов чат-ботов

Граф знаний – это способ структурированного представления информации и знаний в виде семантической сети, состоящей из узлов (сущностей, концепций) и связей (отношений) между ними. Основные компоненты графа знаний:

  • Узлы – отдельные сущности или концепции предметной области. Например, «Альберт Эйнштейн», «Теория относительности», «Физика» и т.д.
  • Ребра – связи между узлами, которые описывают отношения между сущностями. Например, «Альберт Эйнштейн» – «разработал» – «Теория относительности».
  • Типы узлов и связей – позволяют категорировать сущности (персоны, концепции, места и т.д.) и отношения между ними (родственные, временные, иерархические и др.)
  • Веса связей – числовые значения, указывающие на важность или релевантность связей между узлами.
<p>Пример графа знаний</p>

Пример графа знаний

Графы знаний используются в поисковых системах, электронной коммерции, биоинформатике, научных исследованиях и многих других сферах, где требуется систематизация и анализ больших объемов структурированных и неструктурированных данных. С их помощью можно создать контекстную память для чат-бота, и это значительно улучшит качество его работы:

  • Снизит уровень галлюцинаций.
  • Повысит релевантность и точность ответов LLM.
  • Даст модели возможность корректно обрабатывать данные, которых она не знает.

Подробный туториал показывает, как именно это сделать – на примере данных из Википедии и Gemini Pro. В этой публикации:

  • Описывается процесс создания графа знаний путем анализа страниц Википедии, извлечения концепций, связей между ними и весов этих связей на основе статистики упоминаний на страницах.
  • Приводится подробный код на Python для реализации этого процесса с использованием библиотек Wikipedia, Pandas, NetworkX и др.
  • Демонстрируется визуализация полученного графа знаний.
  • Показано, как интегрировать полученный граф знаний с LangChain для использования в качестве контекстной памяти для большой языковой модели Gemini-1.0-Pro от Google.
<p>Визуализация готового графа знаний</p>

Визуализация готового графа знаний

🎩 Hatchet – эффективная альтернатива Celery

Hatchet – новая система распределения задач для управления сложными процессами. Это эффективная и производительная альтернатива устаревшим менеджерам очередей. Hatchet позволяет создавать отказоустойчивые процессы, решающие проблемы параллелизма, справедливости распределения задач и ограничения скорости обработки. Вместо того чтобы самостоятельно настраивать очередь задач или систему pub/sub, можно использовать Hatchet для распределения функций между несколькими рабочими процессами с минимальной конфигурацией и настройкой инфраструктуры.

Преимущества Hatchet:

  • Сверхнизкая задержка и высокая пропускная способность. Hatchet построена на очереди с низкой задержкой (среднее время начала задачи – 25 мс), что идеально подходит для ситуаций, где нужно одновременно обеспечить взаимодействие в режиме реального времени и надежность для критически важных задач.
  • Справедливость распределения задач, защита от перегрузки и ограничения скорости. Hatchet предлагает встроенные стратегии, такие как FIFO (первым пришел - первым обслужен), LIFO (последним пришел - первым обслужен), Round Robin (циклическое обслуживание) и приоритетные очереди. Эти стратегии помогают избежать распространенных проблем масштабирования с минимальной настройкой.
  • Устойчивость к ошибкам. Благодаря настраиваемой политике повторных попыток и встроенной обработке ошибок, Hatchet гарантирует быстрое восстановление операций после временных сбоев. Можно разбить большие задачи на мелкие, чтобы завершить выполнение без необходимости перезапускать всю работу целиком.

В контроль выполнения задач в Hatchet входят:

  • Отслеживание. Всестороннее отслеживание позволяет быстро выявлять проблемы. Hatchet отслеживает задержку, частоту ошибок и другие пользовательские показатели.
  • Восстановление выполнения. Можно воспроизвести события и вручную возобновить выполнение с определенных шагов рабочего процесса.
  • Расписание задач. Есть удобные настройки для повторяющихся задач, и разовое выполнение функций в определенное время.
  • Защита от перегрузки. Сглаживает скачки трафика и выполняет только то, что система может обработать.

А еще Hatchet предлагает ряд преимуществ по сравнению с Celery:

  • Использование PostgreSQL в качестве хранилища очереди. Hatchet использует базу данных PostgreSQL, которая считается более надежной и масштабируемой, чем традиционные хранилища, такие как Redis или Mnesia в RabbitMQ.
  • Простота использования. Hatchet разработан с упором на простоту использования и отладки.
  • Встроенные инструменты для наблюдения. Hatchet не нуждается в ручной настройке со стороны инфраструктурной команды – в нем есть все нужные инструменты для наблюдения за выполнением задач.

🌐 Niquests – продвинутая альтернатива Requests

У популярной библиотеки Requests немало недостатков:

  • Переусложненный API с избыточными параметрами, плохо взаимодействующими друг с другом (например, проблемы с сочетанием json, files и headers).
  • Внутренняя архитектура кода плохо структурирована – это сильно затрудняет поддержку.
  • Обработка перенаправлений и повторных попыток (retry) реализована неудачно, с потерей информации об исключениях.
  • Неудобная работа cookies из-за имитации словаря.
  • Проблемы с поддержкой таймаутов из-за особенностей разрешения DNS.
  • Ограниченные возможности настройки TLS и прокси-соединений.
  • Механизм аутентификации не взаимодействует с логикой повторов запросов.
  • Недостаточное покрытие тестами приводит к проблемам при нестандартном использовании.
  • Сложность добавления новых функций из-за обратной несовместимости.
  • Документация по использованию внутренних модулей библиотеки оставляет желать лучшего.

Но нашелся герой, написавший новую библиотеку, свободную от этих и многих других недочетов – Niquest. Вот некоторые из преимуществ:

  • Поддержка HTTP/2 по умолчанию, доступен HTTP/3. HTTP/2 и HTTP/3 обеспечивают более быстрое и эффективное взаимодействие с серверами. В отличие от других библиотек, которым требуется отдельная настройка для использования HTTP/2, Niquests включает его по умолчанию.
  • Мультиплексированные соединения устраняют необходимость в асинхронном программировании. Niquests позволяет выполнять одновременные HTTP-запросы без необходимости переписывать код в асинхронном стиле (async/await). Это упрощает разработку и повышает производительность для синхронного кода.
  • Повышенная безопасность. Niquests использует безопасные протоколы TLS 1.2 и выше, а также применяет рекомендуемые наборы шифров для защиты от изощренных атак.
  • Проверка сертификатов OCSP. Клиент проверяет действительность сертификатов сервера с помощью OCSP (Online Certificate Status Protocol) – это обеспечивает дополнительный уровень безопасности.
  • Зависимости с проверкой целостности. Niquests использует библиотеки с проверкой целостности с помощью SLSA (Supply chain Levels for Software Artifacts) – это гарантирует подлинность и неизменность зависимостей.
  • Доверие системным корневым сертификатам. Клиент использует доверенные корневые сертификаты из хранилища вашей операционной системы, которое защищено и постоянно обновляется.

Дополнительные фичи:

  • Производительность. Клиент может быть в 3 раза быстрее, чем другие библиотеки, при работе в синхронном режиме, особенно при использовании HTTP/2.
  • Сертификаты в памяти. Позволяет загружать клиентские сертификаты mTLS и ключи без необходимости хранения их в файлах.
  • Объектно-ориентированные заголовки. Предоставляет удобный доступ к заголовкам ответов с помощью объектно-ориентированного синтаксиса.
  • Исправленные ошибки. Разработчики клиента устранили ряд известных ошибок, которые присутствовали в других Requests.
  • Аннотации типов. Niquests использует аннотации для улучшения автодополнения и проверки кода в IDE.
<p>Использовать Niquests даже проще, чем Requests</p>

Использовать Niquests даже проще, чем Requests

🤖 Мнение: пора переключаться с бэкенда на ИИ

Общемировой тренд – значительное снижение спроса на «обычных» разработчиков ПО, и резкое увеличение потребности в ИИ-разработчиках. Это, несомненно, печальная тенденция – особенно для фронтендеров, спрос на которых снизился значительнее всего. Но у Python-разработчиков есть огромное преимущество – они без особых усилий могут переключиться с бэкенда на машинное обучение. Автор этой публикации рассказал, с чего проще всего начать – с изучения супервостребованной RAG-технологии, – и еще раз подчеркнул, что переключение на разработку ИИ сейчас – оптимальное решение для питонистов:

  • Рынок традиционных программистов перенасыщен, в то время как экспертов по ИИ не хватает.
  • Переквалифицироваться из программиста в разработчика ИИ не так уж сложно – питонистам нужно будет лишь освоить базовые концепции ИИ.
  • Разработка ИИ более перспективна с точки зрения востребованности и повышения зарплаты, чем все остальное, что можно сделать на Python.

Автор рассылки: Наталья Кайда

33
Начать дискуссию