auto-rust
adalah makro prosedural Rust yang memanfaatkan kekuatan Model Bahasa Besar (LLM) untuk menghasilkan kode pada waktu kompilasi. Tulis tanda tangan fungsi, tambahkan komentar dokumen yang menjelaskan fungsionalitas yang diinginkan, dan biarkan auto-rust
mengisi detail implementasi!
Auto-Rust saat ini sedang dalam pengembangan dan belum cocok untuk penggunaan produksi. Meskipun Anda dipersilakan untuk mencobanya dan memberikan masukan, kami mengingatkan bahwa penerapannya mungkin tidak lengkap dan mungkin tidak berfungsi sebagaimana mestinya.
1. Instalasi
Tambahkan auto-rust
sebagai ketergantungan pada file Cargo.toml
Anda:
[ dependencies ]
auto-rust = " 0.1.4 "
2. Kunci API
Auto-Rust memerlukan kunci API OpenAI. Buat file .env
di root proyek Anda dan tambahkan kunci Anda:
OPENAI_API_KEY= < your-openai-api-key >
3. Penggunaan
Beri anotasi pada fungsi Anda dengan atribut #[llm_tool]
dan berikan komentar dokumen yang jelas yang menjelaskan perilaku yang diinginkan:
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 ! ( )
}
Muat Ulang Langsung dengan Argumen live
Untuk mengaktifkan pemuatan ulang langsung untuk pengembangan yang lancar, gunakan argumen live
untuk makro llm_tool
.
# [ llm_tool ( live ) ]
Mengaktifkan isi ulang live
memaksa Auto-Rust melewati mekanisme cachingnya. Pada setiap kompilasi, ia akan mengirimkan permintaan ke LLM, memastikan Anda selalu menerima pembuatan kode terbaru berdasarkan tanda tangan fungsi, komentar dokumen, dan konteks basis kode saat ini.
Cara Kerja Caching
Auto-Rust mengimplementasikan mekanisme caching sederhana. Setiap kali menghasilkan kode untuk suatu fungsi:
Gunakan argumen live
ketika Anda ingin memprioritaskan penerimaan pembuatan kode terkini dari LLM, meskipun hal itu menyebabkan waktu kompilasi sedikit meningkat.
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 > {
// ...
}
Kode yang Dihasilkan:
# [ 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 menggunakan sistem makro prosedural Rust yang kuat untuk memasukkan kode pada waktu kompilasi. Saat Anda menggunakan makro #[llm_tool]
:
Parsing: Makro mengurai tanda tangan fungsi yang dianotasi, termasuk namanya, argumen, tipe kembalian, dan komentar dokumen apa pun.
Ekstraksi Konteks: Ini mengekstraksi kode dalam proyek Anda, memberikan beberapa konteks bagi LLM untuk memahami kode di sekitarnya dan memproyeksikan dengan lebih baik.
Rekayasa Prompt: Ini membuat prompt yang mencakup informasi yang diekstraksi. Prompt ini dirancang dengan cermat untuk memandu LLM dalam menghasilkan implementasi fungsi Rust yang relevan dan benar.
Interaksi LLM: Ini mengirimkan prompt yang dihasilkan ke API LLM.
Penyisipan Kode: Respons LLM, yang berisi kode Rust yang dihasilkan, dimasukkan langsung ke basis kode Anda, menggantikan placeholder todo!()
.
use
untuk dependensi yang baru diperkenalkan dalam kode yang dihasilkan. Kami menyambut kontribusi dari komunitas Rust! Jika Anda mengalami masalah, mempunyai saran, atau ingin berkontribusi pada pengembangan auto-rust
, silakan membuka masalah atau mengajukan permintaan penarikan.
Proyek ini dilisensikan di bawah lisensi MIT dan Apache-2.0.