티스토리 뷰
ChatGPT OPEN AI는 인공지능 기술을 활용하여 사주를 분석하고 개인 운세를 예측하는 프로그램입니다. 이 프로그램은 기존의 사주 분석 방법을 혁신적으로 변화시켜 사용자에게 정확하고 유익한 운세 정보를 제공합니다.
1.Open AI Chat-Gpt 개요
- 사주란 생년월일, 생시간, 성별 등을 이용하여 개인의 운세와 성격 등을 파악하는 중요한 요소이다.
- ChatGPT는 자연어처리 기술을 이용하여 인간과 자연스러운 대화를 할 수 있는 인공지능 모델이다.
- OpenAI ChatGPT를 활용하여 사주를 예측하는 웹프로그램을 개발하면 많은 이들에게 도움이 될 수 있다.
2. 개발과정 및 개발 언어
- 데이터 수집: 사용자로부터 생년월일, 태어난 시간, 성별 등을 입력받아 ChatGPT 모델에 적용할 수 있는 형태로 가공하는 과정이 필요하다.
- 모델 적용: ChatGPT 모델에 데이터를 적용하여 입력받은 정보를 분석하고 사주를 예측하는 기능을 개발해야 한다.
- UI/UX 디자인: 예측 결과를 사용자가 쉽게 이해할 수 있도록 UI/UX 디자인을 고려하여 개발해야 한다.
- 배포 및 유지보수: 웹프로그램을 배포하고 유지보수하는 과정에서는 사용자들로부터 피드백을 받아 웹프로그램의 기능을 개선하거나 버그를 수정해야 한다.
- 개발 언어는 화면 HTML , CSS, javascript 를 사용하였고, BackEnd 단은 Nodejs를 사용하여 개발하였음.
- 서버 환경은 아마존의 AWS Lambda를 사용함.
3. 단계별 개발 코딩 설명
가. Front End 단인 Html 파일 중에 서버로 데이터를 넘기는 소스의 일부분입니다.
<script>
const chatBox = document.querySelector('.chat-box');
let userMessages = [];
let assistantMessages = [];
let myDate = '';
let myDateTime = ''
function spinner() {
const sCheck = document.querySelector('.chat-input input');
if(sCheck.value != '' && sCheck.value != null){
document.getElementById('loader').style.display = "block";
}
else{
sCheck.focus();
}
}
function start() {
const date = document.getElementById('date').value;
const hour = document.getElementById('hour').value;
if (date === '') {
alert('생년월일을 입력해주세요.');
return;
}
myDateTime = date + hour;
myDate = date;
document.getElementById("intro").style.display = "none";
document.getElementById("chat").style.display = "block";
document.getElementById("message-input").value = "오늘 나의 운세 알려줘?";
spinner();
sendMessage();
}
function sleep(sec) {
return new Promise(resolve => setTimeout(resolve, sec * 1000));
}
const sendMessage = async () => {
const chatInput = document.querySelector('.chat-input input');
const chatMessage = document.createElement('div');
chatMessage.classList.add('user-message');
chatMessage.innerHTML = `<p>${chatInput.value}</p>`;
chatBox.appendChild(chatMessage);
chatBox.scrollTop = chatBox.scrollHeight;
//userMessage 메세지 추가
userMessages.push(chatInput.value);
chatInput.value = '';
const maxRetries = 3;
let retries = 0;
let nCount = 0;
while (retries < maxRetries) {
try { // AWS Lambda 에 등록된 함수 링크
const response = await fetch('https://qhcbarowyptynuxp3nmllwukia0xdeyn.lambda-url.ap-northeast-2.on.aws/fortuneChat', {
method: 'POST',
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
myDateTime: myDateTime,
userMessages: userMessages,
assistantMessages: assistantMessages,
})
});
const data = await response.json();
document.getElementById('loader').style.display = "none";
//assistantMessage 메세지 추가
assistantMessages.push(data.assistant);
const astrologerMessage = document.createElement('div');
astrologerMessage.classList.add('chat-message');
// 문장 구분 기준을 정의합니다.
const sentenceSeparator = /[.?!]/;
let imsiSen = "";
imsiSen = myDate+"에 태어난 당신의 오늘 운세 입니다.";
if (data.assistant && assistantMessages.length == 1) {
imsiSen += data.assistant;
}
else{
imsiSen = "";
imsiSen = data.assistant;
}
// 문장으로 분리합니다.
const sentences = imsiSen.split(sentenceSeparator);
// 문장을 담을 배열을 생성합니다.
const paragraph = [];
// 반복문을 사용하여 각 문장의 끝에 <br> 태그를 추가한 후, 배열에 추가합니다.
for (let i = 0; i < sentences.length; i++) {
const sentence = sentences[i].trim() + "<br><br>";
paragraph.push(sentence);
}
// 문장 배열을 이용하여 문단을 생성합니다.
const finalParagraph = paragraph.join("");
astrologerMessage.innerHTML = `<p class='assistant'>${finalParagraph}</p>`;
if(assistantMessages.length != 0 && assistantMessages.length % 2 == 0){
const link = document.createElement('a');
link.href = "https://toss.me/pdori"
link.innerText = "복채 보내기";
astrologerMessage.innerHTML+="<br> 작은 정성 배풀어주시면 더욱 좋은 운이 있으실겁니다. => "
astrologerMessage.appendChild(link);
}
chatBox.appendChild(astrologerMessage);
chatBox.scrollTop = chatBox.scrollHeight
break;
} catch (error) {
await sleep(0.5);
retries++;
console.log(error);
console.log(`Error fetching data, retrying (${retries}/${maxRetries})...`);
if (retries === 3) {
alert("서버가 불안정합니다. 잠시 후 다시 시도해주세요!")
}
}
}
};
document.querySelector('.chat-input button').addEventListener('click', function(event) {
const sCheck = document.querySelector('.chat-input input');
if(sCheck.value != '' && sCheck.value != null){
sendMessage();
}
else{
sCheck.focus();
}
});
const messageInput = document.getElementById('message-input');
messageInput.addEventListener("keydown", function(event) {
const sCheck = document.querySelector('.chat-input input');
if (event.key === "Enter") {
if(sCheck.value != '' && sCheck.value != null){
spinner();
sendMessage();
}
else{
sCheck.focus();
}
}
});
</script>
- html 완성된 프로그램을 받으시려면 아래 링크로 다운로드하시면 됩니다.
나. Back End을 담당하고 있는 Open API 부분으로 NodeJs를 이용해 코딩하였습니다.
아래는 백엔드 소스의 일부분입니다.
const apiKey = "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";
const serverless = require('serverless-http');
const { Configuration, OpenAIApi } = require("openai");
const express = require('express')
var cors = require('cors')
const app = express()
const configuration = new Configuration({
apiKey: apiKey,
});
const openai = new OpenAIApi(configuration);
//CORS 이슈 해결
let corsOptions = {
origin: 'https://chatmagician.pages.dev',
credentials: true
}
app.use(cors(corsOptions));
//POST 요청 받을 수 있게 만듬
app.use(express.json()) // for parsing application/json
app.use(express.urlencoded({ extended: true })) // for parsing application/x-www-form-urlencoded
- Back End단의 완성된 프로그램을 받으시려면 아래 링크로 다운로드하시면 됩니다.
- 아래 프로그램을 개인적으로 테스트하려면 Local PC에 NodeJS 환경이 세팅되어 있어야 합니다.
4. 개인 운세 분석 프로그램의 장점
- 사용자들이 더욱 쉽게 사주를 예측하고 운세를 파악할 수 있다.
- 미래를 예측함으로써 더 나은 선택을 할 수 있으며, 더 나은 미래를 만들어 갈 수 있다.
5. 주의사항
- 개인 정보 보호: 개인 사주 정보를 입력할 때 개인 정보 보호에 유의해야 합니다. 신뢰할 수 있는 사이트나 애플리케이션을 통해 프로그램을 이용하는 것이 안전합니다.
- 참고용으로 활용: 사주 분석은 개인의 운세와 미래를 완전히 예측하는 것은 아닙니다. 따라서 결과를 참고 자료로 활용하는 것이 좋습니다.
ChatGPT OPEN AI 사주 프로그램은 현대적인 기술을 활용하여 사주 분석을 편리하게 제공하는 프로그램입니다. 사용자는 이 프로그램을 통해 개인의 운세와 사주에 대한 궁금증을 해소할 수 있습니다.
'정보' 카테고리의 다른 글
PDF 파일을 HWP 파일로 변환하는 3가지 방법 (0) | 2023.07.10 |
---|---|
전자제품 무료수거 서비스 신청 방법과 수거품목 안내 (0) | 2023.07.08 |
퇴직연금제도 DB형과 DC형의 특징과 차이점 (0) | 2023.07.06 |
실업급여 신청 조건 및 신청 방법,지급 대상 (0) | 2023.07.04 |
알뜰교통카드 신청 및 마일리지 적립 방법 (0) | 2023.07.03 |