9장. 도구를 쓰는 LLM 과 Agentic Workflow
AI 에이전트란
비서를 둔다는 것은 말만 잘하는 사람을 두는 것이 아닙니다. 전화기, 달력, 계산기를 쓸 줄 알고, 일이 끝날 때까지 스스로 다음 할 일을 정하는 사람을 두는 것입니다. AI 에이전트도 LLM 에 도구와 반복을 더한 것입니다.
네 카드가 에이전트를 이루는 부품입니다. LLM 은 다음 할 일을 정하는 머리, 도구는 실제로 일을 하는 손, 기억은 지금까지 주고받은 메시지, 반복은 일이 끝날 때까지 돌게 하는 루프입니다. 여기서 비서의 판단이 LLM, 전화기와 달력이 도구입니다. 비유와 다른 점은, LLM 은 도구를 직접 만지지 못하고 "써 달라"고 요청만 하며, 실제 실행은 늘 우리 코드가 한다는 것입니다.
챗봇과 에이전트
| 견줄 것 | 챗봇(6~8장) | 에이전트(이 장) |
|---|---|---|
| 하는 일 | 질문에 글로 답한다 | 도구를 써서 일을 끝낸다 |
| 바깥 세상 | 붙여 준 문서만 본다 | 검색, 계산, 예약 같은 도구로 알아보고 바꾼다 |
| 한 번에 | 답 하나 | 여러 걸음(도구 호출이 여러 번) |
| 틀리면 | 틀린 글 | 틀린 예약, 잘못 보낸 메일처럼 되돌리기 어려운 일 |
에이전트가 하는 일의 생김새
에이전트 한 번의 일은 메시지가 쌓이는 모습으로 볼 수 있습니다.
# 에이전트가 일하는 동안 쌓이는 메시지의 꼴(설명용으로 적은 내용)
trace = [
("user", "내일 오후 2시에 6명 회의실 잡아 줘"),
("assistant", "도구 호출: find_free_rooms(date=2026-10-28, start=14:00, end=15:00, people=6)"),
("tool", "['별빛']"),
("assistant", "도구 호출: book_room(room=별빛, date=2026-10-28, start=14:00, end=15:00)"),
("tool", "예약됨"),
("assistant", "내일 오후 2시부터 3시까지 별빛 회의실을 예약했습니다."),
]
for role, text in trace:
print(f"{role:9s} {text}")
print("도구 호출 수:", sum(t.startswith("도구 호출") for _, t in trace))사용자의 말 하나에 assistant 와 tool 메시지가 번갈아 쌓이고, 마지막 assistant 메시지가 사용자에게 보여 줄 답입니다. 도구 호출은 2번입니다.
코드에 나오는 함수
| 코드 | 쉬운 뜻 |
|---|---|
trace = [(역할, 글), ...] | trace 는 "발자취"라는 뜻이다. 누가(역할) 무엇을(글) 말했는지 짝을 지어 차례로 담는다 |
for role, text in trace | 짝마다 역할과 글을 나눠 꺼낸다 |
f"{role:9s}" | 역할 글자를 9칸에 맞춰 적는다. s 는 string(글자)이다. 칸을 맞추면 줄이 가지런해진다 |
t.startswith("도구 호출") | starts with(~로 시작하다). 글이 "도구 호출"로 시작하면 True 다 |
sum(... for _, t in trace) | True 를 1, False 를 0 으로 더한다. 곧 도구 호출로 시작하는 글의 수를 센다 |
이 코드가 뜻하는 것
비서의 업무 일지를 한 줄씩 읽는 일입니다. 일지에는 "사장님 부탁", "예약 시스템 조회", "조회 결과", "예약", "보고"가 차례로 적혀 있습니다. 여기서 업무 일지가 trace, 일지의 한 줄이 메시지 하나입니다.
| 줄 | 하는 일 | 쉽게 말하면 |
|---|---|---|
("user", ...) | 사용자의 부탁 | 사장님이 맡긴 일 |
("assistant", "도구 호출: find_free_rooms(...)") | 모델이 도구를 써 달라고 요청한다 | 비서가 "빈 방을 조회해 주세요"라고 적는다 |
("tool", "['별빛']") | 우리 코드가 도구를 실행한 결과 | 조회 화면에 뜬 답 |
("assistant", "도구 호출: book_room(...)"), ("tool", "예약됨") | 다시 도구를 요청하고 결과를 받는다 | 예약하고 확인 문자를 받는다 |
마지막 ("assistant", ...) | 사용자에게 보여 줄 답 | 사장님께 드리는 보고 |
print("도구 호출 수:", ...) | 도구 요청이 몇 번인지 센다 | 일지에서 시스템을 쓴 횟수를 센다 |
출력의 도구 호출 수: 2 는 부탁 하나를 끝내는 데 도구를 두 번 썼다는 뜻입니다. 비유와 다른 점은, 이 일지는 설명을 위해 손으로 적은 것이고 실제 일지는 모델과 코드가 주고받으며 쌓는다는 것입니다(실습 2부터).
주의할 점
- 에이전트는 잘못하면 글이 아니라 행동으로 틀립니다. 처음에는 읽기만 하는 도구(검색, 조회)로 시작하고, 쓰는 도구(예약, 보내기)는 안전장치를 갖춘 뒤에 붙입니다.
- 모든 일에 에이전트가 필요하지는 않습니다. 순서가 정해진 일은 워크플로가 더 믿을 만합니다("워크플로와 에이전트" 절).