auto-rust
est une macro procédurale Rust qui exploite la puissance des grands modèles linguistiques (LLM) pour générer du code au moment de la compilation. Écrivez une signature de fonction, ajoutez un commentaire de document décrivant la fonctionnalité souhaitée et laissez auto-rust
remplir les détails d'implémentation !
Auto-Rust est actuellement en cours de développement et n'est pas encore adapté à une utilisation en production. Bien que vous puissiez l'essayer et nous faire part de vos commentaires, nous vous avertissons qu'il peut avoir une mise en œuvre incomplète et qu'il peut ne pas fonctionner comme prévu.
1.Installation
Ajoutez auto-rust
comme dépendance dans votre fichier Cargo.toml
:
[ dependencies ]
auto-rust = " 0.1.4 "
2. Clé API
Auto-Rust nécessite une clé API OpenAI. Créez un fichier .env
à la racine de votre projet et ajoutez votre clé :
OPENAI_API_KEY= < your-openai-api-key >
3. Utilisation
Annotez votre fonction avec l'attribut #[llm_tool]
et fournissez un commentaire clair expliquant le comportement souhaité :
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 ! ( )
}
Rechargement en direct avec argument live
Pour activer le rechargement en direct pour un développement transparent, utilisez l'argument live
pour la macro llm_tool
.
# [ llm_tool ( live ) ]
L'activation du rechargement live
oblige Auto-Rust à contourner son mécanisme de mise en cache. À chaque compilation, il enverra une requête au LLM, garantissant que vous recevez toujours la génération de code la plus à jour en fonction de votre signature de fonction, des commentaires de la documentation et du contexte actuel de la base de code.
Comment fonctionne la mise en cache
Auto-Rust implémente un mécanisme de mise en cache simple. Chaque fois qu'il génère du code pour une fonction :
Utilisez l'argument live
lorsque vous souhaitez donner la priorité à la réception de la génération de code la plus récente du LLM, même si cela entraîne une légère augmentation des temps de compilation.
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 > {
// ...
}
Code généré :
# [ 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 utilise le puissant système de macros procédurales de Rust pour injecter du code au moment de la compilation. Lorsque vous utilisez la macro #[llm_tool]
:
Analyse : la macro analyse la signature de la fonction annotée, y compris son nom, ses arguments, son type de retour et tous les commentaires de la documentation.
Extraction de contexte : il extrait le code de votre projet, fournissant un certain contexte au LLM pour mieux comprendre le code et le projet environnants.
Ingénierie d'invite : il construit une invite qui inclut les informations extraites. Cette invite est soigneusement conçue pour guider le LLM dans la génération d'une implémentation de fonction Rust pertinente et correcte.
Interaction LLM : il envoie l'invite générée à une API LLM.
Insertion de code : la réponse du LLM, qui contient le code Rust généré, est insérée directement dans votre base de code, remplaçant l'espace réservé todo!()
.
use
pour les dépendances nouvellement introduites dans le code généré. Nous apprécions les contributions de la communauté Rust ! Si vous rencontrez des problèmes, avez des suggestions ou souhaitez contribuer au développement d' auto-rust
, n'hésitez pas à ouvrir un problème ou à soumettre une pull request.
Ce projet est sous licence MIT et Apache-2.0.