모든 주제와 태그

AI 개발

13개의 글

AI 코딩에서 단위 테스트가 맡는 세 가지 일: 검수, 안전망, 요구사항 전달

메이퇀 기술 블로그가 정리한 단위 테스트의 세 쓰임새를 옮기고 그중 요구사항을 테스트로 건네는 방식에서 드는 비용과 테스트가 틀렸을 때의 행동을 b-studio에서 36회 돌려 쟀습니다. 맞는 테스트를 건넨 9회의 토큰은 말만 준 9회의 0.96배로 실행 전에 적어 둔 범위 안이었고 값 하나가 요청과 다른 테스트를 건넨 18회에서는 에이전트가 모두 테스트를 따랐습니다. 그래서 건넨 테스트 옆에 두는 확인 하나를 적었습니다.

AI 코딩, 저는 이렇게 개발하고 있습니다

코드는 대부분 AI가 쓰고 저는 설계를 승인하고 결과를 확인합니다. 이렇게 일하면서 굳어진 방식 여섯 가지를 적었습니다. 역할을 먼저 나눈 이유와 한 묶음을 한 코더에게 끝까지 맡기는 이유, 끝났다와 맞았다를 따로 확인하는 방법을 다룹니다. b-studio에서 반복 실행으로 재 본 결과로 어디에 쓰면 이득인지도 함께 적었습니다.

AI가 짜준 코드를 어디까지 기계한테 검증시킬 수 있을까?

처음에는 검증 충분성을 기계가 결정적으로 판정하게 만들려 했다. 그런데 사람이 하던 그 판단은 원래 확률적이었다. 그래서 갈라야 할 것은 무엇을 고정하고 무엇을 맡길 것인가였다. 고정할 자리에는 경계와 검사를 두고, 맡길 자리에는 판단할 재료를 준다. 다만 자기를 심판하는 자리 하나는 기계가 붙잡아야 한다.

폰에서 Claude를 돌리려고 텔레그램 봇을 만들었다

이미 쓰던 Claude 구독을 폰에서도 쓰고 싶어서 만든 봇이다. API 키로 따로 과금하는 대신 Claude Code 구독 인증(claude -p)을 그대로 호출하고, 메시지를 보내면 작업 과정을 실시간으로 흘려줍니다. 디스코드 봇을 이미 돌리고 있으면서도 이번엔 텔레그램을 고른 이유, 코딩 모드에서 확인 없이 파일을 고치는 대신 넣은 취소 장치, 같은 서버의 다른 서비스를 못 건드리게 막은 격리까지 정리했다.

AI 검색 요약: RAG 파이프라인 + SSE 스트리밍 + 비용 모니터링

Lucene BM25 검색 결과 Top-5 문서를 LLM 컨텍스트에 주입하는 RAG(Retrieval-Augmented Generation) 파이프라인을 구축한다. Spring AI 2.0 + Gemini 2.0 Flash로 SSE 스트리밍 답변을 생성하고, 인라인 출처 배지를 파싱하여 게시글 링크로 연결한다. 할루시네이션 방지(문서 기반 답변 제한 + 인용 강제), AI 요약 트리거 조건(네비게이션 의도 스킵), Redis Token Bucket rate limiting(10 RPM 전역), 동일 쿼리 캐싱(TTL 30분, LLM 비용 40-60% 절감), Grafana 7패널 대시보드(RPM, 응답시간, 토큰, 피드백, 비용 추정)까지 포함한다. BM25가 이 프로젝트에서 Dense Retrieval보다 적합한 근거와, Hybrid Retrieval 전환 로드맵도 정리한다.

LTR 재랭킹 + 카테고리 자동 분류: XGBoost4J + LLM-as-a-Judge

BM25 수동 가중치(title:3, content:1)의 한계를 Learning to Rank(LTR)로 극복한다. 카테고리 28개 자동 분류(키워드 기반, 정확도 83%) → SortedSetDocValuesFacetCounts 네이티브 Facet 전환 → 태그 216만 건 인덱싱을 1회 재색인으로 통합 반영한다. LLM-as-a-Judge(Gemini)로 학습 데이터 900쌍을 생성하고(1차 실패 98% → 5초 딜레이+지수 백오프로 해결), XGBoost LambdaMART 14개 피처로 학습하여 NDCG@10을 0.6910 → 0.7387(+4.8%p) 개선한다. XGBoost4J ARM64 네이티브 추론, Rescorer Top-200 재랭킹, RefreshListener 기반 FacetState 캐싱, MultiCollectorManager 단일 패스 수집까지 구현하지만, 2코어 ARM Free Tier에서 LTR ON 시 CPU 포화(72배 악화)를 k6로 실측하여 LTR_ENABLED=false로 비활성화한다.