처방약 복용 후 이유 모를 피로감·입마름 등 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]
약봉투/처방전 사진을 업로드하면 Upstage Document AI가 약품명, 성분, 투약량, 복용 횟수를 자동 추출
Upstage Document Classify로 처방전 / 약봉투 / 영양제 라벨 / 부적합 사진을 자동 분류 부적합 사진 업로드 시 재촬영 안내 메시지 반환
Solar Pro 3가 각 약물이 체내에서 소모시킬 수 있는 영양소를 분석 (예: 메트포르민 → 비타민 B12 고갈 가능성)
고갈된 영양소를 보충할 수 있는 영양제와 최적 복용 시간대, 주의사항을 포함한 가이드 제공
Airtable에 저장된 분석 결과를 조회하여 사용자에게 리포트 형태로 표시
사용자의 약봉투 분석 결과를 컨텍스트로 학습한 상태에서 추가 영양 상담 제공 (FastAPI + Solar LLM, 응답 시간 5초 이내)
이미지 분석 → 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 (재촬영 안내 메시지 반환)
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 참고
사용자가 업로드한 약봉투·처방전의 기본 정보 및 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 | 처방일자 |
처방전에서 추출한 약물별 성분, 복용 정보, 고갈 영양소 및 추천 영양제 저장
| 필드 | 타입 | 설명 |
|---|---|---|
| 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 | 복용 시 주의사항 |
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 전체 분석 리포트 |
사용자가 AI 챗봇과 나눈 질문과 답변 이력 저장
| 필드 | 타입 | 설명 |
|---|---|---|
| user_id | Text | 사용자 식별자 |
| prescription_id | Link | 연결된 Prescriptions 레코드 |
| question | Long Text | 사용자 질문 |
| answer | Long Text | Solar LLM 답변 |
| asked_at | Text | 질문 시각 |
- n8n Self-hosted 환경 준비 (Docker 권장)
docker-compose up -d- n8n 접속 후 워크플로우 Import
workflows/main_workflow.jsonImportworkflows/report_workflow.jsonImport
- Credentials 설정
- Upstage API Key 등록
- Airtable Personal Access Token 등록
- 외부 접근을 위한 ngrok 실행
ngrok http 5678- 워크플로우 Active 상태로 변경
cd chatbot
pip install -r requirements.txt
cp .env.example .env
# .env 파일에 API 키 입력
python main.pyUPSTAGE_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 출품작입니다.