# fooder_oc **Repository Path**: L-Magma/fooder_oc ## Basic Information - **Project Name**: fooder_oc - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-25 - **Last Updated**: 2026-02-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 美食推荐与食谱智能助手 一个基于 AI 的美食推荐和食谱智能助手 Web 应用。用户可以用自然语言描述食材、偏好,获取食谱推荐、烹饪指导和营养信息。 ## 项目结构 ``` fooder_oc/ ├── backend/ # Python 后端 (FastAPI) │ ├── app/ │ │ ├── api/ # API 路由 │ │ │ ├── chat.py # 对话 API (含会话管理) │ │ │ ├── recipes.py # 食谱 API │ │ │ └── users.py # 用户 API (注册/登录/偏好) │ │ ├── models/ # 数据模型 │ │ │ └── models.py # User, Conversation, Message 模型 │ │ ├── services/ # 业务服务 │ │ │ ├── llm.py # LangChain + 通义千问 LLM │ │ │ └── spoonacular.py # Spoonacular API │ │ ├── database.py # 数据库配置 (SQLite) │ │ └── main.py # 应用入口 │ ├── data/ # 数据库文件 │ │ └── fooder.db # SQLite 数据库 │ ├── .env # 环境变量配置 │ └── requirements.txt # Python 依赖 │ ├── frontend/ # Vue.js 前端 │ ├── src/ │ │ ├── views/ # 页面组件 │ │ │ ├── Home.vue # 首页 (无需登录) │ │ │ ├── Chat.vue # 智能对话页面 (需登录) │ │ │ ├── Login.vue # 登录/注册页面 │ │ │ ├── UserProfile.vue # 个人中心页面 │ │ │ └── RecipeDetail.vue # 食谱详情页面 │ │ ├── components/ # 公共组件 │ │ ├── composables/ # Vue Composable │ │ ├── api/ # 前端 API 调用 │ │ ├── assets/ # 静态资源 │ │ ├── router.js # 路由配置 │ │ ├── App.vue # 主应用组件 │ │ └── main.js # 入口文件 │ ├── package.json │ └── vite.config.js │ ├── README.md # 项目说明 ├── AGENTS.md # 项目知识库 └── 需求.md # 需求文档 ``` ## 技术栈 ### 后端 - **FastAPI** - Python Web 框架 - **SQLAlchemy** - ORM - **SQLite** - 轻量级数据库 - **LangChain** - LLM 编排框架 - **通义千问 (Tongyi)** - 阿里云 LLM - **Spoonacular** - 食谱数据 API ### 前端 - **Vue 3** - 渐进式 JavaScript 框架 - **Vue Router** - 路由管理 - **Axios** - HTTP 客户端 ## 环境配置 在运行前,需要配置 API 密钥: ### 1. Spoonacular API - 访问 https://spoonacular.com/food-api/console/profile - 注册并获取 API Key - 填入 `backend/.env` 中的 `SPOONACULAR_API_KEY` ### 2. 通义千问 API - 访问 https://dashscope.console.aliyun.com/ - 获取 API Key - 填入 `backend/.env` 中的 `TONGYI_API_KEY` ## 启动步骤 ### 1. 启动后端 ```bash cd backend pip install -r requirements.txt python -m uvicorn app.main:app --host 0.0.0.0 --port 8000 ``` 或使用热重载: ```bash python app/main.py ``` ### 2. 启动前端 ```bash cd frontend npm install npm run dev ``` 前端默认运行在 http://localhost:5173 ### 3. 访问应用 打开浏览器访问 http://localhost:5173 ## API 端点 ### 用户 API | 端点 | 方法 | 说明 | |------|------|------| | `/api/users/register` | POST | 用户注册 | | `/api/users/login` | POST | 用户登录 | | `/api/users/{id}` | GET | 获取用户信息 | | `/api/users/{id}/preferences` | GET | 获取用户偏好 | | `/api/users/{id}/preferences` | PUT | 保存用户偏好 | ### 对话 API | 端点 | 方法 | 说明 | |------|------|------| | `/api/chat` | POST | 发送消息,获取 AI 回复 | | `/api/conversations` | GET | 获取对话列表 | | `/api/conversations/{id}/messages` | GET | 获取对话消息 | | `/api/conversations/{id}` | DELETE | 删除对话 | ### 食谱 API | 端点 | 方法 | 说明 | |------|------|------| | `/api/recipes` | GET | 搜索食谱 | | `/api/recipes/{id}` | GET | 食谱详情 | | `/api/recipes/random` | GET | 随机食谱 | | `/api/recipes/by-ingredients` | GET | 按食材搜索 | ### 系统 API | 端点 | 方法 | 说明 | |------|------|------| | `/` | GET | 健康检查 | | `/health` | GET | 健康检查 | | `/api/status` | GET | 服务状态 | ## 功能说明 1. **首页** - 展示推荐食谱,支持关键词搜索和快捷标签(无需登录) 2. **智能对话** - 与 AI 助手对话,获取食谱推荐和烹饪指导(需登录) 3. **食谱详情** - 查看食谱的详细信息、营养成分和烹饪步骤 4. **用户系统** - 注册、登录、个人偏好管理 5. **会话管理** - 支持多轮对话,会话历史记录,可删除会话 6. **饮食偏好** - 设置饮食限制、过敏原、喜欢的菜系等 ## 页面说明 - **首页** (`/`) - 浏览推荐食谱,无需登录 - **登录** (`/login`) - 用户注册/登录 - **智能对话** (`/chat`) - AI 对话助手,需登录 - **个人中心** (`/profile`) - 用户信息和偏好设置,需登录 - **食谱详情** (`/recipe/:id`) - 查看食谱详情 ## 注意事项 - 确保网络可以访问 Spoonacular API 和通义千问 API - 首次启动会创建 SQLite 数据库文件 `backend/data/fooder.db` - 前端已配置 API 代理,会将 `/api` 请求转发到后端 - 当 Spoonacular API 配额超限时,会自动使用 LLM 提供回复