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 授權的許可。