🗄️ Эффективная работа с базами данных в Django |
Все манипуляции с базами данных в Django-приложениях можно проводить двумя способами: - На уровне базы данных – обычно такие запросы пишут на чистом SQL.
- На уровне Python (с помощью ORM).
Запросы на уровне Python писать гораздо проще, но такой подход плохо сказывается на производительности приложения. Вот пример неэффективной реализации функции, которая определяет, правильно ли пользователь ответил на вопрос теста, и подсчитывает количество правильных и неправильных ответов для вывода результатов по всем вопросам теста. При использовании этой функции Django сначала получает текущее значение нужных полей, увеличивает эти значения на уровне Python, а затем сохраняет обратно в базу данных. Если множество пользователей будут отправлять ответы одновременно, количество запросов к БД возрастет неимоверно, и работа приложения ощутимо замедлится. Если писать на SQL нет желания, а скорость выполнения операций с базой повысить необходимо, остается один выход – использовать F() выражения. F() выражение, оно же F() объект – это значение поля модели (исходное или преобразованное). Вместо того чтобы извлекать значение из базы данных, манипулировать им с помощью обычных операторов Python, а затем сохранять объект обратно в базу данных, можно использовать F() для генерации SQL-выражения, которое описывает и выполняет требуемую операцию на уровне базы данных. Вот так можно переписать функцию оценки ответов, чтобы она эффективно обновляла значения полей в БД.
В этой функции F() объекты применяются для увеличения полей correct и wrong в модели Result. Пример реального приложения, использующего F() в такой функции – Django-модуль для проведения тестов с подсчетом и визуализацией результатов. Эта статья кратко разъясняет основные преимущества и недостатки F() выражений.
Плюсы: - Повышение производительности за счет выполнения операций на стороне БД, а не в памяти Python.
- Меньше запросов к БД.
- Упрощение некоторых операций обновления и фильтрации моделей. Например, сравнение или прибавление значений.
- Возможность использования в логических операциях для обновления булевых значений полей.
- Сохранение вычислений с F-объектами после save().
Минусы: - Чуть более сложный синтаксис запросов, чем при стандартном подходе с ORM и Python.
- Невозможность использования некоторых функций агрегации Django с F-объектами.
- Риск выполнения избыточных операций, если не отслеживать сохранение F-объектов после save() через refresh_from_db().
- Ограниченность операций, доступных в F-объектах по сравнению с полноценным SQL.
Но в целом, при правильном применении F-объекты упрощают работу с запросами на уровне БД, повышают производительность, и определенно заслуживают внимания. |
📜 Обработка текста с помощью LLM |
Извлечение ключевых слов – это техника обработки естественного языка (NLP), которая включает в себя идентификацию и извлечение самых релевантных слов или фраз из определенного текста. Цель такого извлечения – захват основных тем, что, в свою очередь, позволяет представить содержание текста в кратком и ясном виде. Этот процесс используется во многих ИИ-приложениях для суммаризации документов, категоризации, SEO-оптимизации контента. Статья «Извлечение ключевых слов с помощью Gemini» рассказывает, как использовать модель Gemini Pro для такой обработки текста в Google Colab: - Показана инициализация Vertex AI с нужными данными (ID проекта, геолокационная информация).
- Приведена функция, которая формирует промпт для извлечения ключевых слов.
- Представлен код для выполнения промпта с использованием модели Gemini Pro. Результаты генерации собираются в список, который затем возвращается в виде строки.
- В конце статьи приводится код для преобразования JSON ответа.
Автоматическое присвоение меток избавляет от утомительной ручной работы по организации и категоризации больших объемов данных. Такая обработка используется в системах рекомендации контента, распознавании изображений и управлении документами, где точное и своевременное присвоение меток критически важно для эффективного использования и извлечения данных. Статья «Автоматическое присвоение меток или тегов с использованием Gemini» показывает процесс такой обработки контента в Google Colab: - Как и в предыдущем проекте, сначала автор показывает инициализацию Vertex AI.
- Предоставлен код функции для создания промпта, который передает в модель инструкции для извлечения меток из неструктурированного контента.
- Приведен код для создания экземпляра модели и вызов метода generate_content с промптом и конфигурацией генерации.
- Показано извлечение готовых тегов из JSON ответа.
|
🌐 Веб-скрапинг с использованием Langchain |
Веб-скрапинг применяют для автоматического извлечения данных из большого количества веб-страниц. Цель скрапинга – получение релевантных данных для анализа, маркетинговых исследований, машинного обучения. В экосистеме Python есть замечательные инструменты для веб-скрапинга – в главе курса, посвященной основам скрапинга и парсинга, показано их использование на множестве практических примеров. Как демонстрирует статья «Веб-скрапинг с помощью Langchain и Html2Text», есть еще один интересный способ парсинга: - Для извлечения HTML в текст используется AsyncHtmlLoader из пакета langchain и Html2TextTransformer из пакета html2text. AsyncHtmlLoader загружает сырой HTML-код и может одновременно обрабатывать ссылки из объемного списка URL, что значительно ускоряет процесс, а Html2TextTransformer конвертирует HTML в простой и чистый ASCII текст.
- Приведен код функции, которая принимает ссылку, загружает HTML-контент, преобразует его в текст и возвращает словарь с информацией о странице. В словаре содержится сводка, заголовок, метаданные и очищенный текст страницы.
|
⏸ Оптимальное количество потоков для параллельных вычислений | Чтобы параллельные вычисления были максимально эффективными, нужно точно определить оптимальное количество потоков для решения конкретной задачи: слишком мало потоков – не будут использоваться все ядра, слишком много – начнется конкуренция за одни и те же ядра. В материале подробно обсуждаются сложности, связанные с такой оптимизацией, и возможные пути их решения: - Получение точного числа ядер, которые можно эффективно использовать – непростая задача. Это связано с тем, что современные процессоры могут выполнять несколько инструкций одновременно (благодаря технологии Hyper-threading), между физическими и логическими ядрами есть большая разница процессора, а на производительность параллельных вычислений влияют многие факторы – от пропускной способности памяти до ограничений на использование процессора со стороны операционной системы.
- Автор сравнивает две функции для пороговой обработки изображений, одна из которых работает гораздо быстрее другой. При запуске этих функций в пуле потоков, время обработки сначала уменьшается с увеличением количества потоков, а затем начинает увеличиваться из-за конкуренции за ресурсы. Это связано с особенностями кода и использованием ресурсов процессора.
|
Оптимальное количество потоков оказывается разным для этих двух функций – 19 для медленной и 9 для быстрой |
В итоге автор предлагает эмпирический подход к определению оптимального количества потоков для конкретного кода, измеряя производительность при разном числе потоков. Это позволит автоматически находить оптимальную степень параллелизма. |
AI Python SDK от Google – набор инструментов для использования всех возможностей моделей Gemini Pro и PaLM в собственных приложениях. И напоследок – свежий бесплатный курс от Microsoft по эффективному использованию GitHub Copilot. Курс состоит из 6 уроков, а каждый урок включает лекцию, задания для самопроверки и ссылки на полезные ресурсы: - Введение в GitHub – научит работать с репозиториями, ветками, коммитами и запросами на вытягивание.
- GitHub Codespaces – создание, настройка и использование.
- GitHub Copilot – начало работы с ИИ-помощником в Visual Studio Code и Codespaces.
- Использование GitHub Copilot в разработке на JavaScript и Python – покажет приемы эффективного промптинга для реализации проектов на этих языках.
- Разработка мини-игры – научит, как использовать GitHub Copilot для создания и улучшения логики игры на Python.
На этом все, до встречи на следующей неделе! |
|
|
Вы получили это письмо, потому что подписались на нашу рассылку. Если вы больше не хотите получать наши письма, нажмите здесь.
|
|
|
|