5장 · Function Calling 원리왜 도구가 필요한가 — 모델은 우리 주문 데이터를 모른다결정과 실행의 분리 — 모델은 요청서를 쓰고, 코드가 실행한다도구 선언 — 모델이 읽는 안내문왕복을 코드로 옮기기 — 호출 두 번, 대화 세 덩어리따라하기 — 첫 도구 왕복정리와 체크리스트실습문제와 해답
5장. Function Calling 원리
정리와 체크리스트
5장에서 배운 것
- 지식 컷오프 — 모델의 학습이 끝난 시점. 그 뒤의 일과 공개되지 않은 데이터는 모델 안에 없습니다.
- Function Calling — 모델이 "이 함수를 이 인자로 불러 달라"는 요청을 응답으로 보내는 기능입니다. 실행은 코드가 합니다.
- 도구 선언 — 이름, 설명, 인자의 형식을 적은 안내문. 모델은 이것만 보고 판단합니다.
- function call — 모델이 보낸 결정. 함수 이름과 인자가 들어 있습니다.
- function response — 함수의 실행 결과를 모델에게 돌려주는 조각.
role="user"로 보냅니다. - 왕복 — 선언 → 결정 → 실행 → 반환. 모델을 두 번 호출합니다.
한눈에 보는 핵심
# ① 선언과 함께 첫 번째 호출 — 결정을 받는다
response = client.models.generate_content(
model=MODEL, contents=[user_content],
config=types.GenerateContentConfig(
tools=[tool],
automatic_function_calling=types.AutomaticFunctionCallingConfig(disable=True),
),
)
fc = response.function_calls[0] # ② 모델의 결정
result = get_order_status(**fc.args) # ③ 실행 — 우리 코드
final = client.models.generate_content( # ④ 반환 — 두 번째 호출
model=MODEL,
contents=[
user_content,
response.candidates[0].content,
types.Content(role="user", parts=[
types.Part.from_function_response(name=fc.name, response={"result": result})]),
],
config=types.GenerateContentConfig(tools=[tool]),
)
| 모델이 한 일 | 우리 코드가 한 일 | 개발자가 정한 일 |
|---|---|---|
| 도구가 필요한지 판단 | 함수 실행 | 어떤 도구를 줄지 |
| 문장에서 인자를 찾아 넣기 | 결과를 모델에게 돌려주기 | 도구의 이름과 설명 |
| 결과를 문장으로 풀어 쓰기 | (검사, 거부, 기록을 넣을 수 있음) | 도구가 돌려줄 값 |
체크리스트
- [ ] 모델이 원리상 알 수 없는 정보 세 갈래를 말할 수 있다.
- [ ] "Function Calling은 모델이 함수를 실행하는 기능이다"가 왜 틀린 말인지 설명할 수 있다.
- [ ] 왕복의 네 단계를 순서대로, 각 단계의 주체와 함께 말할 수 있다.
- [ ] 도구 선언의 세 항목(이름, 설명, 인자의 형식)이 각각 무엇에 쓰이는지 말할 수 있다.
- [ ] 모델이 함수의 코드를 보지 못한다는 사실이 선언 작성에 주는 의미를 설명할 수 있다.
- [ ] 두 번째 호출의
contents에 세 덩어리를 모두 넣는 이유를 설명할 수 있다. - [ ] 실행 결과를 어떤
role로 보내는지 안다. - [ ] 실험 3의 "내일 도착 예정"이 어디서 온 말인지 설명할 수 있다.
- [ ] 위험한 일을 프롬프트로 금지하는 것과 도구 목록에 넣지 않는 것의 차이를 설명할 수 있다.
- [ ]
lesson05_function_calling.py를 실행해 세 실험의 결과를 확인했다.
한 줄 핵심
모델은 무엇을 부를지 결정하고, 실행은 코드가 합니다. 모델이 할 수 있는 일의 범위는 우리가 준 도구 목록이 정합니다.