# 菜单推荐系统

###  介绍

本项目在Huggingface的基础上实现Chatglm2的本地部署，再结合Langchain和本地知识库实现了菜单的智能推荐，拥有菜单推荐、菜品识别、菜单规划、自由对话几种功能。NLP模型和Emmbeding模型可以在设置里自行更换，但需满足Huggingface的要求。最后，通过Gradio实现UI界面的部署。
### 使用说明 

使用前建议使用conda创建新的虚拟环境，乙方后面安装依赖包时对原有环境破坏，另外建议python>=3.10，torch>=2.0 。可以依次运行下面的命令。

```
conda create -n caidan python=3.10

pip install -r requirements.txt
```

安装好运行环境后在虚拟环境下运行下面代码启动UI界面。

```
python .\UI界面.py
```

### 功能简介

##### 菜单推荐 

基于知识库的菜单推荐：根据输入的饮食喜好，结合本地向量化的知识库进行推荐。

基于菜单的推荐：根据输入的饮食喜好，结合上传的文本或图片菜单进行推荐。

大模型推荐：根据输入的饮食喜好，模型自由发挥进行推荐。

自定义推荐：自定义随机范围，让机器随机选择。

##### 智能识别

菜品识别： 用户上传照片，模型返回图片中可能的菜品名称。

果蔬识别：用户上传照片，模型返回图片中的果蔬名称。

补充：菜品识别和果蔬识别都是使用百度的API，需要该功能的可以去申请。没使用本地模型的是为了节省显存，追求性能且现存足够的需自行修改和微调。

##### 菜单规划

菜单规划有两种模式，可以结合使用。

1. 根据输入的食材，返回可以制作的菜品名称。
2. 根据输入的菜品名称，返回制作的过程和细节。

##### 自由对话

直接对接NLP模型，可以自由对话。

### demo展示

#### 菜单推荐

![输入图片说明](demo/%E8%8F%9C%E5%8D%95%E6%8E%A8%E8%8D%90--%E7%9F%A5%E8%AF%86%E5%BA%93.png)
![输入图片说明](demo/%E8%8F%9C%E5%8D%95%E6%8E%A8%E8%8D%90--%E8%87%AA%E5%AE%9A%E4%B9%89%E9%9A%8F%E6%9C%BA.png)

#### 菜单规划

![输入图片说明](demo/%E8%8F%9C%E5%8D%95%E8%A7%84%E5%88%92-%E5%90%AF%E5%8A%A8-%E8%8F%9C%E5%93%81.png)
![输入图片说明](demo/%E8%8F%9C%E5%8D%95%E8%A7%84%E5%88%92-%E5%90%AF%E5%8A%A8-%E9%A3%9F%E6%9D%90.png)

#### 智能识别

![输入图片说明](demo/%E8%8F%9C%E5%93%81%E8%AF%86%E5%88%AB.png)
![输入图片说明](demo/%E6%9E%9C%E8%94%AC%E8%AF%86%E5%88%AB.png)

#### 自由对话

![输入图片说明](demo/%E8%87%AA%E7%94%B1%E5%AF%B9%E8%AF%9D.png)

