Angry Beard – Telegram
Angry Beard
273 subscribers
168 photos
12 videos
13 files
672 links
Bearded guy about the startups, tech and product development - https://alec-c4.com
Download Telegram
12 Factor Agents - принципы разработки агентов

По следам от 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
#AI Я потестировал GitHub SpecKit в связке с Anthropic Claude и скажу честно - мне нравится, куда движется этот проект. Концепция достаточно простая - вы пишите (или генерите) конституцию проекта, которая определяет подходы к разработке, описываете необходимую функциональность и Claude выступает как аналитик, декомпозируя её на блоки и задавая уточняющие вопросы. После этого Claude нарезает функционал на задачи и уже потом, отталкиваясь от конституции и получившихся ТЗ и декомпозиции, пишет код. Все получившиеся артефакты вы можете обновлять в процессе работы. Вот например выдержки из конституции проекта, которые мне сгенерились:


### I. Test-First Development (NON-NEGOTIABLE)

All feature development MUST follow Test-Driven Development:
- Write tests before implementation
- Tests must fail before implementation begins
- Red-Green-Refactor cycle strictly enforced
- Never commit failing tests to main branch
- Never disable or skip tests to make builds pass

**Rationale**: Tests serve as living documentation and prevent regressions. The test-first
approach ensures we understand requirements before writing code and maintains high confidence
in our changes.



## Development Standards

### Code Quality Requirements

- All Ruby code MUST pass Standard linter without warnings
- All ERB templates MUST pass erb_lint without violations
- All JavaScript MUST pass configured ESLint rules
- Security scans (Brakeman, bundler-audit) MUST pass before merge
- Code coverage MUST not decrease with new changes



### Interaction Objects

Complex business logic MUST be encapsulated in ActiveInteraction classes:
- One interaction per business operation
- Clear input validation with typed inputs
- Single responsibility per interaction
- Return results (success/failure) instead of raising exceptions
- Interactions are the primary unit test target for business logic

**Rationale**: Interactions provide a clear contract for business operations, make testing
easier, and keep controllers and models thin. They serve as the boundary between the web
layer and business logic.


А если заглянуть в код, то он очень даже неплох 🙂 Короче говоря - контент-план для блога у меня пополнился как минимум на одну позицию 🙂
😁2
#ruby #rails #elixir AppSignal прекрасны - только что они анонсировали бесплатный доступ к своей платформе. Но есть небольшие ограничения

- 50K requests
- 1GB logging
- 5-day retention

По идее этого должно хватать для старта или небольшого проекта
👍3
Вчерась Надысь наговнокодил в рамках тестирования Claude Code Skills сделал скиллы для rails-разработки. Поэтому если у кого есть желание потестировать и макнуть этого рукожопого мордой в его говнокод дать обратную связь - буду очень признателен 🙂
👍3
#rails #ruby #AI Если вы активно используете Claude Code для разработки rails-приложений, то вот эта тулза вам поможет немного экономить на токенах, обещают, что по сравнению с дефолтными страницами ошибок более чем 13-кратная экономия токенов
#apple #swift #android #mobile Несмотря на то, что сейчас новость о том, что Apple выпустила Swift Android SDK звучит из каждого утюга, подобные эксперименты проводились уже достаточно давно. Например вот ветка на формуме swift, где можно найти упоминания некоторых проектов на эту тему, но я помню и более ранние эксперименты, чуть ли не 10-летней давности (но скорее всего сейчас я их уже не найду). И хотя рано предрекать скорейшую гибель flutter, react native, kotlin native и их аналогов - инициатива действительно интересная.
👏2
#ruby #rails Несмотря на то, что я предпочитаю использовать shrine, вот этот гем зайдет тем, кто использует ActiveStorage. В двух словах - это mountable rails engine, которая представляет собой дашборд для всех загружаемых файлов.
👍4
#postgres #devops #db Уащпе красота! Postgresus - тулза для бэкапа БД и как понятно из названия, она заточена под PostgreSQL. Open Source, куча всяких опция для бекапа - всё, что мы любим
#AI ИНтересную задачу решают авторы этого проекта - оптимизация использования токенов в LLM посредством перехода от JSON на свой формат. Выглядит достаточно перспективно, например вместо


{
"users": [
{ "id": 1, "name": "Alice", "role": "admin" },
{ "id": 2, "name": "Bob", "role": "user" }
]
}


предполагается более компактная запись типа


users[2]{id,name,role}:
1,Alice,admin
2,Bob,user
😁2
Неожиданно Flowbite впустили версию 4.x (на момент написания 4.0.1) своего UI Kit. Что нового
- сделали 5 тем, которые можно применить сразу из коробки (modern, minimal, playful, enterprise, mono)
- все цвета стали переменными в css (как завещал Adam Рамзанович Wathan, автор TailwindCSS)
- оптимизировали код, сделали его компактнее в 2 раза, перенеся dark mode в css variables
- насыпали новых компонентов - cards, checkboxes и так далее
- улучшили документацию (не заметил, если честно, но ок)

В общем - надо пробовать и писать Zoltan, если найдём косяки 🙂
Поддался модному тренду и добавил в kickstart ажно целых 3 шаблона для inertia_rails - svelte (моя прееелесть), react и vue. Ссылка всё та же - туточки. #ruby #rails
2
🤔2😁1
Пу-пу-пу, в смысле вышел #ruby 4.0.0 preview 2. Я почитал описание и не могу сказать, что увидел какие-то изменения, которые сразу вызвали у меня вопль "вау!" и желание протестировать сборку, но вот краткое саммари того, что в ней есть

- Оператор *nil больше не вызывает nil.to_a, аналогично тому, как оператор **nil не вызывает nil.to_hash.
- Логические операторы (||, &&, and, or) на начало строки теперь продолжают предыдущую строку, как при использовании текущего оператора.
- Версия Unicode обновлена до 17.0.0, а Emoji Version — до 17.0. Эти обновления применяются как к строкам, так и к регулярным выражениям.
- Set теперь является встроенным классом вместо класса со срабатыванием в стандартной библиотеке.
- IO.select теперь принимает Float::INFINITY в качестве аргумента timeout.
- Обновления стандартной библиотеки
• ostruct 0.6.1
• pstore 0.2.0
• benchmark 0.4.0
• logger 1.7.0
• rdoc 6.13.1
• irb 1.15.2
• reline 0.6.1

И еще ряд изменений. В общем - ждём полноценного релиза, чтобы потестировать и (надеюсь) поразиться очередному приросту производительности и каким-нибудь ярким фичам
👍2
Вот эта новость прям совсем неожиданная - Anthropic приобрели bun. Согласно договоренностям bun остаётся бесплатным и open source (лицензия не меняется - всё та же MIT), команда продолжает работать над проектом. Основная концепция в том, чтобы claude code, написанный на bun, продолжал работать без рисков сломаться в самый неожиданный момент:

Claude Code ships as a Bun executable to millions of users. If Bun breaks, Claude Code breaks. Anthropic has direct incentive to keep Bun excellent.
Забавный факт - почему vite использует порт 5173

It’s actually VITE written strategically:

V → 5 (Roman numeral)
I → 1 (Roman numeral)
T → 7
E → 3

Put it together and you get 5173.
👍2
#opensource 37signals выложили в open source свой трекер Fizzy, исходный код как обычно на github - https://github.com/basecamp/fizzy