이 글은 LLM, 함수 호출, RAG와 같은 고급 AI 기술을 사용하여 개인 맞춤 AI 영양사를 만드는 과정을 독자들에게 안내합니다. 기술 스택, 환경 설정, 특수 영양 함수 구현을 자세히 설명하며, 영양 질문에 답하고, BMI를 계산하며, 개인 맞춤 식이 조언을 제공할 수 있는 기능적인 어시스턴트로 마무리됩니다.
주요 포인트
독특한 통찰
실용적 응용
핵심 주제
핵심 통찰
학습 성과
• 주요 포인트
1
AI 영양사 구축에 대한 포괄적인 가이드
2
개인 맞춤 영양 조언을 위한 고급 AI 기술 통합
3
실제 적용 사례 및 예제를 통한 실용적인 구현
• 독특한 통찰
1
LLM, 함수 호출, RAG를 결합하여 영양 지도에서 정확도 향상
2
벡터 임베딩을 사용하여 검색 가능한 영양 지식 기반을 만드는 방법 시연
• 실용적 응용
이 글은 기능적인 AI 영양사를 구축하는 단계별 접근 방식을 제공하여 사용자가 영양 과학에 쉽게 접근하고 개인 맞춤화할 수 있도록 합니다.
오늘날 바쁜 환경에서 균형 잡힌 식단을 유지하는 것은 점점 더 어려워지고 있습니다. 상충되는 영양 조언과 유행하는 다이어트는 종종 사람들을 혼란스럽게 만듭니다. 24시간 이용 가능한 AI 개인 영양사는 특정 영양 질문에 답하고, 영양 요구량을 계산하며, 개인 맞춤 추천을 제공할 수 있습니다. 이는 특히 대규모 언어 모델(LLM)과 검색 기술의 발전으로 이제 가능해졌습니다. 이 글은 Google의 Gemini LLM과 전문 영양 기능, 실제 영양 데이터 지식 기반을 결합하여 나만의 AI 개인 영양사 어시스턴트를 만드는 과정을 안내합니다. 이 어시스턴트는 음식 영양에 대한 질문에 답하고, BMI를 계산하며, 일일 칼로리 요구량을 추정하고, 기준에 따라 음식을 추천하며, 증거 기반 영양 조언을 제공할 수 있습니다.
“ 기술 스택 이해: LLM, 함수 호출, RAG
저희 AI 개인 영양사 어시스턴트는 Google의 Gemini 1.5 Pro와 같은 대규모 언어 모델(LLM), 함수 호출(Function Calling), 검색 증강 생성(RAG)의 세 가지 핵심 기술로 구동됩니다. LLM은 인간과 유사한 텍스트를 이해하고 생성하며, 영양에 대한 자연어 쿼리에 탁월합니다. 함수 호출을 통해 LLM은 BMI 또는 칼로리 요구량과 같은 전문 계산을 사용할 수 있습니다. RAG는 영양 데이터베이스에서 관련 정보를 검색하여 사실적인 영양 데이터를 기반으로 어시스턴트의 응답을 근거 있게 만듭니다. 이러한 기술은 함께 작동하여 사용자 쿼리를 이해하고, 영양 정보를 검색하며, 정확한 계산을 처리합니다.
“ 개발 환경 설정
개발 환경을 설정하려면 필요한 라이브러리를 설치하고 API 액세스를 구성합니다. 다음 명령을 사용합니다:
```bash
!pip install -U -q "google-genai==1.7.0"
!pip install chromadb
```
이 명령은 Google Generative AI Python SDK와 벡터 데이터베이스용 ChromaDB를 설치합니다. 다음으로 Google Gemini API 액세스를 설정합니다:
```python
import google.generativeai as genai
import os
# API 키 설정
GOOGLE_API_KEY = "YOUR_API_KEY" # 실제 API 키로 바꾸세요
genai.configure(api_key=GOOGLE_API_KEY)
```
Google AI Studio 웹사이트에서 발급받은 실제 Gemini API 키로 `YOUR_API_KEY`를 바꾸세요.
“ 영양 지식 기반 구축
pandas를 사용하여 포괄적인 영양 정보 데이터 세트를 로드하여 영양 지식 기반을 구축합니다:
```python
import pandas as pd
import numpy as np
# 영양 데이터 로드
nutrition_data = pd.read_csv('/kaggle/input/nutrition-facts-for-3636-foods/nutrition_facts.csv')
nutrition_data.head()
```
이 데이터 세트에는 3,600개 이상의 음식에 대한 자세한 영양 정보가 포함되어 있습니다. 이 데이터를 ChromaDB를 사용하여 벡터 임베딩으로 변환합니다:
```python
# 영양 데이터에 대한 임베딩 생성
from chromadb.utils import embedding_functions
import chromadb
# ChromaDB 클라이언트 초기화
chroma_client = chromadb.Client()
# 영양 데이터용 컬렉션 생성
nutrition_collection = chroma_client.create_collection(
name="nutrition_facts",
embedding_function=embedding_functions.DefaultEmbeddingFunction()
)
# 임베딩을 위한 데이터 준비
for i, row in nutrition_data.iterrows():
# 영양 정보가 포함된 문서 생성
document = f"음식: {row['name']}, 칼로리: {row['calories']}, 단백질: {row['protein_g']}g, 지방: {row['fat_g']}g, 탄수화물: {row['carbohydrate_g']}g"
# 고유 ID로 컬렉션에 추가
nutrition_collection.add(
documents=[document],
ids=[f"food_{i}"]
)
```
이 코드는 ChromaDB 컬렉션을 생성하고 영양 데이터로 채워 의미론적 검색을 가능하게 합니다.
“ 특수 영양 함수 생성: BMI 및 칼로리 계산
BMI 계산 및 일일 칼로리 요구량 추정과 같은 두 가지 필수 영양 기능을 구현합니다:
```python
def calculate_bmi(weight_kg, height_cm):
"""kg 단위의 체중과 cm 단위의 키를 기준으로 BMI를 계산합니다."""
height_m = height_cm / 100
bmi = weight_kg / (height_m * height_m)
# BMI 범주 결정
if bmi < 18.5:
category = "저체중"
elif bmi < 25:
category = "정상 체중"
elif bmi < 30:
category = "과체중"
else:
category = "비만"
return {
"bmi": round(bmi, 1),
"category": category
}
def calculate_calorie_needs(weight_kg, height_cm, age, gender, activity_level):
"""Harris-Benedict 방정식을 기반으로 일일 칼로리 요구량을 계산합니다."""
# 기초 대사량 (BMR)
if gender.lower() == "male":
bmr = 88.362 + (13.397 * weight_kg) + (4.799 * height_cm) - (5.677 * age)
else: # female
bmr = 447.593 + (9.247 * weight_kg) + (3.098 * height_cm) - (4.330 * age)
# 활동 계수
activity_multipliers = {
"sedentary": 1.2, # 거의 또는 전혀 운동하지 않음
"light": 1.375, # 가벼운 운동 주 1-3회
"moderate": 1.55, # 보통 운동 주 3-5회
"active": 1.725, # 격렬한 운동 주 6-7회
"very_active": 1.9 # 매우 격렬한 운동 및 육체 노동 또는 하루 두 번의 훈련
}
# 총 일일 에너지 소비량 (TDEE) 계산
multiplier = activity_multipliers.get(activity_level.lower(), 1.2)
tdee = bmr * multiplier
return {
"bmr": round(bmr),
"daily_calories": round(tdee),
"weight_loss": round(tdee - 500), # 500 칼로리 부족
"weight_gain": round(tdee + 500) # 500 칼로리 잉여
}
```
`calculate_bmi` 함수는 체질량 지수 공식을 구현하고, `calculate_calorie_needs` 함수는 Harris-Benedict 방정식을 사용합니다.
“ Gemini와 함수 호출 구현
Gemini가 이러한 함수를 사용하도록 함수 스키마를 정의합니다:
```python
nutrition_functions = [
{
"name": "calculate_bmi",
"description": "BMI(체질량 지수)를 계산하고 체중 범주를 결정합니다",
"parameters": {
"type": "object",
"properties": {
"weight_kg": {
"type": "number",
"description": "체중(kg)"
},
"height_cm": {
"type": "number",
"description": "키(cm)"
}
},
"required": ["weight_kg", "height_cm"]
}
},
{
"name": "calculate_calorie_needs",
"description": "개인 통계를 기반으로 일일 칼로리 요구량을 계산합니다",
"parameters": {
"type": "object",
"properties": {
"weight_kg": {
"type": "number",
"description": "체중(kg)"
},
"height_cm": {
"type": "number",
"description": "키(cm)"
},
"age": {
"type": "integer",
"description": "나이(세)"
},
"gender": {
"type": "string",
"description": "성별(남성 또는 여성)"
},
"activity_level": {
"type": "string",
"description": "활동 수준(sedentary, light, moderate, active, very_active)"
}
},
"required": ["weight_kg", "height_cm", "age", "gender", "activity_level"]
}
}
]
```
이 스키마는 각 함수의 이름, 설명 및 매개변수를 정의하여 LLM이 언제 어떻게 사용할지 결정할 수 있도록 합니다.
“ 정확한 영양 데이터를 위한 RAG 시스템 구축
검색 증강 생성(RAG) 구성 요소는 영양 정보에 대한 응답이 데이터베이스에 근거하도록 합니다. 영양 데이터베이스에서 관련 항목을 검색하고 LLM에 컨텍스트로 제공합니다:
```python
def nutrition_assistant(query):
"""RAG 및 함수 호출을 사용하여 영양 관련 쿼리를 처리합니다."""
# 1단계: RAG를 사용하여 관련 영양 정보 검색
results = nutrition_collection.query(
query_texts=[query],
n_results=5
)
# 검색된 정보 형식 지정
context = "\n".join(results["documents"][0])
```
이 코드는 ChromaDB의 쿼리 함수를 사용하여 사용자의 쿼리에 대해 가장 관련성이 높은 상위 5개 항목을 찾습니다.
“ 모든 것을 합치기: 영양사 함수
모든 구성 요소를 메인 어시스턴트 함수로 결합합니다:
```python
def nutrition_assistant(query):
"""RAG 및 함수 호출을 사용하여 영양 관련 쿼리를 처리합니다."""
# 1단계: RAG를 사용하여 관련 영양 정보 검색
results = nutrition_collection.query(
query_texts=[query],
n_results=5
)
# 검색된 정보 형식 지정
context = "\n".join(results["documents"][0])
# 2단계: 함수 호출 기능으로 모델 설정
model = genai.GenerativeModel(
model_name="gemini-1.5-pro",
generation_config={"temperature": 0.2}
)
# 3단계: 컨텍스트와 쿼리로 프롬프트 생성
prompt = f"""당신은 유용한 영양 조언가입니다. 다음 영양 정보를 사용하여 쿼리에 답하세요.
영양 정보:
{context}
사용자 쿼리: {query}
사용자가 BMI 또는 칼로리 계산에 대해 묻는 경우 적절한 함수를 사용하세요.
다른 영양 질문에 대해서는 컨텍스트와 지식을 기반으로 유용한 조언을 제공하세요.
"""
# 4단계: 함수 호출이 포함될 수 있는 응답 생성
response = model.generate_content(
prompt,
tools=nutrition_functions
)
# 5단계: 함수 호출 처리
if hasattr(response, 'candidates') and len(response.candidates) > 0:
candidate = response.candidates[0]
if hasattr(candidate, 'content') and hasattr(candidate.content, 'parts'):
for part in candidate.content.parts:
if hasattr(part, 'function_call'):
function_call = part.function_call
function_name = function_call.name
function_args = function_call.args
# 적절한 함수 실행
if function_name == "calculate_bmi":
result = calculate_bmi(
function_args["weight_kg"],
function_args["height_cm"]
)
elif function_name == "calculate_calorie_needs":
result = calculate_calorie_needs(
function_args["weight_kg"],
function_args["height_cm"],
function_args["age"],
function_args["gender"],
function_args["activity_level"]
)
# 함수 결과로 새 응답 생성
final_prompt = f"""당신은 유용한 영양 조언가입니다. 사용자가 다음을 물었습니다: "{query}"
함수 {function_name}을 호출했으며 이 결과가 반환되었습니다:
{result}
이 결과를 설명하고 적절한 영양 조언을 제공하는 유용하고 대화적인 응답을 제공하세요.
관련이 있는 경우 영양 정보를 기반으로 구체적인 음식 추천을 포함하세요.
"""
final_response = model.generate_content(final_prompt)
return final_response.text
# 함수 호출이 이루어지지 않은 경우, 원래 응답 반환
return response.text
```
이 함수는 영양 정보를 검색하고, Gemini 모델을 설정하고, 프롬프트를 생성하고, 응답을 생성하며, 필요한 경우 함수 호출을 처리합니다.
“ 실제 쿼리로 테스트하기
실제 쿼리로 AI 개인 영양사를 테스트합니다:
```python
test_queries = [
"사과의 영양가는 무엇인가요?",
"제 BMI를 계산해 줄 수 있나요? 저는 키 175cm에 몸무게 70kg입니다.",
"얼마나 많은 칼로리를 섭취해야 하나요? 저는 30세 남성, 80kg, 180cm, 보통 활동량입니다.",
"근육을 만들기 위한 고단백 식품은 무엇인가요?",
"체중 감량을 위한 식단 계획을 추천해 줄 수 있나요?"
]
for query in test_queries:
print(f"\n쿼리: {query}")
print("-" * 50)
response = nutrition_assistant(query)
print(response)
print("=" * 80)
```
이 예제들은 AI 개인 영양사의 다재다능함을 보여주며, 사실적인 쿼리 처리, 계산 수행, 개인 맞춤 추천 제공을 시연합니다.
“ 향후 개선 사항 및 결론
잠재적인 개선 사항에는 영양 데이터베이스 확장, 칼로리 추정 정확도 향상, 더 복잡한 식이 요구 사항 지원 추가, 웨어러블 장치와의 통합 등이 있습니다. AI 개인 영양사 어시스턴트는 LLM, 함수 호출, RAG를 결합하여 개인 맞춤 영양 지침을 제공합니다. 이 시스템은 영양 질문에 답하고, BMI 및 칼로리 요구량을 계산하며, 개인 맞춤 추천을 제공하여 개인 건강 분야에서 AI의 잠재력을 보여줍니다.
우리는 사이트 작동에 필수적인 쿠키를 사용합니다. 사이트를 개선하기 위해 방문자들의 사용 방식을 이해하고, 소셜 미디어 플랫폼에서의 트래픽을 측정하며, 개인화된 경험을 제공하는 데 도움이 되는 추가 쿠키를 사용하고자 합니다. 일부 쿠키는 제3자가 제공합니다. 모든 쿠키를 수락하려면 '수락'을 클릭하세요. 선택적 쿠키를 모두 거부하려면 '거부'를 클릭하세요.
댓글(0)