auto-rust
— это процедурный макрос Rust, который использует возможности больших языковых моделей (LLM) для генерации кода во время компиляции. Напишите сигнатуру функции, добавьте комментарий к документу, описывающий желаемую функциональность, и позвольте auto-rust
заполнить детали реализации!
Auto-Rust в настоящее время находится в разработке и пока не пригоден для промышленного использования. Хотя вы можете опробовать его и оставить отзыв, мы предупреждаем, что он может иметь неполную реализацию и не работать должным образом.
1. Установка
Добавьте auto-rust
в качестве зависимости в файл Cargo.toml
:
[ dependencies ]
auto-rust = " 0.1.4 "
2. Ключ API
Для Auto-Rust требуется ключ API OpenAI. Создайте файл .env
в корне вашего проекта и добавьте свой ключ:
OPENAI_API_KEY= < your-openai-api-key >
3. Использование
Аннотируйте свою функцию атрибутом #[llm_tool]
и предоставьте четкий комментарий к документации, объясняющий желаемое поведение:
use auto_rust :: llm_tool ;
# [ llm_tool ]
# [ handler ]
/// The response will be an HTML layout with the name and the number of letters in the name.
/// Ensure to return a content type of text/html.
fn hello ( Path ( name ) : Path < String > ) -> impl IntoResponse {
todo ! ( )
}
Живая перезагрузка с live
аргументом
Чтобы включить перезагрузку в реальном времени для беспрепятственной разработки, используйте аргумент live
для макроса llm_tool
.
# [ llm_tool ( live ) ]
Включение live
перезагрузки заставляет Auto-Rust обходить механизм кэширования. При каждой компиляции он отправляет запрос в LLM, гарантируя, что вы всегда получите самую актуальную генерацию кода на основе вашей сигнатуры функции, комментариев к документации и текущего контекста кодовой базы.
Как работает кэширование
Auto-Rust реализует простой механизм кэширования. Каждый раз он генерирует код для функции:
Используйте аргумент live
, если вы хотите отдать приоритет получению самой последней генерации кода из LLM, даже если это приведет к небольшому увеличению времени компиляции.
use auto_rust :: llm_tool ;
use poem :: {
get , handler , listener :: TcpListener , middleware :: Tracing , web :: Path , EndpointExt , IntoResponse ,
Route , Server ,
} ;
# [ llm_tool ]
# [ handler ]
/// The response will be an html layout with the name and the number of letters in the name.
/// Ensure to return a content type of text/html.
fn hello ( Path ( name ) : Path < String > ) -> impl IntoResponse {
todo ! ( )
}
# [ tokio :: main ]
async fn main ( ) -> Result < ( ) , std :: io :: Error > {
// ...
}
Сгенерированный код:
# [ handler ]
/// The response will be an html layout with the name and the number of letters in the name.
/// Ensure to return a content type of text/html.
fn hello ( Path ( name ) : Path < String > ) -> impl IntoResponse {
let response_html = format ! (
r#"
<!DOCTYPE html>
<html>
<head>
<title>Hello, {name}!</title>
</head>
<body>
<h1>Hello, {name}!</h1>
<p>The length of your name is {len} letters.</p>
</body>
</html>
"# ,
name = name,
len = name.len ( )
) ;
poem :: Response :: builder ( )
. header ( "Content-Type" , "text/html; charset=utf-8" )
. body ( response_html )
}
Auto-Rust использует мощную систему процедурных макросов Rust для внедрения кода во время компиляции. При использовании макроса #[llm_tool]
:
Анализ: макрос анализирует подпись аннотированной функции, включая ее имя, аргументы, тип возвращаемого значения и любые комментарии к документу.
Извлечение контекста. Он извлекает код внутри вашего проекта, предоставляя LLM некоторый контекст для лучшего понимания окружающего кода и проекта.
Разработка подсказок: она создает подсказку, включающую извлеченную информацию. Эта подсказка тщательно разработана, чтобы помочь LLM создать соответствующую и правильную реализацию функции Rust.
Взаимодействие LLM: оно отправляет сгенерированное приглашение в API LLM.
Вставка кода: ответ LLM, содержащий сгенерированный код Rust, вставляется непосредственно в вашу кодовую базу, заменяя заполнитель todo!()
.
use
для вновь введенных зависимостей в сгенерированный код. Мы приветствуем вклад сообщества Rust! Если у вас возникли проблемы, у вас есть предложения или вы хотите внести свой вклад в развитие auto-rust
, пожалуйста, не стесняйтесь открыть проблему или отправить запрос на включение.
Этот проект распространяется по лицензиям MIT и Apache-2.0.