실무 Multi-Agent 오케스트레이션 8장 · 보안 - 안전한 도구 실행 7 / 8 ← 이전목차다음 → TechLead Cro

8장. 보안 - 안전한 도구 실행

정리와 체크리스트

8장에서 배운 것

  • 모델이 채우는 인자는 고객이 바꿀 수 있는 값입니다. 권한을 정하는 값은 인자로 받지 않습니다.
  • 세션(session) — 로그인한 고객이 누구인지에 대한 정보. 우리 코드가 만들고, 대화로는 바뀌지 않습니다.
  • 클로저(closure) — 안쪽 함수가 바깥 함수의 변수를 기억하는 것. make_tools(session)이 도구를 세션에 묶는 방법입니다.
  • 마스킹(masking) — 개인정보의 일부를 가려 전달하는 것. 도구가 값을 돌려주는 자리에서 합니다.
  • 읽기 도구와 쓰기 도구 — 흔적(부작용)을 남기는 도구는 되돌릴 수 있는 것만 만듭니다.
  • 도구는 예외로 멈추지 않는다 — 어떤 경우에도 모델이 읽을 수 있는 값을 돌려줍니다.

한눈에 보는 핵심

session = CustomerSession("C001")      # 누구인가 — 우리 코드가 정한다
tools = make_tools(session)            # 그 세션에 묶인 도구 여섯 개

tools["get_my_orders"]()               # 인자가 없다. 남의 목록이 나올 길이 없다
tools=list(tools.values())             # 모델에게는 이렇게 넘긴다
부탁 (프롬프트) 보장 (코드)
"남의 주문을 보여 주지 마라" 도구 인자에 customer_id가 없고, 세션과 비교해 거부한다
"주문이 있는지도 알려 주지 마라" 남의 주문번호에 없는 주문번호와 같은 값을 돌려준다
"개인정보를 쓰지 마라" 도구가 가린 값만 돌려준다
"환불을 약속하지 마라" 환불을 실행하는 도구가 없다
"말만 하지 말고 접수하라" 호출 이력과 tickets.json으로 확인한다
haru_tools.py에서 가져다 쓰는 것 무엇인가
CustomerSession 로그인한 고객
make_tools 세션에 묶인 도구 여섯 개를 만드는 함수
mask_name, mask_phone 마스킹 함수
ORDERS, PRODUCTS, CUSTOMERS CSV를 읽어 둔 표
TICKETS_PATH 티켓 파일의 위치

체크리스트

  • [ ] get_order_status(order_id, customer_id) 설계가 왜 위험한지 설명할 수 있다.
  • [ ] 세션이 무엇이고, 도구 인자와 무엇이 다른지 말할 수 있다.
  • [ ] make_tools(session)이 돌려준 도구가 세션을 기억하는 까닭을 클로저로 설명할 수 있다.
  • [ ] get_my_orders에 인자가 하나도 없는 것이 왜 안전한지 설명할 수 있다.
  • [ ] 마스킹을 프롬프트가 아니라 도구의 반환 자리에서 하는 이유를 말할 수 있다.
  • [ ] 읽기 도구와 쓰기 도구의 차이를 말하고, 환불 도구를 만들지 않은 이유를 설명할 수 있다.
  • [ ] 티켓의 값 중 코드가 정하는 것과 모델이 정하는 것을 나눌 수 있다.
  • [ ] 도구가 예외를 내는 대신 값을 돌려주게 만든 이유를 설명할 수 있다.
  • [ ] 남의 주문번호를 넣었을 때 모델이 도구를 불렀는지, 누가 막았는지 실행 결과에서 짚을 수 있다.
  • [ ] 남의 주문번호와 없는 주문번호에 같은 값을 돌려주는 이유를 설명할 수 있다.
  • [ ] memory_store/tickets.json이 언제, 무엇에 의해 만들어지는지 안다.

한 줄 핵심

안전은 모델에게 부탁해서 얻는 것이 아닙니다. 모델이 채울 수 없는 자리에 권한을 두고, 모델에게 주지 않을 것을 정하고, 만들지 않을 도구를 정하는 것입니다.

← 이전 절따라하기 2 — 안전장치 확인하기다음 절 →실습문제와 해답
오명운 · macro@prag-ai.com