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?
Datasette — инструмент с открытым исходным кодом для исследования и публикации данных. Он позволяет превратить любой набор данных в интерактивный сайт с API. Подробнее: datasette.io

Зачем понадобился 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 лучше полной замены?
Когда LLM редактирует большой документ, пересылка всего содержимого туда и обратно дорого обходится в токенах. Подход 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-структура, координаты
Общий текстовый редакторЛюбые файлыУниверсальные правки
📝 Пример: агентное редактирование SQL
Представьте: у вас есть сложный SQL-запрос на 150 строк. Вместо того чтобы генерировать его заново, агент читает нужный фрагмент через 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 напрямую взаимодействовать с файлами, оказывая практическую помощь, а не просто предлагая изменения.

Три принципа, которые делают этот подход надёжным:

  1. Номера строк — LLM всегда знает, где именно находится нужный фрагмент
  2. Уникальность заменыstr_replace требует уникального совпадения, что исключает случайные множественные правки
  3. Атомарность — каждая операция минимальна и обратима

Агентное редактирование — это не магия, а грамотная инженерия: правильные инструменты, правильные ограничения, правильная обратная связь с моделью.

Итог

datasette-agent-edit 0.1a0 — небольшой, но важный строительный блок. Вместо того чтобы каждый плагин изобретал велосипед с логикой редактирования текста, теперь есть единая, проверенная основа. Это отражает философию Datasette в целом: строить расширяемые, компонуемые инструменты, которые хорошо работают вместе.

Следите за развитием проекта в репозитории datasette-agent-edit на GitHub и в блоге Саймона Уиллисона на simonwillison.net.