본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

이론

Function Calling이란? - 수동루프/자동실행 (feat.Docstring)

Function Calling

Function Calling은 LLM이 "이 함수를 호출하면 좋겠다"라고 판단하면 개발자가 만든 함수를 실행하는 기능 def get_weather(city): 함수를 개발했다면 사용자가 '서울날씨알려줘'라했을때 LLM이 get_weather를 호출하도록 결정하는것 .

수동루프는 초기 Function Calling 방식으로 LLM이 함수를 직접 실행하지않고 '이 함수를 호출하세요'라고 알려준다. 개발자가 함수호출을 읽고 실제함수를 실행하고 결과를 다시 LLM에게 보내야한다.

자동실행은 최신 SDK 에서의 자동과정으로 @function_tool만 작성하면 Agent가 Tool을 선택하고 실행, 결과전달, 다음 Tool 실행 최종답변까지 모두 자동으로 처리한다 .

 

 

Docstring

"이 함수를 인자로 호출하세요"

LLM은 함수를 직접 실행하지못한다 다만 이 함수를 이런 인자로 불러달라는 json 요청을 만들 수 있다. LLM은 토큰을 생성하는 기계일 뿐 파이썬 코드를 돌릴 능력이 없다는 것을 이해하자. 

LLM은 함수본문 코드를 볼 수 없고 함수이름, 독스트링, 인자타입만 보고 도구사용을 판단함으로 독스트링을 명확하게 쓰는 것이 도구 성능을 좌우한다. 

LLM이 좋은 판단을 하기위해 좋은 독스트링이 필요하다 .

def funtion():

    """독스트링"""

 

 

 


function calling - 수동루프

사용자 요청 - LLM JSON 생성 - 개발자가 JSON으로 함수실행 - 결과  LLM에게 전달 - LLM 최종응답

from openai import OpenAI
import json

client = OpenAI()

# 1. LLM에게 요청
response = client.responses.create(
    model="gpt-5",
    input="서울 날씨 알려줘."
)

# 2. LLM이 함수 호출 JSON 생성
tool_call = response.output[0]
args = json.loads(tool_call.arguments)

# 3. 개발자가 함수 실행
result = get_weather(args["city"])

# 4. 결과를 다시 LLM에 전달
final = client.responses.create(
    model="gpt-5",
    input=[
        tool_call,
        {
            "type": "function_call_output",
            "call_id": tool_call.call_id,
            "output": result
        }
    ]
)

print(final.output_text)

 

 

 

function calling - 자동실행

최신 OpenAI API에서는 이 과정을 SDK가 자동으로 처리할 수 있다. 

사용자 요청 - LLM JSON 생성 - SDK 자동으로 함수실행 - SDK가 결과 LLM에게 전달 - LLM 최종응답

response = client.responses.create(
    model="gpt-5",
    tools=[get_weather],
    input="서울 날씨 알려줘."
)

print(response.output_text)

 

 

 

수동 루프 (Manual Loop) 자동 실행 (Automatic Execution)
개발자가 Tool 실행 Agent가 Tool 실행
Tool 결과를 다시 LLM에 전달 자동 전달
여러 Tool이면 반복 코드 작성 자동으로 반복
구현이 복잡 구현이 간단
세밀한 제어 가능 개발 생산성이 높음