함수 도구 사용

완료됨

함수 도구를 사용하면 모델이 개발자 정의 함수를 호출하여 응답 중에 데이터를 검색하거나 작업을 트리거할 수 있습니다.

무엇이 함수 도구인가?

함수 도구(함수 호출)를 통해 모델은 애플리케이션에서 노출하는 명명된 도구를 호출할 시기를 결정할 수 있습니다. 모델은 비즈니스 논리를 직접 실행하지 않습니다. 대신 구조적 함수 호출을 반환하고 코드에서 함수를 실행한 다음 함수 출력을 다시 모델에 전달합니다.

이 패턴은 모델 추론을 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 개발자 가이드를 참조하세요.

함수 도구의 작동 방식

함수 도구를 사용하는 일반적인 프로세스는 다음과 같습니다.

  1. 도구 정의 - 도구 배열에 하나 이상의 함수 정의를 제공합니다.
  2. 모델은 프롬프트를 평가합니다 . 함수 호출이 필요한지 여부를 결정합니다.
  3. 모델은 함수 호출을 내보낸다 . 응답에는 함수 이름과 호출 메타데이터가 포함됩니다.
  4. 앱이 논리를 실행 합니다. 코드에서 일치하는 함수를 실행합니다.
  5. 함수 출력을 반환합니다 . 결과가 포함된 function_call_output 항목을 보냅니다.
  6. 모델은 답변을 완료합니다 . 도구 결과를 최종 응답에 통합합니다.

모범 사례

  • 도구 집중 유지 - 작은 단일 용도의 함수를 더 쉽게 제어하고 테스트할 수 있습니다.
  • 함수 입력 유효성 검사 - 프로덕션 시스템에서 도구 인수를 맹목적으로 신뢰하지 마세요.
  • 오류 안전하게 처리 - 모델이 추론할 수 있는 명확한 오류 출력 반환
  • 로그 도구 사용 - 디버깅 및 거버넌스에 대한 호출, 대기 시간 및 실패율 추적
  • 중요한 작업 제한 - 영향이 큰 작업에 대한 명시적 권한 부여 필요

알아야 할 제한 사항

  • 모델은 함수 호출을 요청하지만 애플리케이션은 함수 호출을 실행해야 합니다.
  • 잘못되었거나 예기치 않은 도구 인수가 발생할 수 있으며 유효성을 검사해야 합니다.
  • 도구 대기 시간은 종단 간 응답 시간을 늘릴 수 있습니다.
  • 함수 호출은 안정성을 향상하지만 최종 출력은 여전히 중요한 의사 결정에 대한 검토가 필요합니다.

함수 도구는 텍스트 생성기의 모델을 제어되고 감사 가능한 방식으로 실제 시스템과 상호 작용할 수 있는 오케스트레이터로 바꿉니다.