함수 도구 사용
함수 도구를 사용하면 모델이 개발자 정의 함수를 호출하여 응답 중에 데이터를 검색하거나 작업을 트리거할 수 있습니다.
무엇이 함수 도구인가?
함수 도구(함수 호출)를 통해 모델은 애플리케이션에서 노출하는 명명된 도구를 호출할 시기를 결정할 수 있습니다. 모델은 비즈니스 논리를 직접 실행하지 않습니다. 대신 구조적 함수 호출을 반환하고 코드에서 함수를 실행한 다음 함수 출력을 다시 모델에 전달합니다.
이 패턴은 모델 추론을 API, 데이터베이스, 비즈니스 워크플로 및 유틸리티 함수와 같은 실제 시스템에 연결하는 데 적합합니다.
주요 기능은 다음과 같습니다.
- 구조적 도구 호출 - 모델은 명시적 함수 호출 요청을 내보낸다.
- 개발자 제어 실행 - 애플리케이션이 함수 실행 방법 및 위치를 결정합니다.
- 신뢰할 수 있는 통합 패턴 - API, 내부 서비스 또는 도우미 유틸리티를 안전하게 호출
- 다중 턴 오케스트레이션 - 도구 출력을 반환하고 모델이 추론을 계속할 수 있도록 합니다.
- 접지된 응답 - 답변에 라이브 시스템 생성 데이터가 포함될 수 있습니다.
일반적인 사용 사례
| 사용 사례 | 예시 |
|---|---|
| 시스템 통합 | 계정 또는 주문 세부 정보에 대한 내부 API 호출 |
| 작업 자동화 | 티켓 만들기 또는 알림과 같은 워크플로 트리거 |
| 데이터 조회 | 대답하기 전에 비즈니스 규칙 또는 참조 테이블 쿼리 |
간단한 예
다음은 함수를 get_time 노출하고 필요할 때 모델이 함수를 호출할 수 있도록 하는 예제입니다.
import time
from openai import OpenAI
# Function to get the current time
def get_time():
return f"The time is {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())}"
# Main function
def main():
client = OpenAI(
base_url={openai_endpoint},
api_key={auth_key_or_token}
)
function_tools = [
{
"type": "function",
"name": "get_time",
"description": "Get the current time"
}
]
# Initialize messages with a system prompt
messages = [
{"role": "developer", "content": "You are an AI assistant that provides information."},
]
# Loop until the user types 'quit'
while True:
prompt = input("\nEnter a prompt (or type 'quit' to exit)\n")
if prompt.lower() == "quit":
break
# Append the user prompt to the messages
messages.append({"role": "user", "content": prompt})
# Get initial response
response = client.responses.create(
model=model_deployment,
input=messages,
tools=function_tools
)
# Append model output to the messages
messages += response.output
# Was there a function call?
for item in response.output:
if item.type == "function_call" and item.name == "get_time":
current_time = get_time()
messages.append({
"type": "function_call_output",
"call_id": item.call_id,
"output": current_time
})
# Get a follow up response using the tool output
response = client.responses.create(
model=model_deployment,
instructions="Answer only with the tool output.",
input=messages,
tools=function_tools
)
print(response.output_text)
# Run the main function when the script starts
if __name__ == '__main__':
main()
이 흐름에서 모델은 get_time를 언제 호출할지 결정하고, 사용자의 코드는 함수를 실행하며, 모델은 확장된 최종 답변을 반환합니다. 사용자는 프롬프트를 입력할 수 있으므로 모델은 함수를 호출해야 하는 시기를 결정해야 합니다. 이 경우 프롬프트에 대한 응답에는 모델에서 처리할 함수의 출력과 함께 새 프롬프트를 제출하기 전에 애플리케이션 코드가 구현해야 하는 함수 호출이 포함됩니다.
출력은 다음과 같이 표시될 수 있습니다.
Enter a prompt (or type 'quit' to exit)
Hello
Hello! How can I help you today?
Enter a prompt (or type 'quit' to exit)
What time is it?
The time is 2026-03-19 17:17:41.
Enter a prompt (or type 'quit' to exit)
첫 번째 사용자 프롬프트("Hello")는 함수 도구를 사용할 필요가 없으므로 모델이 정상적으로 응답했습니다. 두 번째 프롬프트("몇 시입니까?")는 모델을 트리거하여, 응답에 표시된 함수를 get_time 선택하게 했습니다. 그런 다음 애플리케이션 코드는 함수를 실행하고 결과를 모델에 반환한 다음 함수의 결과와 함께 두 번째 응답을 보냈습니다.
팁 (조언)
이 예제에서는 매개 변수가 없는 단일 함수를 사용합니다. 매개 변수를 사용하거나 사용하지 않고 여러 함수를 사용하도록 도구를 구성할 수 있습니다. 함수 세부 정보를 지정하는 방법에 대한 자세한 내용은 OpenAI 개발자 가이드를 참조하세요.
함수 도구의 작동 방식
함수 도구를 사용하는 일반적인 프로세스는 다음과 같습니다.
- 도구 정의 - 도구 배열에 하나 이상의 함수 정의를 제공합니다.
- 모델은 프롬프트를 평가합니다 . 함수 호출이 필요한지 여부를 결정합니다.
- 모델은 함수 호출을 내보낸다 . 응답에는 함수 이름과 호출 메타데이터가 포함됩니다.
- 앱이 논리를 실행 합니다. 코드에서 일치하는 함수를 실행합니다.
-
함수 출력을 반환합니다 . 결과가 포함된
function_call_output항목을 보냅니다. - 모델은 답변을 완료합니다 . 도구 결과를 최종 응답에 통합합니다.
모범 사례
- 도구 집중 유지 - 작은 단일 용도의 함수를 더 쉽게 제어하고 테스트할 수 있습니다.
- 함수 입력 유효성 검사 - 프로덕션 시스템에서 도구 인수를 맹목적으로 신뢰하지 마세요.
- 오류 안전하게 처리 - 모델이 추론할 수 있는 명확한 오류 출력 반환
- 로그 도구 사용 - 디버깅 및 거버넌스에 대한 호출, 대기 시간 및 실패율 추적
- 중요한 작업 제한 - 영향이 큰 작업에 대한 명시적 권한 부여 필요
알아야 할 제한 사항
- 모델은 함수 호출을 요청하지만 애플리케이션은 함수 호출을 실행해야 합니다.
- 잘못되었거나 예기치 않은 도구 인수가 발생할 수 있으며 유효성을 검사해야 합니다.
- 도구 대기 시간은 종단 간 응답 시간을 늘릴 수 있습니다.
- 함수 호출은 안정성을 향상하지만 최종 출력은 여전히 중요한 의사 결정에 대한 검토가 필요합니다.
함수 도구는 텍스트 생성기의 모델을 제어되고 감사 가능한 방식으로 실제 시스템과 상호 작용할 수 있는 오케스트레이터로 바꿉니다.