auto-rust
は、大規模言語モデル (LLM) の力を利用してコンパイル時にコードを生成する Rust 手続き型マクロです。関数シグネチャを記述し、必要な機能を説明するドキュメント コメントを追加して、 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 が周囲のコードとプロジェクトをよりよく理解できるようにコンテキストを提供します。
プロンプト エンジニアリング:抽出された情報を含むプロンプトを構築します。このプロンプトは、LLM が適切で正しい Rust 関数実装を生成できるように慎重に設計されています。
LLM インタラクション:生成されたプロンプトを LLM API に送信します。
コードの挿入:生成された Rust コードを含む LLM の応答は、コードベースに直接挿入され、 todo!()
プレースホルダーを置き換えます。
use
ステートメントを自動的に追加しません。 Rust コミュニティからの貢献を歓迎します。問題が発生した場合、提案がある場合、またはauto-rust
の開発に貢献したい場合は、お気軽に問題を開くか、プル リクエストを送信してください。
このプロジェクトは、MIT および Apache-2.0 ライセンスに基づいてライセンスされています。