Step 02: Provider 트레이트
0 studying now
foundations 60 min
Provider 트레이트
LLM API를 추상화하는 Provider trait을 이해합니다.
Execute this step
Run from step folder:
cd steps/02_provider_trait && cargo runRun from project root:
cargo run -p step02_provider_traitStep 2: Provider 트레이트
학습 목표
- LLM API 추상화
- Provider trait의 complete_with_model
- TestProvider 분석
참조 소스
| 파일 | 내용 |
|------|------|
| crates/goose/src/providers/base.rs | Provider trait 정의 |
| crates/goose/src/providers/testprovider.rs | 테스트용 구현 |
핵심 개념
Provider trait은 다양한 LLM 백엔드(OpenAI, Anthropic 등)를 동일한 인터페이스로 다룰 수 있게 해줍니다.
1#[async_trait] 2pub trait Provider { 3 async fn complete( 4 &self, 5 model: &str, 6 system: &str, 7 messages: &[Message], 8 tools: &[Tool], 9 ) -> Result<ProviderResponse>; 10}
Mock Provider
TestProvider를 분석하여 Provider trait의 구현 방법을 이해하세요.
1pub struct TestProvider { 2 responses: Vec<Message>, 3} 4 5#[async_trait] 6impl Provider for TestProvider { 7 async fn complete( 8 &self, 9 _model: &str, 10 _system: &str, 11 _messages: &[Message], 12 _tools: &[Tool], 13 ) -> Result<ProviderResponse> { 14 // 미리 정의된 응답을 반환 15 Ok(ProviderResponse { message: self.responses[0].clone() }) 16 } 17}
소스 코드
1//! Sample Step 2: Provider 트레이트 2 3fn main() { 4 println!("=== Step 2: Provider 트레이트 ===\n"); 5 println!("이 단계는 TODO입니다. Provider trait와 complete_with_model을 학습합니다."); 6 println!("참조: crates/goose/src/providers/base.rs, testprovider.rs"); 7}
체크리스트
- [ ] Provider trait 시그니처 이해
- [ ] complete_with_model 메서드 분석
- [ ] TestProvider 구현 코드 읽기
- [ ] Mock Provider 직접 구현해보기