본문 바로가기
프로그래밍/자바스크립트

프로그래밍 「 자바스크립트 편」NodeJS에서 GPT-4 함수 호출의 기능 활용

by grapedoukan 2023. 6. 17.
728x90

님이 촬영 한 사진 ilgmyzin on Unsplash

인공 지능 환경은 계속 진화하여 GPT-4의 함수 호출과 같은 흥미로운 발전을 제공합니다. 이 기능을 사용하면 AI 기능과 외부 도구를 직접 연결할 수 있어 개발자에게 새로운 가능성을 열어줍니다. 그러나 Python용 리소스는 풍부하지만 NodeJS용 리소스는 여전히 부족합니다.

이 기사에서는 이 격차를 해소하는 것을 목표로 합니다. NodeJS 환경에서 GPT-4의 함수 호출을 활용하는 방법에 대한 간결한 가이드를 제공합니다. AI에 도전하는 노련한 NodeJS 개발자이든 NodeJS를 탐구하는 AI 애호가이든 이 가이드가 도움이 될 것입니다.

GPT-4 함수 호출에 대한 간략한 개요부터 시작하여 NodeJS로 구현하는 방법에 대한 자세한 자습서를 살펴보겠습니다. 참고로 시작하기 전에 여기에서 함수 호출 및 기타 API 업데이트에 대한 OpenAI의 블로그 게시물을 읽을 수 있습니다. 뛰어 들자.

함수 호출이란 무엇입니까?

함수 호출은 GPT-4에서 사용할 수 있는 강력한 기능으로, 개발자가 AI 모델에 함수를 설명할 수 있도록 하여 해당 함수에 대한 인수가 포함된 JSON 객체로 지능적으로 응답할 수 있도록 합니다. 이 기능은 AI의 기능과 외부 도구 또는 API 간의 연결을 향상시켜 구조화된 데이터를 안정적으로 추출하고, 자연어를 API 호출 또는 데이터베이스 쿼리로 변환하고, 외부 도구와 상호 작용할 수 있는 챗봇을 생성할 수 있도록 합니다. 대화형 AI와 실용적인 API 애플리케이션 간의 격차를 해소하여 AI 통합을 보다 역동적이고 다재다능하게 만드는 AI 기술의 혁신입니다.

JSON과 음식 만들기

이 사용 사례에서는 함수 호출을 사용하여 OpenAI의 GPT 모델을 사용하여 레시피를 생성하는 데 중점을 둘 것입니다. 제공된 코드는 재료와 양, 요리 지침, 총 조리 시간을 포함하여 레시피의 구조를 설명하는 JSON 스키마를 통해 함수를 정의하는 방법의 예입니다. 그런 다음 이 함수는 OpenAI API 호출에서 호출됩니다. GPT 모델에 레시피(예: 감자를 곁들인 미디엄 레어 스테이크)를 제공하도록 요청하면 이 정의된 함수를 사용하여 구조화된 JSON 개체를 반환합니다. 이 개체에는 깔끔하게 정리되어 사용할 준비가 된 레시피의 모든 필수 구성 요소가 포함되어 있습니다. 이 함수 호출 기능을 사용하면 GPT 모델의 기능을 활용하여 일관되고 신뢰할 수 있는 방식으로 구조화된 데이터를 생성할 수 있습니다.set_recipe

const schema = {
  "type": "object",
  "properties": {
    "ingredients": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": { "type": "string" },
          "unit": {
            "type": "string",
            "enum": ["grams", "ml", "cups", "pieces", "teaspoons"]
          },
          "amount": { "type": "number" }
        },
        "required": ["name", "unit", "amount"]
      }
    },
    "instructions": {
      "type": "array",
      "description": "Steps to prepare the recipe (no numbering)",
      "items": { "type": "string" }
    },
    "time_to_cook": {
      "type": "number",
      "description": "Total time to prepare the recipe in minutes"
    }
  },
  "required": ["ingredients", "instructions", "time_to_cook"]
};

이 함수 호출 기능에 액세스하려면 여러 프로그래밍 언어를 통해 수행할 수 있는 OpenAI API를 사용해야 합니다. 이 예제에서는 NodeJS를 사용합니다. 먼저 NodeJS 노드 프로젝트를 설정한 다음, 패키지를 설치한 다음, API 키를 사용하여 OpenAI 구성을 설정할 수 있습니다. 이 설정을 사용하면 또는 openaigpt-3.5-turbo-0613gpt-4-0613

NodeJS를 처음 사용하십니까? 프로젝트를 설정해 봅시다!

함수 호출과 함께 OpenAI API를 사용하도록 프로젝트를 설정하는 프로세스를 분석해 보겠습니다. Node.js 및 npm에 익숙하다면 간단한 프로세스이지만 이 환경을 처음 접하는 사람들을 위해 단계별로 살펴보겠습니다.

  1. 먼저 프로젝트에 대한 새 디렉터리를 만듭니다. 이 작업은 명령을 사용하여 수행할 수 있습니다. 플래그는 필요한 부모 디렉토리가 작성되도록 합니다.mkdir -p function-calling-meat-and-potatoes-p
  2. 그런 다음 명령을 사용하여 새로 만든 디렉터리로 이동합니다.cd function-calling-meat-and-potatoes
  3. 이제 Node.js 프로젝트를 초기화할 차례입니다. 이 작업은 명령으로 수행할 수 있습니다. 이 명령은 프로젝트에 대한 파일을 만드는 과정을 안내합니다. 이 파일은 프로젝트의 종속성을 관리하는 데 필수적입니다.npm initpackage.jsonpackage.json
  4. 마지막으로 OpenAI 패키지를 설치합니다. 이 패키지에는 OpenAI API와 상호 작용하는 데 필요한 도구와 기능이 포함되어 있습니다. 이것은 명령으로 설치할 수 있습니다.npm install openai

코딩 할 수 있습니다.

이제 환경이 설정되었으므로 코딩을 할 차례입니다.

  1. OpenAI 구성 설정: 먼저 패키지에서 and를 가져오고 OpenAI API 키를 구성해 보겠습니다.ConfigurationOpenAIApiopenai
const { Configuration, OpenAIApi } = require("openai");

const configuration = new Configuration({
  apiKey: 'YOUR_API_KEY',
});
const openai = new OpenAIApi(configuration);

실제 OpenAI API 키로 바꿉니다.'YOUR_API_KEY'

  1. JSON 스키마 정의: 그런 다음 수신하려는 출력의 구조를 설명하는 JSON 스키마를 정의합니다.
const schema = {
  /* your schema here */
};
  • 위에서 만든 JSON 스키마를 참조하세요
  1. API 요청 생성: 다음으로 함수를 사용하여 API 요청을 생성합니다. 모델 이름, 초기 메시지, 함수 세부 정보 및 수행하려는 함수 호출을 전달합니다.createChatCompletion
(async () => {
  try {
    const completion = await openai.createChatCompletion({
      model: "gpt-4-0613", // or another model that supports function calls
      messages: [
        { "role": "system", "content": "You are a helpful assistant." },
        { "role": "user", "content": "Provide a recipe for medium rare steak with potatoes" }
      ],
      functions: [{ "name": "set_recipe", "parameters": schema }],
      function_call: { "name": "set_recipe" },
      temperature: 0
    });

    console.log(completion.data.choices[0].message.function_call.arguments);
  } catch (error) {
    console.error('An error occurred:', error);
  }
})();

이 경우 모델을 사용하고 있으며 감자를 곁들인 미디엄 레어 스테이크 레시피를 제공하도록 요청하고 있습니다. 하단에는 API 응답에서 데이터를 추출하여 표시합니다.gpt-3.5-turbo-0613

console.log(completion.data.choices[0].message.function_call.arguments);

이렇게 하면 스크립트를 실행할 때 스키마에 정의된 구조화된 형식으로 레시피가 출력됩니다.

> node index.js
{
  "ingredients": [
    {
      "name": "steak",
      "unit": "grams",
      "amount": 200
    },
    {
      "name": "potatoes",
      "unit": "grams",
      "amount": 500
    },
    {
      "name": "olive oil",
      "unit": "ml",
      "amount": 30
    },
    {
      "name": "salt",
      "unit": "teaspoons",
      "amount": 1
    },
    {
      "name": "black pepper",
      "unit": "teaspoons",
      "amount": 1
    },
    {
      "name": "garlic powder",
      "unit": "teaspoons",
      "amount": 1
    },
    {
      "name": "rosemary",
      "unit": "teaspoons",
      "amount": 1
    }
  ],
  "instructions": [
    "Preheat the oven to 200°C (400°F).",
    "Season the steak with salt, black pepper, and garlic powder on both sides.",
    "Heat a skillet over high heat and add olive oil.",
    "Sear the steak for 2-3 minutes on each side to get a nice crust.",
    "Transfer the steak to a baking sheet and sprinkle rosemary on top.",
    "Place the steak in the preheated oven and cook for about 10 minutes for medium rare.",
    "While the steak is cooking, peel and cut the potatoes into small cubes.",
    "Boil the potatoes in salted water until tender, then drain.",
    "Heat a separate skillet over medium heat and add olive oil.",
    "Add the cooked potatoes to the skillet and season with salt, black pepper, and garlic powder.",
    "Cook the potatoes for about 5 minutes, stirring occasionally, until they are crispy and golden brown.",
    "Serve the medium rare steak with the crispy potatoes."
  ],
  "time_to_cook": 30
}

스테이크, 감자 & 지식

그리고 당신은 그것을 가지고 있습니다! OpenAI API에 대한 함수 호출을 성공적으로 수행하고 구조화된 응답을 받았습니다. 이 접근 방식은 완전히 새로운 가능성을 열어줍니다. 예를 들어:

  • 챗봇: 외부 도구 또는 API를 호출하여 질문에 답변하는 챗봇을 개발할 수 있습니다. 예를 들어, 챗봇은 "보스턴의 날씨는 어떤가요?"와 같은 사용자의 질문을 와 같은 함수 호출로 변환할 수 있습니다.get_current_weather(location: string, unit: 'celsius' | 'fahrenheit')
  • 자연어 처리(NLP): 자연어를 API 호출 또는 데이터베이스 쿼리로 변환합니다. "이번 달 상위 10명의 고객은 누구인가요?"라고 물으면 시스템이 이를 와 같은 내부 API 호출로 변환한다고 상상해 보십시오.get_customers_by_revenue(start_date: string, end_date: string, limit: int)
  • 데이터 추출: 텍스트에서 구조화된 데이터를 추출합니다. Wikipedia 기사에 언급 된 모든 사람들을 추출하기 위해 호출 된 함수를 정의 할 수 있습니다.extract_people_data(people: [{name: string, birthday: string, location: string}])

이것은 빙산의 일각에 불과합니다. GPT 모델에서 함수 호출의 다양성은 특정 요구 사항에 따라 여러 가지 혁신적인 방식으로 활용할 수 있습니다.

728x90