에러 스택 트레이스에는 보통 하나의 클래스가 명시된다. 하지만 실제 원인은 그 클래스가 의존하는 다른 파일에 있는 경우가 많다. java.lang.NullPointerException at UserService.findById(UserService.java:42) UserService를 찾아서 LLM에게 주면 분석은 시작할 수 있다. 하지만 Us...
에러 분석 에이전트의 가장 핵심적인 기능은 수정 코드를 GitHub PR로 자동 생성하는 것이다. LLM이 before/after 스니펫을 제안하면, 실제 파일에서 before를 찾아 after로 교체한다. 이 패칭 과정에서 겪은 문제들과 최종 해결 방법을 정리한다. 처음 겪은 문제: string 매칭 실패 LLM이 제안하는 before 코드...
BM25 하이브리드 검색을 도입하고 나서 자연스럽게 궁금증이 생겼다. “검색이 실제로 잘 되고 있는 걸까?” 로그를 보면 파일 목록이 반환되는 건 확인되지만, 그게 맞는 파일인지 판단할 기준이 없었다. RAG 품질을 수치로 측정하는 평가 시스템을 만든 이유다. 무엇을 측정하나 RAG 평가에서 핵심은 “정답 파일이 검색 결과에 포함됐는가”다. ...
처음엔 Ollama만 쓰다가 Gemini를 주력으로 바꿨다. 이유는 속도다. Ollama에서 gemma4:12b를 쓰면 응답 시간이 20~30초다. Gemini API는 2~3초다. 일상적으로 쓰는 개인 비서에서 응답을 30초 기다리는 건 너무 불편하다. 그렇다고 Ollama를 완전히 버리면 API 할당량이 소진됐을 때 쓸 수 없게 된다. Gemi...
서버 에러 로그를 LLM이 분석해서 Slack으로 원인과 수정 코드를 보내주는 시스템을 만들고 있었다. LLM이 단순히 로그를 받아서 답을 내는 게 아니라, 필요하면 직접 소스 파일을 검색해가며 분석하는 에이전트 구조였다. 처음엔 이 루프를 직접 구현했는데, 문제가 생겼다. 직접 구현한 에이전트 루프 LLM 에이전트의 동작 방식은 단순하다. 1....
개인 프로젝트에서 RAG(Retrieval-Augmented Generation)를 구축하면서 벡터 검색만으로는 해결되지 않는 문제를 겪었다. LLM이 에러 스택 트레이스를 분석할 때 UserService, findById 같은 정확한 클래스명·메서드명을 언급하는데, 벡터 검색이 그 파일을 상위에 올려놓지 못하는 경우가 있었다. 이 문제를 BM25와...
일정(Calendar)은 특정 날짜의 이벤트고, 할 일(Todo)은 완료해야 하는 작업이고, 리마인더(Reminder)는 특정 시간에 알림을 보내는 것이다. 세 가지가 비슷해 보이지만 실제 사용 패턴은 다르다. “다음주 화요일 오전 10시 치과” → Calendar (날짜와 시간이 있는 이벤트) “오늘 PR 리뷰해야 해” → Todo (완료...
일정 추가와 지출 기록을 자연어로 처리하려면 Google Calendar와 Google Sheets가 필요하다. “다음주 월요일 오후 2시 치과 예약해줘”라고 하면 실제 Calendar에 이벤트가 생기고, “스타벅스 6500원”이라고 하면 Sheets에 행이 추가되는 방식이다. 서비스 계정 방식 Google API를 쓰는 방법은 크게 두 가지다...
대화형 AI의 근본적인 한계가 있다. 오늘 “내 생일은 10월 27일이야”라고 말해도, 내일 다시 “내 생일 언제야?”라고 물으면 모른다. LLM의 컨텍스트는 대화 세션이 끝나면 사라지기 때문이다. 개인 비서로 쓰려면 이전에 말한 것들을 기억해야 한다. “와이프 이름 뭐라고 했지?”, “내가 선호하는 음식이 뭐야?” 같은 질문에 답할 수 있어야 한다...
log-agent를 운영하면서 “에러 분석 에이전트를 만드는 데 쓴 구조를 일상에도 쓸 수 있지 않을까”는 생각이 들었다. 일정 관리, 지출 기록, 할 일 목록, 리마인더 같은 것들을 하나의 Slack 채널에서 말로 처리하는 개인 비서다. 이 포스트는 전체 구축 과정을 한눈에 볼 수 있는 인덱스다. 각 주제별 상세 글로 이동할 수 있다. 전체 ...