Forwarded from FastNews | Никита Пастухов
Кстати, чтобы написать свой простейший MCP сервер очень просто:
FastMCP - это небольшая обертка над библиотекой Starlette, которая позволяет легко создавать MCP серверы - тут вы видите и noscript, и denoscription, и inputSchema каждого метода.
#MCP #протоколы #LLM #AI
from fastmcp import FastMCP
mcp = FastMCP("Demo 🚀")
@mcp.tool
def add(a: int, b: int) -> int:
"""Add two numbers"""
return a + b
FastMCP - это небольшая обертка над библиотекой Starlette, которая позволяет легко создавать MCP серверы - тут вы видите и noscript, и denoscription, и inputSchema каждого метода.
#MCP #протоколы #LLM #AI
FastMCP
Welcome to FastMCP 2.0! - FastMCP
The fast, Pythonic way to build MCP servers and clients.
❤🔥4👏2 1
Forwarded from Уставший техдир
12 Factor Agents - принципы разработки агентов
По следам от 12 Factor Apps, Декстер Хорти собрал ключевые принципы по разработке агентов, делюсь!
1) Преобразование естественного языка в вызовы инструментов. Агент интерпретирует команды в формализованные вызовы функций, а исполняет их — детерминированный код
2) Владей своими промптами (как кодом). Промпт — это артефакт. Его надо хранить, версионировать, тестировать и относиться к нему не как к важной части кода.
3) Управляй контекстом агента. Активно контролируй, что попадает в это окно. Убирай уже не нужное, суммаризируй, оставляй важное, выделяй ограниченные слоты под фичи — внимание модели ограниченно.
4) Вызов тулинга — это просто JSON. LLM генерирует название тула и параметры, остальное должен делать ваш детерминированный вход. Модель решает "что делать", а ваше приложение "как делать"
5) Держи тех.состояние и бизнес состояние вместе. Каждый шаг агента — это и логика, и данные. Всё в одном состоянии, чтобы потом не ковыряться по логам в поисках, где оно сломалось
6) API для управление циклом агента. Агент должен иметь простой API для запуска, приостановки и возобновления работы, уметь вставать на паузу и возвращаться к работе спустя время на каждом этапе жизненного цикла
7) Запрос к человеку — как инструмент. Любое обращение в процессе работы к человеку должно быть представлено агенту, как инструмент
8) Явно контролируйте логику исполнения. Модель лишь "говорит" что, а твой код решает стоит ли выполнять, когда и как.
9) Добавляйте ошибки исполнения инструментов в контекст. Если что-то упало, сократи информацию и добавь это в контекст агента. Пусть модель сама догадается, что дальше: повторить, спросить или изменить стратегию
10) Используйте малых специализированных агентов. Лучше много маленьких агентов, решающих узконаправленные задачи, чем один перегруженный агент всего
11) Доставляй агентов в любые интерфейсы, удобные пользователю. Slack, Telegram, веб, CLI — неважно. Главное — единый API и омниканальность. Пользователь не должен думать, где общаться с агентом. Он просто должен это делать.
12) Агент как Stateless Reducer. На входе — состояние и запрос. На выходе — новое состояние и ответ. Всё как в хорошем Redux. Никакого собственного внутреннего состояния, он должен работать как чистая функция
Бонус:
13) Предзагрузи все необходимое. Агент не должен постоянно дёргать одни и те же данные. Наполняй контекст тем, что почти наверняка пригодится.
Репа: https://github.com/humanlayer/12-factor-agents
Доклад: https://www.youtube.com/watch?v=8kMaTybvDUw
По следам от 12 Factor Apps, Декстер Хорти собрал ключевые принципы по разработке агентов, делюсь!
1) Преобразование естественного языка в вызовы инструментов. Агент интерпретирует команды в формализованные вызовы функций, а исполняет их — детерминированный код
2) Владей своими промптами (как кодом). Промпт — это артефакт. Его надо хранить, версионировать, тестировать и относиться к нему не как к важной части кода.
3) Управляй контекстом агента. Активно контролируй, что попадает в это окно. Убирай уже не нужное, суммаризируй, оставляй важное, выделяй ограниченные слоты под фичи — внимание модели ограниченно.
4) Вызов тулинга — это просто JSON. LLM генерирует название тула и параметры, остальное должен делать ваш детерминированный вход. Модель решает "что делать", а ваше приложение "как делать"
5) Держи тех.состояние и бизнес состояние вместе. Каждый шаг агента — это и логика, и данные. Всё в одном состоянии, чтобы потом не ковыряться по логам в поисках, где оно сломалось
6) API для управление циклом агента. Агент должен иметь простой API для запуска, приостановки и возобновления работы, уметь вставать на паузу и возвращаться к работе спустя время на каждом этапе жизненного цикла
7) Запрос к человеку — как инструмент. Любое обращение в процессе работы к человеку должно быть представлено агенту, как инструмент
requestClarification(message:string)8) Явно контролируйте логику исполнения. Модель лишь "говорит" что, а твой код решает стоит ли выполнять, когда и как.
9) Добавляйте ошибки исполнения инструментов в контекст. Если что-то упало, сократи информацию и добавь это в контекст агента. Пусть модель сама догадается, что дальше: повторить, спросить или изменить стратегию
10) Используйте малых специализированных агентов. Лучше много маленьких агентов, решающих узконаправленные задачи, чем один перегруженный агент всего
11) Доставляй агентов в любые интерфейсы, удобные пользователю. Slack, Telegram, веб, CLI — неважно. Главное — единый API и омниканальность. Пользователь не должен думать, где общаться с агентом. Он просто должен это делать.
12) Агент как Stateless Reducer. На входе — состояние и запрос. На выходе — новое состояние и ответ. Всё как в хорошем Redux. Никакого собственного внутреннего состояния, он должен работать как чистая функция
Бонус:
13) Предзагрузи все необходимое. Агент не должен постоянно дёргать одни и те же данные. Наполняй контекст тем, что почти наверняка пригодится.
Репа: https://github.com/humanlayer/12-factor-agents
Доклад: https://www.youtube.com/watch?v=8kMaTybvDUw
YouTube
12-Factor Agents: Patterns of reliable LLM applications — Dex Horthy, HumanLayer
Hi, I'm Dex. I've been hacking on AI agents for a while.
I've tried every agent framework out there, from the plug-and-play crew/langchains to the "minimalist" smolagents of the world to the "production grade" langraph, griptape, etc.
I've…
I've tried every agent framework out there, from the plug-and-play crew/langchains to the "minimalist" smolagents of the world to the "production grade" langraph, griptape, etc.
I've…
Что внутри:
Формат: 5 модулей, ~6 ч, self‑paced, уровень Intermediate. По завершении - сертификат.
Если ты делаешь ассистентов, RAG или внутренние сервисы - этот курс закрывает "как" и "почему" агентные пайплайны реально работают.
#edu #course #ai #llm #agents
Please open Telegram to view this post
VIEW IN TELEGRAM
DeepLearning.AI - Learning Platform
Agentic AI
In this course taught by Andrew Ng, you'll build agentic AI systems that take action through iterative, multi-step workflows.
❤🔥6👏2 1
Forwarded from FastNews | Никита Пастухов
Оказывается, если вы хотите подчеркнуть, что ваш контент "NOT BY AI", то для вас уже сделали специальный trademark - https://notbyai.fyi/
Эти ребята сделали целый бизнес по продаже этих вотермарок (не знаю, насколько успешный). Для индивидуального использования вы можете просто задонатить сколько хотите - и значки отправят вам на почту. Но корпоративные юзер - расчехляйте кошельки🌚
Просто удивительно, на чем только люди не делают деньги
Эти ребята сделали целый бизнес по продаже этих вотермарок (не знаю, насколько успешный). Для индивидуального использования вы можете просто задонатить сколько хотите - и значки отправят вам на почту. Но корпоративные юзер - расчехляйте кошельки🌚
Просто удивительно, на чем только люди не делают деньги
notbyai.fyi
Not By AI — Add the Badge to Your Human-Created Content
Download and add the Not By AI badge to showcase your AI-free & human-first approach to content creation (writings, art, photos, paintings, videos, and music)
😁8
Forwarded from DataEng
Как я чищу метаданные Apache Airflow 3.x
В блоге Apache Airflow есть скрипт для периодической чистки метаданных в БД Apache Airflow. Но начиная с Airflow 3.0 невозможно обращаться к БД напрямую (через модели SQLAlchemy), в связи с этим скрипт не работает. Даже вызов shell команды
Как решить? Я нашел выход запуска через старый добрый Cron:
В полночь команда запускается и чистит все данные , оставляя только последние 7 дней. Но это работает на моём личном self-hosted Airflow, как быть с MWAA я пока не знаю, т.к. не обновлялся и не знаю как поведёт себя DAG.
В блоге Apache Airflow есть скрипт для периодической чистки метаданных в БД Apache Airflow. Но начиная с Airflow 3.0 невозможно обращаться к БД напрямую (через модели SQLAlchemy), в связи с этим скрипт не работает. Даже вызов shell команды
airflow db clean через BashOperator выдаст ошибку по типу: Could not parse SQLAlchemy URL from string 'airflow-db-not-allowed:///': source="airflow.task.hooks.airflow.providers.standard.hooks.subprocess.SubprocessHook"
RuntimeError: Direct database access via the ORM is not allowed in Airflow 3.0
Как решить? Я нашел выход запуска через старый добрый Cron:
0 0 * * * /home/airflow/.airflow/bin/airflow db clean --clean-before-timestamp "$(date -d '7 days ago' +'%Y-%m-%d %H:%M:%S')" --skip-archive -y
В полночь команда запускается и чистит все данные , оставляя только последние 7 дней. Но это работает на моём личном self-hosted Airflow, как быть с MWAA я пока не знаю, т.к. не обновлялся и не знаю как поведёт себя DAG.
Amazon
Aurora PostgreSQL database cleanup on an Amazon MWAA environment - Amazon Managed Workflows for Apache Airflow
The following sample code periodically clears out entries from the dedicated Aurora PostgreSQL database for your Amazon Managed Workflows for Apache Airflow environment.
Если ты решился расти с 1–2 нод до целого кластера - держи короткий гайд, как не утопить Redis и не ловить OOM-ы.
Включи celery events и следи за:
redis-cli --latency) - держи p95 < 10–20 мс.Чтобы понять, где предел, сделай три типа задач:
Поднимай concurrency по шагам - смотри, где падает throughput или растёт latency.
Идеал - максимум задач без лагов и OOM.
Обычно выходит 0.5–0.7 × число ядер.
per_worker_conc = cores × коэффициент
cluster_conc = per_worker_conc × 16
RAM ≈ per_task_RSS × per_worker_conc × 1.3
#airflow #celery #redis #config #ha #cluster
Please open Telegram to view this post
VIEW IN TELEGRAM
1 8 4
Forwarded from Технозаметки Малышева
Agents 2.0: от примитивных циклов к глубокомыслящим агентам
Год назад ИИ-агент был простым while-циклом: промпт → LLM → инструмент → повтор. Решало обычные быстрые задачи типа "какая погода в Токио", но на задачах в 50 шагов, который могут выполняться несколько дней агент терялся, зацикливался, галлюцинировал.
Сейчас архитектура меняется. Deep Agents не просто реагируют, они планируют, делегируют работу специализированным саб-агентам и хранят память вне контекста.
В заметке выделяется четыре ключевые составляющие:
- Явное детальное планирование через цепочку размышлений с сохранением в markdown to-do с отслеживанием прогресса
- Иерархическая оркестрация с распределенением задач между узкими специалистами под-агентами (researcher, coder, writer) и именно они уже вызывают инструменты. Оркестратору возвращается только резальтат
- Внешняя память в файловой системе или векторных БД вместо переполненного контекста. Причём часть под-агентов могут только писать в память, а часть - только читать!
- Промпты на тысячи токенов с детальными инструкциями и указанием структур доступных инструментов и когда стоит подключить человека.
Интересное краткое отражение факта эволюции развития агентских систем.
Полезно и для понимания архитектуры и для презентаций.
#DeepAgents #Orchestrator #SubAgents
———
@tsingular
Год назад ИИ-агент был простым while-циклом: промпт → LLM → инструмент → повтор. Решало обычные быстрые задачи типа "какая погода в Токио", но на задачах в 50 шагов, который могут выполняться несколько дней агент терялся, зацикливался, галлюцинировал.
Сейчас архитектура меняется. Deep Agents не просто реагируют, они планируют, делегируют работу специализированным саб-агентам и хранят память вне контекста.
В заметке выделяется четыре ключевые составляющие:
- Явное детальное планирование через цепочку размышлений с сохранением в markdown to-do с отслеживанием прогресса
- Иерархическая оркестрация с распределенением задач между узкими специалистами под-агентами (researcher, coder, writer) и именно они уже вызывают инструменты. Оркестратору возвращается только резальтат
- Внешняя память в файловой системе или векторных БД вместо переполненного контекста. Причём часть под-агентов могут только писать в память, а часть - только читать!
- Промпты на тысячи токенов с детальными инструкциями и указанием структур доступных инструментов и когда стоит подключить человека.
Интересное краткое отражение факта эволюции развития агентских систем.
Полезно и для понимания архитектуры и для презентаций.
#DeepAgents #Orchestrator #SubAgents
———
@tsingular
Forwarded from Время Валеры
На днях в open source выпустили распределённую файловую систему, которая рассчитана на эксабайты (тысячи петабайт).
Сделали это чуваки из XTX, мощные трейдеры, которые известны двумя вещами: тем, что у них (по крайней мере недавно) был топ-3 кластер по количеству ГПУ, и тем, что их основатель, Александр Герко, так любит Лондон, что каждый год платит 500+ млн фунтов налогов на доходы как физическое лицо.
Из интересного (они выделили 9 пунктов, но только 5 мне кажутся отличительными)
Has no single point of failure in its metadata services.
Is hardware agnostic and uses TCP/IP to communicate.
Utilizes different types of storage (such as flash vs. hard disks) cost effectively.
Exposes read/write access through its own API over TCP and UDP, and a Linux kernel filesystem module.
Requires no external service and has a minimal set of build dependencies
Начали работы над системой в 2022 году, в середине 2024 мигрировали весь ML
TernFS' metadata is split into 256 logical shards. Shards never communicate with each other. This is a general principle in TernFS: Splitting the metadata into 256 shards from the get-go simplifies the design, given that horizontal scaling of metadata requires no rebalancing, just the addition of more metadata servers.
Ну и заодно свой формат сериализации разработали, чтобы разработчики передвигали не json, thrift, а что-то там свое.
Еще из интересного - обсуждение когда нужно зеркалить файлы, а когда делать Reed-Solomon coding.
Рекомендую почитать
Сделали это чуваки из XTX, мощные трейдеры, которые известны двумя вещами: тем, что у них (по крайней мере недавно) был топ-3 кластер по количеству ГПУ, и тем, что их основатель, Александр Герко, так любит Лондон, что каждый год платит 500+ млн фунтов налогов на доходы как физическое лицо.
Из интересного (они выделили 9 пунктов, но только 5 мне кажутся отличительными)
Has no single point of failure in its metadata services.
Is hardware agnostic and uses TCP/IP to communicate.
Utilizes different types of storage (such as flash vs. hard disks) cost effectively.
Exposes read/write access through its own API over TCP and UDP, and a Linux kernel filesystem module.
Requires no external service and has a minimal set of build dependencies
Начали работы над системой в 2022 году, в середине 2024 мигрировали весь ML
TernFS' metadata is split into 256 logical shards. Shards never communicate with each other. This is a general principle in TernFS: Splitting the metadata into 256 shards from the get-go simplifies the design, given that horizontal scaling of metadata requires no rebalancing, just the addition of more metadata servers.
Ну и заодно свой формат сериализации разработали, чтобы разработчики передвигали не json, thrift, а что-то там свое.
Еще из интересного - обсуждение когда нужно зеркалить файлы, а когда делать Reed-Solomon coding.
Рекомендую почитать
Xtxmarkets
TernFS: an exabyte scale, multi-region distributed filesystem | XTX Tech Blog
XTX Markets is a leading algorithmic trading firm which uses state-of-the-art machine learning technology to produce price forecasts for over 50,000 financial instruments across equities, fixed income, currencies, commodities and crypto. It uses those forecasts…
❤🔥6 2
Forwarded from DataEng
The Annual Airflow Survey
Если вы пользуетесь Apache Airflow, то давайте поможем сообществу собрать больше информации об использовании Airflow. До 20 ноября необходимо заполнить опросник на сайте взамен вы получите возможность пройти сертификацию по Airflow от Astronomer бесплатно (я сдавал их экзамен и он хороший). Опросник небольшой, замёт не более 10 минут вашего времени.
Если вы пользуетесь Apache Airflow, то давайте поможем сообществу собрать больше информации об использовании Airflow. До 20 ноября необходимо заполнить опросник на сайте взамен вы получите возможность пройти сертификацию по Airflow от Astronomer бесплатно (я сдавал их экзамен и он хороший). Опросник небольшой, замёт не более 10 минут вашего времени.
Typeform
Apache Airflow® Survey 2025
Share your feedback to help shape the future of Airflow and improve its day-to-day use.
Время Валеры
На днях в open source выпустили распределённую файловую систему, которая рассчитана на эксабайты (тысячи петабайт). Сделали это чуваки из XTX, мощные трейдеры, которые известны двумя вещами: тем, что у них (по крайней мере недавно) был топ-3 кластер по количеству…
Новая ФС от алготрейдеров? Почему бы и нет. Говорят, каждый большой техно-бизнес рано или поздно пишет свою файловую систему - вот и XTX Markets не стали исключением. Они выкатили в open source собственную распределённую FS под названием TernFS. Эта система способна переваривать эксабайты данных и рассчитана на миллионы файлов и высокопараллельные нагрузки - то, что надо для их ML-ферм, где обычные NFS/Ceph уже не вывозят.
▶️ Конечно, чудес не бывает. TernFS не любит совсем мелкие файлы (<2 МБ) и не рассчитана на бесконечное создание миллионов отдельных каталогов. Файлы в ней только дописываются, но не изменяются после факта (immutable-дизайн). Своей системы разрешений/аутентификации нет - этим должен заниматься внешний уровень. Проще говоря, TernFS хороша для больших объёмов статичных данных (логов, моделей, бэкапов, результатов расчётов и пр.), но не годится как замена обычной FS в сценариях с частыми правками и мелочью.
▶️ ▶️ Вывод: XTX проделали тот же трюк, что и Google с Facebook - создали свою распределённую ФС под специфичные задачи, но внезапно поделились ею с миром. Репозиторий открыт (GPLv2) на GitHub - xtxmarkets/ternfs. Так что если однажды придётся укрощать эксабайты данных или просто хочешь разобраться, как устроена современная файловая система такого масштаба 6 почему бы не заглянуть? Всё-таки не каждый день финансисты выкатывают в open source технологии на уровне топовых IT-грандов 😉 .
#fs #algotrading #trading #de
#fs #algotrading #trading #de
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from DataEng
Ребята из Qdrant запустили бесплатный семидневный курс про свою векторную базу данных: Qdrant Essentials
Меня в последнее время интересует тема векторного поиска и векторных БД, и Qdrant как раз неплохой кандидат на изучение и реализацию какого-нибудь проекта (спойлер:домашнего векторного поисковика ). Курс прям как по заказу!
Меня в последнее время интересует тема векторного поиска и векторных БД, и Qdrant как раз неплохой кандидат на изучение и реализацию какого-нибудь проекта (спойлер:
qdrant.tech
Qdrant Essentials Course - Qdrant
Learn hybrid search, multivectors, and production deployment in 7 days. Build and ship a docs search engine.
❤🔥6😁1
Lakehouse 1.0 vs 2.0
🚀 Lakehouse 1.0 - попытка починить склад
Первая версия Lakehouse решала боль Data Warehouse, но делала это по-старому:
💾 Закрытая логика: Метрики и схемы жили в силосах BI-систем. Любая миграция - боль.
🔄 Одна сущность - три версии правды: Отчёт маркетинга ≠ отчёт продаж ≠ отчёт ops.
⚙️ Тесно связанные компоненты: compute + storage = монолит.
🔒 Vendor lock: Форматы, метаданные, даже governance принадлежали платформе-вендору.
🧩 Нет нативной семантики: Каждый инструмент крутил свои метрики вручную.
Результат - дорого, фрагментированно и очень трудно масштабировать без потери доверия к данным.
〰️ 〰️ 〰️ 〰️ 〰️ 〰️ 〰️ 〰️ 〰️ 〰️ 〰️ 〰️ 〰️
🏄♂️ Lakehouse 2.0 - построить систему, как работают команды
Второе поколение решает ключевую проблему - делает данные живыми, гибкими и нативными для разных стеков:
🧠 Semantic / Metrics Layer: Единый слой правды. Метрики, онтологии и контракты данных живут вместе.
🌐 Децентрализованные операции: Каждая команда (Sales, Mkt, Ops) может обновлять общую истину через свои доменные API.
🧩 Composable Compute: Можно выбирать движок: Spark, Trino, Dremio - без зависимости от формата.
🪶 Open Formats & Metadata: Никаких "запертых" схем. Метаданные - общие, интероперабельные.
🗂️ Catalog beyond data: Каталог объединяет логику, политику, lineage и ресурсы - мультиинструментальная, не моновендорная экосистема.
Lakehouse 1.0 - это инфраструктура.
Lakehouse 2.0 - это культура данных.
#de #dwh #lakehouse
Первая версия Lakehouse решала боль Data Warehouse, но делала это по-старому:
⚙️ Тесно связанные компоненты: compute + storage = монолит.
🧩 Нет нативной семантики: Каждый инструмент крутил свои метрики вручную.
Результат - дорого, фрагментированно и очень трудно масштабировать без потери доверия к данным.
Второе поколение решает ключевую проблему - делает данные живыми, гибкими и нативными для разных стеков:
🧩 Composable Compute: Можно выбирать движок: Spark, Trino, Dremio - без зависимости от формата.
🪶 Open Formats & Metadata: Никаких "запертых" схем. Метаданные - общие, интероперабельные.
🗂️ Catalog beyond data: Каталог объединяет логику, политику, lineage и ресурсы - мультиинструментальная, не моновендорная экосистема.
Lakehouse 1.0 - это инфраструктура.
Lakehouse 2.0 - это культура данных.
#de #dwh #lakehouse
Please open Telegram to view this post
VIEW IN TELEGRAM
🤖 Робот по цене смартфона 🙂
Китайский стартап Noetix Robotics показал гуманоида Bumi за ¥9 998 (~$1.4k).
Детский рост 94 см, вес ~12 кг. Умеет ходить/бегать/танцевать, понимает голос и поддерживает блочное программирование для учебы и игр.
Предзаказ уже открыт в Китае (JD и оф. каналы) в окне 23.10🔜 12.12.
Цена смартфона за домашнего гуманоида - потребительский сегмент реально стартовал.
#Bumi #Noetix #robotics #гуманоиды #роботы
Китайский стартап Noetix Robotics показал гуманоида Bumi за ¥9 998 (~$1.4k).
Детский рост 94 см, вес ~12 кг. Умеет ходить/бегать/танцевать, понимает голос и поддерживает блочное программирование для учебы и игр.
Предзаказ уже открыт в Китае (JD и оф. каналы) в окне 23.10
Цена смартфона за домашнего гуманоида - потребительский сегмент реально стартовал.
#Bumi #Noetix #robotics #гуманоиды #роботы
Please open Telegram to view this post
VIEW IN TELEGRAM
1 7
Forwarded from FastNews | Никита Пастухов
Если вы вдруг не знаете, как оплатить подписку на OpenAI из РФ, то хочу вам прорекламировать отличный сервис - поисковик Github!🚀
Пара тысяч совершенно бесплатных ключей от вайбкодеров ждет вас🌚
https://github.com/search?q=OPENAI_API_KEY%3D%22&type=code
Пара тысяч совершенно бесплатных ключей от вайбкодеров ждет вас🌚
https://github.com/search?q=OPENAI_API_KEY%3D%22&type=code
Please open Telegram to view this post
VIEW IN TELEGRAM
😁19❤🔥2
Самая частая уязвимость в AI-агентах - не хакинг, а обычный лог.
Промпт, трейсбек, tool-вызов - всё это может случайно засветить токен или пароль.
Обычно утечка выглядит так:
print() в проде.sk-1234****abcd.Ни больше, ни меньше.
print() - потенциальный инцидент.#AI #AgentSecurity #AIAgents #CyberSecurity #DevSecOps #PromptEngineering #DataLeak #AIDev #Security #MLOps #LLM #OpenSource #TechSafety #AIпрактика #Инфобез #AIутечки #БЯМ
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤🔥7😁2
DE
Санитайзер для гигиены секретов:
#code #py #helper #AIsecurity
import logging, os, re
SECRET_PATTERNS = [re.compile(r'(sk-[A-Za-z0-9]{10,})'),
re.compile(r'(?i)api[_-]?key\s*=\s*([A-Za-z0-9\-_.]+)')]
def sanitize(s: str) -> str:
if not s:
return s
for p in SECRET_PATTERNS:
s = p.sub(lambda m: m.group(0)[:4] + '****' + m.group(0)[-4:], s)
return s
class RedactingFormatter(logging.Formatter):
def format(self, record):
record.msg = sanitize(str(record.msg))
if record.args:
record.args = tuple(sanitize(str(a)) for a in record.args)
return super().format(record)
logger = logging.getLogger("agent")
logger.setLevel(logging.INFO) # не DEBUG
h = logging.StreamHandler()
h.setFormatter(RedactingFormatter("%(levelname)s %(message)s"))
logger.addHandler(h)
#code #py #helper #AIsecurity
3👏6 3❤🔥1😁1