본문 바로가기
학교

2026 하계 모각코 3회차

by 발빠진 쥐 2026. 7. 18.

🗓 이번 주 개요

📚 이번 주 학습한 것

1. Week2 구조화 vs Week3 영속저장 — "구조화"와 "저장"은 다른 레이어

  • 핵심 개념: response_format / with_structured_output은 답변의 "모양"만 Pydantic에 맞게 강제할 뿐 메모리 안에서 끝나고, @tool(args_schema=...)은 모델이 실제 함수를 호출하게 만들어 SQLite에 진짜 쓰기 동작(INSERT)을 실행시킨다.
  • 내가 이해한 방식: DB 테이블 라우팅 같은 확정적 로직은 코드가 담당하고, 자연어 의미 해석처럼 코드가 못 하는 부분만 LLM이 담당한다. 그 LLM 판단(언제 어떤 tool을 부를지)을 유도하는 유일한 통로가 system prompt라는 구분으로 이해함.
  • 관련 코드/링크: extract_schedule_request(구조화) → save_structured_request(SQLite 저장, structured_requests + schedules/todos/reminders로 분기) → list_saved_requests / get_saved_request / personal_list_saved_schedules(재조회) → SQLITE_MEMORY_PROMPT / WEEK03_TOOL_CALL_PROMPT / build_week03_agent

2. Tool 입력 필터링 (args_schema)

  • 핵심 개념: @tool에 Pydantic 클래스를 args_schema로 붙이면, 모델이 만든 tool arguments가 실행 전에 타입/필드 검증을 통과해야 한다. 즉 "입력 필터" 역할. Agent의 출력 쪽도 같은 방식(response_format)으로 구조화할 수 있다.
  • 내가 이해한 방식: 일정 데이터를 다루는 Pydantic 클래스를 스키마로 넣으면, 모델이 엉뚱한 필드/타입으로 tool을 호출하는 걸 코드 레벨에서 미리 막을 수 있다.
  • 관련 코드/링크: save_structured_request 등 tool 함수 시그니처의 args_schema

3. LLM 토큰화 & 프리트레이닝/파인튜닝 기초

  • 핵심 개념: LLM은 "단어"가 아니라 토큰 단위로 다음 토큰의 확률을 예측하는 모델이다. 토큰은 BPE(Byte Pair Encoding) 등으로 쪼갠 subword 단위라서, 하나의 단어보다 작을 수도(어미가 분리) 여러 글자가 뭉쳐 하나가 될 수도 있다.
  • 내가 이해한 방식:
  • 토큰화: 텍스트 → 정수 ID 시퀀스로 바꾸는 과정. 단어 단위로 쪼개면 어휘 수가 너무 커지고 신조어/오탈자에 취약해서, 실무 LLM은 자주 등장하는 문자열 조각을 하나의 토큰으로 묶는 subword 방식(BPE/WordPiece)을 쓴다.
  • BOS/EOS/SOS: BOS(Beginning Of Sequence)와 SOS(Start Of Sequence)는 같은 개념을 부르는 서로 다른 이름(시퀀스 시작 표시)이고, EOS(End Of Sequence)는 끝 표시다. 둘 다 프리트레이닝 단계부터 어휘에 포함되는 기본 특수 토큰이다.
  • 커스텀 토큰: 파인튜닝(특히 instruction/chat 튜닝) 단계에서 대화의 역할(user/assistant/system)과 턴 경계를 표시하려고 추가하는 특수 토큰이다. 예: <|im_start|>user, <|im_start|>assistant 같은 형태. 이 토큰들이 "여기까지는 사용자가 한 말, 여기부터는 내가 답할 차례"를 학습 데이터에서 명확히 구분해준다.
  • 프리트레이닝 vs 파인튜닝: 프리트레이닝은 raw 텍스트(웹 문서 등)에 대해 대화 형식 없이 그냥 "다음 토큰 맞히기"만 반복 학습한다. 파인튜닝(SFT)은 user: 질문 / assistant: 답변 형태로 정리된 대화 데이터를 커스텀 토큰으로 턴을 감싸서 학습시켜, 모델이 "사용자 턴 다음엔 assistant 턴을 생성해야 한다"는 대화 패턴 자체를 배우게 만든다.
  • 아직 헷갈리는 부분: 실제 토크나이저(tiktoken 등)가 문장을 어떻게 쪼개는지 코드로 직접 확인 안 해봄. 커스텀 토큰이 vocab에 추가될 때 embedding이 어떻게 새로 학습되는지(처음엔 랜덤 초기화인지 등)는 다음에 더 파야 함.
  • 관련 코드/링크: 프리튜닝/파인튜닝 비교 슬라이드 (이미지 첨부분)

🧱 막혔던 지점 & 해결 과정

  • 문제 상황: save_structured_request의 payload = {...} 딕셔너리를 잘못된 위치에서 닫아 문법 오류 발생, personal_list_saved_schedules에서 kind 인자를 안 쓰고 "personal_schedule"을 하드코딩한 로직 버그 존재. 이후 update 기능 구현 시 "수정"이 아니라 새 row를 "저장"해버리는 오류도 발생(새 request_id가 생기는 것으로 확인).
  • 시도한 방법: AI에게 코드 점검을 요청해서 두 버그 위치를 확인하고, update 오류는 tool_call/tool_result trace를 추적해서 원인을 좁힘.
  • 최종 해결 / 참고 자료: update 오류는 WEEK03_TOOL_CALL_PROMPT에 update 관련 지시를 명확히 추가해서 해결 — 수정 후 trace에서 동일 schedule_id/request_id로 값만 바뀐 것을 확인해 정상 동작 검증함. delete 기능은 store.delete_schedules_by_filter(...) / delete_all_schedules()로 분리 구현.

🔁 이번 주 회고 (KPT) — 과제 PR 회고 요약

  • Keep: 코드를 그대로 베끼기 전에 "이 문법이 뭔지", "왜 이렇게 설계했는지" 먼저 질문하고 이해한 다음 타이핑함
  • Problem: 기본 파이썬 문법(딕셔너리 컴프리헨션, 키워드 인자, dict 리터럴 범위)이 약해서 타이핑 과정에서 문법 오류·로직 버그가 생겼고, 스스로 못 잡고 리뷰 요청해서야 발견함
  • Try: 코드 작성 후 python3 -m py_compile 같은 걸로 문법 오류부터 스스로 걸러보고, 딕셔너리/컴프리헨션/키워드 인자 같은 기본 문법을 짧게 복습할 계획

🎯 다음 주 목표

  • 로우레벨 AI 공부 하기
  • Week4 Agentic RAG(ChromaDB) 들어가기 전, 임베딩 벡터 계산 원리 가볍게 정리

 

'학교' 카테고리의 다른 글

2026 하계 모각코 5회차  (0) 2026.07.30
2026 하계 모각코 4회차  (0) 2026.07.24
2026 하계 모각코 2회차  (0) 2026.07.08
2026 하계 모각코 1회차  (0) 2026.07.02
2026 하계 모각코 0회차 (계획)  (0) 2026.06.26