当前位置: 首页 > news >正文

RAG Food Project

一、创建项目环境

python3 -m venv venv_food

source venv_food/bin/activate

pip install faiss-cpu pymilvus sentence-transformers

如需 GPU 版 faiss,可用 faiss-gpu 替换 faiss-cpu,但一般 faiss-cpu 兼容性更好。

模型下载

from modelscope import snapshot_downloadmodel_dir = snapshot_download('Qwen/Qwen3-Embedding-0.6B')

安装Docker

Ubuntu安装Docker_sudo apt update && sudo apt install -y ca-certific-CSDN博客

 二、在 Docker 中运行 Milvus (Linux)

安装 Milvus

curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.shbash standalone_embed.sh start

停止和删除 Milvus

bash standalone_embed.sh stopbash standalone_embed.sh delete

你可以按以下步骤升级最新版本的 Milvus

bash standalone_embed.sh upgrade

查看单个容器详细信息

docker port milvus-standalone

Milvus 服务端口 19530 已经在本机开放,可以直接用 http://localhost:19530 进行连接。

三、运行项目代码

from faiss import clone_index
from pymilvus import MilvusClient,DataType
from sentence_transformers import SentenceTransformer# -------------------------- 连接数据库 --------------------------
client = MilvusClient("http://localhost:19530")# --------------------------设计表结构--------------------------
schema = MilvusClient.create_schema(auto_id=False)schema.add_field(field_name="id",datatype=DataType.INT64,is_primary=True)
schema.add_field(field_name="text1",datatype=DataType.VARCHAR,max_length=8000)
schema.add_field(field_name="text2",datatype=DataType.VARCHAR,max_length=8000)
schema.add_field(field_name="vector",datatype=DataType.FLOAT_VECTOR,dim=1024)# -------------------------- 创建搜索参数 --------------------------
index_params = MilvusClient.prepare_index_params()
index_params.add_index(field_name="vector",metric_type="COSINE",index_type="IVF_FLAT",index_name="vector_index",params={ "nlist": 128 }
)# -------------------------- 创建表 --------------------------
if client.has_collection(collection_name="food_test"):client.drop_collection(collection_name="food_test")
client.create_collection(collection_name="food_test",schema=schema,index_params=index_params)# -------------------------- 知识(数据库)--------------------------
text1 = ["西班牙金枪鱼沙拉","红烧滩羊肉","香草布里欧修吐司"]
text2 = [  " ".join(["鸡蛋进水煮,七成熟捞出(依个人喜好),同时备其他菜", "生菜撕片,圣女果开半,黄瓜滚刀,红柿椒切丝,紫洋葱切丝,鸡蛋四均分", "金枪鱼去水", "撒黑胡椒,红酒醋和少许橄榄油", "拌匀,拍照,开动"])," ".join(["滩羊肉在姜水里焯3分钟,姜水里加点料酒去腥", "再将羊肉反过来焯水2分钟", "把羊肉切2/3手掌大小,羊肉煮熟后会缩水,所以可以稍微大一点的", "热油里放入花椒、桂皮、香叶、生姜爆炒30秒,放入切好的羊肉翻炒3分钟左右,把羊肉里面的油煸炒出来,再加入老抽上色,把所有羊肉都上色后加入乱泉水,以漠过羊肉上面为准", "锅里水烧开后,换成砂锅中火慢炖40分钟", "分次吃", "超级软糯", "加点萝卜进去炖起来,解油腻"]),"香草糖\n500克优质白砂糖+5根香草荚\n香草荚剖开,刮出香草籽,切成小段,和白砂糖混合在一起,摇匀,密封保存就做好啦。\n各种甜点都能用,自己做真的是物美价廉,使用也超方便,遍布香草籽,做出来的甜品高级感又提升不少。\n用的是宜家买的大号玻璃密封罐\n\n没有香草糖的同学可以用香草精代替哦"]# -------------------------- embedding 模型 --------------------------
model = SentenceTransformer("/root/.cache/modelscope/hub/models/Qwen/Qwen3-Embedding-0.6B",device="cuda:0")# -------------------------- 向量化 --------------------------
text1_emb = model.encode(text1)
print("")insert_data = []for i in range(len(text1_emb)):insert_data.append({"id":i,"text1":text1[i],"text2":text2[i],"vector":text1_emb[i]})r = client.insert(collection_name="food_test",data=insert_data)# 加载 collection
client.load_collection(collection_name="food_test")while True:input_text = input("请输入:")input_emb = model.encode([input_text])search_res = client.search(collection_name="food_test",data=input_emb,limit=1,output_fields=["text1","text2"])distance = search_res[0][0]["distance"]t1 = search_res[0][0]["entity"]["text1"]t2 = search_res[0][0]["entity"]["text2"]if distance < 0.6:print("不知道")else:print(f"查找到的最相似的菜名:{t1}")print(f"相似度为:{distance}")print(f"制作过程:{t2}")print("*"*40)

其中:

model = SentenceTransformer("moka-ai/m3e-base", device="cuda:0")

如无 GPU,可改为 device="cpu"。 

http://www.xdnf.cn/news/998389.html

相关文章:

  • GAN+ECA注意力机制实现图像超分辨率重建
  • ESP32-C3FH4X—低功耗、高集成度的 MCU 系统级芯片 (SoC)
  • 基于数据库实现配置管理和定时任务启停
  • 强化学习:策略梯度概念
  • word用endnote插入国标参考文献
  • 在 Flutter 项目中iOS 的 App 图标和 App 名称 的设置
  • 探索 Excel-to-JSON:高效数据转换的利器
  • Linux Alias 魔法:命令行效率提升秘籍
  • R语言缓释制剂QBD解决方案之四
  • RK3588 + Ubuntu24.04 部署 rknn 模型——不用[特殊字符]版全流程教程
  • 管家婆软件下载中心-管家婆软件辉煌安装包下载、应用程序、最新版软件
  • STL难记忆却常用的用法集合(持续更新中)
  • 自动驾驶系统研发系列—AI大模型驱动的智能座舱:从概念到落地的工程解析
  • MonkeyOCR: 基于结构-识别-关系三元组范式的文档解析
  • 客户端登录not foud的问题解决
  • PostgreSQL 用户名大小写处理规则
  • 黑龙江亿林网络启盛裸金属服务器评测:24 核 32G + 联通千兆共享,高负载业务的新利器
  • ​​​​​​​《TCP/IP协议卷1》第9章 IP选路
  • 鸟类识别与分类相关数据集(猫脸码客第252期)
  • 医疗行业网络安全的综合防护策略
  • 大模型在关键社会领域的应用研究:金融、医疗和法律
  • 一种安全实用、准确率高的Text2Sql方案
  • element 跨页选中,回显el-table选中数据
  • 《linux2.4内存管理》第3章 页表管理
  • 《TCP/IP协议卷1》 TCP的坚持和保活定时器
  • vue2为什么不能检查数组的的变化,改怎样解决
  • io_uring的异步IO机制
  • LatentSync V8版 - 音频驱动视频生成数字人说话视频 更新V1.6版模型 支持50系显卡 支持批量 一键整合包下载
  • 集装箱残损识别系统如何检测残损?它的识别率能达到多少?
  • adb 查看android 设备的硬盘及存储空间