Почему я разработал Code2Prompt
Введение
Заголовок раздела «Введение»Меня всегда увлекало, как большие языковые модели (LLM) преобразуют рабочие процессы кодирования — генерируют тесты, комментарии или даже реализуют целые функции за считанные минуты. Но когда я глубже погрузился в эти модели, выявились несколько критических проблем:
Трудности планирования | Высокие затраты на токены | Галлюцинации |
---|---|---|
🧠 ➡️ 🤯 | 🔥 ➡️ 💸 | 💬 ➡️ 🌀 |
Именно поэтому я начал работать над code2prompt
, инструментом на основе Rust, который помогает подавать в LLM именно тот контекст, который необходим.
В этом посте я поделюсь своей историей и объясню, почему я убежден, что code2prompt
актуален сегодня и прекрасно интегрируется, и почему он стал моим основным решением для более быстрых и эффективных рабочих процессов кодирования с ИИ.
Первые шаги с LLM 👣
Заголовок раздела «Первые шаги с LLM 👣»Я начал экспериментировать с LLM в OpenAI Playground
с text-davinci-003
, когда он приобрел популярность в ноябре 2023 года. Языковые модели открыли новую революцию. Это было похоже на наличие блестящего нового помощника, который мог генерировать单元-тесты и комментарии почти по команде. Я наслаждался тестированием моделей на их пределах — проверкой всего, от небольших разговоров и этических дилемм до jailbreaks и сложных задач кодирования. Однако, когда я взялся за более крупные проекты, я быстро осознал, что модели имеют явные ограничения. Сначала я мог поместить в окно контекста только несколько сотен строк кода, и даже тогда модели часто с трудом понимали назначение или структуру кода. Именно поэтому я быстро осознал, что важность контекста имеет первостепенное значение. Чем более краткими были мои инструкции и лучше контекст, тем лучше результаты.
Эволюция моделей 🏗️
Заголовок раздела «Эволюция моделей 🏗️»Модели могли производить впечатляющие результаты, но часто испытывали трудности с более крупными кодовыми базами или сложными задачами. Я обнаружил, что трачу больше времени на создание подсказок, чем на фактическое кодирование. В то же время модели продолжали улучшаться с выпуском новых версий. Они увеличивали способности рассуждения и размер контекста, предлагая новые перспективы и возможности. Я мог поместить в окно контекста почти две тысячи строк кода, и результаты улучшились. Я мог написать целые функции за несколько итераций, и меня поразило, как быстро я мог получить результаты. Я был убежден, что LLM — это будущее кодирования, и я хотел быть частью этой революции. Я твердо верю, что ИИ не заменит нас пока. Но будет помогать нам в качестве помощников, где люди по-прежнему являются экспертами и контролируют ситуацию.
Мои первые проекты с LLM 🚀
Заголовок раздела «Мои первые проекты с LLM 🚀»Я начал писать модуль поиска пути ROS
для роботизированного соревнования, генерировать функции для кроссплатформенного приложения Flutter
с чистой архитектурой и создал небольшое веб-приложение для отслеживания расходов в Next.js
. Тот факт, что я создал это небольшое приложение за один вечер, в фреймворке, с которым я никогда не работал раньше, был поворотным моментом для меня; LLM были не просто инструментами, но и умножителями. Я разработал bboxconverter
, пакет для преобразования ограничивающих рамок, и список продолжается. LLM могут помочь вам быстро изучить новые технологии и фреймворки; это потрясающе.
Новый парадигма: Software 3.0 💡
Заголовок раздела «Новый парадигма: Software 3.0 💡»Я глубже погрузился в LLM и начал создавать агентов и скелеты вокруг них. Я повторил известную статью RestGPT. Идея отличная: дать LLM возможность вызывать некоторые REST API с помощью спецификации OpenAPI, такие как Spotify
или TMDB
. Эти возможности вводят новый парадигму программирования программного обеспечения, который я называю Software 3.0.
Software 1.0 | Software 2.0 | Software 3.0 |
---|---|---|
На основе правил | На основе данных | Агентный |
Та же идея привела к протоколу MCP, который позволяет LLM вызывать инструменты и ресурсы напрямую бесшовным образом, потому что по дизайну инструмент нуждается в описании, чтобы быть вызванным LLM, в отличие от REST API, который не обязательно требует спецификации OpenAPI.
Ограничения LLM 🧩
Заголовок раздела «Ограничения LLM 🧩»Галлюцинации 🌀
Заголовок раздела «Галлюцинации 🌀»При повторении известной статьи RESTGPT
я заметил некоторые серьезные ограничения LLM. Авторы статьи столкнулись с теми же проблемами, что и я: LLM галлюцинировали. Они генерируют код, который не реализован, изобретая аргументы и просто следуя инструкциям буквально без использования здравого смысла. Например, в исходном коде RestGPT авторы спросили в подсказке вызывающего.
“не быть слишком умным и не придумывать шаги, которых нет в плане.”
Я нашел это заявление забавным и очень интересным, потому что это был первый раз, когда я встретил кого-то, кто инструктирует LLM не галлюцинировать.
Ограниченный размер контекста 📏
Заголовок раздела «Ограниченный размер контекста 📏»Другим ограничением был размер контекста; LLM хорошо справляются с поиском иголки в стоге сена, но с трудом понимают его. Когда вы даете слишком много контекста языковым моделям, они склонны теряться в деталях и теряют из виду общую картину, что раздражает и требует постоянного управления. Способ, которым я люблю думать об этом, похож на проклятие размерности. Замените слово “размерность” или “функция” на “контекст”, и вы получите идею.
Чем больше контекста вы даете LLM, тем труднее найти правильный ответ. Я придумал nice предложение, чтобы суммировать эту идею:
Предоставьте как можно меньше контекста, но как можно больше, чем необходимо
Это heavily вдохновлено известным цитатой Alain Berset, швейцарского политика 🇨🇭, который сказал во время карантина COVID-19:
“Мы хотим действовать как можно быстрее, но и как можно медленнее, когда это необходимо”
Это представляет идею компромисса и применяется к размеру контекста LLM!
Поиск лучшего способа: code2prompt 🔨
Заголовок раздела «Поиск лучшего способа: code2prompt 🔨»Следовательно, мне нужен был способ быстро загружать, фильтровать и организовывать контекст моего кода, предоставляя как можно меньше контекста с лучшим качеством. Я попробовал вручную копировать файлы или фрагменты в подсказки, но это стало неудобным и подверженным ошибкам. Я знал, что автоматизация tedious процесса создания контекста для запросов лучших подсказок будет полезна. Затем, однажды, я ввел “code2prompt” в Google, надеясь найти инструмент, который напрямую подключает мой код к подсказкам.
И, voilà, я обнаружил проект на основе Rust Mufeed под названием code2prompt, который имеет около 200 звезд на GitHub. Это было еще просто на тот момент: простой инструмент CLI с базовой ограниченной емкостью фильтрации и шаблонами. Я увидел огромный потенциал и сразу же присоединился к нему, реализовав совпадение шаблонов glob, среди других функций, и вскоре стал основным участником.
Видение и интеграции 🔮
Заголовок раздела «Видение и интеграции 🔮»Сегодня существует несколько способов предоставить контекст LLM. Генерация из более крупного контекста, использование генерации на основе извлечения (RAG), сжатие кода, или даже использование комбинации этих методов. Создание контекста — это горячая тема, которая будет быстро развиваться в ближайшие месяцы. Однако, мой подход — KISS: Keep It Simple, Stupid. Лучший способ предоставить контекст LLM — использовать самый простой и эффективный способ. Вы создаете именно тот контекст, который вам нужен; это детерминировано, в отличие от RAG.
Именно поэтому я решил продвинуть code2prompt
дальше как простой инструмент, который можно использовать в любом рабочем процессе. Я хотел сделать его легким в использовании, легким в интеграции и легким в расширении. Именно поэтому я добавил новые способы взаимодействия с инструментом.
- Core: Ядро
code2prompt
— это библиотека Rust, которая предоставляет базовую функциональность для создания контекста из вашей кодовой базы. Она включает в себя простой API для загрузки, фильтрации и организации контекста вашего кода. - CLI: Интерфейс командной строки — это самый простой способ использования
code2prompt
. Вы можете создать контекст из вашей кодовой базы и напрямую подключить его к вашим подсказкам. - Python API: Python API — это простой wrapper вокруг CLI, который позволяет вам использовать
code2prompt
в ваших Python-скриптах и агентах. Вы можете создать контекст из вашей кодовой базы и напрямую подключить его к вашим подсказкам. - MCP: Сервер
code2prompt
MCP позволяет LLM использоватьcode2prompt
как инструмент, тем самым делая их способными создавать контекст.
Видение описано дальше на странице видения в документации.
Интеграция с агентами 👤
Заголовок раздела «Интеграция с агентами 👤»Я считаю, что будущие агенты будут нуждаться в способе потреблять контекст, и code2prompt
— это простой и эффективный способ сделать это для текстовых репозиториев, таких как кодовая база, документация или заметки. Типичное место для использования code2prompt
будет в кодовой базе с осмысленными соглашениями об именовании. Например, в чистой архитектуре есть четкое разделение проблем и слоев. Соответствующий контекст обычно resides в разных файлах и папках, но имеет одно и то же имя. Это идеальный случай использования code2prompt
, где вы можете использовать шаблон glob для захвата соответствующих файлов.
На основе шаблонов glob: Точно выберите или исключите файлы с минимальными усилиями.
Кроме того, основная библиотека разработана как менеджер контекста с состоянием, позволяя вам добавлять или удалять файлы по мере развития вашего разговора с LLM. Это особенно полезно при предоставлении контекста для конкретной задачи или цели. Вы можете легко добавлять или удалять файлы из контекста без повторного запуска процесса.
Состояние контекста: Добавляйте или удаляйте файлы по мере развития вашего разговора с LLM.
Эти возможности делают code2prompt
идеальным выбором для рабочих процессов на основе агентов. Сервер MCP позволяет бесшовную интеграцию с популярными фреймворками ИИ-агентов, такими как Aider, Goose, или Cline. Пусть они обрабатывают сложные цели, а code2prompt
доставляет идеальный контекст кода.
Почему Code2prompt имеет значение ✊
Заголовок раздела «Почему Code2prompt имеет значение ✊»По мере того, как LLM развиваются и окна контекста расширяются, может показаться, что просто форсирование всех репозиториев в подсказки достаточно. Однако стоимость токенов и согласованность подсказок остаются значительными препятствиями для небольших компаний и разработчиков. Сосредоточившись на коде, который имеет значение, code2prompt
делает ваше использование LLM эффективным, экономичным и менее подверженным галлюцинациям.
Вкратце:
- Уменьшите галлюцинации, предоставляя правильное количество контекста
- Уменьшите стоимость токенов, тщательно создавая необходимый контекст
- Улучшите производительность LLM, предоставляя правильное количество контекста
- Интегрируется со стеком агентов как поставщик контекста для текстовых репозиториев
Вы можете присоединиться! 🌐
Заголовок раздела «Вы можете присоединиться! 🌐»Каждый новый участник приветствуется! Присоединяйтесь, если вы заинтересованы в Rust, создании инновационных инструментов ИИ или просто хотите лучший рабочий процесс для ваших кодовых подсказок.
Спасибо за чтение, и я надеюсь, что моя история вдохновила вас проверить code2prompt. Это было невероятное путешествие, и оно только начинается!
Olivier D’Ancona
Эта страница была автоматически переведена для вашего удобства. Обратитесь к английской версии для получения оригинального содержания.