OpenAI Function Calling 탐문하기

1rock·2025년 4월 15일

OpenAI 함수 호출(Function Calling)을 JavaScript로 구현하기

OpenAI API의 강력한 기능 중 하나인 함수 호출(Function Calling)을 JavaScript 환경에서 어떻게 사용하는지 알아보겠습니다. 이 기능을 사용하면 AI 모델이 외부 함수를 호출해야 할 때 적절한 함수와 인자를 제안할 수 있습니다.

Function Calling

함수 호출 기능은 AI 모델이 특정 작업을 수행하기 위해 외부 함수를 호출해야 한다고 판단할 때, 호출할 함수의 이름과 필요한 인수를 JSON 형식으로 반환하는 기능입니다.

  • 외부 API 호출
  • 데이터베이스 조회
  • 계산 집약적 작업
  • 기타 외부 시스템과의 연동

기본 구현 예제

import OpenAI from "openai";

// OpenAI 클라이언트 초기화
const openai = new OpenAI({
  apiKey: "your-api-key", // 실제 API 키로 교체 필요
});

async function runConversation() {
  // 1. 사용자 메시지 설정
  const messages = [
    { role: "user", content: "오늘 보스턴 날씨 어때?" }
  ];
  
  // 2. 사용 가능한 함수 정의
  const functions = [
    {
      name: "get_current_weather",
      description: "주어진 위치의 현재 날씨를 가져옵니다",
      parameters: {
        type: "object",
        properties: {
          location: {
            type: "string",
            description: "도시와 주, 예: San Francisco, CA",
          },
          unit: {
            type: "string",
            enum: ["celsius", "fahrenheit"],
          },
        },
        required: ["location"],
      },
    },
  ];

  // 3. OpenAI API 호출
  const response = await openai.chat.completions.create({
    model: "gpt-3.5-turbo",
    messages,
    functions,
    function_call: "auto", // 기본값
  });

  const responseMessage = response.choices[0].message;

  // 4. 함수 호출이 필요한 경우 처리
  if (responseMessage.function_call) {
    const functionName = responseMessage.function_call.name;
    const functionArgs = JSON.parse(responseMessage.function_call.arguments);

    // 5. 실제 함수 호출 (예제에서는 가짜 데이터 반환)
    let weatherData;
    if (functionName === "get_current_weather") {
      weatherData = {
        location: functionArgs.location,
        temperature: "22", // 섭씨
        unit: "celsius",
        forecast: ["맑음", "바람짐"],
      };
    }

    // 6. 함수 결과를 AI에 전달하여 최종 응답 생성
    const secondResponse = await openai.chat.completions.create({
      model: "gpt-3.5-turbo",
      messages: [
        ...messages,
        responseMessage,
        {
          role: "function",
          name: functionName,
          content: JSON.stringify(weatherData),
        },
      ],
    });

    console.log(secondResponse.choices[0].message.content);
    return secondResponse.choices[0].message.content;
  } else {
    console.log(responseMessage.content);
    return responseMessage.content;
  }
}

runConversation();

실제 적용 시 고려사항

  • 보안: API 키는 환경 변수 등으로 관리
  • 에러 처리: 함수 호출 실패 시 대체 로직 필요
  • 입력 검증: 모델이 제공한 인수의 유효성 검사
  • 비용 관리: 과도한 API 호출 방지
  • 한글 지원: 함수 설명과 파라미터를 한글로 작성하면 모델의 이해도 향상

OpenAI의 function calling 기능은 AI 애플리케이션의 가능성을 크게 확장해주고 외부 시스템과의 연동이 필요한 경우 유용하게 사용할 수 있다

참고: OpenAI 공식 문서

profile
FRONT_END_DEVELOMENT

0개의 댓글