auto-rust
es una macro de procedimiento de Rust que aprovecha el poder de los modelos de lenguajes grandes (LLM) para generar código en tiempo de compilación. Escriba una firma de función, agregue un comentario de documento que describa la funcionalidad deseada y deje que auto-rust
complete los detalles de implementación.
Auto-Rust está actualmente en desarrollo y aún no es adecuado para uso en producción. Si bien puede probarlo y brindar comentarios, le advertimos que puede tener una implementación incompleta y no funcionar según lo previsto.
1. Instalación
Agregue auto-rust
como dependencia en su archivo Cargo.toml
:
[ dependencies ]
auto-rust = " 0.1.4 "
2. Clave API
Auto-Rust requiere una clave API de OpenAI. Cree un archivo .env
en la raíz de su proyecto y agregue su clave:
OPENAI_API_KEY= < your-openai-api-key >
3. Uso
Anota tu función con el atributo #[llm_tool]
y proporciona un comentario de documento claro que explique el comportamiento deseado:
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 ! ( )
}
Recarga en vivo con argumento live
Para habilitar la recarga en vivo para un desarrollo fluido, use el argumento live
para la macro llm_tool
.
# [ llm_tool ( live ) ]
Habilitar la recarga live
obliga a Auto-Rust a omitir su mecanismo de almacenamiento en caché. En cada compilación, enviará una solicitud al LLM, lo que garantiza que siempre reciba la generación de código más actualizada según la firma de su función, los comentarios del documento y el contexto de la base de código actual.
Cómo funciona el almacenamiento en caché
Auto-Rust implementa un mecanismo de almacenamiento en caché simple. Cada vez que genera código para una función:
Utilice el argumento live
cuando desee priorizar la recepción de la generación de código más reciente del LLM, incluso si esto genera tiempos de compilación ligeramente mayores.
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 > {
// ...
}
Código generado:
# [ 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 utiliza el potente sistema de macros procesales de Rust para inyectar código en tiempo de compilación. Cuando usas la macro #[llm_tool]
:
Análisis: la macro analiza la firma de la función anotada, incluido su nombre, argumentos, tipo de retorno y cualquier comentario del documento.
Extracción de contexto: extrae el código dentro de su proyecto, proporcionando algo de contexto para que el LLM comprenda mejor el código circundante y el proyecto.
Ingeniería de Prompt: Construye un aviso que incluye la información extraída. Este mensaje está cuidadosamente diseñado para guiar al LLM en la generación de una implementación de función de Rust relevante y correcta.
Interacción LLM: envía el mensaje generado a una API LLM.
Inserción de código: la respuesta del LLM, que contiene el código Rust generado, se inserta directamente en su base de código, reemplazando el marcador de posición todo!()
.
use
para las dependencias recién introducidas en el código generado. ¡Agradecemos las contribuciones de la comunidad de Rust! Si encuentra problemas, tiene sugerencias o desea contribuir al desarrollo de auto-rust
, no dude en abrir un problema o enviar una solicitud de extracción.
Este proyecto tiene la licencia MIT y Apache-2.0.