Tag: 학습
All the articles with the tag "학습".
-
Eval 공부 #4 — HITL 에이전트 회귀 테스트, 통과했는데 원인이 틀린 경우
지난 편 (에이전트 도구 선택 · 멀티스텝 eval) 에 이어 HITL 에이전트 회귀 테스트. 이번엔 (질문 · 기대 도구) 테스트셋 대신 단위 테스트 스타일 — 함정 3축 (위험 도구 중단점 진입 / 멀티턴 매 턴 응답 / 안전 도구 오분류) 을 함수로 작성하고 sys.exit(1) 로 회귀 시 종료 코드. 1차 실행 3/3 통과 — 그런데 이게 정답이 아니었음. 이전에 문제였던 "명확한 의도 확인 후 호출" 프롬프트가 남아있어서 LLM 이 자체 방어기제로 통과시킨 것. 삭제 케이스로 도발하니 우리 HITL 은 발동 안 하고 LLM 자체 확인만 남음. 프롬프트 제거 → 도구 자체를 안 부르는 실패로 전환. 결국 프롬프트를 "사용자가 요청한 작업에 맞는 도구를 호출하세요" 로 최소화하니 delete_user 도구에서 정확히 중단 (HITL 작동, 종료 코드 0). Eval 통과 자체가 안전 신호가 아니라 무엇 때문에 통과했는지 원인 검증이 진짜 안전. 여기서 LLM 공부 시리즈 잠시 중단, 백엔드 공부 마무리 후 재개 예정.
-
Eval 공부 #3 — 에이전트 Eval, 단일 스텝의 한계와 멀티스텝 채점
RAG Eval 이후 에이전트 Eval 로 확장. 에이전트는 판정할 축이 6가지 (도구 선택 · 인자 추출 · 멀티스텝 궤적 · 종료 판단 · 안전장치 · 최종 답변 품질) 라 단위 테스트 → 통합 테스트 원리로 축을 분리해서 봐야 원인 특정이 빠름. 오늘은 도구 선택 · 멀티스텝 · 함정 회귀 3개만 진행. MCP 서버 도구 메타 (이름 · 설명 · 스키마) 를 넣고 (질문, 기대 도구, 기대 인자, 레벨) 테스트셋으로 측정 → 도구 선택 정확도 11/13 = 84.6%. 실패 케이스 2건이 재미있었음 — (1) 단일 스텝 eval 이 실제로는 멀티스텝 궤적으로 정답인 케이스를 오탐 → 단일 채점의 한계, (2) 도구 description 이 모호해서 "전기 요금" → consumption 오선택, "돈 얼마 나와?" 는 정답 — description 개선 대신 시스템 프롬프트 땜빵은 과적합 위험. 이어서 멀티스텝 eval 로 전환 (필요 도구 다 불렀나 · 순서 · 앞 결과 활용 · 종료 판단) → 4/4 = 100% 로 단일에서 실패로 처리된 케이스가 통과.
-
자바 공부 #3 — 예외 처리 · 동시성 · record · Modern Java · Gradle
자바 문법 훑기 마무리 편. 예외 처리는 디버깅 편의가 아니라 백엔드 서버가 프로덕션에서 안 죽게 하기 위한 방어막이었음을 이해. print vs throw 의 차이 — print 는 호출자에게 실패를 전달하지 않지만 예외는 강제로 전파. 동시성은 ExecutorService · newFixedThreadPool 로 3초 순차 → 1초 병렬 (실측 3008ms → 1006ms). record 는 필드·생성자·접근자·toString·equals·hashCode 자동 생성 — 강우량계 데이터로거의 RainDataDTO 같은 순수 데이터 컨테이너에 딱 맞음. var/switch 화살표/텍스트 블록 같은 Modern Java 도 훑음. 마지막으로 Gradle — 파일이 수백 개 될 때 java 로 하나씩 컴파일하는 건 불가능, 외부 라이브러리도 자동으로 받아옴. build.gradle 이 핵심 설정 파일.
-
자바 공부 #2 — 컬렉션 (List / Map / Set) · Stream 파이프라인 · Optional 로 null 안전 처리
자바 공부 2주차. Collection Framework 핵심 — List (ArrayList), Map (HashMap), Set 을 훑고, 각각 '인터페이스와 구현체' 패턴이 보임 (List<String> books = new ArrayList<>()). 이후 Stream 으로 넘어가 for 문 없이 filter → map → collect 파이프라인, method reference (System.out::println), groupingBy + counting 조합. 마지막은 Optional — get() 즉시 호출 대신 ifPresent / orElse / map 으로 값 없을 때를 항상 함께 처리해야 하는 감각.