Step 02: Provider 트레이트
foundations 60 min

Provider 트레이트

LLM API를 추상화하는 Provider trait을 이해합니다.

Execute this step

Run from step folder:
cd steps/02_provider_trait && cargo run
Run from project root:
cargo run -p step02_provider_trait

Step 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 직접 구현해보기

Did you find this helpful? Give it a cheer!