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 라이선스에 따라 라이선스가 부여됩니다.