Step 01: Message & Conversation
0 studying now
foundations 30 min
Message & Conversation
goose의 대화 메시지 구조(Message, MessageContent)와 Conversation을 이해합니다.
Execute this step
Run from step folder:
cd steps/01_message_conversation && cargo runRun from project root:
cargo run -p step01_message_conversationStep 1: Message & Conversation
학습 목표
- goose의 대화 메시지 구조(Message, MessageContent) 이해
- Conversation의 역할과 사용법 파악
- Role(User/Assistant/System) 구분
참조 소스
| 파일 | 내용 |
|------|------|
| crates/goose/src/conversation/message.rs | Message, MessageContent, Role |
| crates/goose/src/conversation/mod.rs | Conversation 타입 |
핵심 개념
Message 생성
let user_msg = Message::user().with_text("안녕하세요!"); let assistant_msg = Message::assistant().with_text("반갑습니다!");
Conversation 사용
let mut conv = Conversation::new_unvalidated(vec![]); conv.push(Message::user().with_text("질문입니다.")); conv.push(Message::assistant().with_text("답변입니다."));
텍스트 추출
let text = message.as_concat_text();
소스 코드
1use goose::conversation::message::Message; 2use goose::conversation::Conversation; 3use rmcp::model::Role; 4 5fn main() { 6 println!("=== Step 1: Message & Conversation ===\n"); 7 8 // 1. User 메시지 생성 9 let user_msg = Message::user().with_text("안녕하세요! goose를 공부하고 있어요."); 10 println!("[User] {}", user_msg.as_concat_text()); 11 12 // 2. Assistant 메시지 생성 13 let assistant_msg = 14 Message::assistant().with_text("반갑습니다! Message와 Conversation 구조를 이해하시면 됩니다."); 15 println!("[Assistant] {}\n", assistant_msg.as_concat_text()); 16 17 // 3. Conversation 생성 및 메시지 추가 18 let mut conversation = Conversation::new_unvalidated(vec![ 19 user_msg.clone(), 20 assistant_msg.clone(), 21 ]); 22 23 println!("Conversation 길이: {}", conversation.len()); 24 25 // 4. 추가 메시지 push 26 let follow_up = Message::user().with_text("Conversation의 push()도 테스트해볼게요."); 27 conversation.push(follow_up); 28 println!("push 후 길이: {}\n", conversation.len()); 29 30 // 5. 대화 내용 순회 31 println!("--- 대화 내용 ---"); 32 for (i, msg) in conversation.iter().enumerate() { 33 let role = match msg.role { 34 Role::User => "User", 35 Role::Assistant => "Assistant", 36 Role::System => "System", 37 }; 38 println!(" [{}] {}: {}", i + 1, role, msg.as_concat_text()); 39 } 40 41 println!("\n=== 완료 ==="); 42}
체크리스트
- [ ] Message::user(), Message::assistant() 로 메시지 생성
- [ ] with_text()로 텍스트 내용 추가
- [ ] Conversation::new_unvalidated()로 대화 생성
- [ ] conversation.push()로 메시지 추가
- [ ] as_concat_text()로 메시지 텍스트 추출
다음 단계
Step 2 (Provider 트레이트)로 진행하세요.