블록 익스플로러에 AI를 붙이니, 정작 모델이 정해주는 게 없었다
MSU 블록체인 익스플로러에 Claude를 붙여 화면의 데이터를 설명하고 자연어 질문도 받게 만든 PoC. Tool Use까지 연결하고 나니 언제 조회할지, 어떤 도구를 열어둘지, 못 가져왔을 때 뭐라고 답할지가 전부 제가 코드로 적어야 할 판단이었다.
블록 번호, 64자리 트랜잭션 해시, 40자리 주소, 가스 사용량. 익스플로러 화면은 이런 값들로 빼곡합니다. 전부 정확한 값인데, 블록체인을 모르는 상태에서는 어느 것부터 봐야 하는지가 안 보입니다. 처음 익스플로러를 열었을 때 제가 그랬습니다.
나중에 기존 익스플로러를 다시 보면서 AI를 붙이면 조금 덜 어려워 보이지 않을까 궁금해졌습니다. 그렇게 만든 게 msu-blockchain-explorer-ai입니다. MSU 블록체인 네트워크의 공개 RPC를 조회하는 익스플로러에 Claude를 붙인 개인 PoC입니다.

검색창 하나로 조회와 질문을 같이 받기
홈에는 검색창이 하나입니다. 숫자를 넣으면 블록으로, 0x 뒤에 64자리가 붙으면 트랜잭션으로,
40자리면 주소 상세로 갑니다. 셋 중 어디에도 안 걸리는 문장은 질문으로 보고 AI 질의응답 화면으로
보냅니다.
블록·트랜잭션·주소 페이지는 Henesys RPC에서 데이터를 직접 가져옵니다. 기존 익스플로러처럼 원본 필드를 그대로 보여주고 그 옆에서 Claude가 같은 데이터를 문장으로 풉니다. 블록이면 포함된 트랜잭션과 가스 사용량을, 트랜잭션이면 성공 여부와 전송 값과 수수료를 읽을 수 있는 말로 바꿔주는 식입니다.
화면에 있는 걸 설명하는 것과, 없는 걸 가져오게 하는 것
여기까지는 데이터가 이미 화면에 있습니다. Claude는 그 옆에서 풀어주는 역할만 합니다.
제가 더 해보고 싶었던 건 그다음이었습니다. 그래서 최신 블록, 특정 블록, 트랜잭션, 주소, 가스 가격을 조회하는 도구 다섯 개를 만들어 Claude의 Tool Use로 연결했습니다. 데이터가 필요한 질문이 들어오면 Claude가 도구를 호출하고, RPC가 돌려준 값을 근거로 답합니다.
"현재 가스 가격은 얼마인가요?"라고 물으면 지금 네트워크 값을 조회해 Gwei와 예상 전송 비용을 함께 알려줍니다. 작은 차이처럼 보이지만, 앞의 방식으로는 이 질문에 아예 답할 수가 없습니다. 설명할 데이터가 화면에 없기 때문입니다. 어떤 해시를 찾아야 하는지 모르는 사람이 질문부터 시작할 수 있게 된 건 여기서부터입니다.
의도는 열한 갈래로 나눴는데 실제로 갈리는 건 셋
질문이 들어왔다고 전부 도구로 보내지는 않았습니다. 분류기를 따로 만들지 않고 정규식과 키워드로 의도를 열한 갈래로 나눴습니다. 최신 블록, 가스 가격, 네트워크 상태, 트랜잭션·블록·주소 분석, 거래 내역, 잔액, 블록 비교, 개념 질문, 범위 외. 패턴에 걸리면 0.9, 키워드만 걸리면 0.7, "이 트랜잭션"처럼 말은 했는데 해시가 없으면 0.5. 신뢰도까지 매겼습니다.
그런데 그 신뢰도는 어디에도 쓰이지 않습니다. 라우트가 로그로 한 줄 찍고 끝입니다. 실제로
갈리는 길은 셋뿐입니다. 범위 밖이면 거절하고, 실시간 데이터가 필요하면 도구를 열고, 나머지는
조회 없이 답합니다. 도구 목록도 의도별로 나누지 않았습니다. getToolsForIntent()는 어떤
의도가 오든 다섯 개를 전부 돌려주고, "추후 의도에 따라 필터링 가능"이라는 제 주석만 옆에
남아 있습니다.
열한 갈래를 나눠놓고 실제로는 두 가지만 정한 셈입니다. 무엇을 막을지, 그리고 무엇을 열어둘지. 모델은 그 선을 대신 그어주지 않았습니다.
규칙이 단순한 만큼 미리 정한 패턴을 벗어난 표현은 의도를 구분하지 못합니다. 규칙과 LLM을 같이 쓰는 분류도 생각했지만 구현하지는 않았습니다.
못 가져왔을 때 할 말은 세 군데에서 따로 정했습니다
조회는 실패합니다. 그리고 실패하는 방식마다 답할 사람이 달랐습니다.
RPC 호출이 깨지면 도구 실행 함수가 예외를 삼키고 에러 메시지를 담아 돌려줍니다. 그걸
is_error를 붙인 tool_result로 Claude에게 다시 넘겨서, 사용자에게 할 말은 Claude가 짓게 했습니다.
반대로 Tool Use 루프가 다섯 번을 넘기면 Claude에게 묻지 않습니다. 라우트가 미리 적어둔 문장을
그대로 내보냅니다 — "질문 처리에 시간이 오래 걸리고 있습니다. 더 구체적인 질문을 해주세요."
날씨나 영화를 물으면 정규식이 먼저 걸러내는데, 거절하는 문장은 다시 모델에게 시킵니다.
같은 "실패"인데 하나는 모델에게 맡기고, 하나는 제가 문장까지 써두고, 하나는 걸러내는 건 규칙이 하고 말하는 건 모델이 합니다. 어느 쪽이 옳은지 모델이 알려준 적은 없습니다. 세 번 다 제가 정했습니다.
비용으로 Haiku에 갔다가 품질로 Sonnet에 돌아온 것도
모델은 Sonnet으로 시작했다가 비용을 줄이려고 Haiku로 바꿨고, 답변 품질이 아쉬워 이틀 만에 다시 Sonnet으로 돌아왔습니다. 블록체인을 처음 접하는 사람에게 쉽게 설명하는 게 목적이었으니, 직접 읽었을 때 이해되는 답이 나오는 쪽이 비용보다 중요했습니다. (아무래도 Haiku로는 웬만큼의 품질을 기대하기는 아직 어렵더라구요.)
대신 비용 절감을 위해 입력을 줄이는 방법도 같이 썼습니다. 역할과 응답 규칙은 한국어로 두고, RPC 데이터는 짧은 영어 불릿 목록으로 넘겼습니다. 다만, 토큰이 얼마나 줄었는지는 측정해보지는 못했습니다.
그래서 지금은
마지막 코드 변경은 2026년 1월 10일이었고 배포한 뒤로는 딱히 추가 개발을 이어가지 않았습니다. 아무래도 비용 문제 때문에, 이를 더 발전시켜보기는 조금 애매하더라구요.
그래도 언젠가 AI 비용이 크게 저렴해진다면, 이러한 서비스를 개인 단위로도 운영해볼 수 있지 않을까요. 빠르게 그 날이 오기를 소망해봅니다.
그래서 확인하고 싶었던 것은
아무튼 이 PoC를 통해 제일 확인하고 싶었던, "AI를 붙이면 블록체인 익스플로러가 조금 덜 어려워 보일까"는 확인해볼 수 있었던 것 같습니다.
이 목표를 위해 화면을 최대한 단순하게 구성해보고, LLM을 붙여 검색 칸을 통해 무엇이든 물어볼 수 있도록 만들었고, 주변 지인들에게 소개했고, 실제 잘 동작했으니까요. 개인적인 평으로는 확실히 기존 블록체인 익스플로러들보다 쉬운 익스플로러를 만들어봤던 재밌는 경험이었지 않았나 싶습니다.