Donna готова к использованию ru en
Как работает Donna.
В феврале я выпустил Donna(оригинальный пост) — CLI-утилиту для запуска агентных сценариев как стейт-машин и их описания в Markdown-файлах.
Поскольку я разрабатывал её одновременно разбираясь как работать с агентами, у меня получился переусложнённый, универсальный монстр. Donna имела много полезных функций, но совместно они слишком сильно ограничивали окружение разработчика и требовали слишком много времени на изучение.
Поэтому, набравшись опыта, я решил следовать философии Unix и отрефакторить монолит в набор меньших инструментов, каждый с отдельной чёткой зоной ответственности. Новая Donna — это первый из них (второй — это depmesh — я расскажу о нём в отдельном посте).
Новая Donna решает проблемы управления потоком исполнения агентов при длительной работе. Логика следующая:
- Большая часть разработки на мета-уровне повторяема: «запусти этот инструмент, что-то сделай с его выводом, запусти другой инструмент» или «реализуй функцию A, реализуй тесты для функции A, реализуй функцию B, …».
- Одни части этой работы требуют сложных рассуждений, другие — нет.
- Агенты
почтихороши в рассуждениях, но плохо держат в голове весь процесс: что уже сделали, что нужно сделать, в каком порядке, etc. - Поэтому логично отделить рассуждение от контроля потока исполнения — пусть агенты сосредоточатся на том, в чём они хороши, а поток можно отдать традиционным инструментам автоматизации.
Donna исполняет сценарии как детерминированные конечные автоматы, поэтому агент может сосредоточиться на рассуждении, генерации кода и другой агентной работе.
Как Donna работает
Вы описываете сценарий в одном читаемом Markdown-файле. Агент просит Donna провести его через сценарий; Donna хранит состояние выполнения, выбирает следующую операцию и говорит агенту, что делать или что сообщать дальше.
Сценарии могут запускать дочерние сценарии, генерироваться на лету или изменяться во время выполнения. Например, у вас может быть сценарий, который проводит агента через процесс планирования, и на последнем шаге агент может сгенерировать новый сценарий с подробным планом работы, после чего сразу же его запустить.
Как бонус, Donna экономит токены, потому что агенту не нужно рассуждать о контроле потока исполнения или о том, как запускать конкретные команды CLI и другие инструменты автоматизации.
Пример
Вот игрушечный пример сценария, который получает текущее время, спрашивает агента, не пора ли пить чай, и разветвляется в зависимости от ответа агента.
Абстрактная схема сценария выглядит так:
[Get Current Time]
|
v
[Ask About Tea]
|
+----+----+
| |
yes no
| |
v |
[Turn On |
Kettle] |
| |
+----+----+
|
v
[Finish]
И вот исходник этого сценария:
# Is it time to drink tea?
This workflow checks the current time, asks the agent whether it is tea time,
and branches on the answer.
## Get Current Time
```toml donna
id = "get_current_time"
kind = "donna.lib.run_script"
save_stdout_to = "current_time"
goto_on_success = "ask_about_tea"
goto_on_failure = "finish"
```bash donna script #!/usr/bin/env bash date +%H:%M
## Ask About Tea
```toml donna
id = "ask_about_tea"
kind = "donna.lib.request_action"
The current time is:
{{ donna.lib.task_variable("current_time") }}
Is it time to drink tea?
- If yes,
{{ donna.lib.goto("turn_on_kettle") }}. - If no,
{{ donna.lib.goto("finish") }}.
Turn On Kettle
```toml donna id = "turn_on_kettle" kind = "donna.lib.request_action"
Turn on the kettle, then `{{ donna.lib.goto("finish") }}`.
## Finish
```toml donna
id = "finish"
kind = "donna.lib.finish"
The workflow is complete. You are a good butler. ```
Сценарий взят из README.md проекта, подробное объяснение его работы можно найти там.
Реальное использование
Мой основной вариант использования Donna — это создание сценариев полировки кода, например, вроде этого: polish.donna.md.
Такой сценарий форматирует код, запускает тесты, линтеры, проверяет орфографию и так далее, а если он находит какие-то проблемы, то просит агента их исправить. Сценарий работает пока все проблемы не будут исправлены, выполняя проверки в фиксированном порядке после каждого изменения.
Мой агент инструктирован запускать полировку кода как последний шаг выполнения задачи и после каждого значительного этапа работы, когда проект должен быть в согласованном состоянии.
Подобный подход избавляет меня от большого количества ручной работы и сокращает время на код ревью, особенно после того как я добавил tach в свои проекты для контроля зависимостей кода.
Другой вариант использования — это попросить агента создать сценарий для себя, когда ему нужно сделать что-то сложное. Например, когда я хочу убедиться, что многоэтапный рефакторинг выполняется в правильной последовательности, или что каждый файл обрабатывается одинаково.
Моя жена недавно начала использовать Donna для перевода китайских романов для личного пользования. Я помог ей создать около 5 сценариев; она итеративно настроила их для получения ожидаемого поведения и качества, и теперь они переводят что-то в фоновом режиме. Написание кода не требовалось.
Ищу первых пользователей
Я использую Donna каждый день и думаю, что она может принести много пользы другим. Поэтому, если вам интересно, попробуйте её и дайте мне знать, что вы думаете. Я всегда готов помочь, а ваш отзыв для меня очень важен.
Не беспокойтесь о долгосрочной поддержке — я использую Donna во всех своих проектах каждый день, так что я буду поддерживать её в любом случае. И я быстро внедряю новые функции и исправляю ошибки по запросу.
Читать далее
- Donna — предсказуемость и управляемость для ваших агентов
- Сходил в гости в подкаст «Две Столицы — Уютный IT Подкаст»
- Заметки про coding agents
- Пара слов о GitHub Сopilot
- Мои GPT-шки и prompt engineering
- Feeds Fun — читалка новостей с тегами и ChatGPT
- LLM агенты всё ещё не подходят для реальных задач
- Prompt engineering: строим промпты от бизнес кейсов
- Мигрируем с GPT-3.5-turbo на GPT-4o-mini
- Топовые LLM фреймворки могут быть не так надёжны, как вы думаете