
datasette-agent-edit: агентное редактирование текстов в Datasette
Саймон Уиллисон выпустил datasette-agent-edit 0.1a0 — базовый плагин для агентного редактирования текстов в Datasette Agent с инструментами view, str_replace и insert.
datasette-agent-edit: агентное редактирование текстов в Datasette
7 июня 2026 года Саймон Уиллисон (Simon Willison) — автор Datasette и активный исследователь в области LLM — опубликовал первый альфа-релиз нового плагина datasette-agent-edit 0.1a0. Этот плагин становится фундаментом для целого класса инструментов агентного редактирования внутри экосистемы Datasette Agent.
Что такое Datasette Agent?
Саймон работает над своей Python-библиотекой LLM уже более трёх лет, и Datasette Agent стал моментом, когда LLM и Datasette наконец объединились. Одна из главных черт Datasette Agent — расширяемость через плагины; например, плагин datasette-agent-charts добавляет графики на базе Observable Plot прямо в интерфейс агента.
Агент использует datasette-llm для вызова языковых моделей. Вы можете настроить модель по умолчанию в файле datasette.yml.
Зачем понадобился datasette-agent-edit?
Автор планирует несколько плагинов для Datasette Agent, способных редактировать существующие фрагменты текста: совместное редактирование Markdown, обновление больших SQL-запросов и редактирование SVG-файлов.
Агентное редактирование текста — задача нетривиальная. Когда языковая модель работает с длинными документами, она не может просто «переписать» весь текст целиком: это дорого по токенам, медленно и чревато ошибками. Нужен более тонкий подход — точечные, хирургические изменения.
Вместо того чтобы воссоздавать одни и те же паттерны для каждого плагина, автор решил создать базовый плагин datasette-agent-edit, реализующий ключевые инструменты таким образом, чтобы их можно было адаптировать в других плагинах.
Вдохновение: редактор текстов Claude
Любимый опубликованный дизайн для такого рода задач — редактор текстов Claude (Claude text editor), который реализует следующие инструменты: view — просмотр разделов файла с добавлением номеров строк к каждой строке.
Этот инструмент похож на тот, что предлагался в рамках бета-версии Computer Use API, и применяет трюк, который Anthropic использует в Claude Artifacts и Claude Code для более эффективного редактирования файлов.
Полный набор команд инструмента включает: view — просмотр файла целиком или указанного диапазона; str_replace — точная замена строки в файле; create — создание нового файла с заданным содержимым; insert — вставка текста после указанного номера строки; undo_edit — отмена последнего изменения конкретного файла.
Ключевая идея: вместо полной перезаписи документа LLM делает минимальные, точно адресованные правки — как опытный редактор, а не как машинистка, перепечатывающая весь текст заново.
Три базовых инструмента в datasette-agent-edit
Автор адаптировал подход Claude Text Editor для экосистемы Datasette, реализовав три основных инструмента:
1. view — просмотр содержимого
Команда view позволяет просматривать содержимое файла или список файлов в директории. Она может читать файл целиком или конкретный диапазон строк.
Результат инструмента view включает содержимое файла с номерами строк перед каждой строкой (например, 1: def is_prime(n):). Номера строк не обязательны, но они необходимы для успешного использования параметра view_range при просмотре конкретных разделов файлов и параметра insert_line для добавления содержимого в точные места.
{
"command": "view",
"path": "/path/to/query.sql",
"view_range": [1, 30]
}
2. str_replace — точечная замена
Команда str_replace позволяет заменить конкретную строку в файле на новую. Она предназначена для точных правок.
Важная особенность: операция намеренно завершится ошибкой, если искомая строка встречается в документе больше одного раза. Это предотвращает случайные множественные замены и вынуждает модель быть достаточно конкретной.
{
"command": "str_replace",
"path": "/path/to/document.md",
"old_str": "## Введение\n\nЭто черновик.",
"new_str": "## Введение\n\nЭто финальная версия."
}
3. insert — вставка по номеру строки
Команда insert позволяет вставить текст в конкретное место файла. Это удобно, когда нужно добавить новый блок, не затрагивая существующий контент.
{
"command": "insert",
"path": "/path/to/report.md",
"insert_line": 15,
"new_str": "### Новый раздел\n\nДобавленный агентом контент."
}
str_replace позволяет изменить ровно нужный фрагмент, не трогая остальное — это и дешевле, и надёжнее.Как это работает: архитектура плагина
Плагин datasette-agent-edit является storage-agnostic (независимым от хранилища) — это означает, что он не привязан к конкретному способу хранения данных. Другие плагины могут использовать его базовые инструменты и адаптировать их под свои нужды: будь то хранение текстов в SQLite, файловой системе или любом другом бэкенде.
graph TD
A[Datasette Agent] --> B[datasette-agent-edit]
B --> C[view]
B --> D[str_replace]
B --> E[insert]
C --> F[Плагин: Markdown-редактор]
D --> F
E --> F
C --> G[Плагин: SQL-редактор]
D --> G
E --> G
C --> H[Плагин: SVG-редактор]
D --> H
E --> H
Каждая функция-обработчик инструмента должна быть асинхронной и принимать datasette и actor в качестве именованных аргументов, плюс любые параметры, определённые в input_schema.
Вот упрощённый пример того, как плагин-потребитель мог бы подключить инструменты редактирования:
from datasette import hookimpl
from datasette_agent.tools import AgentTool
from datasette_agent_edit import make_edit_tools
@hookimpl
def register_agent_tools(datasette):
# Получаем базовые инструменты редактирования
# и адаптируем их под свой бэкенд хранения
return make_edit_tools(
storage_backend=MyMarkdownStorage(datasette)
)
Планируемые плагины на основе datasette-agent-edit
В планах автора — несколько плагинов для Datasette Agent, которые смогут редактировать существующие текстовые фрагменты: совместное редактирование Markdown, обновление больших SQL-запросов и редактирование SVG-файлов.
Сравним, чем отличаются эти сценарии:
| Сценарий использования | Тип контента | Особенности редактирования |
|---|---|---|
| Markdown-редактор | Статьи, заметки | Структурированный текст, разделы |
| SQL-редактор | Запросы к БД | Строгий синтаксис, большие запросы |
| SVG-редактор | Векторная графика | XML-структура, координаты |
| Общий текстовый редактор | Любые файлы | Универсальные правки |
view, находит конкретное условие WHERE через str_replace и точечно меняет только его. Запрос сохраняет всю логику, меняется только то, что нужно.Место в экосистеме Datasette Agent
Экосистема Datasette Agent активно растёт. Уже существуют плагины: datasette-agent-openai-imagegen добавляет инструмент генерации изображений с помощью ChatGPT Images, а datasette-agent-sprites предоставляет инструменты для выполнения кода в постоянной песочнице Fly Sprites.
Claude Code и OpenAI Codex оказываются отличными помощниками при написании плагинов — достаточно указать им на репозиторий datasette-agent для справки и описать, что нужно сделать.
Благодаря новому JavaScript-хуку makeJumpSections(), добавленному в Datasette 1.0a30, datasette-agent теперь предлагает интерфейс «Начать новый чат с агентом» прямо в меню «Jump to», доступном по нажатию /.
0.1a0 является ранней альфой. API плагина и набор инструментов могут измениться до стабильного релиза. Не рекомендуется использовать в продакшене без тщательного тестирования.Почему этот подход правильный
Дизайн, вдохновлённый Claude Text Editor, решает фундаментальную проблему агентного редактирования: как сделать правки точными, предсказуемыми и экономичными по токенам?
Инструмент текстового редактора позволяет Claude напрямую взаимодействовать с файлами, оказывая практическую помощь, а не просто предлагая изменения.
Три принципа, которые делают этот подход надёжным:
- Номера строк — LLM всегда знает, где именно находится нужный фрагмент
- Уникальность замены —
str_replaceтребует уникального совпадения, что исключает случайные множественные правки - Атомарность — каждая операция минимальна и обратима
Агентное редактирование — это не магия, а грамотная инженерия: правильные инструменты, правильные ограничения, правильная обратная связь с моделью.
Итог
datasette-agent-edit 0.1a0 — небольшой, но важный строительный блок. Вместо того чтобы каждый плагин изобретал велосипед с логикой редактирования текста, теперь есть единая, проверенная основа. Это отражает философию Datasette в целом: строить расширяемые, компонуемые инструменты, которые хорошо работают вместе.
Следите за развитием проекта в репозитории datasette-agent-edit на GitHub и в блоге Саймона Уиллисона на simonwillison.net.