smol developer

by smol.ai (open source) · Python, GPT, локальные модели через API

Assistant AI Assistants Open Source не обновлялся >2 лет

Первая библиотека, позволившая встраивать developer-агента в собственное приложение. Один из первопроходцев жанра автономных AI dev-агентов (от известного в AI-сообществе разработчика swyx).


Установка
# установка из репозитория
git clone https://github.com/smol-ai/developer.git
cd developer
poetry install # install dependencies. pip install poetry if you need

# или установка как библиотеки
pip install smol_dev
показать оригинал переведено ИИ

🐣 smol developer

Deploy agent on e2b button Morph Morph

Человекоцентричный и связный синтез целой программы aka ваш личный помощник-разработчик-новичок

Создавай то, что создаёт то! smol dev для каждого разработчика в любой ситуации

Это агент-"новичок-разработчик" (aka smol dev), который:

  1. генерирует структуру entire codebase на основе вашего продуктового описания
  2. даёт базовые строительные блоки для создания smol developer внутри вашего собственного приложения.

Вместо создания и поддержки конкретных, жёстких, одноразовых шаблонов, таких как create-react-app или create-nextjs-app, это в некотором смысле является или помогает создать create-anything-app, где вы развиваете свой шаблон-запрос в tight loop с вашим smol dev.

После успешного начального запуска v0, smol developer был переписан чтобы стать ещё более smol-ler и быть доступным как библиотека!

Базовое использование

В режиме репозитория Git

# install
git clone https://github.com/smol-ai/developer.git
cd developer
poetry install # install dependencies. pip install poetry if you need

# run
python main.py "a HTML/JS/CSS Tic Tac Toe Game" # defaults to gpt-4-0613
# python main.py "a HTML/JS/CSS Tic Tac Toe Game" --model=gpt-3.5-turbo-0613

# other cli flags
python main.py --prompt prompt.md # for longer prompts, move them into a markdown file
python main.py --prompt prompt.md --debug True # for debugging

Это позволяет разрабатывать приложения с человеком в петле, как в оригинальной версии smol developer.

разработка с использованием подсказок, а не их настройка

Демо-пример в prompt.md демонстрирует потенциал AI-включённого, но всё ещё твёрдо человекоцентричного workflow:

  • человек пишет базовый запрос для приложения, которое хочет создать
  • main.py генерирует код
  • человек запускает/читает код
  • человек может:
  • просто добавлять в запрос по мере обнаружения недостаточно точных частей запроса
  • вручную запускать код и идентифицировать ошибки
  • вставлять ошибку в запрос, как он бы заполнил GitHub Issue
  • для дополнительной помощи он может использовать debugger.py, который читает entire codebase для предложения конкретных изменений кода

Повторяйте, пока не достигнете счастья. Обратите внимание, что AI используется только так долго, пока он добавляет ценность — как только он начинает мешать, просто возьмите control над codebase от вашего маленького помощника без проблем и обид. (мы также можем заставить smol-dev взять control над существующей codebase и создать собственный запрос... но это Future Direction)

Таким образом вы можете использовать ваш собственный клон этого репозитория для прототипирования/разработки вашего приложения.

В режиме библиотеки

Это новая функция в smol developer v1! Добавьте smol developer в ваши собственные проекты!

pip install smol_dev

Здесь вы можете рассмотреть содержимое main.py как нашу "документацию" того, как использовать эти функции и запросы в вашем собственном приложении:

from smol_dev.prompts import plan, specify_file_paths, generate_code_sync

prompt = "a HTML/JS/CSS Tic Tac Toe Game"

shared_deps = plan(prompt) # returns a long string representing the coding plan

# do something with the shared_deps plan if you wish, for example ask for user confirmation/edits and iterate in a loop

file_paths = specify_file_paths(prompt, shared_deps) # returns an array of strings representing the filenames it needs to write based on your prompt and shared_deps. Relies on OpenAI's new Function Calling API to guarantee JSON.

# do something with the filepaths if you wish, for example display a plan

# loop through file_paths array and generate code for each file
for file_path in file_paths:
    code = generate_code_sync(prompt, shared_deps, file_path) # generates the source code of each file

    # do something with the source code of the file, eg. write to disk or display in UI
    # there is also an async `generate_code()` version of this

В режиме API (через Agent Protocol)

Чтобы запустить сервер выполните команду:

poetry run api

или

python smol_dev/api.py

и затем вы можете вызвать API с помощью следующих команд:

Чтобы создать задачу выполните команду:

curl --request POST \
  --url http://localhost:8000/agent/tasks \
  --header 'Content-Type: application/json' \
  --data '{
    "input": "Write simple script in Python. It should write '\''Hello world!'\'' to hi.txt"
}'

Вы получите ответ вроде этого:

{"input":"Write simple script in Python. It should write 'Hello world!' to hi.txt","task_id":"d2c4e543-ae08-4a97-9ac5-5f9a4459cb19","artifacts":[]}

Затем чтобы выполнить один шаг задачи скопируйте task_id, полученный в предыдущем запросе, и выполните команду:

curl --request POST \
  --url http://localhost:8000/agent/tasks/<task-id>/steps

или вы можете использовать библиотеку Python-клиента:

from agent_protocol_client import AgentApi, ApiClient, TaskRequestBody

...

prompt = "Write simple script in Python. It should write 'Hello world!' to hi.txt"

async with ApiClient() as api_client:
    # Create an instance of the API class
    api_instance = AgentApi(api_client)
    task_request_body = TaskRequestBody(input=prompt)

    task = await api_instance.create_agent_task(
        task_request_body=task_request_body
    )
    task_id = task.task_id
    response = await api_instance.execute_agent_task_step(task_id=task_id)

...

examples/галерея запросов

  • 6-минутное видео-демо - (извините за ускоренную аудио, мы оптимизировали для Twitter, плохой выбор)
    • это было оригинальное демо smol developer — от запроса до полного расширения Chrome, которое запрашивает и хранит apikey, генерирует всплывающее окно, читает и передаёт содержимое страницы и полезно сводит любой сайт с Anthropic Claude, переключая модели до 100k на основе длины входных данных
    • запрос находится в prompt.md и выводит /exampleChromeExtension
  • smol-plugin - запрос для ChatGPT плагина (твит, форк)

Я активно ищу больше примеров, отправляйте свои PR!

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

основные форки/альтернативы

просим присылать альтернативные реализации и стратегии развертывания на других стеках!

  • JS/TS: https://github.com/PicoCreator/smol-dev-js Чистая JS-версия smol-dev, позволяющая делать ещё более «smoler» инкрементные изменения через запросы (если вы не хотите делать всю spec2code), и позволяющая подключить его к любому проекту в реальном времени (в лучшую или худшую сторону)
  • C#/Dotnet: https://github.com/colhountech/smol-ai-dotnet на C#!
  • Golang: https://github.com/tmc/smol-dev-go на Go
  • https://github.com/gmchad/smol-plugin автоматически генерирует @openai-плагины, указывая ваш API в markdown-формате в стиле smol-developer
  • ваш форк здесь!

инновации и инсайты

Пожалуйста, подпишитесь на https://latent.space/ для более подробного обзора, инсайтов и размышлений

  • Markdown — всё, что вам нужно — Markdown идеален для синтеза целых программ, потому что легко смешивать английский и код (будь то variable_names или целые ``` кодовые блоки)
    • оказывается, можно задавать запросы в коде внутри запросов, и GPT-4 будет выполнять их точно
  • Программирование «копируй и вставляй»
    • учим программу понимать, как писать код для нового API (Anthropic API появился после GPT-3 knowledge cutoff) просто вставляя curl-запросы и ответы
    • вставляем сообщения об ошибках в запрос и неопределенно говорим программе, как вы хотели бы, чтобы она это обработала. Это как будто «программирование на основе журнала».
  • Отладка с помощью cat всей кодовой базы вместе с вашим сообщением об ошибке и получение конкретных рекомендаций по исправлению — особенно приятно!
  • Трюки для целостности программы — наш случай использования, Chrome Extensions, имеет множество косвенных зависимостей между файлами. Любое искажение кросс-зависимостей приводит к ошибке всей программы.
    • Мы решали это, добавляя промежуточный шаг, когда просим GPT подумать над shared_dependencies.md, а затем требуем использовать его при генерации каждого файла. Это позволяет GPT «разговаривать с самим собой»...
    • ... но это ещё не идеально. shared_dependencies.md иногда не охватывает все зависимости между файлами. Поэтому мы решали это, указав конкретное name в запросе. Сначала это казалось «грязным», но это работает, и в конце концов это просто чёткая, однозначная коммуникация.
    • смотрите prompt.md для SOTA smol-dev запросов
  • Низкий порог для неизвестных API
    • мы никогда не изучали CSS-анимацию, но теперь можем просто сказать, что хотим «насыщенный красно-белый анимированный полоскированный индикатор загрузки» и он сделает это
    • то же самое касается Chrome Extension Manifest v3 — документация является кошмаром, но к счастью нам больше не нужно читать её, чтобы выполнить простую задачу
    • документация Anthropic (плохая плохая) не содержала информации о возвращаемом формате. Поэтому просто используйте curl и вставьте в запрос, лол.
  • Modal — всё, что вам нужно — мы выбрали Modal, чтобы решить 4 задачи:
    • решить ад в зависимостях Python в dev и prod
    • параллельная генерация кода
    • простой путь от локальной разработки к хостингу в облаке (в будущем)
    • отказоустойчивые вызовы OpenAI API с задержками и backoff, а также прикреплённое хранилище (для будущего использования)

Пожалуйста, подпишитесь на https://latent.space/ для более подробного обзора, инсайтов и размышлений

caveats

Мы работали над Chrome Extension, который требует генерации изображений, поэтому добавили некоторые коды, специфичные для этого случая, чтобы не удалять/перегенерировать их. Мы ещё не определились, как это обобщить. Мы не имеем доступа к GPT-4 32K, но если бы у нас был доступ, мы бы изучили загрузку всей документации API/SDK в контекст.

Цикл обратной связи сейчас очень медленный (time говорит около 2-4 минут на генерацию программы с GPT-4, даже с параллелизацией благодаря Modal (время от времени превышая это)), но есть вероятность, что это улучшится с временем (см. также "будущие направления" ниже).

будущие направления

Вещи, которые стоит попробовать/с радостью обсудить в открытых задачах и принять pull requests:

  • указывать .md файлы для каждого сгенерированного файла, с дополнительными подсказками, которые могут детализировать вывод в каждом из них
    • то есть примерно так popup.html.md и content_script.js.md и так далее
  • создавать начальный prompt.md для существующих кодовых баз - написать скрипт, который читает кодовую базу и пишет описательный, точечный prompt, генерирующий его
    • сделано с помощью smol pm, но пока это не очень хорошо - с нетерпением жду сосредоточенной полировки/усилий, пока мы не получим квайн smol developer, который может генерировать самого себя lmao
  • возможность устанавливать собственные зависимости
    • это проникает в зависимость от среды выполнения, о чём мы все знаем — путь к зависимостям. Как избежать? Докеризовать? Никс? веб-контейнер?
    • Modal имеет интересную возможность: генерировать функции, которые говорят на языке Modal, что также решает проблему зависимостей https://twitter.com/akshat_b/status/1658146096902811657
  • самовосстановление путём запуска кода самостоятельно и использования ошибок как информации для повторного запроса
    • однако получить ошибки из окружения расширения Chrome не очень просто, поэтому мы не пробовали это
  • использование anthropic как слоя кодирования
    • вы можете запустить modal run anthropic.py --prompt prompt.md --outputdir=anthropic чтобы попробовать
    • но это не работает, потому что anthropic не очень хорошо следует инструкциям для генерации кода файлов.
  • создавать агентов, которые автономно запускают этот код в цикле/наблюдают за файлом prompt и перегенерируют код каждый раз, в новой ветке Git
    • код мог бы быть сгенерирован на 5 параллельных Git-ветках, и проверка их вывода просто подразумевала бы переключение Git-веток
Войдите, чтобы оставить комментарий