AI Agent를 직접 만들어봐야 하는 이유
You should write an agent
TL;DR Highlight
LLM agent는 간단한 코드로 구현 가능하며, 직접 만들어봐야만 동작 원리를 정확히 이해하고 올바른 판단을 내릴 수 있다.
Who Should Read
LLM agent가 뭔지 개념적으로만 알고 있고, 직접 만들어본 적은 없는 개발자. 특히 agent 기술을 도입할지 말지 판단해야 하는 위치에 있는 사람.
Core Mechanics
- LLM agent의 핵심은 놀랍도록 단순하다. OpenAI API 호출 하나에 context 리스트를 관리하는 것만으로 ChatGPT와 동일한 대화형 앱을 15줄 안에 만들 수 있다.
- 흔히 복잡하게 느껴지는 'context window'는 사실 문자열 리스트에 불과하다. 사용자 입력과 LLM 응답을 리스트에 쌓아서 매번 통째로 보내는 게 전부고, LLM 자체는 stateless한 블랙박스다. 대화가 이어지는 건 우리가 만든 환상이다.
- Simon Willison의 정의에 따르면 agent는 (1) 루프 안에서 돌아가는 LLM + (2) 도구 사용, 이 두 가지를 만족해야 한다. 도구 정의도 JSON 스키마 하나로 끝나서 추가하기 매우 쉽다.
- 예제에서 ping 같은 시스템 명령을 tool로 정의해서 LLM이 '이 호스트에 ping 쳐줘'라고 판단하면 실제로 subprocess를 실행하는 방식을 보여준다. tool calling의 구조가 직관적이다.
- system prompt로 성격을 바꾸는 것도 간단하다. 예제에서 '진실만 말하는 Alph'와 '거짓만 말하는 Ralph' 두 context를 랜덤으로 전환하는 다중 성격 agent를 몇 줄로 구현했다.
- 글의 핵심 주장은 agent를 좋아하든 싫어하든, 직접 만들어봐야 제대로 판단할 수 있다는 것. 자전거 타기처럼 머리로만 이해할 수 없는 기술이라는 비유를 든다.
- GPT-5를 예제에 사용했지만, OpenAI 호환 API(OpenRouter 등)를 쓰면 모델과 프로바이더를 런타임에 자유롭게 교체할 수 있다. 인터페이스가 사실상 업계 표준이 됐다.
Evidence
- 2년 전에 PHP 25줄로 agent를 만들었는데 GPT-3.5에서도 잘 동작했다는 경험 공유가 있었다. LLM을 sed나 awk 같은 UNIX 텍스트 처리 도구로 보면 자연스럽게 합성·루프·분기를 적용할 수 있다는 관점이 공감을 얻었다.
- '직접 만드는 건 재밌지만 디버깅은 아무도 안 좋아한다'는 현실적 반론이 나왔다. 처음엔 마법 같지만 step 17에서 실패하고, 확률적이라 재현도 안 되고, 한 스텝에 0.5초씩 걸려서 실패 확인에 10-20분을 기다려야 한다는 경험담.
- agent가 결국 개발자를 대체할 도구인데 왜 스스로 더 잘 만들도록 도와야 하냐는 회의적 시각도 있었다. 지속 가능한 수익 모델 없이 AI 프로바이더들이 적자로 운영하는 상황에서 agent 기반 프로젝트를 시작하는 게 현실적인지 의문을 제기.
- OpenAI API가 tool calling을 깔끔하게 감싸주지만, 본질은 프롬프트에 '이런 도구가 있으니 쓰고 싶으면 특정 포맷으로 응답하고 멈춰라'라고 지시하는 것에 불과하다는 분석이 나왔다. 결국 토큰 입출력이 전부라는 점이 가려진다는 지적.
- 직접 코딩 agent를 만들고 스스로 개선하게 한 경험도 공유됐다. Cerebras처럼 빠른 추론 서비스를 쓰면 multi-turn tool call이 체감상 크게 개선되고, 메모리·음성 전사 등 기능을 각각 몇 분 만에 추가할 수 있었다고 한다.
How to Apply
- LLM agent 도입을 검토 중이라면, 글의 15줄 예제를 그대로 따라 치고 tool 하나(파일 읽기, DB 쿼리 등)를 붙여보면 agent의 실제 동작 원리와 한계를 30분 안에 체감할 수 있다.
- 이미 OpenAI API를 쓰고 있다면 OpenRouter를 연결해서 모델을 런타임에 교체하는 구조로 바꾸면, 비용이 민감한 작업에는 저렴한 모델, 정확도가 필요한 작업에는 frontier 모델을 쓰는 식으로 최적화할 수 있다.
- 사내 반복 작업(로그 분석, 배포 상태 확인 등)을 agent로 자동화할 때, tool을 UNIX 철학처럼 '한 가지만 잘하는' 단위로 쪼개면 보안 측면에서도 유리하고 디버깅도 쉬워진다.
- agent 디버깅이 어렵다는 점을 감안해서, 각 tool call의 입출력을 로깅하고 step별로 재현할 수 있는 구조를 처음부터 설계해두면 '확률적 실패'에 대응하기 훨씬 수월하다.
Code Example
from openai import OpenAI
client = OpenAI()
context = []
def call():
return client.responses.create(model="gpt-5", input=context)
def process(line):
context.append({"role": "user", "content": line})
response = call()
context.append({"role": "assistant", "content": response.output_text})
return response.output_text
# Tool 정의 예시
tools = [{
"type": "function",
"name": "ping",
"description": "ping some host on the internet",
"parameters": {
"type": "object",
"properties": {
"host": {"type": "string", "description": "hostname or IP"}
},
"required": ["host"]
}
}]Terminology
관련 논문
adamsreview: Claude Code용 멀티 에이전트 PR 코드 리뷰 파이프라인
Claude Code에서 최대 7개의 병렬 서브 에이전트가 각각 다른 관점으로 PR을 리뷰하고, 자동 수정까지 해주는 오픈소스 플러그인이다. 기존 /review나 CodeRabbit보다 실제 버그를 더 많이 잡는다고 주장하지만 커뮤니티에서는 복잡도와 실효성에 대한 회의론도 나왔다.
Claude를 User Space IP Stack으로 써서 Ping에 응답시키면 얼마나 빠를까?
Claude Code에게 IP 패킷을 직접 파싱하고 ICMP echo reply를 구성하도록 시켜서 실제로 ping에 응답하게 만든 실험으로, 'Markdown이 곧 코드이고 LLM이 프로세서'라는 아이디어를 네트워크 스택 수준까지 밀어붙인 재미있는 사례다.
AI Agent를 위한 Git: re_gent
AI 코딩 에이전트(Claude Code 등)가 수행한 모든 툴 호출을 자동으로 추적하고, 어떤 프롬프트가 어느 코드 줄을 작성했는지 blame까지 가능한 버전 관리 도구다.
Agent-Native CLI를 위한 설계 원칙 10가지
AI 에이전트가 CLI 도구를 더 잘 사용할 수 있도록 설계하는 원칙들을 정리한 글로, 에이전트가 CLI를 도구로 활용하는 빈도가 높아지면서 이 설계 방식이 실용적으로 중요해지고 있다.
Agent-harness-kit: MCP 기반 멀티 에이전트 워크플로우 오케스트레이션 프레임워크
여러 AI 에이전트가 서로 역할을 나눠 협업할 수 있도록 조율하는 scaffolding 도구로, Vite처럼 설정 없이 빠르게 멀티 에이전트 파이프라인을 구성할 수 있다.
Tilde.run – AI Agent를 위한 트랜잭션 기반 버전 관리 파일시스템 샌드박스
AI 에이전트가 실제 프로덕션 데이터를 건드려도 롤백할 수 있는 격리된 샌드박스 환경을 제공하는 도구로, GitHub/S3/Google Drive를 하나의 버전 관리 파일시스템으로 묶어준다.