6장. 데이터 조회 도구 구현
왜 진짜 데이터에 연결해야 하는가 — 가짜 도구는 없는 주문도 배송 중이라고 한다
한 줄 요약
5장에서 만든 도구는 어떤 주문번호를 입력해도 "배송중, CJ대한통운"이라는 같은 결과를 반환했습니다. 실제 데이터를 조회하지 않았기 때문에 모델은 존재하지 않는 주문도 배송 중이라고 안내했습니다. 이번 장에서는 도구를 하루마켓의 실제 주문 데이터에 연결하고, 모델이 도구의 용도와 조회 결과를 정확히 이해할 수 있도록 만드는 방법을 배웁니다.
1. 5장이 남긴 문제
5장에서 확인한 사실을 다시 가져옵니다.
모델은 도구가 준 값을 의심하지 않습니다. 답변의 정확도는 도구가 돌려준 데이터의 정확도가 정합니다.
5장에서 물었던 HR20260701023은 data/orders.csv에 없는 주문번호입니다. 가짜 도구는 그 번호에도 "배송중"을 돌려줬고, 모델은 그대로 전했습니다. 왕복의 구조는 맞았지만 내용은 전부 거짓이었습니다.
이제 필요한 것은 세 가지입니다.
| 필요한 것 | 5장의 가짜 도구 | 이번 장 |
|---|---|---|
| 실제 주문의 정보를 돌려준다 | 늘 같은 값 | orders.csv에서 찾아 돌려준다 |
| 없는 주문이면 없다고 한다 | "배송중"이라고 한다 | 찾을 수 없다고 알린다 |
| 아직 출고 전이면 그렇다고 한다 | 송장번호를 지어낸다 | 송장이 없다고 알린다 |
아래 두 줄이 중요합니다. 정상적인 상황에서만 제대로 작동하는 도구로는 부족합니다. 고객이 주문번호를 잘못 적거나 출고 전에 송장을 묻는 일은 늘 일어납니다.
2. 도구 함수는 보통의 함수와 무엇이 다른가
도구 함수는 겉으로는 평범한 파이썬 함수입니다. 다른 점은 하나, 함수를 부르는 쪽도 결과를 읽는 쪽도 모델이라는 것입니다.
| 보통의 함수 | 도구 함수 | |
|---|---|---|
| 언제 부를지 정하는 쪽 | 개발자가 쓴 코드 | 모델 (설명을 읽고) |
| 반환값을 읽는 쪽 | 개발자가 쓴 코드 | 모델 (글로 읽는다) |
| 실패했을 때 | 예외를 던져 멈춘다 | 멈추면 고객이 답을 못 받는다 |
| 설명(독스트링) | 없어도 실행된다 | 없으면 모델이 쓰지 못한다 |
그래서 도구 함수를 만들 때는 "코드가 돌아가는가"에 더해 "모델이 읽고 옳게 판단할 수 있는가" 를 따집니다.
3. 이걸 모르면 무엇을 판단하지 못하는가
- 답이 틀렸을 때 모델이 잘못 읽은 것인지, 도구가 읽기 어렵게 준 것인지 가려내지 못합니다.
- 고객이 없는 주문번호를 넣었을 때 프로그램이 멈추는 것이 맞는지, 안내가 나가는 것이 맞는지 정하지 못합니다.
- 도구가 무엇을 돌려주지 말아야 하는지 판단하지 못합니다. 도구가 돌려준 값은 답변에 그대로 나갈 수 있습니다.
- SDK가 왕복을 대신해 줄 때 안에서 무슨 일이 일어났는지 확인하지 못합니다.
4. 이번 장에서 만드는 것
주문 데이터를 조회하는 도구 두 개입니다.
| 도구 | 답하는 질문 | 돌려주는 것 |
|---|---|---|
get_order_status |
무엇을 주문했고 지금 어떤 단계인가 | 상품명, 옵션, 수량, 금액, 주문 일시, 상태 |
track_shipping |
택배가 어디쯤인가, 송장번호는 무엇인가 | 택배사, 송장번호, 출고일, 배송완료일 |
그리고 5장에서 손으로 돌린 왕복을 이번에는 SDK에 맡깁니다. 원리를 본 뒤이므로, 무엇을 대신해 주는지 알고 쓸 수 있습니다.
이 두 함수는 7장에서 도구를 더 늘릴 때 그대로 가져다 씁니다.
핵심 정리
- 가짜 도구는 없는 주문에도 배송 중이라고 답하게 만들었습니다.
- 도구는 잘 되는 경우, 없는 경우, 아직 안 된 경우를 모두 사실대로 돌려줘야 합니다.
- 도구 함수는 부르는 쪽도 읽는 쪽도 모델입니다. 그래서 설계 기준이 다릅니다.
- 이번 장은
get_order_status,track_shipping두 도구를 실제 데이터에 연결합니다. - 왕복은 SDK의 자동 함수 호출에 맡깁니다.