article
README
🚀 食品卡路里与蛋白质分析器
这是一款由人工智能驱动的营养助手,它能分析食品图片,识别其中的食物,计算卡路里和蛋白质含量,并解答与营养相关的问题。该项目基于 LangGraph、Google Gemini、Nutritionix API、Wikipedia 和 Streamlit 构建。
✨ 主要特性
- 食物识别:上传一张图片,Gemini 能够识别出图片中可见的食物。
- 卡路里与蛋白质计算:Nutritionix API 可提供准确的营养信息。
- 交互式问答:可以针对分析结果提出后续问题(例如:“米饭中含有多少蛋白质?”)。
- 维基百科集成:通过维基百科了解食物的营养益处。
- 对话记忆:使用
MemorySaver跟踪分析过程和后续问题。 - Streamlit 用户界面:简单易用的交互界面。
- MCP 服务器(Render):通过部署在 Render 上的 FastAPI MCP 服务器提供营养工具服务。
🛠 技术栈
- LangGraph:工作流编排与记忆管理
- Google Gemini:结合视觉和大语言模型进行食物识别与推理
- Nutritionix API:提供营养信息(卡路里、蛋白质等)
- Wikipedia API:提供额外的营养知识
- Streamlit:用于交互的前端框架
- FastAPI + MCP:后端工具服务(部署在 Render 上)
📂 项目结构
.devcontainer/
├── devcontainer.json # 主配置文件
├── backend/ # 后端 API 与服务
│ ├── requirements.txt # 后端依赖
│ ├── server.py # API 服务器
│
├── frontend/ # 基于 Streamlit 的前端
│ ├── app.py # 主应用程序
│ ├── client.py # 连接后端
│ ├── requirements.txt # 前端依赖
│
├── .env.example # 示例环境文件
├── .gitignore # Git 忽略规则
├── .python-version # Python 版本
├── pyproject.toml # 项目元数据
├── README.md # 项目文档
├── requirements.txt # 根依赖
└── uv.lock # 锁定文件(使用 uv 进行可重复构建)
⚡ 安装指南
1️⃣ 克隆仓库
git clone https://github.com/sunilpowar5/LangGraph-MCP-Nutrition-Analyzer.git
cd LangGraph-MCP-Nutrition-Analyzer
2️⃣ 创建虚拟环境并安装依赖
python -m venv .venv
# 激活虚拟环境
.venv\Scripts\activate # Windows
source .venv/bin/activate # Mac/Linux
pip install -r requirements.txt
3️⃣ 添加环境变量
在根目录下创建一个 .env 文件:
GEMINI_API_KEY=your_google_gemini_api_key
NUTRITIONIX_APP_ID=your_nutritionix_app_id
NUTRITIONIX_API_KEY=your_nutritionix_api_key
LANGCHAIN_API_KEY=your_langchain_api_key
(可以使用 .env.example 作为模板)
4️⃣ 运行应用(Streamlit 前端)
streamlit run frontend/app.py
5️⃣ (可选)运行后端 MCP 服务器
uvicorn backend.server:app --host 0.0.0.0 --port 8000
💻 使用示例
基础用法
上传一张食品图片(jpeg/jpg/png 格式)。系统会识别图片中的食物,然后 Nutritionix 会获取这些食物的卡路里和蛋白质信息。你可以提出后续问题,例如:
- “这顿饭健康吗?”
- “这顿饭有什么好处?” 你可以随时开始新的会话。
示例工作流程
上传图片 → 检测到 🍌 + 🥛 Nutritionix 获取信息 →
香蕉:105 卡路里,1.3 克蛋白质
牛奶:103 卡路里,8 克蛋白质
总计:208 卡路里,9.3 克蛋白质
提问:“牛奶有什么好处?” → 从维基百科获取答案。
🚀 路线图
- 支持多食物图像分割(边界框)。
- 添加更多营养 API 以扩大覆盖范围。
- 部署到 Streamlit Cloud / AWS。
- 支持多用户历史记录和持久存储。
🤝 贡献
欢迎贡献代码、提出问题和功能请求!你可以随时提交 PR 或报告 bug。
扫码联系在线客服