AI 에이전트는 단순히 텍스트를 생성하는 것이 아니라 행동을 취할 수 있는 언어 모델입니다. 웹을 검색하고, 코드를 실행하고, API를 호출하고, 파일을 읽고, 다음에 할 일을 결정할 수 있습니다. 수동적 텍스트 생성에서 능동적 문제 해결로의 이 전환은 응용 AI에서 가장 중요한 발전 중 하나입니다.

## 채팅에서 행동으로

챗봇은 질문에 답합니다. 에이전트는 문제를 해결합니다. 차이는 자율성입니다: 에이전트는 어떤 도구를 사용할지, 어떤 순서로, 에러를 어떻게 처리할지 결정합니다.

실제 차이를 생각해 보세요. 챗봇에게 "도쿄 날씨가 어때?"라고 물으면 학습 데이터 기반으로 답할 수 있지만 — 몇 달 또는 몇 년 전 데이터로 거의 확실히 부정확합니다. 에이전트에게 같은 질문을 하면 날씨 API를 호출하고 현재 데이터를 검색하여 정확하고 최신 답변을 반환합니다.

챗봇은 그럴듯한 텍스트를 생성합니다. 에이전트는 세계와 상호작용합니다.

### 자율성의 스펙트럼

모든 에이전트가 동일하게 자율적이지는 않습니다. 스펙트럼이 있습니다:

1. **도구 보조 채팅** — 모델이 도구를 호출할 수 있지만, 사용자 요청에 대한 직접 응답으로만. 턴당 하나의 도구 호출.
2. **다단계 에이전트** — 모델이 작업을 완수하기 위해 여러 도구 호출을 연쇄할 수 있으며, 순서를 스스로 결정.
3. **완전 자율 에이전트** — 모델이 장기간 독립적으로 운영하며, 결정을 내리고 에러를 처리하고 최소한의 인간 감독으로 목표를 추구.

현재 대부분의 프로덕션 시스템은 1-2 수준입니다. 완전 자율 에이전트는 아직 해결해야 할 중요한 안전 과제가 있는 활발한 연구 분야입니다.

## 도구 사용

도구 사용은 AI 모델이 외부 함수를 호출할 수 있게 합니다. 모델은 도구가 필요한 시점을 결정하고, 올바른 매개변수를 생성하고, 결과를 응답에 통합합니다.

### 도구 사용의 작동 방식

메커니즘은 간단합니다:

1. **도구 정의** — 이름, 매개변수, 역할을 포함하여 사용 가능한 도구를 모델에 설명합니다.
2. **결정** — 사용자 요청을 처리할 때 모델이 도구가 도움이 될지 결정합니다. 그렇다면 적절한 매개변수로 도구 호출을 생성합니다.
3. **실행** — 애플리케이션이 도구 호출을 실행하고(모델이 직접 실행하지 않음) 결과를 반환합니다.
4. **통합** — 모델이 도구 결과를 사용자 응답에 통합합니다.

### 도구 정의 예시

```json
{
  "name": "search_documentation",
  "description": "Search the product documentation for relevant articles",
  "parameters": {
    "type": "object",
    "properties": {
      "query": {
        "type": "string",
        "description": "The search query"
      },
      "max_results": {
        "type": "integer",
        "description": "Maximum number of results to return",
        "default": 5
      }
    },
    "required": ["query"]
  }
}
```

### 일반적인 도구 카테고리

프로덕션 에이전트 시스템은 보통 여러 카테고리의 도구를 제공합니다:

- **정보 검색** — 웹 검색, 데이터베이스 쿼리, 파일 읽기, API 호출
- **코드 실행** — 샌드박스 환경에서 Python, JavaScript, 셸 명령 실행
- **커뮤니케이션** — 이메일 전송, 메시지 게시, 티켓 생성
- **파일 조작** — 파일 생성, 편집, 정리
- **시스템 운영** — 코드 배포, 인프라 관리, CI 파이프라인 실행

제공하는 도구가 에이전트가 할 수 있는 것의 경계를 정의합니다. 잘 설계된 도구 세트는 에이전트에게 유용할 만큼의 능력을 부여하면서 위험할 만큼의 권한은 주지 않습니다.

## 에이전트 루프

가장 강력한 패턴은 에이전트 루프입니다: 모델이 단계를 계획하고, 실행하고, 결과를 관찰하고, 다음 단계를 결정합니다. 이 루프는 작업이 완료되거나 진행할 수 없다고 판단할 때까지 계속됩니다.

### 루프의 에러 처리

견고한 에이전트는 실패를 우아하게 처리해야 합니다. 좋은 에이전트 설계에는 다음이 포함됩니다:

- **재시도 로직** — 일시적 실패를 백오프와 함께 재시도
- **대체 전략** — 한 접근이 실패하면 다른 것을 시도
- **우아한 성능 저하** — 작업을 완전히 완료할 수 없으면 가능한 만큼 완료하고 남은 것을 설명
- **루프 제한** — 에이전트가 막힐 때 무한 루프를 방지하기 위한 최대 반복 횟수 설정

## 효과적인 도구 설계

### 도구 설계 원칙

- **명확한 이름** — `query_db_1`보다 `search_users`가 좋습니다. 모델은 이름을 기반으로 도구를 호출할 시기를 결정합니다.
- **설명적 매개변수** — 모든 매개변수에 설명을 포함하세요.
- **집중된 범위** — 각 도구가 하나의 일을 잘 해야 합니다.
- **유용한 에러** — 무엇이 잘못되었고 대신 무엇을 시도할지 이해할 수 있는 명확한 에러 메시지를 반환하세요.
- **가능하면 멱등성** — 안전하게 재시도할 수 있는 도구가 에러 처리를 단순화합니다.

## 위험

행동을 취할 수 있는 에이전트는 잘못된 행동을 취할 수 있습니다. 샌드박싱, 확인 단계, 인간 참여 리뷰는 모든 프로덕션 에이전트 시스템의 필수 안전 조치입니다.

### 안전 패턴

프로덕션 에이전트 시스템은 여러 안전 패턴을 구현해야 합니다:

1. **최소 권한** — 에이전트에게 특정 작업에 필요한 도구만 제공
2. **샌드박싱** — 코드와 파일 작업을 격리된 환경에서 실행
3. **확인 게이트** — 파괴적이거나 돌이킬 수 없는 행동에 인간 승인 요구
4. **감사 로깅** — 모든 도구 호출과 결과를 기록
5. **킬 스위치** — 실행 중인 에이전트를 즉시 중단하는 메커니즘 제공
6. **예산 제한** — API 호출, 토큰 사용, 컴퓨트 시간에 하드 캡 설정

목표는 에이전트가 유용하지 못하게 하는 것이 아닌 — 잘 정의된 경계 내에서 유용하게 하는 것입니다.