Node.js와 GPTs Assistants API 연동 방법 | 개발자 가이드

Node.js를 활용해 GPTs ASSISTANTS API와 손쉽게 연동하는 방법을 소개합니다.
Node.js와 GPTs Assistants API 연동 방법 | 개발자 가이드

#GPTs API #Node.js 연동 #개발자 가이드 #콘텐츠 자동화 #API 사용법

GPTs API 연동

안녕하세요 기묘한 자동화 CTO Readygo 입니다. 오늘은 저희 팀이 프로젝트를 진행하면서 Node.js를 활용해 GPTs ASSISTANTS API와 어떻게 연동하였는지 자세히 알려드릴게요.

GPTs ASSISTANTS API란 무엇인가요?

GPTs ASSISTANTS API는 다양한 질문에 대한 AI 기반의 답변을 생성해주는 서비스에요. 이를 활용하면, 사용자 질문에 대한 자동응답 시스템, 개인화된 콘텐츠 제작 등 다양한 기능을 구현할 수 있습니다.

Node.js에서 GPTs ASSISTANTS API 연동 절차

- GPTs API SECRET KEY발급

1. https://platform.openai.com/ 접속하기

2. 회원가입 및 로그인

3. 왼쪽 바에 API keys 클릭

4. +Create new secret key 클릭

  1. 이름 입력 후 생성 및 SECRET KEY 복사 후 메모장에 저장

    - GPTs Assistants 생성

    1. 왼쪽바에 Assistants 클릭 후 오른쪽 상단 +Create 클릭

  1. 2. GPTs API 내용 입력(네모박스로 가린부분이 ASSISTANT ID 이것도 메모장 저장)

    • Name : GPTs 이름

    • Instructions : 사용자가 어떻게 이 GPTs를 사용해야 하는지에 대한 지침

    • Model : GPTs Assistant가 사용하는 인공지능 모델

    • Functions : GPTs Assistant가 수행할 수 있는 구체적인 작업

    • Code Interperter : 사용자가 입력한 코드를 이해하고 실행할 수 있게 해주는 기능

    • Retrieval : 인터넷이나 다른 데이터베이스에서 정보를 검색하여 가져오는 기능

    • Files : 파일을 생성, 읽기, 수정, 삭제 가능

    저는 사용자가 입력한 텍스트를 통하여 프로젝트의 핵심 요소를 추출하고 정리하기 위해 아래 내용같이 입력하였습니다.

- GPTs Assistants 와 Node.js 연동

  • OpenAI 객체 생성

import OpenAI from "openai";
import * as dotenv from "dotenv";//환경 변수를 .env 파일에서 process.env로 불러오는 역할이며 API_KEY를 .env파일에 저장하기 위함, 필수 요소 아님

dotenv.config();//필수 요소 아님

const openai = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY //해당 내용이 SECRET KEY(아래 주석처럼 작성 가능)
  //apiKey: 'sk-6SEbk1YMqvhegRuHo...' 
});
  • 이전에 생성했던 GPTs Assistant 검색 및 Assistant 정보를 변수 assistant에 저장

const assistant = await openai.beta.assistants.retrieve(
	process.env.GPTSKEY1 // 해당 내용이 Assistant ID
    //'asst_favfo7np4tqw...' 이처럼 작성 가능
);
  • 새로운 대화 스레드 생성 및 사용자의 메시지 추가(메시지=GPTs 에게 질문할 내용)

const thread = await openai.beta.threads.create();

const recognizedText = response.data.text;// 이건 제가 recognizedText 이 변수에 클로바 API 통하여 녹음파일을 텍스트 내용으로 만든 것을 저장한거입니다. 이 변수에다가 GPTs에게 제공할 내용을 저장해주면 됩니다.

await openai.beta.threads.messages.create(thread.id, {
    role: "user",
    content: recognizedText // 사용자가 제공할 내용
});
  • 스레드에 대한 실행을 생성(Assistant 지정하고, 다른 지시사항 넣지 않습니다.)후 GPTs에게 온 응답 내용 contents변수에 저장

const run = await openai.beta.threads.runs.create(thread.id, {
    assistant_id: assistant.id,
    instructions: "",
});

await checkRunStatus(openai,thread.id,run.id);

const message = await openai.beta.threads.messages.list(thread.id);

const contents = message.body.data[0].content[0].text.value;//GPTs가 제공한 내용
  • GPTs API Response 내용 알맞게 들어온 것인지 확인하는 함수 작성

이 부분은 checkRunStatus 함수에서 run.status가 completed가 될 때까지 반복문을 돌려 completed가 나오면 정상적으로 GPTs 가 응답을 마쳤다는 것을 알 수 있습니다.

GPT에 질문을 하면 응답 내용량이 많을수록 오래 걸리듯이 GPTs도 응답 내용량이 많아질수록 걸리는 시간은 길어집니다.

async function checkRunStatus(client, threadId, runId) {
    let run = await client.beta.threads.runs.retrieve(threadId, runId);

    while (run.status !== "completed") {
        await new Promise(resolve => setTimeout(resolve, 1000)); // 1초 대기
        run = await client.beta.threads.runs.retrieve(threadId, runId);
    }
}
  • 최종 소스코드

import OpenAI from "openai";
import * as dotenv from "dotenv";//환경 변수를 .env 파일에서 process.env로 불러오는 역할이며 API_KEY를 .env파일에 저장하기 위함, 필수 요소 아님

dotenv.config();//필수 요소 아님

const openai = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY //해당 내용이 SECRET KEY(아래 주석처럼 작성 가능)
  //apiKey: 'sk-6SEbk1YMqvhegRuHo...' 
});

const assistant = await openai.beta.assistants.retrieve(
	process.env.GPTSKEY1 // 해당 내용이 Assistant ID
    //'asst_favfo7np4tqw...' 이처럼 작성 가능
);


const thread = await openai.beta.threads.create();

const recognizedText = response.data.text;// 이건 제가 recognizedText 이 변수에 클로바 API 통하여 녹음파일을 텍스트 내용으로 만든 것을 저장한거입니다. 이 변수에다가 GPTs에게 제공할 내용을 저장해주면 됩니다.

await openai.beta.threads.messages.create(thread.id, {
    role: "user",
    content: recognizedText // 사용자가 제공할 내용
});

const run = await openai.beta.threads.runs.create(thread.id, {
    assistant_id: assistant.id,
    instructions: "",
});

await checkRunStatus(openai,thread.id,run.id);

const message = await openai.beta.threads.messages.list(thread.id);

const contents = message.body.data[0].content[0].text.value;//GPTs가 제공한 내용

async function checkRunStatus(client, threadId, runId) {
    let run = await client.beta.threads.runs.retrieve(threadId, runId);

    while (run.status !== "completed") {
        await new Promise(resolve => setTimeout(resolve, 1000)); // 1초 대기
        run = await client.beta.threads.runs.retrieve(threadId, runId);
    }
}

본인이 만든 Assistant에 맞게 GPTs Secret Key, Assistant_id, GPTs에게 제공할 내용만 변경하면 적용이 가능합니다.

이번 포스팅에서는 GPTs ASSISTANTS API와 Node.js를 연동하는 방법에 대해 알아봤습니다.

기묘한 자동화 Newsletter도 준비중에 있습니다. 구독해주신다면 앞으로 최신 AI 소식을 뉴스레터로 받아보실 수 있습니다!

감사합니다 ~🍪

Share article
무료 뉴스레터를 구독하고 최신 AI 소식을 받아보세요!
RSSPowered by inblog