티스토리 뷰

ChatGPT OPEN AI는 인공지능 기술을 활용하여 사주를 분석하고 개인 운세를 예측하는 프로그램입니다. 이 프로그램은 기존의 사주 분석 방법을 혁신적으로 변화시켜 사용자에게 정확하고 유익한 운세 정보를 제공합니다.

 

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 완성된 프로그램을  받으시려면 아래 링크로 다운로드하시면 됩니다.

 

 

index.html
0.02MB

나. 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 환경이 세팅되어 있어야 합니다.

 

index.js
0.00MB

4. 개인 운세 분석 프로그램의 장점

  • 사용자들이 더욱 쉽게 사주를 예측하고 운세를 파악할 수 있다.
  • 미래를 예측함으로써 더 나은 선택을 할 수 있으며, 더 나은 미래를 만들어 갈 수 있다.

 

5. 주의사항

  • 개인 정보 보호: 개인 사주 정보를 입력할 때 개인 정보 보호에 유의해야 합니다. 신뢰할 수 있는 사이트나 애플리케이션을 통해 프로그램을 이용하는 것이 안전합니다.
  • 참고용으로 활용: 사주 분석은 개인의 운세와 미래를 완전히 예측하는 것은 아닙니다. 따라서 결과를 참고 자료로 활용하는 것이 좋습니다.

ChatGPT OPEN AI 사주 프로그램은 현대적인 기술을 활용하여 사주 분석을 편리하게 제공하는 프로그램입니다. 사용자는 이 프로그램을 통해 개인의 운세와 사주에 대한 궁금증을 해소할 수 있습니다.