📚 Agentic AI - 기업용 자율 에이전트 개발 3장 · 에이전트 ① 사내 데이터 조회 Agentic AI란

정리 & 체크리스트

한 줄 요약

첫 번째 에이전트를 완성했습니다. 1장에서 못 풀던 세 질문 중 하나가 풀렸습니다. 4장에서는 도구를 로 늘리고, 그때 생기는 새로운 문제를 다룹니다.


1. 3장에서 만든 것

code/ch03_order_agent.py에이전트 ① 사내 데이터 조회

이 파일은 8장에서 주문담당 담당자(워커)의 도구로 그대로 쓰입니다. 버리는 코드가 아닙니다.

연결 대상 : orders.csv, customers.csv (우리 회사의 정해진 값)
핵심 기술 : Function Calling
대표 질문 : "주문 O001203 어디까지 왔어요?"
함수 하는 일
get_order_status(order_id) 도구 — CSV에서 주문을 찾아 문장으로
ask(question) 도구를 쥐여 주고 질문 (자동 실행)
peek(question) 모델의 요청서만 들여다보기 (자동 실행 끔)

2. 이 장의 핵심 내용 — 말로 설명할 수 있어야 할 것들

  1. 도구는 그냥 파이썬 함수다. 어딘가에 등록하거나 정해진 틀을 물려받는 절차가 없다.
  2. configtools=[함수] 한 줄을 넣으면 도구가 된다. 2장 코드와의 유일한 차이다.
  3. 모델은 함수를 직접 실행하지 못한다. "이 함수를 이 값으로 불러 달라"는 요청서를 만들 뿐이고, 실행은 우리 코드가 한다.
  4. 모델은 함수 본문을 볼 수 없다. 이름·독스트링·인자와 타입만 본다. 그래서 그 셋이 사용 설명서다.
  5. 타입힌트는 필수다. 모델에게 전달되는 실제 정보이기 때문이다.
  6. 도구의 반환값도 모델이 읽는다. 항목마다 이름을 붙여 돌려준다.
  7. 도구는 LLM 없이 먼저 돌려 본다. 문제가 생겼을 때 원인 후보를 줄이기 위해서다.
  8. 실패할 때 예외를 던지지 말고 설명 문장을 돌려준다. 모델이 읽고 상황을 설명해 준다.
  9. 환각은 거짓말이 아니라 빈칸을 메우려는 성질에서 비롯된다. 대책은 부탁이 아니라 빈칸을 채워 주는 것이다.
  10. 자동 함수 호출(AFC) 을 끄면 모델의 요청서를 직접 볼 수 있다. function_calls 가 비어 있으면 "이제 답할 수 있다"는 뜻이다.
  11. 도구를 한 번 쓰면 LLM 호출이 두 번 일어난다. (일반화하면 도구 N번에 호출 N+1번 — 마지막 한 번이 "이제 답한다"이다. 4장에서 확인한다.)
  12. 도구 안에는 AI가 없다. AI가 하는 일은 언제 어느 도구를 쓸지 고르는 것뿐이다.

3. 체크리스트

  • [ ] python code/ch03_order_agent.py 가 끝까지 돌아간다
  • [ ] [1] 이 LLM 없이 즉시 나오는 이유를 설명할 수 있다
  • [ ] [2]{'order_id': 'O001203'} 이 무엇인지 설명할 수 있다
  • [ ] 독스트링을 고치면 모델의 판단이 달라지는 것을 직접 확인했다
  • [ ] 없는 주문번호에 지어내지 않는 이유를 세 겹으로 설명할 수 있다
  • [ ] ask()peek() 의 차이를 설명할 수 있다

4. 진행 상황

[1장에서 못 푼 세 질문]

  ✓ 사내 데이터   "주문 O001203은 어떤 상태인가요?"       ← 3장 완료
  □ 최신 정보     "요즘 스마트워치 시장 어때요?"           ← 4장
  □ 사내 문서     "불량 반품은 며칠 이내인가요?"           ← 6장

5. 4장 예고 — 도구가 둘이 되면 생기는 일

4장에서는 도구를 두 개 줍니다.

아래는 개념 설명용 코드입니다 — 실습 파일에 넣지 않습니다.

tools=[get_product_info, search_web]
  • get_product_info — 우리 상품 정보 (CSV)
  • search_web — 인터넷 검색 (DuckDuckGo, API 키 불필요)

그리고 이런 질문을 던집니다.

"승승 스마트워치 Fit 5는 얼마인가요? 요즘 스마트워치 시장 가격대와 비교하면 어느 수준인지도 알려주세요."

이 질문을 풀려면 두 도구를 순서대로 써야 합니다.

① get_product_info("승승 스마트워치 Fit 5")  →  159,000원
② search_web("스마트워치 시장 가격대")        →  5만~30만원대
③ 둘을 비교해서 답변

여기서 3장 방식으로는 부족해집니다. 자동 함수 호출은 이것도 처리해 주지만, 우리는 ①②③이 어떤 순서로 일어나는지 보고 싶습니다. 그리고 도구가 많아지면 몇 번 반복할지 통제해야 합니다.

그래서 4장에서는 자동을 끄고 for 루프를 직접 짭니다. 이 반복 구조에는 이름이 있습니다 — ReAct(Reasoning + Acting, 생각 · 행동 · 관찰).

생각(무엇을 할까) → 행동(도구 호출) → 관찰(결과 확인) → 다시 생각 → ...

5장부터는 이 루프를 라이브러리가 대신 돌립니다. 그러니 4장이 "안을 들여다보는 마지막 기회"입니다.

← 이전 절07. 없는 주문번호가 들어왔을 때