Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

RE:FILL

개인 맞춤형 처방 영양 밸런스 관리 서비스

처방약 복용 후 이유 모를 피로감·입마름 등 2차 불편함의 원인이 약물로 인한 체내 영양소 고갈에 있다는 점에 주목하여, 사용자가 약봉투·처방전 사진을 업로드하면 AI가 처방약과 영양소 간의 인과관계를 자동 분석하고 개인 맞춤형 영양제 보충 가이드를 제공합니다.


목차


서비스 소개

문제 인식

  • 처방약 복용 후 발생하는 피로감, 입마름 등 2차 불편함의 원인을 일반인이 파악하기 어려움
  • 약봉투·처방전·영양제 라벨 등 파편화된 정보를 직접 취합해 분석하는 것이 번거롭고 오류 가능성이 높음
  • 기존 서비스는 약물 위험성 경고에서 그치고 구체적인 영양소 보충 가이드를 제공하지 않음

솔루션

약봉투/처방전 사진 한 장 업로드 → AI 자동 분석 → 개인 맞춤형 영양제 보충 가이드 제공


기술 스택

분류 기술
Workflow 자동화 n8n (Self-hosted)
Document AI Upstage Document Classify, Document Parse, Information Extract
LLM Upstage Solar Pro 3
Database Airtable
Frontend Softr
Backend (챗봇) FastAPI (Railway 배포)
터널링 ngrok

시스템 아키텍처

[사용자]
    ↓ 이미지 업로드
[Softr - 프론트엔드]
    ↓ POST /webhook/refill
[n8n - 메인 워크플로우]
    ↓ 분석 완료 후 저장
[Airtable - 데이터베이스]
    ↑ 데이터 조회
[n8n - 리포트 워크플로우]
    ↑ 분석 리포트 반환
[Softr - 결과 화면]

[사용자] ↔ [FastAPI - 챗봇 서버] ↔ [Airtable]

주요 기능

1. 처방약 성분 자동 추출

약봉투/처방전 사진을 업로드하면 Upstage Document AI가 약품명, 성분, 투약량, 복용 횟수를 자동 추출

2. 문서 유형 자동 분류

Upstage Document Classify로 처방전 / 약봉투 / 영양제 라벨 / 부적합 사진을 자동 분류 부적합 사진 업로드 시 재촬영 안내 메시지 반환

3. 영양소 고갈 분석

Solar Pro 3가 각 약물이 체내에서 소모시킬 수 있는 영양소를 분석 (예: 메트포르민 → 비타민 B12 고갈 가능성)

4. 개인 맞춤형 영양제 추천

고갈된 영양소를 보충할 수 있는 영양제와 최적 복용 시간대, 주의사항을 포함한 가이드 제공

5. 분석 리포트 제공

Airtable에 저장된 분석 결과를 조회하여 사용자에게 리포트 형태로 표시

6. AI 챗봇 상담

사용자의 약봉투 분석 결과를 컨텍스트로 학습한 상태에서 추가 영양 상담 제공 (FastAPI + Solar LLM, 응답 시간 5초 이내)


워크플로우 구조

Main Workflow

이미지 분석 → Airtable 저장

Webhook (이미지 + user_id 수신)
→ Upstage Document Classify (문서 유형 분류)
→ IF (적합/부적합 분기)
  → [적합] Code (바이너리 재주입)
           → Upstage Document Parse (텍스트 추출)
           → Code (바이너리 재주입)
           → Upstage Information Extract (약물 정보 추출)
           → Code (개인정보 필터링)
           → Upstage Solar Chat (영양소 분석 + 가이드 생성)
           → Create a record - Prescriptions
           → Code (약물 배열 분리)
           → Create a record - Medications
           → Create a record - Analysis_Reports
           → Respond to Webhook (record_id 반환)
  → [부적합] Edit Fields (재촬영 안내 메시지 반환)

Report Workflow

record_id로 Airtable 조회 → 리포트 반환

Webhook (record_id 수신)
→ Get a record - Prescriptions
→ Code (Medications ID + Analysis ID 분리)
→ Get a record - Analysis_Reports (Execute Once)
→ Aggregate
→ Respond to Webhook (리포트 데이터 반환)

자세한 노드별 설명은 docs/workflow_documentation.md 참고


데이터베이스 구조 (Airtable)

Prescriptions

사용자가 업로드한 약봉투·처방전의 기본 정보 및 Solar LLM 분석 요약 저장

필드 타입 설명
user_id Text 사용자 식별자 (UUID v4)
scanned_at Text 이미지 스캔 시각 (KST)
medication_count Number 처방된 약물 총 개수
solar_summary Long Text Solar LLM 종합 분석 요약
doc_type Text 문서 유형 (처방전/약봉투/영양제라벨)
patient_name Text 환자 이름
prescription_date Text 처방일자

Medications

처방전에서 추출한 약물별 성분, 복용 정보, 고갈 영양소 및 추천 영양제 저장

필드 타입 설명
drug_name Text 약품명 및 성분명
prescription_id Link 연결된 Prescriptions 레코드
dosage Text 1회 투약량
frequency Text 1일 복용 횟수
duration_days Text 복용 기간
depleted_nutrients Long Text 고갈될 수 있는 영양소
recommended_supplements Long Text 추천 영양제
caution_notes Long Text 복용 시 주의사항

Analysis_Reports

Solar LLM이 생성한 종합 영양소 분석 결과, 복용 가이드, 주의사항 저장

필드 타입 설명
prescription_id Link 연결된 Prescriptions 레코드
overall_nutrients_depleted Long Text 전체 약물 기준 고갈 영양소 종합
overall_supplements_recommended Long Text 전체 약물 기준 영양제 추천 종합
dosage_guide Long Text 영양제 최적 복용 시간대 및 방법
warnings Long Text 약물-영양제 간 주의사항
full_report Long Text Solar LLM 전체 분석 리포트

Chat_Sessions

사용자가 AI 챗봇과 나눈 질문과 답변 이력 저장

필드 타입 설명
user_id Text 사용자 식별자
prescription_id Link 연결된 Prescriptions 레코드
question Long Text 사용자 질문
answer Long Text Solar LLM 답변
asked_at Text 질문 시각

실행 방법

n8n 워크플로우 실행

  1. n8n Self-hosted 환경 준비 (Docker 권장)
docker-compose up -d
  1. n8n 접속 후 워크플로우 Import
  • workflows/main_workflow.json Import
  • workflows/report_workflow.json Import
  1. Credentials 설정
  • Upstage API Key 등록
  • Airtable Personal Access Token 등록
  1. 외부 접근을 위한 ngrok 실행
ngrok http 5678
  1. 워크플로우 Active 상태로 변경

FastAPI 챗봇 서버 실행

cd chatbot
pip install -r requirements.txt
cp .env.example .env
# .env 파일에 API 키 입력
python main.py

환경 변수 (.env)

UPSTAGE_API_KEY=your_upstage_api_key
AIRTABLE_API_KEY=your_airtable_api_key
AIRTABLE_BASE_ID=your_airtable_base_id

트러블슈팅

자세한 내용은 docs/troubleshooting.md 참고

주요 이슈 요약

문제 원인 해결 방법
Parse 노드에서 바이너리 못 찾음 IF 노드가 바이너리 데이터 드롭 IF 이후 Code 노드에서 Webhook 원본 바이너리 재주입
Information Extract 필드명 불일치 처방전마다 다른 스키마 생성 JSON 스키마 고정값으로 설정
CORS 오류 Softr → n8n 크로스 도메인 요청 차단 Webhook 노드 Allowed Origins: * 설정
챗봇 응답 80~90초 소요 n8n 내 Solar LLM 직접 호출 오버헤드 FastAPI 전용 챗봇 서버 분리 → 5초 이내로 단축

라이선스

본 프로젝트는 2026 Low-Code AI Challenge 출품작입니다.

About

AI 기반 개인 맞춤형 처방: 영양 밸런스 관리 서비스

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors