auto-rust
是一个 Rust 过程宏,它利用大型语言模型 (LLM) 的强大功能在编译时生成代码。编写函数签名,添加描述所需功能的文档注释,然后让auto-rust
填写实现细节!
Auto-Rust 目前正在开发中,尚不适合生产使用。虽然欢迎您尝试并提供反馈,但我们警告它可能有不完整的实现,并且可能无法按预期运行。
1. 安装
在Cargo.toml
文件中添加auto-rust
作为依赖项:
[ dependencies ]
auto-rust = " 0.1.4 "
2.API密钥
Auto-Rust 需要 OpenAI API 密钥。在项目的根目录中创建一个.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
参数进行实时重新加载
要启用实时重新加载以实现无缝开发,请使用llm_tool
宏的live
参数。
# [ llm_tool ( live ) ]
启用live
加载会强制 Auto-Rust 绕过其缓存机制。在每次编译时,它都会向 LLM 发送请求,确保您始终收到基于函数签名、文档注释和当前代码库上下文的最新代码生成。
缓存的工作原理
Auto-Rust 实现了一个简单的缓存机制。每次它生成一个函数的代码:
当您想要优先接收来自 LLM 的最新代码生成时,请使用live
参数,即使这会导致编译时间略有增加。
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 生成相关且正确的 Rust 函数实现。
LLM 交互:它将生成的提示发送到 LLM API。
代码插入: LLM 的响应(包含生成的 Rust 代码)将直接插入到您的代码库中,替换todo!()
占位符。
use
语句。 我们欢迎 Rust 社区的贡献!如果您遇到问题、有建议或想为auto-rust
的开发做出贡献,请随时提出问题或提交拉取请求。
该项目已获得 MIT 和 Apache-2.0 许可证的许可。