블로그 목록
ai

Claude 코드 실행 도구로 계산·데이터 분석 맡기기 — LLM이 직접 파이썬을 돌린다

간단한 데이터 요약 기능을 붙이다가 어이없는 걸 겪었다. 사용자가 올린 숫자 목록의 표준편차를 Claude한테 물었더니, 형식은 완벽한데 값이 미묘하게 틀렸다. 당연하다. LLM은 계산을 하는 게 아니라 계산 결과처럼 보이는 텍스트를 만든다. 평균 정도는 얼추 맞아도, 표준편차나 백분위수처럼 여러 단계를 거치는 계산은 그럴듯하게 틀리기 시작한다.

프롬프트로 "차근차근 계산해"라고 달래봤자 근본 해결이 안 된다. 숫자는 진짜 코드가 돌려서 뽑아야 한다. 그래서 Claude의 code execution 도구를 붙였다.

서버가 대신 파이썬을 돌린다

code execution은 Anthropic 서버 안의 샌드박스에서 파이썬을 실제로 실행해주는 서버 도구다. 핵심은 내가 실행할 게 아무것도 없다는 점이다. tools 배열에 선언만 하면, Claude가 알아서 코드를 짜고, 서버에서 돌리고, 그 결과를 근거로 답한다. 컨테이너에는 pandas, numpy, matplotlib 같은 게 이미 깔려 있다.

import Anthropic from '@anthropic-ai/sdk';

const client = new Anthropic();

const response = await client.messages.create({
  model: 'claude-sonnet-5',
  max_tokens: 4096,
  tools: [{ type: 'code_execution_20260120', name: 'code_execution' }],
  messages: [
    {
      role: 'user',
      content:
        '[12, 45, 7, 88, 23, 56, 41, 9, 77, 34]의 평균, 중앙값, 표준편차를 구해줘.',
    },
  ],
});

for (const block of response.content) {
  if (block.type === 'text') console.log(block.text);
}

이제 답에 적힌 숫자는 텍스트 생성물이 아니라 실제로 numpy가 뱉은 값이다. 응답에는 Claude가 짠 코드와 실행 결과 블록도 같이 담겨오니, 어떤 계산을 거쳤는지도 확인할 수 있다.

실전 팁

  • 인터넷은 안 된다. 샌드박스는 완전히 격리돼 있어 외부 호출은 못 한다. 순수 계산·데이터 처리 용도다.
  • 컨테이너를 재사용하자. 첫 응답의 response.container.id를 다음 요청에 넘기면, 앞서 만든 파일이나 설치한 패키지가 그대로 유지된다. 파일 올려서 이어 분석할 때 유용하다.
  • 파일 업로드도 된다. Files API로 CSV를 올려 container_upload 블록으로 넘기면, "이 매출 데이터 추세 뽑고 차트 그려줘" 같은 요청이 그대로 먹힌다. 생성된 차트는 파일로 되돌려받는다.
  • 비용은 부담 없다. 웹 검색 도구와 같이 쓰면 무료고, 단독으로 써도 조직당 매월 넉넉한 무료 시간이 주어진다.

숫자를 LLM한테 "믿고 맡기던" 걸 실행으로 바꾸니, 계산 오류로 사용자한테 틀린 값을 보여줄 일이 사라졌다. 도구 하나 선언한 게 전부인데 말이다.