Cursor, Claude Code, Codex를 사용하여 코드를 작성하고, 코드를 검색하고, 파일을 편집하고, 테스트가 통과할 때까지 반복 실행하는 모습을 지켜본 적이 있다면 이미 AI 에이전트를 사용해 본 것이다. AI 에이전트들은 다영한 형태를 갖고 있지만, 공통적인 특징이 있다. 질문하면 답변하는 대화 방식이 아니라 자체적으로 실행 단계를 계획하고, 각 작업에 필요한 도구를 호출하여 결과가 나오게 만들고, 그 과정속에 전략을 조정한다. AI 에이전트는 컴퓨터와 상호 작용하는 새로운 방식이다.
현대 에이전트 = LLM + Context + 도구¶
현대 에이전트 시스템의 핵심은 공식 하나로 표현될 수 있다.
에이전트 = LLM + Context + 도구LLM은 에이전트의 추론 엔진이다. - 단순히 모델 매개변수 집합이 아니라, 의도 파악, 추론, 계획 수립, 판단을 담당하는 에이전트의 핵심 의사결정 시스템이다. LLM의 능력은 사전 학습을 통해 습득한 세계 지식과 언어 능력, 그리고 사후 학습을 통해 인코딩된 의사결정 전략에서 비롯된다.
컨텍스트는 에이전트가 활용할 수 있는 정보의 집합이다. - 단순히 모델에 입력되는 텍스트 뿐만 아니라, 각 의사 결정 시점에서 에이전트가 사용할 수 있는 모든 정보, 예를 들어 환경, 사용자 기억, 도메인 지식, 에이전트 자체의 상태, 그리고 작업 진행 상황까지 포함한다. 마치 사람이 의사 결정을 내릴 때 상황을 파악하고, 관련 경험을 떠올리고, 참고 자료를 살펴보는 것처럼, 에이전트의 컨텍스트 창에는 그 순간에 사용할 수 있는 정보가 담겨 있다.
도구는 에이전트의 작업 인터페이스이다. - 단순하게 호출 가능한 API 함수 몇 개가 아니라, 미리 정의된 도구 호출부터 필요에 따라 불러오는 스킬, 즉석에서 새로운 기능을 생성하는 코드 작성, 하위 에이전트에게 작업 위임, 외부 이벤트에 응답하는 것까지 에이전트가 수행할 수 있는 모든 방식을 포함한다.
에이전트는 추론 엔진 + 작업 컨텍스트 + 액션 인터페이스의 조합이다. 모델은 추론하고 결정을 내리고, 컨텍스트는 이런 결정에 필요한 정보들을 제공하고, 도구는 결정이 외부 세계에 영향을 미치는 인터페이스를 제공한다.
| 직관 | 에이전트 구성요소 | 역할 |
|---|---|---|
| 추론 엔진 | LLM | 현재 정보를 바탕으로 가능한 모든 선택지 중에서 가장 적절한 행동을 선택하며 "다음에 무엇을 해야 할지"를 결정하는 의사결정 논리 |
| 업무 환경 | Context | 에이전트가 이용할 수 있는 모든 정보, 즉 에이전트가 관찰하고, 읽고, 기억할 수 있는 정보와 접근할 수 있는 시스템에 대한 정보 |
| 액션 인터페이스 | 도구 | 에이전트가 수행할 수 있는 모든 작업, 즉, 메시지 전송부터 코드 실행, 인터페이스 제어에 이르기까지 사용 가능한 모든 수단을 설명 |
다음은 다양한 유형의 에이전트가 위에서 언급한 세 가지와 어떻게 다른지 비교해본다.
| 에이전트 제품 | 업무 환경 | 액션 인터페이스 | 전략 |
|---|---|---|---|
| 코딩 에이전트 | 요구사항 문서, 코드 리포, 터미널 환경 | 개방형 과제(내부 추론, 코드 검색, 읽기/쓰기, 명령어 실행 등) | 점진적 개발: 요구사항 이해 -> 관련 코드 검색 -> 코드 수정 -> 테스트 및 검증 -> 디버깅 및 수정 |
| 검색 에이전트 | 웹 자료, 학술 데이터베이스, 로컬 파일 | 개방형 문제(내부 추론, 검색 쿼리, 웹 읽기, 요약 생성) | 반복적 심화: 기존 정보를 바탕으로 검색 방향을 조정하고, 점진적으로 완전한 보고서를 종합한다. |
| 컴퓨터 제어 에이전트 | 컴퓨터 화면, 브라우저 페이지, 파일 시스템 | 개방형(내부 추론, 입력, 클릭, 스크롤, 스크린샷, 코드 실행 등) | 시각적 인지 + 조작: 화면 관찰 -> 목표 요소 식별 -> 동작 수행 -> 결과 확인 |
| 전화 도우미 상담원 | 휴대폰 화면, 설치된 앱 | 개방형(내부 추론, 클릭, 스와이프, 타이핑, 앱 실행 등) | 의도 파악 + 앱 제어: 사용자 요구사항 파악 -> 대상 앱 찾기 -> 작업 수행 -> 완료 확인 |
| 개인 작업 에이전트 | 사용자 계정 정보, 과거 청구서, 서비스 제공업체 지식 기반 | 개방형 과제(내부 추론, 전화 걸기, 이메일 보내기, 양식 작성, 사용자 확인) | 단계별 작업 실행: 정보 수집 -> 협상 전략 수립 -> 서비스 제공업체 연락 -> 협상 -> 결과보고 |
이런 시스템들은 세 가지 공통된 특징을 가지고 있다.
고정된 세트에서 선택하는 것이 아니라 임의의 자연어와 코드를 생성할 수 있는 개방적인 실행 공간이다.
행동하기 전에 계획을 세우는 내부 추론 기능이다.
피드백에 따라 전략을 조정하는 지속적인 상호 작용 기능이다.
이런 기능들은 추론 엔진, 작업 컨텍스트 그리고 액션 인터페이스 즉, LLM, Context, 도구의 상호 작용에서 비롯된다.
도구: 에이전트의 액션 인터페이스¶
도구는 에이전트와 외부 세계를 연결하는 다리 역할을 한다. 도구를 통해 에이전트는 수동적인 관찰자에서 검색, 파일 작성, 코드 실행, API 호출, 메시지 전송, 인터페이스 조작 등을 수행할 수 있느 능동적인 시스템을 변모한다. 도구가 없다면 에이전트는 텍스트 생성에만 국한되게 되고, 도구를 사용하면 외부 시스템에 대한 조작이 가능해진다.
에이전트가 세상과 상호작용하는 방향에 따라 5가지 유형으로 도구를 분류할 수 있다. 각 유형의 대표적인 시나리오를 살펴보자.
인지 도구: 에이전트가 정보에 접근할 수 있게 해준다. 검색 엔진은 실시간 웹 데이터를 제공하고, 파일 시스템은 로컬 문서를 읽으며, API와 데이터베이스는 외부 서비스 및 기업 핵심 데이터에 연결된다.
실행 도구: 에이전트가 외부 시스템에서 작업을 수행할 수 있게 해준다. 코드 실행, 파일 작업, 시스템 명령 및 외부 API 호출을 통해 구체적인 행동으로 옮길 수 있다.
협업 도구: 에이전트가 다른 에이전트와 작업을 분담할 수 있다. 예를 들어, 전문적인 작업을 서브 에이전트에게 위임하거나, 주요 의사 결정 지점에서 사람의 확인을 요청하거나, 다중 에이전트 시스템에서 작업을 조정할 수 있다.
이벤트 트리거 도구: 에이전트가 직접 호출하는 것이 아니라, 외부 입력으로 전달되어 에이전트가 작업을 시작하도록 트리거하는 역할을 한다. 예를 들어 새로운 이메일이 수신되거나, 예약된 시간이 도래하거나, 다른 시스템에서 웹훅 콜백이 발생하는 경우, 이러한 이벤트가 에이전트를 활성화하고 추론 및 조치를 시작하게 한다. 에이전트를 도구를 직접 호출하지는 않지만, 외부 세계와 상호 작용하는 채널 역할을 하므로 포괄적인 도구 시스템에 포함된다.
사용자 커뮤니케이션 도구: 에이전트와 사용자가 소통하는 채널이다. 실행 도구가 외부 세계를 변화시키는 반면, 커뮤니케이션 도구는 정보를 전달한다. 즉, 문자 메시지, 음성 통화, 이메일 등을 통해 에이전트의 진행 상황이나 사전에 점검할 메시지를 전달하는 역할을 한다.
그외 함수 호출이 있는데, 이것은 LLM 에이전트의 핵심 기능이다. 이 기능을 통해 모델은 구조화된 방식으로 외부 도구를 호출할 수 있으며, LLM을 단순한 텍스트 생성기에서 외부 인터페이스를 통해 작동할 수 있는 지능형 시스템으로 변화시킨다.
날씨를 조회하기 위한 API 수준의 4단계 프로세스를 간략하게 표현하면 아래와 같다.
1단계: 도구 정의
모델이 사용할 수 있는 외부 도구(함수)의 이름과 입력 매개변수 형식을 정의하여 전달한다.
tools: [{
name:"get_weather",
parameters: {
city:"string"
}
}]
2단계: 도구 호출 결정
사용자의 요청을 분석 한 후, 필요한 도구를 실행하기 위해 함수 이름과 인수를 지정하여 요청.
assistant: {
tool_calls" [{
function: "get_weather",
arguments: {city:"Seoul"}
}]
}
3단계: 실행 결과를 대화에 추가
시스템이 실제로 해당 외부 API나 함수를 실행하고, 그 결과값을 다시 AI의 대화 문맥(Context)에 전달.
tool: {
tool_call_id:"call_1",
content:'{"temp":28, "sky":"clear"}'
}
4단계: 최종 응답 생성
전달받은 실행 결과를 바탕으로 사용자가 이해하기 쉬운 최종 답변을 작성하여 응답.
assistant: {
content: "오늘 서울 날씨는 28°C."
}개발자는 도구를 정의하고 호출을 실행하기만 하면 된다. 모델 자체가 호출 여부, 호출할 도구, 전달할 인수를 결정한다.
에이전트용 도구를 설계할 때는 범용성을 유지하고 LLM에 유연성을 제공해야 한다. 예를 들어 이런것이다. 작업 노트를 기록하는 도구 대신에 파일 읽기/쓰기 도구를 제공하고, 숫자 계산을 위한 전용 계산기 대신에 파이썬 코드 인터프리터를 제공한다. 범용 도구를 통해 에이전트는 기본적인 기능을 조합하여 문제를 창의적으로 해결할 수 있다.