728x90
2023.05.27 - [daily] - 23.05.26. openAI API + node.js, express로 연결해보기[0]
23.05.26. openAI API + node.js, express로 연결해보기[0]
openAI에서 제공하는 API를 연결하는 것은 openAI에서 제공하는 기술문서에 친절하게 설명되어 있어서 파이썬으로는 기술문서를 따라 쉽게 연결했었는데 node.js로는 어떻게 하는지 기술문서를 보며
dailydevelop.tistory.com
지난번에 이어, 대화를 이어가려면 앞의 정보를 openAI API에 같이 보내야한다.
웹이나 앱의 서비스라면 사용자별로 데이터베이스에 대화를 저장해야겠지만, 간단하게 구현해보기 위해 json으로 저장하는 방식으로 대강 구현해 봤다.
json으로 대화를 불러오고, 저장하는 함수 작성
// 대화 로드
function loadConversation() {
try {
const data = fs.readFileSync(conversationFile);
return JSON.parse(data);
} catch (error) {
console.error("Error loading conversation:", error);
return [];
}
}
// 대화 저장
function saveConversation(conversation) {
try {
const data = JSON.stringify(conversation);
fs.writeFileSync(conversationFile, data);
} catch (error) {
console.error("Error saving conversation:", error);
}
}
이렇게 파일을 열고 읽고 쓰고 저장하려면 fs 라이브러리가 필요하다. 그래서 기존 chatgpt.js 위에
const fs = require("fs");
로 모듈을 임포트 한다. 그리고 질문을 보내기 전에, 기존 대화를 불러와서, 대화가 연속될 수 있게 보내준다.
그래서 전체 코드는...
const fs = require("fs");
const { Configuration, OpenAIApi } = require("openai");
require("dotenv").config();
const conversationFile = "conversation.json"; // 대화를 저장할 JSON 파일 경로
async function callChatGPT(ask) {
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
try {
const openai = new OpenAIApi(configuration);
let conversation = loadConversation(); // 대화 로드
conversation.push({ role: "user", content: ask }); // 사용자의 질문을 대화에 추가
const response = await openai.createChatCompletion({
model: "gpt-3.5-turbo",
messages: conversation,
});
const reply = response.data.choices[0].message;
conversation.push(reply); // AI의 답변을 대화에 추가
saveConversation(conversation); // 대화 저장
return reply;
} catch (error) {
console.error("Error calling ChatGPT API:", error);
return null;
}
}
// 대화 로드
function loadConversation() {
try {
const data = fs.readFileSync(conversationFile);
return JSON.parse(data);
} catch (error) {
console.error("Error loading conversation:", error);
return [];
}
}
// 대화 저장
function saveConversation(conversation) {
try {
const data = JSON.stringify(conversation);
fs.writeFileSync(conversationFile, data);
} catch (error) {
console.error("Error saving conversation:", error);
}
}
module.exports = { callChatGPT };
이렇게 하면 아래와 같이 끝말잇기도 가능해진다.
'daily' 카테고리의 다른 글
23.05.27. SSE(Server-Sent-Event) 구현해보기 (0) | 2023.05.27 |
---|---|
23, 21주차 (0) | 2023.05.27 |
23.05.26. openAI API + node.js, express로 연결해보기[0] (1) | 2023.05.27 |
Swagger (0) | 2023.05.16 |
Dockerization [1] - AWS EB에 docker 배포하기 (1) | 2023.05.15 |