4

챗GPT MS애저톤

AIFactory

[서비스] 당뇨의 영양 파트너, NutriGuard

devys
2023.04.24 04:43
261

서비스 소개

배경

당뇨병 환자들의 건강한 식생활은 그들의 전반적인 건강 상태에 큰 영향을 미칩니다. 많은 당뇨병 환자들이 식사 선택에 어려움을 겪고 있으며, 이를 돕기 위해 제공되는 정보가 제한적이거나 신뢰할 수 없는 경우가 많습니다. 이러한 배경 속에서 본 서비스는 다음과 같은 목적과 대상을 가집니다.

 

목적

당뇨병 환자들에게 개인화된 식단 추천을 제공하고, 음식 섭취 여부를 논문 기반의 신뢰할 수 있는 정보로 안내하는 것입니다.

 

대상

당뇨병 환자와 그들의 가족, 의료진, 영양사 등 관련 전문가들

 

서비스 동작 방식

식단 검색

식단 추천

기대 효과

  1. 당뇨병 환자들의 올바른 식단 선택을 돕는 것으로, 건강 상태 향상과 당뇨병 합병증 예방에 도움을 줄 것입니다.
  2. 논문 기반의 정보 제공으로, 신뢰성 있는 음식 섭취 여부를 안내하여 사용자의 건강에 긍정적인 영향을 미칠 것입니다.
  3. 개인화된 식단 추천으로, 각 사용자의 개별적인 영양 및 건강 상태를 고려한 효과적인 식단 관리가 가능해질 것입니다.
  4. 의료진, 영양사 등 전문가들이 본 서비스를 활용하여 환자들의 건강 관리에 보다 효율적으로 참여할 수 있게

 

서비스 페이지

 

서비스 링크

https://diabetes-meals.pages.dev/

 

서비스 프롬프트

식단 검색

You are an expert providing information on dietary management for individuals with diabetes. When answering a user's question, please include relevant research paper sources. If the user asks about whether they can eat a certain food, provide information on whether it's good to eat, any precautions, and alternatives if available.
Answer in Korean

 

식단 추천

You are an expert in providing specific food lists for breakfast, lunch, and dinner for people with diabetes. Please suggest a Korean diet to help them eat healthy and manage their diabetes, and today is ${todayDateTime}. Also, please provide the number of servings (g) and calorie (kcal) values. Based on the text in ${chatMessage}, please organize a good diet for diabetics for today and tomorrow. For example, please provide it in JSON format as below. We don't need the rest of the sentence, just the JSON part.
"[{\"meal\": \"morning\", \"title\": \"Oatmeal (50g, 150kcal), Banana (30g, 130kcal), Yogurt (25g, 200kcal)\", \"start\": \"2023-04-21T07:30:00\", \"end\": \"2023-04-21T08:00:00\"}, {\"meal\": \"lunch\", \"title\": \"Bean paste soup (400g, 550kcal), Radish wraps (30g, 70kcal), Grilled fish (70g, 250kcal)\", \"start\": \"2023-04-21T12:00:00\", \"end\": \"2023-04-21T13:30:00\"}, {\"meal\": \"dinner\", \"title\": \"Bean paste soup (400g, 550kcal), Radish wraps (30g, 70kcal), Grilled fish (70g, 250kcal)\", \"start\": \"2023-04-21T18:00:00\", \"end\": \"2023-04-21T19:00:00\"}]"
Answer in Korean

 

소스 코드

const express = require('express');
const serverless = require('serverless-http');
const app = express();
const cors = require('cors');
const { Configuration, OpenAIApi } = require("openai");

const configuration = new Configuration({
    apiKey: API_KEY,
});
const openai = new OpenAIApi(configuration);

const corsOptions = {
    origin: 'https://diabetes-meals.pages.dev/',
    optionsSuccessStatus: 200, // some legacy browsers (IE11, various SmartTVs) choke on 204
    credentials: true
}
app.use(cors(corsOptions));
app.use(express.json());
app.use(express.urlencoded({extended: true}));

app.get('/', function (req, res) {
    res.send('Hello World')
});

app.post('/foods', async function (req, res) {
    let { userMessages, assistantMessages } = req.body

    let messages = [
        {
            role: "system",
            content: "QUESTION_FOOD_PROMPT"
        }
    ];

    while (!!userMessages && userMessages.length !== 0 || !!assistantMessages && assistantMessages.length !== 0) {
        if (!!userMessages &&userMessages.length !== 0) {
            messages.push(
                JSON.parse('{"role": "user", "content": "' + String(userMessages.shift()).replace(/\n/g,"") + '"}')
            )
        }
        if (!!assistantMessages && assistantMessages.length !== 0) {
            messages.push(
                JSON.parse('{"role": "assistant", "content": "' + String(assistantMessages.shift()).replace(/\n/g,"") + '"}')
            )
        }
    }

    const maxRetries = 3;
    let retries = 0;
    let completion
    while (retries < maxRetries) {
        try {
            completion = await openai.createChatCompletion({
                model: "gpt-3.5-turbo",
                messages: messages,
            });
            break;
        } catch (e) {
            retries++;
            console.log(e);
            console.log(`Retrying... ${retries} / ${maxRetries}`);
        }
    }

    let content = completion.data.choices[0].message['content'];
    res.json(content);
});

// 식단 추천 api
app.post('/meals', async function (req, res) {
    let { chatMessage } = req.body;
    console.log(`chatMessage: ${chatMessage}`);

    let todayDateTime = new Date().toLocaleString('ko-KR', { timeZone: 'Asia/Seoul' });

    const completion = await openai.createChatCompletion({
        model: "gpt-4.0",
        messages: [
            {role: "system", content: "RECOMMEND_MEAL_PROMPT"}
        ],
    });
    let content = completion.data.choices[0].message.content;
    console.log(content);
    res.json(content);
});

module.exports.handler = serverless(app);

 

팀 정보

팀 이름

NutriGuard

아이디

팀장 : youngsuseo@naver.com

팀원 : sh95119@gmail.com

4
3개의 댓글
로그인 후 이용해주세요!