21장 · 전문 에이전트 구현왜 전문 에이전트가 필요한가 — 다 할 줄 아는 하나보다, 하나씩 맡은 셋에이전트를 나누는 기준 — 도구, 프롬프트, 책임읽는 에이전트와 처리하는 에이전트 — 위험한 도구를 쥔 쪽을 하나로 좁힌다처리를 위험도로 나눈다 — 직접 처리, 승인 요청, 상담원에게검색을 도구로 만든다 — 언제, 몇 번 찾을지를 에이전트가 정한다따라하기 1 — 처리 도구 만들기따라하기 2 — 전문 에이전트 만들고 하나씩 시험하기정리와 체크리스트실습문제와 해답
21장. 전문 에이전트 구현
정리와 체크리스트
21장에서 배운 것
- 전문 에이전트 — 한 가지 일을 맡아, 그 일에 필요한 도구와 규칙만 가진 에이전트입니다.
- 나누는 기준 — 도구, 프롬프트, 책임. 하나라도 뚜렷하게 다르면 나누고, 셋이 같으면 나누지 않습니다.
- 읽는 에이전트와 처리하는 에이전트 — 주문조회·정책안내는 읽기만 하고, 무언가를 바꾸는 도구는 요청처리 에이전트 하나에게만 줍니다.
- 처리의 세 갈래 — 되돌릴 수 있는 일은 직접 처리(배송지 변경, 교환 접수), 돈이 나가는 일은 승인 요청까지만(환불, 주문 취소), 처리할 수 없는 일은 상담원에게(티켓).
- 코드의 판정 — 출고 여부, 기간, 재고는 도구 안의 코드가 판정합니다. 통과하지 못하면
ok=False와 이유를 돌려줍니다. - 입출력 약속과 경계 규칙 — 자연어 요청을 받아 자연어 보고를 돌려주고, 자기 일이 아닌 질문에는 답을 지어내지 않고 물러섭니다.
- 에이전틱 RAG — 검색을 도구로 주어, 검색어와 횟수를 에이전트가 정하게 하는 구조입니다.
haru_actions.py,haru_agents.py— 처리 도구와 전문 에이전트 셋을 담은 재사용 모듈입니다.
한눈에 보는 핵심
from haru_agents import build_agents, run_agent
from haru_tools import CustomerSession
agents = build_agents(CustomerSession("C003")) # 세션에 묶인 에이전트 셋
report = run_agent(agents["action"], # 글이 들어가고 글이 나온다
"주문 HR20260726004 배송지를 '서울 중구 세종대로 110'으로 바꿔 주세요.")
| 주문조회 | 정책안내 | 요청처리 | |
|---|---|---|---|
| 꺼내는 이름 | agents["order"] |
agents["policy"] |
agents["action"] |
| 도구 | 조회 5개 | search_policy 1개 |
처리 4개 + get_my_orders + create_ticket |
| 성격 | 읽기 | 읽기 | 쓰기 |
| 핵심 규칙 | 조회한 데이터로만 보고 | 검색 결과에 근거, 조항 표기 | 되묻지 않고 처리, 못 했으면 못 했다고 보고 |
| 물러서는 경우 | 정책 질문 | 검색 결과에 없는 내용 | 도구가 ok=False를 돌려준 요청, 도구로 처리할 수 없는 일(상담원에게) |
| 처리의 갈래 | 도구 | 기록의 상태 |
|---|---|---|
| 직접 처리 | change_shipping_address, request_exchange |
완료 |
| 승인 요청까지만 | request_refund |
승인대기 → 사람이 승인하면 승인완료 |
| 상담원에게 | create_ticket |
티켓 접수 |
| 개발자(코드)가 정한 것 | 모델이 정한 것 |
|---|---|
| 에이전트를 몇으로, 어디서 나눌지 | 주어진 도구 가운데 무엇을 부를지 |
| 에이전트마다 줄 도구. 처리 도구는 한 에이전트에게만 | 검색어, 도구 인자(새 주소·새 옵션·사유) |
| 출고 여부·기간·재고의 판정, 처리번호, 기록 | 보고의 문장 |
| 환불을 승인대기에서 멈추는 것 | 검색을 몇 번 할지 |
| 누구의 데이터를 보고 누구의 주문을 처리하는지 (세션) |
체크리스트
- [ ] 도구와 규칙을 한 에이전트에 모두 넣으면 무엇이 나빠지는지 말할 수 있다.
- [ ] 에이전트를 나누는 세 가지 기준을 말할 수 있다.
- [ ] 배송 추적을 주문조회 에이전트에서 따로 떼어 내지 않는 이유를 세 기준으로 설명할 수 있다.
- [ ] 읽기 도구를 잘못 불렀을 때와 처리 도구를 잘못 불렀을 때의 차이를 말할 수 있다.
- [ ] 처리 도구를 요청처리 에이전트 하나에게만 준 이유를 설명할 수 있다.
- [ ] 배송지 변경은 직접 처리하고 환불은 승인 요청까지만 하는 기준을 한 문장으로 말할 수 있다.
- [ ] 출고 여부와 반품 기간을 모델이 아니라 코드가 판정하게 한 이유를 설명할 수 있다.
- [ ] 실습 기준일
TODAY가 왜 필요한지 말할 수 있다. - [ ]
check21_actions.py로 LLM 없이 도구를 불러, 배송중인 주문의 배송지 변경이 거절되는 것을 확인했다. - [ ]
lesson21_specialist_agents.py의 시험 3·4·5 뒤에memory_store/actions.json에 두 건(완료, 승인대기)이 남은 것을 확인했다. - [ ] 시험 6에서
[도구]줄이 없고 금액도 없다는 것을 실행 결과로 확인했다. - [ ] 코드가 먼저 검색하는 방식과 검색을 도구로 주는 방식의 차이를 말할 수 있다.
한 줄 핵심
읽는 일은 넓게 나눠 주고, 바꾸는 일은 한 에이전트에게만 줍니다. 그 에이전트가 처리해도 되는지는 코드가 판정하고, 되돌릴 수 없는 일은 사람의 승인 앞에서 멈춥니다.