资讯动态

7 天搭一个懂你的饮食推荐 LLM:从知识图谱到 LoRA 微调再到 4bit 部署

发布时间:2026/8/29 15:07:29 来源:尧图企业网站定制
7 天搭一个懂你的饮食推荐 LLM从知识图谱到 LoRA 微调再到 4bit 部署【免费下载链接】llm-courseCourse to get into Large Language Models (LLMs) with roadmaps and Colab notebooks.项目地址: https://gitcode.com/GitHub_Trending/ll/llm-course这套智能饮食推荐 LLM 接收你的健康数据、饮食偏好和生理指标输出个性化餐单。它是 llm-course 项目里的一个实战方向整条链路我们一周就能搭完。一个场景一张图看懂系统全景先看一个真实请求。我是二型糖尿病患者这周血糖有点飘帮我排下周的餐每天纤维不低于 30g。通用 LLM 能写出像样的食谱但它不知道你的血糖趋势也不知道哪些食物对你属于禁忌。我们的做法是把四件事拆开营养知识不塞进权重外置成知识图谱。文献每月更新图谱跟着改模型不用重训。用户档案和生理数据走 prompt 注入天然实时且每个人各不相同。禁忌食物校验交给规则引擎而不是模型自我判断——安全这件事不能让概率说了算。选 7B 级小模型加 4bit 量化健康数据可以全程留在你自己的设备上。数据管线怎么搭三股原料汇入一个图谱模型的聪明程度上限取决于喂进去的数据质量。原料有三股USDA 食物成分表公开数据库覆盖数万种食物、用户的饮食日记以及连续采样的生理指标。前一股走结构化清洗后两股分别走实体抽取和滑动窗口特征。食物成分表的清洗很简单核心是三步填缺失、标准化、转成三元组入库。food pd.read_csv(usda_food_composition.csv) nutri [protein, carbohydrate, fat, fiber, vitamin_c] food[nutri] food[nutri].fillna(food[nutri].median()) # 关键营养素用中位数填充 food[nutri] StandardScaler().fit_transform(food[nutri]) # 标准化成相对含量 # 再映射成 (食物, 包含, 营养素) 三元组写入图谱饮食日记是非结构化文本不能靠关键词硬匹配我们用领域适配过的 NER 模型抽食物和数量。def parse_diet_log(text): doc nlp(text) foods [e.text for e in doc.ents if e.label_ FOOD] # 领域微调过 NER grams [float(m) for m in re.findall(r(\d(?:\.\d)?)\s*g, text)] return list(zip(foods, grams)) # [(三文鱼, 120), (燕麦, 40)]生理指标做 7 天滑动窗口的均值、方差、趋势斜率标准化后拼成一段特征文本供后面进 prompt。数据源指标阈值不达标时食物成分表缺失值比例 5%中位数填充饮食日志实体识别准确率 90%换领域适配 NER 模型生理数据异常值比例 3%IQR 法则剔除知识图谱关系准确率 95%领域专家抽审数据这块没有银弹阈值是经验值。但有一条硬规矩坏数据宁可丢掉也不要填充了事图谱里的脏三元组会被模型当事实用。为什么是 LoRA以及 7B 基座怎么选先回答选型问题。全参微调 7B 模型要一张大卡甚至多卡而我们要学的其实只有领域惯例怎么输出结构化餐单、怎么引用克数和营养素、怎么守住禁忌边界。所以基座权重全部冻结只给注意力层的 q_proj、v_proj 挂低秩适配器单卡就能跑。训练语料直接从知识图谱合成用用户档案当问句用图谱约束生成的理想餐单当答案。这样答案风格天然和图谱事实一致不会出现模型一本正经推荐禁忌食物。cfg LoraConfig(r16, lora_alpha32, lora_dropout0.05, target_modules[q_proj, v_proj]) # 只挂注意力层args TrainingArguments( per_device_train_batch_size4, gradient_accumulation_steps4, # 等效 batch 16 learning_rate2e-4, num_train_epochs3, bf16True, # 卡支持就用 bf16 logging_steps10, )有个容易翻车的点分词时损失只算答案那段指令和输入部分要用 mask 遮住否则模型会学着复述问题。评估不看通用跑分看四个维度指标含义目标营养素覆盖率必需营养素被覆盖的比例 90%卡路里准确度与目标热量的偏差 10%偏好匹配度符合个人口味的食物占比 85%安全性评分命中禁忌即拦截重生成1.0其中安全性是硬指标前三个是软指标。软指标用来挑版本硬指标决定能不能上线。多路信息融合 prompt 与 4bit 量化部署到了推理时所有信息要汇进一个 prompt 模板。所谓多模态融合本质是把生理特征也变成文本和档案、偏好拼在一起。### 个人档案 45 岁 / 男 / 175cm / 72kg / BMI 23.5正常 ### 健康状况 - 二型糖尿病近 7 天血糖轻度上行 ### 饮食偏好 喜欢牛肉、鱼类、米饭 避开西兰花、苦瓜 限制少盐 ### 近 7 天生理趋势 血糖均值 7.2 mmol/L方差 0.38趋势 0.05/天 ### 需求 一周减脂食谱每天三餐加一次加餐纤维 ≥ 30g这个模板最大的好处是扩展性强。以后加肠道菌群报告或运动记录只是多拼一段文本不用动模型权重。部署端的取舍看一张表方案内存占用适用场景精度损失FP16≈14GB训练、开发机基准INT8≈7GBGPU 在线服务很小NF4 双重量化≈4GB树莓派 8GB 实测可用小GGUF q4_0≈4.1GB纯 CPU / 边缘设备1~3%建议边缘设备直接上 NF4 或 GGUF q4_0GPU 服务器且在意质量就留 INT8。顺序记得先 SFT、后量化量化的是合并过适配器的权重。# 树莓派 / 边缘设备转 GGUF 并跑本地推理服务 apt update apt install -y git cmake libopenblas-dev git clone https://link.gitcode.com/i/8323eea262c1d56a543194472083137a # 参考项目可替换为你的权重目录 # 编译 llama.cpp 后 python convert_hf_to_gguf.py ./diet-llm-merged --outfile diet-llm.gguf ./llama-quantize diet-llm.gguf diet-llm-q4.gguf q4_0 ./server -m diet-llm-q4.gguf -c 1024 -t 4 --port 8080效果验证一个完整跑例与三个真实挑战输入45 岁男二型糖尿病血糖轻度上行纤维 ≥ 30g/天帮我排一周。系统先检索图谱三元组燕麦-β-葡聚糖-平稳餐后血糖、酸奶-蛋白质-延长饱腹、糖尿病-限制-精制碳水然后由 LoRA 模型生成带营养依据的餐单规则引擎逐条校验后才输出。一段早餐输出早餐钢切燕麦 40g 无糖希腊酸奶 150g 核桃 15g。燕麦中的 β-葡聚糖延缓糖分吸收酸奶的蛋白质和脂肪拉长饱腹时间全天碳水均匀分布在三餐之间。评估结果连续 4 周、内部用户维度目标实测餐后 2h 血糖波动 1.4 mmol/L1.2必需营养素覆盖率 95%98.3%计划完成率 80%85.7%口味满意度5 分制 4.04.3每日准备时间 30 min25.4剩下的挑战很实在健康数据隐私要求推理尽量落在设备上而模型每小一号长上下文里的约束就会松一些营养学研究更新快知识注入必须保持增量个体代谢差异也决定了训练数据再大也覆盖不全闭环反馈是下一步的方向。️ 想动手的话从 USDA 食物成分数据库拿数据用 TRL 跑微调推理端用 llama.cpp再配合 llm-course 里的路线图一条完整链路就齐了。【免费下载链接】llm-courseCourse to get into Large Language Models (LLMs) with roadmaps and Colab notebooks.项目地址: https://gitcode.com/GitHub_Trending/ll/llm-course创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价