auto-rust
เป็นมาโครขั้นตอนของ Rust ที่ควบคุมพลังของ Large Language Models (LLM) เพื่อสร้างโค้ดในเวลาคอมไพล์ เขียนลายเซ็นฟังก์ชัน เพิ่มความคิดเห็นเอกสารที่อธิบายฟังก์ชันการทำงานที่ต้องการ และปล่อยให้ auto-rust
กรอกรายละเอียดการใช้งาน!
ขณะนี้ Auto-Rust อยู่ระหว่างการพัฒนาและยังไม่เหมาะสำหรับการใช้งานในการผลิต แม้ว่าเราจะยินดีให้ทดลองใช้และให้ข้อเสนอแนะ แต่เราขอเตือนว่าอาจมีการใช้งานที่ไม่สมบูรณ์และอาจไม่ทำงานตามที่ตั้งใจไว้
1. การติดตั้ง
เพิ่ม auto-rust
เป็นการพึ่งพาในไฟล์ Cargo.toml
ของคุณ:
[ 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
หากต้องการเปิดใช้งานการโหลดซ้ำแบบสดเพื่อการพัฒนาที่ราบรื่น ให้ใช้อาร์กิวเมนต์ live
สำหรับมาโคร llm_tool
# [ llm_tool ( live ) ]
การเปิดใช้งานการโหลดซ้ำ live
จะบังคับให้ Auto-Rust เลี่ยงกลไกการแคช ในการคอมไพล์แต่ละครั้ง ระบบจะส่งคำขอไปยัง LLM เพื่อให้มั่นใจว่าคุณจะได้รับการสร้างโค้ดที่อัปเดตล่าสุดเสมอตามลายเซ็นฟังก์ชัน ความคิดเห็นของเอกสาร และบริบทของโค้ดเบสปัจจุบัน
การแคชทำงานอย่างไร
Auto-Rust ใช้กลไกการแคชอย่างง่าย ทุกครั้งที่สร้างโค้ดสำหรับฟังก์ชัน:
ใช้อาร์กิวเมนต์ live
เมื่อคุณต้องการจัดลำดับความสำคัญการรับการสร้างโค้ดล่าสุดจาก LLM แม้ว่าจะทำให้เวลาในการคอมไพล์เพิ่มขึ้นเล็กน้อยก็ตาม
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 เพื่อทำความเข้าใจโค้ดโดยรอบและโปรเจ็กต์ได้ดีขึ้น
Prompt Engineering: สร้างพรอมต์ที่มีข้อมูลที่แยกออกมา พร้อมท์นี้ได้รับการออกแบบอย่างระมัดระวังเพื่อเป็นแนวทาง LLM ในการสร้างการใช้งานฟังก์ชัน Rust ที่เกี่ยวข้องและถูกต้อง
การโต้ตอบ LLM: ส่งข้อความพร้อมท์ที่สร้างขึ้นไปยัง LLM API
การแทรกโค้ด: การตอบสนองของ LLM ซึ่งมีโค้ด Rust ที่สร้างขึ้น จะถูกแทรกลงในโค้ดเบสของคุณโดยตรง โดยแทนที่ตัวยึดตำแหน่ง todo!()
use
สำหรับการขึ้นต่อกันที่เพิ่งนำมาใช้ในโค้ดที่สร้างขึ้นโดยอัตโนมัติ เรายินดีรับการสนับสนุนจากชุมชน Rust! หากคุณพบปัญหา มีข้อเสนอแนะ หรือต้องการมีส่วนร่วมในการพัฒนา auto-rust
โปรดอย่าลังเลที่จะเปิดปัญหาหรือส่งคำขอดึง
โครงการนี้ได้รับอนุญาตภายใต้ใบอนุญาต MIT และ Apache-2.0