auto-rust
هو ماكرو إجرائي Rust يستغل قوة نماذج اللغات الكبيرة (LLMs) لإنشاء التعليمات البرمجية في وقت الترجمة. اكتب توقيع وظيفة، وأضف تعليق مستند يصف الوظيفة المطلوبة، ودع auto-rust
يملأ تفاصيل التنفيذ!
Auto-Rust قيد التطوير حاليًا وهو غير مناسب للاستخدام الإنتاجي بعد. على الرغم من أننا نرحب بتجربتها وتقديم تعليقاتك، إلا أننا نحذر من أنه قد يكون تنفيذها غير مكتمل وقد لا تعمل على النحو المنشود.
1. التثبيت
أضف auto-rust
باعتباره تبعية في ملف Cargo.toml
الخاص بك:
[ dependencies ]
auto-rust = " 0.1.4 "
2. مفتاح API
يتطلب الصدأ التلقائي مفتاح 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 لفهم الكود المحيط والمشروع بشكل أفضل.
هندسة الموجهات: تقوم بإنشاء موجه يتضمن المعلومات المستخرجة. تم تصميم هذه المطالبة بعناية لتوجيه LLM في إنشاء تطبيق صحيح ومناسب لوظيفة Rust.
تفاعل LLM: يرسل المطالبة التي تم إنشاؤها إلى LLM API.
إدراج الكود: يتم إدراج استجابة LLM، التي تحتوي على كود Rust الذي تم إنشاؤه، مباشرةً في قاعدة التعليمات البرمجية الخاصة بك، لتحل محل العنصر النائب todo!()
.
use
للتبعيات المقدمة حديثًا في التعليمات البرمجية التي تم إنشاؤها. نحن نرحب بالمساهمات من مجتمع روست! إذا واجهت مشاكل، أو لديك اقتراحات، أو تريد المساهمة في تطوير auto-rust
، فلا تتردد في فتح مشكلة أو إرسال طلب سحب.
تم ترخيص هذا المشروع بموجب تراخيص MIT وApache-2.0.