728x90

Node.js와 ChatGPT를 연동하는 것은 다양한 방법으로 가능합니다. OpenAI의 API를 사용하여 Node.js 애플리케이션에서 ChatGPT를 호출할 수 있습니다. 여기서는 OpenAI API를 사용하여 Node.js 애플리케이션에서 ChatGPT를 호출하는 방법을 단계별로 설명하겠습니다.

## 준비물

1. **OpenAI API 키**: OpenAI의 API에 액세스하려면 API 키가 필요합니다. [OpenAI API 키 생성](https://platform.openai.com/signup) 페이지에서 회원가입 후 키를 발급받을 수 있습니다.
2. **Node.js 및 npm**: Node.js와 npm(Node Package Manager)이 설치되어 있어야 합니다. [Node.js 공식 웹사이트](https://nodejs.org/)에서 다운로드 및 설치할 수 있습니다.

## 단계별 연동 방법

### 1. Node.js 프로젝트 생성

먼저 새 Node.js 프로젝트를 생성하고 필요한 라이브러리를 설치합니다.

```bash
mkdir chatgpt-nodejs
cd chatgpt-nodejs
npm init -y
npm install openai axios
```

- `openai`: OpenAI API와 통신하기 위한 라이브러리입니다.
- `axios`: HTTP 요청을 보내기 위한 라이브러리입니다.

### 2. 기본 코드 작성

프로젝트 루트에 `index.js` 파일을 생성하고 다음 코드를 작성합니다.

```javascript
// index.js
const { Configuration, OpenAIApi } = require("openai");
require("dotenv").config();

// OpenAI API 키 설정
const configuration = new Configuration({
  apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);

// ChatGPT에게 질문을 보내고 응답을 받는 함수
async function askChatGPT(question) {
  try {
    const response = await openai.createChatCompletion({
      model: "gpt-3.5-turbo", // 또는 "gpt-4"를 사용할 수 있습니다.
      messages: [{ role: "user", content: question }],
      max_tokens: 150,
      temperature: 0.7,
    });

    const answer = response.data.choices[0].message.content;
    console.log(`ChatGPT의 응답: ${answer}`);
  } catch (error) {
    console.error("Error:", error);
  }
}

// 예제 질문
const question = "안녕, 너는 무슨 일을 할 수 있니?";
askChatGPT(question);
```

### 3. 환경 변수 설정

프로젝트 루트에 `.env` 파일을 생성하고 OpenAI API 키를 추가합니다.

```
OPENAI_API_KEY=your-api-key-here
```

- `your-api-key-here` 부분을 발급받은 API 키로 대체하세요.

### 4. 코드 실행

코드를 실행하여 ChatGPT와 통신합니다.

```bash
node index.js
```

실행하면 ChatGPT의 응답을 콘솔에서 확인할 수 있습니다.

## 주요 옵션 설명

- **model**: 사용할 모델을 지정합니다. 일반적으로 `"gpt-3.5-turbo"`나 `"gpt-4"`를 사용합니다.
- **messages**: 대화의 히스토리를 담고 있는 배열입니다. `role`은 `user`, `assistant`, `system` 중 하나를 가질 수 있으며, 각각 사용자의 메시지, AI의 응답, 시스템 명령을 나타냅니다.
- **max_tokens**: 생성할 응답의 최대 토큰 수를 지정합니다.
- **temperature**: 응답의 창의성을 조절합니다. 값이 높을수록 창의적인 응답을 생성하고, 낮을수록 보수적인 응답을 생성합니다.

## 추가 기능 구현

### 1. 사용자 입력 받기

Node.js의 `readline` 모듈을 사용하여 사용자로부터 질문을 입력받아 ChatGPT에게 전달할 수 있습니다.

```javascript
const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.question("질문을 입력하세요: ", (question) => {
  askChatGPT(question);
  rl.close();
});
```

### 2. 지속적인 대화 기능

한 번의 실행으로 여러 차례 대화를 주고받을 수 있도록 지속적인 대화 기능을 구현할 수 있습니다. 아래 코드는 사용자가 `exit`를 입력할 때까지 계속해서 질문을 받을 수 있습니다.

```javascript
async function startConversation() {
  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
  });

  function askQuestion() {
    rl.question("질문을 입력하세요 (종료하려면 'exit' 입력): ", async (question) => {
      if (question.toLowerCase() === "exit") {
        rl.close();
        return;
      }

      await askChatGPT(question);
      askQuestion();
    });
  }

  askQuestion();
}

startConversation();
```

이제 사용자는 여러 질문을 입력할 수 있으며, `exit`를 입력할 때까지 대화가 계속됩니다.

### 3. 비동기 대화 흐름

비동기로 대화를 주고받으면서 대화의 히스토리를 저장하여 보다 자연스러운 대화 흐름을 구현할 수 있습니다.

```javascript
async function askChatGPTWithHistory(question, history = []) {
  try {
    const messages = history.concat([{ role: "user", content: question }]);
    const response = await openai.createChatCompletion({
      model: "gpt-3.5-turbo",
      messages: messages,
      max_tokens: 150,
      temperature: 0.7,
    });

    const answer = response.data.choices[0].message.content;
    console.log(`ChatGPT의 응답: ${answer}`);

    return messages.concat([{ role: "assistant", content: answer }]);
  } catch (error) {
    console.error("Error:", error);
  }
}

async function startAsyncConversation() {
  let history = [];
  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
  });

  function askQuestion() {
    rl.question("질문을 입력하세요 (종료하려면 'exit' 입력): ", async (question) => {
      if (question.toLowerCase() === "exit") {
        rl.close();
        return;
      }

      history = await askChatGPTWithHistory(question, history);
      askQuestion();
    });
  }

  askQuestion();
}

startAsyncConversation();
```

위 코드에서는 `history` 배열을 사용하여 대화의 맥락을 유지하며, 이를 통해 ChatGPT가 이전 대화를 기억하고 더 맥락에 맞는 응답을 생성할 수 있습니다.

## 결론

이와 같이 Node.js 애플리케이션에서 OpenAI의 ChatGPT API를 사용하여 다양한 방식으로 대화를 구현할 수 있습니다. 실제 프로젝트에 적용하기 전에 OpenAI API 사용 제한 및 요금에 대해 [OpenAI 요금제](https://openai.com/pricing)를 참고하시기 바랍니다.

728x90
반응형

+ Recent posts