피드로 돌아가기
From Pixels to Proteins: Real-Time AI Food Tracking using GPT-4o, Pydantic, and FastAPI
Dev.toDev.to
Backend

From Pixels to Proteins: Real-Time AI Food Tracking using GPT-4o, Pydantic, and FastAPI

음식 사진을 GPT-4o 비전 + Pydantic 구조화 출력 + FastAPI로 처리해 영양소 분석 API를 실시간으로 제공

wellallyTech2026년 3월 24일8intermediate

Context

음식 섭취 로깅을 수동으로 수행하면 생산성이 떨어지고, LLM의 할루시네이션으로 인해 일관성 없는 영양 데이터가 반환되는 문제가 있었다. 특히 다양한 형식의 LLM 출력을 애플리케이션의 데이터 모델에 맞춰야 했다.

Technical Solution

  • Pydantic BaseModel을 사용해 Ingredient와 MealAnalysis 스키마를 정의: name, estimated_weight_g, calories, protein_g, carbs_g, fats_g, confidence_score 필드로 강타입 데이터 구조 구성
  • OpenAI GPT-4o의 Structured Outputs 기능(client.beta.chat.completions.parse)을 적용: 응답이 정의된 Pydantic 모델에 자동 매핑되도록 강제
  • FastAPI의 @app.post("/analyze-meal") 엔드포인트로 Base64 인코딩된 이미지를 받음: UploadFile을 통해 멀티파트 폼 데이터 수신
  • 비전 모델에 전달할 시스템 프롬프트를 "영양사 역할"로 설정: 현실적인 음식 부분 크기 추정과 JSON 형식 응답을 명시
  • React Native 프론트엔드에서 FormData를 사용해 이미지 파일을 POST 요청으로 전송: 응답받은 구조화된 JSON에서 total_calories 등의 필드를 추출

Key Takeaway

LLM의 비구조화 출력을 Pydantic + Structured Outputs로 강제 검증하면 할루시네이션을 방지하고 프로덕션 환경에서 신뢰할 수 있는 데이터 파이프라인을 구축할 수 있다. 스키마 기반 응답 파싱은 2024년 LLM 통합의 핵심 패턴이다.


GPT-4o 비전 기능을 사용하는 건강·피트니스 애플리케이션에서 response_format 파라미터에 Pydantic 모델을 지정하면, 일관성 있는 JSON 응답을 보장받으면서 별도의 정규식 파싱이나 검증 로직을 생략할 수 있다.

원문 읽기