Несколько дней назад я опубликовал статью Создание инструмента генерации кода с помощью Rust и локальных LLM от Ollama

Проект Rustns призван упростить жизнь разработчикам Rust за счет автоматизации утомительных задач. Мой инструмент генерирует фрагменты кода Rust из объяснений пользователя, компилирует их, разрешает зависимости, генерирует тесты.

Изначально проект задумывался как универсальное решение для генерации кода для самых популярных языков программирования, включая Java, Python и TypeScript. Я стремился создать инструмент, который бы облегчил работу разработчиков, предоставляя возможность генерировать код сразу на нескольких языках. Однако, приступив к реализации мультиязычности, я столкнулся с серьёзными трудностями.

Попытка унифицировать код для различных языков оказалась куда более сложной задачей, чем я ожидал. Каждый язык программирования имеет свои особенности, что значительно усложняет код и поддержку всех этих языков в одном проекте.

В итоге я пришёл к выводу, что нужно сконцентрировать свои усилия на одном языке программирования. В моём случае это Rust, на котором был написан проект, генерирующий Rust-код.

Вот упрощенная диаграмм работы проекта:

С детальной логикой работы программы можно познакомится посмотрев диаграмму состояний, которую программа парсит и использует в свое работе.

Также все промпты, которые система посылает в LLM на основе диаграммы состояний можно увидеть в этом файле.

За последнее время в проекте я проделал следующие изменения:

  1. Версия 0.2.0: Перенёс текстовые запросы из кода в файл prompt.txt и логику обработки — в файл logic.md

  2. Версия 0.3.0: Добавил поддержку OpenAI API.

  3. Версия 0.4.0: Внёс изменения в функции извлечения результатов работы LLM. Функция Extract_code была заменена на три новые функции: extract_code, extract_dep и extract_test. Это разделение позволяет более тонко управлять извлечением кода, зависимостей и тестов из результатов генерации LLM.

Посетить мой репозиторий GitHub можно тут

Пожалуйста, проверьте мой файл README.md для получения инструкций по настройке и рекомендаций по внесению изменений в код.

P.S.

В целом, код достаточно универсален, и его можно использовать в своих личных целях, если Вам не интересна тема генерации кода на Rust. Например:

  1. Написать генератор кода для своего любимого языка программирования.

  2. Написать телеграм чат-бота для какого-то бизнеса.

  3. Написать имитатора учителя английского языка.

и т. д.

Комментарии (6)


  1. codecity
    20.09.2024 18:57

    Вопрос только один: почему это должно быть опенсорсным? Обычно под подобные проекты находят бюджеты и делают коммерческим, разрабы просто работают за зарплату.


    1. igumnov Автор
      20.09.2024 18:57
      +1

      Мне чисто по фану кодить этот проект. К тому же, не верю я в монетизацию в этой теме. Особенно когда выпустили в Open Source модель Gemma-2-2B после квантования, она на диске занимает 1.5 Гб. И она работает на слабом железе даже без видеокарты с минимумом RAM. Говорит на всех языках мира от русского до китайского, имеет энциклопедические знания на уровне Википедии. Даже может писать несложный код на любом языке программирования. Думаю, такие темпы оптимизации приведут к тому, что эти новомодные ИИ скоро будут запускаться и качественно работать на самых дешевых и слабых андроид-телефонах...


      1. Medeyko
        20.09.2024 18:57

        У меня скорее обратный вопрос - почему схема лицензирования GPL+выдуманная, вероятно, Вами несколько сомнительная несимметричная CLA, а не принятая в мире Rust'а MIT+Apache?

        Вы уверены, что найдёте много контрибьютеров при такой постановке вопроса - что Вы хозяин проекта и кода, и можете его под любой лицензией использовать, и самое любопытное, что он отдаёт Вам свой вклад аж под исключительной лицензией (т.е. не может применить его более нигде), а миру проект разрешается использовать только на условиях копилефтной GPL?

        Как я понимаю, потому что Вы такой подход уже для других своих проектов используете, а в данном конкретном случае специально не задумывались?

        Тогда вопрос распадается на два: чем был обусловлен изначальный выбор схемы лицензирования и не хотите ли Вы подумать над тем, чтобы в данном случае пересмотреть её в пользу пермиссивных MIT+Apache, без этих хитростей с CLA?

        Или Вы таки надеетесь с какого-то момента начать зарабатывать коммерческими лицензиями на этот продукт?

        В любом случае, удачи Вам с проектом!


        1. igumnov Автор
          20.09.2024 18:57

          Ну, вдруг зайдёт и инвесторы постучатся, а у меня уже всё ок с лицензией. А так, реально по фану кодирую.


  1. MountainGoat
    20.09.2024 18:57
    +1

    Вообще, под Rust перенесли уже все основные и популярные ML и дата пакеты. То есть есть ненулевые шансы потеснить Питон на этом месте. На Питоне конечно удобно разрабатывать, но распространять потом - это пипец. Вот только вчера не смог воспользоваться PuLID для Flux: Поставьте Питон 3.10, потом создайте venv, потом поставьте пакеты... а они падают при установке, и что теперь? Надолбавшись с venv-ами, мне один трёхгигабайтный ЕХЕшник и то кажется более удобным вариантом.


    1. codecity
      20.09.2024 18:57
      +1

      но распространять потом - это пипец

      Вы зрите в корень. Притом что и разрабатывать я бы не сказал что удобно.

      потом создайте venv, потом поставьте пакеты... а они падают при установке, и что теперь?

      Иногда помогает указать более старую версию, типа pip3 install package_name==x.y.z. Хуже когда одна зависимая либа требует версию 2.0 или старше, а вторая 1.0 и не старше.