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)를 참고하시기 바랍니다.
'Software > JavaScript' 카테고리의 다른 글
Javascript 시작하기 - 웹 컴포넌트 소개 (0) | 2024.07.25 |
---|---|
NodeJS 시작하기 - wrtn.ai 연동 (2) | 2024.07.25 |
BunJS 시작하기 - SQLite 사용 (0) | 2024.07.14 |
JavaScript 시작하기 - bunjs 소개 (0) | 2024.07.14 |
NodeJS 시작하기 - Nextjs 소개 (0) | 2024.07.14 |