Step 01: Message & Conversation
foundations 30 min

Message & Conversation

goose의 대화 메시지 구조(Message, MessageContent)와 Conversation을 이해합니다.

Execute this step

Run from step folder:
cd steps/01_message_conversation && cargo run
Run from project root:
cargo run -p step01_message_conversation

Step 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 트레이트)로 진행하세요.

Did you find this helpful? Give it a cheer!