Image

5 мощных декораторов Python для оптимизации приложений LLM

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

5 мощных декораторов Python для оптимизации приложений LLM
Изображение предоставлено редактором.

# Введение

Декораторы Python — это специально разработанные решения, призванные упростить сложную программную логику в различных приложениях, включая приложения на основе LLM. Работа с LLM часто связана с непредсказуемыми, медленными и зачастую дорогостоящими сторонними API, и декораторы могут многое предложить для упрощения этой задачи, например, путем обертывания вызовов API оптимизированной логикой.

Рассмотрим пять полезных декораторов Python, которые помогут оптимизировать ваши приложения на основе LLM без заметного увеличения нагрузки.

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

# 1. Кэширование в оперативной памяти

Это решение взято из стандартной библиотеки Python functools и полезно для ресурсоемких функций, таких как те, которые используют LLM (Least Recently Used). Если в функции, определенной ниже, есть вызов API LLM, то обертывание его в декоратор LRU (Least Recently Used) добавляет механизм кэширования, который предотвращает избыточные запросы, содержащие идентичные входные данные (подсказки) в одном и том же выполнении или сессии. Это элегантный способ оптимизировать проблемы с задержкой.

Этот пример иллюстрирует его использование:

from functools import lru_cache import time @lru_cache(maxsize=100) def summarize_text(text: str) -> str: print(«Отправка текста в LLM…») time.sleep(1) # Имитация задержки сети return f»Сводка из {len(text)} символов.» print(summarize_text(«Быстрая коричневая лиса.») # Занимает одну секунду print(summarize_text(«Быстрая коричневая лиса.») # Мгновенно

# 2. Кэширование на постоянном диске

Говоря о кэшировании, внешняя библиотека diskcache идёт ещё дальше, реализуя постоянный кэш на диске, а именно через базу данных SQLite: это очень полезно для хранения результатов ресурсоёмких функций, таких как вызовы API LLM. Таким образом, результаты можно быстро получить при последующих вызовах, когда это необходимо. Рассмотрите возможность использования этого шаблона декоратора, когда кэширования в оперативной памяти недостаточно, поскольку выполнение скрипта или приложения может остановиться.

import time from diskcache import Cache # Создание легковесного локального каталога базы данных SQLite cache = Cache(«.local_llm_cache») @cache.memoize(expire=86400) # Кэшируется на 24 часа def fetch_llm_response(prompt: str) -> str: print(«Вызов дорогостоящего API LLM…») # Замените это фактическим вызовом API LLM time.sleep(2) # Моделирование задержки API return f»Ответ на: {prompt}» print(fetch_llm_response(«Что такое квантовые вычисления?»)) # Первый вызов функции print(fetch_llm_response(«Что такое квантовые вычисления?»)) # Мгновенная загрузка с диска происходит здесь!

# 3. Приложения, устойчивые к воздействию сети

Поскольку LLM-ы часто выходят из строя из-за временных ошибок, а также тайм-аутов и ответов «502 Bad Gateway» в Интернете, использование библиотеки сетевой отказоустойчивости, такой как tenacity, вместе с декоратором @retry может помочь перехватить эти распространенные сбои в сети.

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

import random from tenacity import retry, wait_exponential, stop_after_attempt, retry_if_exception_type class RateLimitError(Exception): pass # Повторная попытка до 4 раз, ожидание 2, 4 и 8 секунд между каждой попыткой @retry( wait=wait_exponential(multiplier=2, min=2, max=10), stop=stop_after_attempt(4), retry=retry_if_exception_type(RateLimitError) ) def call_flaky_llm_api(prompt: str): print(«Попытка вызова API…») if random.random() < 0.7: # Имитация 70% вероятности сбоя API raise RateLimitError("Превышен лимит скорости! Отмена.") return "Текст успешно сгенерирован!" print(call_flaky_llm_api("Напишите хайку"))

# 4. Ограничение скорости на стороне клиента

Этот комбинированный декоратор использует библиотеку ratelimit для управления частотой вызовов (обычно очень востребованной) функции: это полезно для избежания ограничений на стороне клиента при использовании внешних API. В следующем примере это достигается путем определения ограничений на количество запросов в минуту (RPM). Провайдер будет отклонять запросы от клиентского приложения, если будет запущено слишком много одновременных запросов.

from ratelimit import limits, sleep_and_retry import time # Строгое соблюдение ограничения в 3 вызова за 10-секундное окно @sleep_and_retry @limits(calls=3, period=10) def generate_text(prompt: str) -> str: print(f»[{time.strftime('%X')}] Processing: {prompt}») return f»Processed: {prompt}» # Первые 3 выводятся немедленно, 4-й приостанавливается, тем самым соблюдая ограничение for i in range(5): generate_text(f»Prompt {i}»)

# 5. Структурированная привязка выходных данных

Пятый декоратор в списке использует библиотеку magentic в сочетании с Pydantic для обеспечения эффективного механизма взаимодействия с LLM через API и получения структурированных ответов. Он упрощает процесс вызова API LLM. Этот процесс важен для того, чтобы заставить LLM надежно возвращать отформатированные данные, такие как объекты JSON. Декоратор будет обрабатывать системные запросы и парсинг, выполняемый Pydantic, оптимизируя использование токенов и способствуя созданию более чистого кода.

Для запуска этого примера вам потребуется ключ API OpenAI.

# ВАЖНО: Для запуска этого примера требуется установить OPENAI_API_KEY. from magentic import prompt from pydantic import BaseModel class CapitalInfo(BaseModel): capital: str population: int # Декоратор, который легко сопоставляет запрос с типом возвращаемого значения Pydantic @prompt(«Какова столица и население страны {country}?») def get_capital_info(country: str) -> CapitalInfo: … # Здесь не требуется тело функции! info = get_capital_info(«Франция») print(f»Столица: {info.capital}, Население: {info.population}»)

# Завершение

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

Иван Паломарес Карраскоса — лидер, писатель, спикер и консультант в области искусственного интеллекта, машинного обучения, глубокого обучения и магистратуры. Он обучает и направляет других в применении ИИ в реальном мире.

Источник: www.kdnuggets.com

✅ Найденные теги: 5, LLM, Python, Декораторы, новости, Оптимизация, приложения

ОСТАВЬТЕ СВОЙ КОММЕНТАРИЙ

Каталог бесплатных опенсорс-решений, которые можно развернуть локально и забыть о подписках

галерея

Планета Земля окружена цифровыми элементами и взрывами на фоне города.
Золотистая львиная тамарин на ветке в естественной среде обитания.
Три беспроводные зарядные батареи разного цвета на темном фоне.
Мужчина работает за столом с несколькими экранами и ноутбуками в офисе.
Светодиодный настольный светильник на деревянной поверхности для стильного интерьера.
Молекулярная структура на абстрактном фоне, наука и химия.
Лабораторное оборудование для исследований в области оптики и физики.
Эволюция иллюстрации: от здания до цветного персонажа.
Иконка музыкального приложения на экране смартфона с уровнем заряда 73%.
Image Not Found
Три беспроводные зарядные батареи разного цвета на темном фоне.

Тонкий и мощный повербанк Qi2 для всех устройств Apple

Ультратонкий портативный аккумулятор Qi2 с магнитным креплением разработан для любых повседневных задач. Он практически сливается с телефоном и не нарушает его дизайн. При толщине всего 5,5 мм и весе 98 г он ощущается как продолжение корпуса, не…

Мар 7, 2026
Мужчина работает за столом с несколькими экранами и ноутбуками в офисе.

SplitVue — монитор с двумя экранами для работы и творчества

Монитор SplitVue Dual 24.5″ — это необычное решение для рабочего стола с двумя экранами, созданное для тех, кому нужна максимальная продуктивность и гибкость в работе с визуальной информацией.  Новинка с двумя 24,5-дюймовыми дисплеями работает как единое целое…

Мар 7, 2026
Светодиодный настольный светильник на деревянной поверхности для стильного интерьера.

Интеллектуальный тренер для дома: проект Ayon

Ayon — это «умный» домашний фитнес-помощник, который призван сделать тренировки проще, эффективнее и безопаснее.  Этот гаджет сочетает в себе функции персонального тренера с возможностями искусственного интеллекта: он отслеживает движения при выполнении упражнений и мгновенно даёт обратную связь,…

Мар 7, 2026
Молекулярная структура на абстрактном фоне, наука и химия.

Разработанные с помощью I белков могут помочь в выявлении рака.

Наночастицы, покрытые молекулярными сенсорами, могут быть использованы для диагностики в домашних условиях. Новости MIT Исследователи из Массачусетского технологического института и Microsoft использовали искусственный интеллект для создания молекулярных сенсоров, способных обнаруживать ранние признаки рака с помощью анализа мочи.…

Мар 7, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых