FlipPrice:拍照即出价,开源AI让二手转卖定价更准确

FlipPrice用一张照片完成二手商品识别、定价与Listing生成,并将私有销售数据留在本地。
FlipPrice 是开发者 existentialcoder 在 Hacktoberfest 开源AI挑战赛中提交的项目,面向 eBay 兼职转卖者,用一张照片返回建议价格区间、5条已售对比记录和可直接发布的Listing文案。其技术栈由三部分组成:Gemma 4 视觉模型在一次调用中完成品牌/型号/品相识别与文案生成,SerpApi 拉取 eBay 实时成交数据,TabPFN 在样本充足时基于卖家自己的销售历史做个性化定价。开发者的三条核心教训是:识别错误比定价错误代价更大;eBay「已售」搜索是模糊匹配,必须按型号过滤才可比;托管模型端点会挂,需要重试与降级。实际测试中,过滤策略把一瓶香水的估价从 $65 修正到 $28,接近真实成交区间 $27–$39。项目开源,强调私有数据不外传与本地部署能力。
FlipPrice:拍照即出价,开源AI让二手转卖定价更准确

做二手转卖的人都知道,最耗时的环节不是淘货,而是给每件商品定价、写描述、上架。一箱30件的东西,光处理Listing就能把一个副业拖垮。开发者 existentialcoder 在 Hacktoberfest 开源AI挑战赛中提交的 FlipPrice,试图用「一张照片」解决这个痛点——拍张照,拿到一个真正能卖出去的价格和现成的Listing。
它解决什么问题
FlipPrice 面向的是在 eBay 上转卖旧货和车库淘货的兼职卖家。核心流程极其简单:拍一张照片,应用返回四样东西。
- 建议价格和区间,基于 eBay 上「实际成交」的类似商品,而非挂牌价或聊天机器人的猜测
- 5条最接近的已售记录,一键查看,方便自己核实价格
- 可直接发布的Listing文案,只描述照片中可见的内容,不会编造「运转正常、保养良好」这类买家可以追责的虚假描述
- 会学习你的定价习惯——标记已售商品后,一旦某个品类积累足够销售记录,FlipPrice 会基于你自己的历史数据定价,而不是市场均价。比如你卖复古 Levi's 总能比市场价高20%,系统会记住这一点
当AI识别出错时(开发者提到有一次把 Redragon 游戏鼠标认成了 Logitech,导致价格参考了罗技的数据),用户只需点击「Not right? Edit」修正品牌或型号,价格会立即重新计算。
谁会付费:每周上架几十件商品的兼职转卖者。他们的主要成本是时间,而定价错误直接意味着丢钱。如果每月几美元能省下一小时或者避免一件商品贱卖,这笔账很容易算。
演示:从一瓶香水说起
开发者用自己的 Engage Amber Hues 淡香水做了真实测试。
Gemma 读取标签,识别出品牌、系列、品类和品相。生成的Listing文案朴素诚实:「Engage Amber Hues Eau de Parfum. The item is in good condition. Please see the photos for more details.」
第一版 FlipPrice 定价 $65。原因在于 eBay 搜索结果混入了 $170 的 niche 香水、Avon 六件套以及一堆其他香氛,数据噪音极大。而 Engage 香水的实际成交价在 $27–$39 之间。
经过下面要说的过滤修复后,最终给出的价格是 $28(区间 $27–$39),仅基于3条真正属于 Engage 香水的 eBay 成交记录。

技术架构:视觉识别 + 成交检索 + 个性化定价
技术栈的分工非常清晰:
photo ──► Gemma 4 (vision) ──► brand / model / type / condition + listing text
│
▼
SerpApi eBay "sold" search ──► keep only titles naming the model / brand
│
▼
≥10 of your sales in this category?
yes ──► TabPFN regression on your own sales history (runs in-process)
no ──► median and quartiles of the eBay comps
Gemma 4 负责「看」和「写」
Gemma 4(26B-A4B,开放权重) 在一次调用中完成两件事:读取照片并返回结构化字段(品牌、型号、品类、品相、年代),同时生成Listing文案。将原本两次调用合并为一次,每张照片节省约15秒。
Prompt 的设计刻意严格:品牌字段除非能看清 logo,否则一律返回 "unknown"。理由很直接——一个自信的错误品牌会产出一个自信的错误价格。
TabPFN 是由 Prior Labs 提出的表格基础模型(tabular foundation model),它把「在小型表格数据上做预测」这件事本身当作一个预训练任务:模型在数百万个合成表格数据集上学习「给定几行训练样本,如何对新的行做预测」这一元能力。因此在推理时,它不需要梯度下降式的训练流程,而是把你的几十行销售历史作为「上下文」直接输入,一次前向传播就输出预测分布。它的典型适用场景正是样本量在几十到几千行、特征以类别和数值混合为主的结构化表格——这与深度模型动辄需要上万样本的偏好形成互补。在 FlipPrice 中,TabPFN 返回的是中位数与 25–75% 分位区间,区间而非单点估计对定价尤其重要,因为卖家需要知道「卖得快」和「卖得高」之间的权衡空间。
TabPFN 负责「学习你」
TabPFN 是「学习卖家习惯」功能的核心。你的历史销售数据只是一张很小的表:几十行,包含品类、品牌、类型、品相、年代和成交价。这个数据量远不足以训练常规模型,但恰恰是表格基础模型(tabular foundation model)的用武之地。
TabPFN 在请求时即时拟合你的历史数据,全程在进程内运行,不需要训练管线,返回中位数和25–75%区间。它只使用同一品类的销售记录,所以夹克的数据不会用来给笔记本电脑定价。
SerpApi 提供实时成交数据
SerpApi 拉取 eBay 的实时已售Listing,确保价格锚定在「本周」真实成交的基础上。MongoDB 存储销售历史,FastAPI 和 Expo 负责串联整个系统。
SerpApi 是一个把搜索引擎结果页(SERP)转化为结构化 JSON 的第三方 API 服务,它负责处理代理轮换、验证码、页面解析等抓取工程问题,让开发者可以直接查询「某关键词在 eBay 上已售出的商品列表」并拿到标题、价格、成交日期等字段。相比自行爬取,它规避了被封 IP 和维护解析器的成本,代价是按调用次数计费,因此 FlipPrice 只对必要的关键词发起查询。需要说明的是,eBay 的「sold」搜索本质上是关键词模糊匹配,并不会返回结构化的品牌或型号字段,命中结果只以自由文本标题呈现——这正是后文必须用标题做二次过滤、而不能直接对返回价格取平均的根本原因。MongoDB 在这里承担销售历史的持久化:它以文档形式存储每笔交易的结构化字段(品类、品牌、品相、成交价),便于按品类切片后喂给 TabPFN;FastAPI 提供后端 HTTP 接口并托管 TabPFN 的推理进程,Expo 则用一套 React Native 代码同时构建 iOS 与 Android 客户端。
三个关键教训
开发者在构建过程中总结了三条值得所有AI应用开发者关注的经验。
识别错误比定价错误代价更大
搜索「asus laptop」会混入低端上网本和高端游戏本,价格区间天差地别。加入 model 字段并允许用户修正,比任何模型选择都更重要。
搜索结果≠可比成交
eBay 的「已售」搜索是模糊匹配的:搜一款香水,返回三十种琥珀调香氛。FlipPrice 现在的策略是只用标题中明确包含型号的结果定价,其次降级到品牌匹配,只有在匹配不足3条时才使用全部结果。这一个过滤器就把香水的估价从 $65 拉到了诚实的 $28。
托管模型端点会挂
Gemma 的 API 在测试期间返回过 500 错误。后端会重试,然后回退到第二个模型。每条响应都记录是哪个模型写的Listing,保证可追溯。
为什么开源对这类应用至关重要
二手转卖定价依赖的是私有数据:你花了多少钱进货、卖了多少钱、哪些买家愿意出更高价。闭源定价API意味着要把这些历史上传到别人的服务器,得到的也是「他们模型眼中的市场」,而非「你的市场」。
在这里,读取你销售数据的 TabPFN 在后端进程内运行,销售历史不会流向第三方。而 Gemma 的权重是开放的,视觉识别环节不被单一厂商绑定——今天出于方便调用 Google 的托管端点,但同一个模型可以跑在单张 GPU 上(甚至更小的 Gemma 版本跑在笔记本上)。一个卖家或小型二手店可以在自己的硬件上运行完整版 FlipPrice,照片也不外传,没有按张计费。
开发者的原话很精准:「没有开放模型,这就只是别人API的薄封装。有了它们,你拥有的是最了解你生意的那个定价模型。」
项目已开源在 GitHub(existentialcoder/flipprice),包含 Expo 客户端、FastAPI 服务和 Remotion 制作的演示视频,参赛类别涵盖 Best Use of TabPFN、Best Use of Gemma 和 SerpApi 三个方向。
开放权重(open weights) 与「开源」并不完全等同:它指模型的参数可以被任何人下载并自行运行,但训练数据与训练代码未必公开。这一区别在本例中恰恰是够用的——它保证了「不被单一厂商绑定」和「数据不出本地」这两项关键能力。从工程角度看,Gemma 4 的 26B-A4B 命名意味着模型总参数量约 260 亿,但每个 token 只激活约 40 亿参数(A4B 即 activated 4B),因此显存占用和推理成本远低于同规模稠密模型,这是它能在单张消费级 GPU 乃至更小版本在笔记本上运行的前提。量化后的小模型通常还能进一步压缩内存占用,代价是识别精度略有下降,对「拍一张照识别品牌型号」这类任务往往仍可接受。
相关推荐

uGAP:统一100+非洲地理数据集的AI平台
uGAP是开普敦大学团队开发的非洲地理空间AI平台,统一120余个非洲数据集并提供Python SDK,支持数据发现、处理与模型训练一站式工作流,已用于气旋洪水制图等实战场景。

Cursor能控制你的电脑了:AI代理可驱动桌面应用测试
Cursor 新增桌面控制能力,AI 代理可驱动 iOS 模拟器等桌面应用测试自己构建的功能。本文分析这一更新对开发工作流的影响、技术实现可能路径及可靠性考量。

Vibecoding自研推理引擎:理想丰满,现实骨感
Reddit开发者分享Vibecoding自研推理引擎的真实经历:用WebGL2和GLSL在浏览器跑GGUF Q4模型,却陷入tokenizer调试地狱。本文分析浏览器端LLM推理的工程难点,以及为何直接clone llama.cpp是更理性的选择。