我受够了每天问“今天吃什么”,于是做了个 AI 菜单工具
1. 引言“今天吃什么”这大概是人类历史上被问及次数最多却又最难回答的问题之一。每天中午 11:30当熟悉的饥饿感袭来我和我的同事们就会陷入一场旷日持久的哲学思辨打开外卖软件划拉半小时从“这个太油”到“那个太远”最后往往以一句“随便吧”和一份并不满意的午餐告终。我受够了这种每天的精神内耗。与其继续在无尽的选项中迷失不如让 AI 来替我决策。于是我花了几个周末动手做了一个基于大语言模型的 AI 菜单推荐工具。今天我就把这个小项目的诞生过程、技术选型和核心代码分享给大家。2. 痛点分析为什么“随便”最难选在动手之前我分析了一下“今天吃什么”这个问题的本质选择过载外卖平台上的选项成百上千人的决策能力是有限的选项越多决策成本越高。偏好模糊很多时候我们并不是真的“随便”而是没有一个清晰的、可量化的标准。比如“想吃点清淡的”但什么是清淡是少油、少盐、还是蒸菜重复记忆我们经常忘记上次吃过什么导致一周内点了三次同一家店或者总是在几家店之间来回切换缺乏新鲜感。我的目标很明确做一个工具输入我的“今日状态”比如想吃辣的、预算 30 元以内、没吃过的新店它就能直接给我一个最优解省去所有纠结。3. 技术选型为什么选择大模型传统的推荐系统通常基于协同过滤或内容过滤需要大量的用户行为数据。对于我这种个人小工具来说数据量显然不够。而大语言模型LLM的出现提供了一种全新的思路理解自然语言我可以直接说“今天想吃点暖胃的”而不是通过复杂的标签筛选。知识丰富大模型对菜系、食材、烹饪方式有广泛的理解能给出更合理的搭配建议。可解释性它能告诉我“为什么推荐这个”比如“因为您说想吃暖胃的而这家店的胡椒猪肚鸡汤是招牌非常适合”。我的技术栈如下后端Python FastAPI轻量、异步、开发快前端一个简单的 Web 页面HTML CSS JavaScript或者直接做成命令行工具。AI 引擎调用 OpenAI 兼容的 API如 GPT-4o-mini性价比高。数据源手动维护一个本地 JSON 文件记录常吃的店铺、菜品、价格、口味标签和上次吃的日期。4. 核心实现让 AI 学会“点菜”整个项目的核心逻辑并不复杂主要分为三步构建提示词Prompt、调用 AI 接口、解析结果。4.1 构建数据源首先我需要一个结构化的菜单数据库。这里我使用一个简单的 JSON 文件来存储[{name:川味小馆,dishes:[水煮鱼,麻婆豆腐,夫妻肺片],price_range:25-40,tags:[辣,川菜,下饭],last_ordered:2026-07-15},{name:粤式粥铺,dishes:[及第粥,肠粉,白灼菜心],price_range:15-25,tags:[清淡,早餐,暖胃],last_ordered:2026-07-18},{name:日式拉面,dishes:[豚骨拉面,叉烧饭,煎饺],price_range:30-50,tags:[面食,浓郁,日料],last_ordered:2026-07-10}]4.2 核心 AI 推荐函数接下来是调用 AI 的核心代码。关键在于如何设计 Prompt让 AI 像一个贴心的美食顾问一样工作。importjsonfromopenaiimportOpenAIfromdatetimeimportdatetime# 初始化客户端clientOpenAI(api_keyyour-api-key,base_urlyour-base-url)defget_ai_recommendation(user_input:str,menu_data:list)-str: 根据用户输入和菜单数据让 AI 推荐今日菜单。 # 1. 构建上下文信息todaydatetime.now().strftime(%Y-%m-%d)menu_strjson.dumps(menu_data,ensure_asciiFalse,indent2)# 2. 设计 Promptpromptf 你是一个贴心的美食推荐助手。今天是{today}。 以下是用户常去的餐厅和菜单数据{menu_str}用户的需求是{user_input}请根据以下规则为用户推荐一个最佳选择 1. 优先推荐用户很久没吃过的店。 2. 结合用户的口味偏好如辣、清淡、暖胃等。 3. 考虑价格是否在用户预算内。 4. 给出推荐理由让用户觉得“就是它了”。 请以以下格式回复 **推荐店铺**[店铺名] **推荐菜品**[菜品名] **推荐理由**[一段简短的、有说服力的理由] # 3. 调用 AI 接口responseclient.chat.completions.create(modelgpt-4o-mini,messages[{role:system,content:你是一个幽默风趣、懂美食的助手。},{role:user,content:prompt}],temperature0.7,max_tokens300)returnresponse.choices[0].message.content# 使用示例if__name____main__:# 加载菜单数据withopen(menu.json,r,encodingutf-8)asf:menujson.load(f)# 用户输入user_request今天想吃点辣的预算不超过35块最好没吃过的。# 获取推荐recommendationget_ai_recommendation(user_request,menu)print(recommendation)4.3 运行效果当你运行这段代码输入“今天想吃点辣的预算不超过35块”AI 可能会给出这样的回复推荐店铺川味小馆推荐菜品水煮鱼推荐理由您上次去川味小馆已经是 5 天前了是时候重温一下那股麻辣鲜香水煮鱼完美契合您“想吃辣”的需求价格 38 元虽然略超预算但分量十足绝对物超所值是解决“今天吃什么”的终极答案看AI 不仅给出了选择还给出了一个让你无法拒绝的理由。5. 进阶玩法让工具更懂你基础的推荐功能已经能解决大部分问题但还可以加入更多人性化的设计历史记录记录每天的推荐和最终选择让 AI 学习你的真实偏好。“踩雷”反馈如果推荐不好吃可以给个差评AI 下次会避开。多人模式输入几个人的口味偏好让 AI 推荐一个大家都满意的餐厅。集成到聊天软件做成一个 Telegram 或微信机器人每天中午自动推送推荐。6. 总结这个 AI 菜单工具虽然简单但它完美地解决了我每天的精神内耗。它让我意识到AI 的价值不仅仅是生成宏大的报告或复杂的代码更在于这些能切实提升生活幸福感的小工具。如果你也受够了“今天吃什么”的折磨不妨也动手试试。从一个小脚本开始让 AI 成为你的私人美食顾问。毕竟生活的美好往往就藏在这些被解决的小烦恼里。希望这篇文章能给你带来一些启发。如果你有更好的想法或问题欢迎在评论区交流

相关新闻

CKEditor 5 v48.3.1版本深度解析:企业级富文本编辑框架的技术架构与安全协作方案

CKEditor 5 v48.3.1版本深度解析:企业级富文本编辑框架的技术架构与安全协作方案

CKEditor 5 v48.3.1版本深度解析:企业级富文本编辑框架的技术架构与安全协作方案 【免费下载链接】ckeditor5 Powerful rich text editor framework with a modular architecture, modern integrations, and features like collaborative editing. 项目地址: http…

2026/10/18 2:35:23 阅读更多 →
Beat做歌软件怎么选:从挑伴奏、找Sample到完成一首歌

Beat做歌软件怎么选:从挑伴奏、找Sample到完成一首歌

有时候真不是不会写,前二十分钟就是进不了状态。工程开着,主歌写两句又删,越盯空轨道越烦。我通常不硬憋,先刷几段Beat,让鼓点把情绪拽出来。写说唱、旋律demo,或者脑子里只有模糊画面时,先有伴…

2026/10/18 2:35:26 阅读更多 →
075、语义分割驱动的局部调优:场景感知的影像增强

075、语义分割驱动的局部调优:场景感知的影像增强

075、语义分割驱动的局部调优:场景感知的影像增强 去年夏天,我在调试一款车载环视系统的夜视增强模块时,遇到了一个让我连续加班两周的棘手问题。传统的全局直方图均衡化让天空过曝、地面细节丢失;CLAHE虽然能保留局部对比度,但在有路灯的区域会放大噪声,让图像看起来像得…

2026/10/18 2:37:07 阅读更多 →

最新新闻

SSTI服务端模板注入实战:Jinja2漏洞原理、绕过与防御

SSTI服务端模板注入实战:Jinja2漏洞原理、绕过与防御

1. 漏洞本质与攻击面梳理1.1 模板引擎为什么成了攻击目标SSTI(Server-Side Template Injection,服务端模板注入)这个漏洞,我第一次真正意识到它的危害,是在一次授权渗透测试中遇到一个用Flask写的内部管理系统。那个系…

2026/10/19 5:40:26 阅读更多 →
Java版jieba分词实战:Trie+DAG+HMM构建中文分词引擎

Java版jieba分词实战:Trie+DAG+HMM构建中文分词引擎

简介:这是基于Python版jieba分词封装的Java实现项目,面向需要在Java服务端或桌面应用中进行中文分词的开发者。项目包含完整源码、词典文件与Eclipse工程配置,解压后可直接导入运行。包内共30个文件,以java源码、class编译文件及t…

2026/10/19 5:40:26 阅读更多 →
Pico一体机Unity工程解析:从交互链路到APK部署的完整指南

Pico一体机Unity工程解析:从交互链路到APK部署的完整指南

简介:面向Pico一体机开发的Unity工程包,基于Unity 5.6.1f1搭建,适合VR开发者、Unity初学者及需要快速上手Pico手柄交互的团队。工程内已按项目开发场景划分好文件夹结构,并写好手柄射线检测方法,使用者只需调用Pvr_Con…

2026/10/19 5:40:26 阅读更多 →
Kiterunner与Postman联动,打造持续运转的API安全测试闭环

Kiterunner与Postman联动,打造持续运转的API安全测试闭环

UI 刚迭代完,某后台系统的接口权限验证又漏了新加的导出接口,这种场景干安全的同行应该都熟。API 安全测试最尴尬的处境不是漏洞多,而是测完一轮之后,下个版本一来,之前的结论全部作废。我自己的解法是:用 …

2026/10/19 5:40:26 阅读更多 →
CSV解析器实战:状态机与流式读取如何解决脏数据与陷阱

CSV解析器实战:状态机与流式读取如何解决脏数据与陷阱

简介:面向C#开发者的CSV解析示例程序包,聚焦CSV(逗号分隔值)文件的读取、字段分割与引号转义处理。源代码使用C#编写,配合Windows窗体演示了解析全过程,适合需要实现数据导入导出、批量处理表格数据的.NET初…

2026/10/19 5:40:26 阅读更多 →
开源真实世界数据集AGIBOT WORLD 2026:具身智能数据瓶颈与解法解析

开源真实世界数据集AGIBOT WORLD 2026:具身智能数据瓶颈与解法解析

如果问当前具身智能领域最缺什么,很多一线研发者会不约而同回答两个字:数据。语言模型和视觉模型这些年吃掉了海量互联网文本和图片,收益肉眼可见;但机器人操作模型完全不是这个玩法,它依赖的是机械臂在真实任务中记录…

2026/10/19 5:39:26 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →