Несколько дней назад я опубликовал статью Создание инструмента генерации кода с помощью Rust и локальных LLM от Ollama
Проект Rustns призван упростить жизнь разработчикам Rust за счет автоматизации утомительных задач. Мой инструмент генерирует фрагменты кода Rust из объяснений пользователя, компилирует их, разрешает зависимости, генерирует тесты.
Изначально проект задумывался как универсальное решение для генерации кода для самых популярных языков программирования, включая Java, Python и TypeScript. Я стремился создать инструмент, который бы облегчил работу разработчиков, предоставляя возможность генерировать код сразу на нескольких языках. Однако, приступив к реализации мультиязычности, я столкнулся с серьёзными трудностями.
Попытка унифицировать код для различных языков оказалась куда более сложной задачей, чем я ожидал. Каждый язык программирования имеет свои особенности, что значительно усложняет код и поддержку всех этих языков в одном проекте.
В итоге я пришёл к выводу, что нужно сконцентрировать свои усилия на одном языке программирования. В моём случае это Rust, на котором был написан проект, генерирующий Rust-код.
Вот упрощенная диаграмм работы проекта:
С детальной логикой работы программы можно познакомится посмотрев диаграмму состояний, которую программа парсит и использует в свое работе.
Также все промпты, которые система посылает в LLM на основе диаграммы состояний можно увидеть в этом файле.
За последнее время в проекте я проделал следующие изменения:
Версия 0.2.0: Перенёс текстовые запросы из кода в файл
prompt.txt
и логику обработки — в файлlogic.md
Версия 0.3.0: Добавил поддержку OpenAI API.
Версия 0.4.0: Внёс изменения в функции извлечения результатов работы LLM. Функция
Extract_code
была заменена на три новые функции:extract_code
,extract_dep
иextract_test
. Это разделение позволяет более тонко управлять извлечением кода, зависимостей и тестов из результатов генерации LLM.
Посетить мой репозиторий GitHub можно тут
Пожалуйста, проверьте мой файл README.md для получения инструкций по настройке и рекомендаций по внесению изменений в код.
P.S.
В целом, код достаточно универсален, и его можно использовать в своих личных целях, если Вам не интересна тема генерации кода на Rust. Например:
Написать генератор кода для своего любимого языка программирования.
Написать телеграм чат-бота для какого-то бизнеса.
Написать имитатора учителя английского языка.
и т. д.
Комментарии (6)
MountainGoat
20.09.2024 18:57+1Вообще, под Rust перенесли уже все основные и популярные ML и дата пакеты. То есть есть ненулевые шансы потеснить Питон на этом месте. На Питоне конечно удобно разрабатывать, но распространять потом - это пипец. Вот только вчера не смог воспользоваться PuLID для Flux: Поставьте Питон 3.10, потом создайте venv, потом поставьте пакеты... а они падают при установке, и что теперь? Надолбавшись с venv-ами, мне один трёхгигабайтный ЕХЕшник и то кажется более удобным вариантом.
codecity
20.09.2024 18:57+1но распространять потом - это пипец
Вы зрите в корень. Притом что и разрабатывать я бы не сказал что удобно.
потом создайте venv, потом поставьте пакеты... а они падают при установке, и что теперь?
Иногда помогает указать более старую версию, типа pip3 install package_name==x.y.z. Хуже когда одна зависимая либа требует версию 2.0 или старше, а вторая 1.0 и не старше.
codecity
Вопрос только один: почему это должно быть опенсорсным? Обычно под подобные проекты находят бюджеты и делают коммерческим, разрабы просто работают за зарплату.
igumnov Автор
Мне чисто по фану кодить этот проект. К тому же, не верю я в монетизацию в этой теме. Особенно когда выпустили в Open Source модель Gemma-2-2B после квантования, она на диске занимает 1.5 Гб. И она работает на слабом железе даже без видеокарты с минимумом RAM. Говорит на всех языках мира от русского до китайского, имеет энциклопедические знания на уровне Википедии. Даже может писать несложный код на любом языке программирования. Думаю, такие темпы оптимизации приведут к тому, что эти новомодные ИИ скоро будут запускаться и качественно работать на самых дешевых и слабых андроид-телефонах...
Medeyko
У меня скорее обратный вопрос - почему схема лицензирования GPL+выдуманная, вероятно, Вами несколько сомнительная несимметричная CLA, а не принятая в мире Rust'а MIT+Apache?
Вы уверены, что найдёте много контрибьютеров при такой постановке вопроса - что Вы хозяин проекта и кода, и можете его под любой лицензией использовать, и самое любопытное, что он отдаёт Вам свой вклад аж под исключительной лицензией (т.е. не может применить его более нигде), а миру проект разрешается использовать только на условиях копилефтной GPL?
Как я понимаю, потому что Вы такой подход уже для других своих проектов используете, а в данном конкретном случае специально не задумывались?
Тогда вопрос распадается на два: чем был обусловлен изначальный выбор схемы лицензирования и не хотите ли Вы подумать над тем, чтобы в данном случае пересмотреть её в пользу пермиссивных MIT+Apache, без этих хитростей с CLA?
Или Вы таки надеетесь с какого-то момента начать зарабатывать коммерческими лицензиями на этот продукт?
В любом случае, удачи Вам с проектом!
igumnov Автор
Ну, вдруг зайдёт и инвесторы постучатся, а у меня уже всё ок с лицензией. А так, реально по фану кодирую.