极低预算搭建零食推荐系统 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
zgldh
V2EX    分享创造

极低预算搭建零食推荐系统

  •  1
     
  •   zgldh 11 天前 1777 次点击

    起因

    我在一家软件公司工作,每个月公司会补充一些零食供大家填牙缝。每当采购的时候,我都曾看到管后勤的同事为选品花费好久时间。后面甚至放弃思考,完全重复上个月的订单。

    能否创建一个系统,给定预算和需求,即能自动的帮我搭配零食?

    尝试

    第一次尝试做此类系统已经是多年之前了,当时我只会增删改查,向量数据库、推荐系统、人工智能更是仅仅听说过名字。我把从电商页面抓取来的商品,一个个的塞入关系数据表,幻想着用一套复杂的 if/else 来解决这个问题。

    很快我发现这个系统的难度超过了我当时的能力水平,遂作罢。但依然每年都会重新思考该系统的可行性。

    转机

    这几年 AI 应用越来越火,我也参与了一些 AI 集成相关的项目。渐渐在运用中解了相关的知识。我突然意识到用向量数据库和大语言模型可以实现这个零食推荐系统了。

    入库端:

    • LLM 对商品特征进行提取,生成描述字符串。
    • Embedding 将商品描述字符串转换为向量。
    • 向量数据库存储向量和相关元数据。

    查询端:

    • LLM 对用户需求进行拆解,生成描述字符串。
    • Embedding 转换为查询向量
    • 从向量数据库搜索该查询向量,得到潜在匹配的商品。
    • 对匹配到的商品进行组合。

    制作

    由于我是个穷 B ,能有免费的就不想掏一分钱。 于是我盯上了大善人 Cloudflare:

    • Pages 服务,用来展现前端页面、响应查询 API 。
    • Vectorize ,向量数据库。我选用的是 1024 维度余弦库。
    • D1 ,关系数据库,用来存储查询记录。
    • Workers AI ,提供在线文本嵌入和文本生成服务。我选用的嵌入模型是 @cf/baai/bge-m3,生成模型是 @cf/openai/gpt-oss-20b

    虽然上面的服务都有一定免费额度,但我希望把这有限的额度都投入到查询端(客户端)上。入库时的 AI 算力怎么办呢?

    于是我买了台搭载 AMD AI 395 处理器,128G 内存的迷你主机来解决入库 AI 算力问题。( PS:AMD 生态还是不太好。其实用自己的老机器也能跑下面的本地模型。)

    每天定时从京东联盟和淘宝联盟抓取热门商品列表,调用本地模型,最后发布到 Cloudflare 向量数据库里。 本地 AI 模型包括:

    • mineru-vllm 做图文识别
    • qwen/qwen3-next-80b 做描述字符串提取

    (为了确保文本嵌入一致,入库流程仍调用 Cloudflare 的 @cf/baai/bge-m3 模型)

    整个制作过程充分依靠了 AI 开发:

    • Shotgun code 能将整个代码库打包成一个提示词,再利用 Gemini 的超长上下文来一口气输出 diff 指令。再回到任意 AI IDE 或插件( Cline 之类)让他们帮忙把 diff 指令应用到代码上即可。
    • AI Studio 免费试用 Gemini 3 Pro ,虽然数据可能会被拿去训练。
    • VS Code 的 Cline 插件,搭配 DeepSeek 或 Gemini 。
    • VS Code 的通义灵码插件。简单修改还挺方便的。

    成果

    截图

    断断续续制作了两三个月,加上了导出 CVS 列表、换一个商品、限定单价、限定平台、历史记录等功能。现在终于可以见人了。元旦节宅家的零食就是用它帮忙选的。

    起了个诨名 零食搭子 https://snackbuddy.idagou.com/

    欢迎各路好汉光临!

    第 1 条附言    11 天前

    原文截图烂了。重新发个

    截图

    17 条回复    2026-01-11 15:29:37 +08:00
    guiys
        1
    guiys  
       11 天前 via Android   1
    我觉着,大家的需求是好吃的零食,不是如何搭配零食。
    搭配出来的零食大家还是只会挑爱吃的好吃的。
    zgldh
        2
    zgldh  
    OP
       11 天前
    @guiys 是啊,看到不喜欢的我都会换掉。
    regent
        3
    regent  
       11 天前
    楼主动手能力可以呀,还请问下 AI MAX 395 使用体验如何?您这个需求会占用多少资源?
    zgldh
        4
    zgldh  
    OP
       11 天前
    原文截图怎么烂了。。 补一个
    ![截图]( https://snackbuddy.idagou.com/screenshot.png)
    chihiro2014
        5
    chihiro2014  
       11 天前
    要是买的多,甚至你可以考虑上淘宝联盟或者京粉,这样还能创造额外收入
    zgldh
        6
    zgldh  
    OP
       11 天前
    @regent 小主机速度很快,内存带宽较高 256GB/s (还是不如正规显卡)。系统入库时资源占用没量化计算过,反正能边跑 LLM 边玩儿群星。
    zgldh
        7
    zgldh  
    OP
       11 天前
    @chihiro2014 你太懂了哈哈。。已经连接上了。其实我首先连接的是拼多多,但是他把我号给封了,元旦后刚解封。。
    zcf0508
        8
    zcf0508  
       11 天前
    有点意思!
    zgldh
        9
    zgldh  
    OP
       11 天前
    @zcf0508 年货就用这个办了
    Aprdec
        10
    Aprdec  
       11 天前
    不错,保持住!
    zgldh
        11
    zgldh  
    OP
       11 天前
    @Aprdec 感谢鼓励
    chihiro2014
        12
    chihiro2014  
       10 天前
    @zgldh 这是个变现思路,感谢大佬分享 hh
    dxpy
        13
    dxpy  
       10 天前
    挺不错的
    zgldh
        14
    zgldh  
    OP
       10 天前 via Android
    @dxpy 多谢鼓励
    sam90
        15
    sam90  
       8 天前
    关键词“辣条和饼干, 并且两者的金额均分”, 推荐出来的都是辣条, 楼主可以将深度思考的过程展示出来
    zgldh
        16
    zgldh  
    OP
       8 天前
    @sam90 将思考过程透明,我回头试试。
    zgldh
        17
    zgldh  
    OP
       4 天前
    更新了一定程度上的思考透明程度。主要展现了将需求拆解为几组关键词,如何挑选的过程。
    追加了拼多多货源,目前拼多多的比较少,后面会逐渐采集更多。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1287 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 17:39 PVG 01:39 LAX 09:39 JFK 12:39
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86