AI agent를 간단하게 만들어보자
How To Build An Agent | Amp
Building a fully functional, code-editing agent in less than 400 lines.
ampcode.com
아래는 요청하신 위 링크인 "How To Build An Agent | Amp" 글을 기반으로 작성한 풍성하고 자세한 한글 블로그 포스트입니다. 원문의 구조는 유지하면서, 한국어 사용자에게 친숙하고 쉽게 이해될 수 있도록 재구성했습니다.
🧠 지금 당장 코드 에디팅 에이전트를 만들어보세요: Amp가 보여주는 간단하지만 강력한 방법
부제: 알고 보면 속임수는 없다
Thorsten Ball, 2025년 4월 15일
에이전트를 만든다고 하면 엄청나게 어려울 것 같죠? GPT가 파일을 편집하고, 명령어를 실행하고, 오류를 피해 가며 다양한 전략을 시도하는 걸 보면, “이건 분명 무언가 특별한 게 있을 거야”라는 생각이 듭니다.
그런데, 사실 별거 없습니다. 단지 LLM(대형 언어 모델) 하나, 루프 하나, 그리고 충분한 토큰만 있으면 됩니다.
이 블로그에서는 400줄도 안 되는 Go 코드로, 매우 인상적인 코드 편집 에이전트를 만드는 법을 단계별로 소개합니다. 실제 Claude와 대화하며 파일을 읽고, 목록을 출력하고, 심지어 코드를 생성하고 수정하는 AI 도우미를 만드는 과정을 따라가보세요.
🚀 시작 전에 필요한 것들
준비물
- Go 언어 설치
- Anthropic API 키 - 환경변수 ANTHROPIC_API_KEY로 설정
프로젝트 시작
mkdir code-editing-agent
cd code-editing-agent
go mod init agent
touch main.go
🧱 에이전트의 기본 구조
main.go 파일에 가장 기본적인 구조를 작성합니다. Claude와의 대화 기능을 위해 표준 입력을 사용하고, Anthropic SDK를 통해 메시지를 주고받습니다.
이후 Claude에게 입력을 전달하고, 응답을 받아 출력하는 간단한 대화 루프를 구현합니다.
🤖 툴이란 무엇인가?
여기서 “에이전트”란 단순한 챗봇이 아니라 외부의 도구에 접근하여 무언가를 수정할 수 있는 LLM을 의미합니다.
도구(tool)를 사용하는 개념은 아주 간단합니다.
Claude에게 “이런 식으로 대답하면 네가 도구를 사용하고 싶다는 뜻이야”라고 알려주고, Claude가 그 형식으로 대답하면 실제 도구를 실행한 뒤 결과를 다시 Claude에게 전달합니다.
이때 Claude는 마치 눈짓을 주듯 툴을 호출합니다. 우리가 그것을 감지하고 실제로 실행해주는 것입니다.
🔧 첫 번째 도구: read_file
도구 정의
- 이름: read_file
- 설명: 상대 경로로 지정된 파일의 내용을 읽습니다.
- 입력 스키마: path 문자열
- 실제 실행 함수: Go의 os.ReadFile로 파일 내용 읽기
Claude가 read_file({"path":"main.go"})처럼 말하면, 해당 파일을 읽고 내용을 Claude에게 다시 보내줍니다.
🛠 Claude가 도구를 사용할 수 있도록 하려면?
- 사용할 도구들을 정의합니다.
- Claude에게 도구 정의들을 전달합니다.
- Claude의 응답 중 tool_use 유형이 있는지 확인하여 직접 실행합니다.
- 결과를 다시 Claude에게 전달하여 응답을 이어갑니다.
📁 두 번째 도구: list_files
디렉터리 안의 파일을 나열하는 도구입니다. . (현재 디렉토리) 기준으로 모든 파일을 출력해줍니다. Claude는 이 정보를 바탕으로 어떤 파일을 읽거나 수정해야 할지를 판단합니다.
✍️ 세 번째 도구: edit_file
드디어 코드 수정 기능! Claude가 파일을 생성하거나, 기존 문자열을 새로운 문자열로 바꾸는 방식으로 파일을 수정할 수 있습니다.
예시 입력:
{
"path": "fizzbuzz.js",
"old_str": "",
"new_str": "function fizzBuzz() { ... }"
}
Claude는 파일이 존재하지 않으면 새로 만들고, 기존 문자열이 있으면 바꾸고, 없으면 에러 메시지를 줍니다.
🧪 데모 시나리오
✔️ 예시 1: FizzBuzz 파일 생성
You: NodeJS에서 실행 가능한 fizzbuzz.js 파일을 만들어줘.
Claude: tool: edit_file({"path":"fizzbuzz.js", "old_str":"", "new_str":"..."})
Claude는 직접 FizzBuzz 함수를 작성해 fizzbuzz.js를 생성해줍니다.
✔️ 예시 2: 파일 수정
You: fizzbuzz.js 파일에서 100까지 출력하는 걸 15로 바꿔줘.
Claude: tool: read_file({"path":"fizzbuzz.js"})
Claude: tool: edit_file({...})
Claude는 파일을 먼저 읽고, fizzBuzz(100)을 fizzBuzz(15)로 수정합니다.
✔️ 예시 3: ROT13 메시지 디코딩 스크립트 생성
You: congrats.js 파일을 만들어줘. ROT13으로 인코딩된 문장을 디코딩하고 출력해줘.
Claude: tool: edit_file({"path":"congrats.js", "old_str":"", "new_str":"..."})
Claude는 ROT13 디코더 함수를 구현하고, 메시지를 출력하는 NodeJS 스크립트를 생성합니다.
💡 핵심 포인트 정리
- Claude는 툴 사용법을 학습한 모델로서, “이런 도구가 있어”라고 알려주기만 하면 그걸 언제, 어떻게 쓸지 스스로 판단합니다.
- 우리는 단지 Claude의 메시지를 해석해서 실제로 실행하고 결과를 돌려주는 역할을 합니다.
- 전체 구현은 300~400줄 내외로 구성되며, 기능별로 구성 요소를 나누면 관리도 쉬워집니다.
- LLM의 지능은 도구와 결합될 때 더욱 강력해지며, 도구가 추가될수록 Claude는 더욱 “에이전트답게” 행동합니다.
🎉 마무리하며
300줄 남짓한 Go 코드와 몇 개의 도구만으로 여러분은 Claude와 대화하며 실제 로컬 파일을 읽고, 목록을 보고, 편집할 수 있는 AI 에이전트를 만들 수 있습니다.
이제 중요한 건 직접 시도해보는 것입니다. 여러분의 터미널에서 Claude가 파일을 읽고 수정하는 모습을 보는 순간, 이 기술의 진정한 힘을 실감하게 될 것입니다.
바로 지금, Claude와 함께 나만의 에이전트를 만들어보세요.