印度的小店主不写招聘启事。他打开WhatsApp,发一句话:“logo bana do dukaan ke liye, 1500 tak, Friday tak chahiye”——给店里做个logo,预算1500以内,周五前要。
GigLift 就是从这个消息开始的。它是一个面向学生的小型任务板,把这种口语化的请求转成一份像样的需求说明:要交付什么、需要哪些技能、预算多少、截止时间,以及店主自己忘了回答的那些问题。店主改掉不对的地方,再发布。发布之前,任何内容都不公开。
学生看到按匹配度排序的任务,投出方案,店主挑一个人。电话号码只在成交后出现,付款留在双方之间。
谁会掏钱,掏多少
愿意付费的是小商家,需求集中在几类:一个logo、一张菜单卡、剪辑八条短视频、录入四十页文字。价格通常在 ₹500 到 ₹3,000 之间。这份副业归学生。
作者想修的是“需求”这一环。一条这样的消息,漏掉了自由职业者需要知道的一半信息。学生只能猜,只能盲报价,两个人后面再为这个吵。开头一份清楚的需求几乎不花钱,却能挡掉大部分麻烦。
GigLift 本身不赚钱。目前没有人通过它付过款,也还没有真实客户用过它。
AI 只做规则做不了的那部分
技术栈是 Django 加 HTMX 和 SQLite,跑在 Render 的免费套餐上。所有 AI 逻辑集中在一个文件 core/llm.py 里,只用标准库,不引入 SDK。模型是 Gemma(gemma-4-26b-a4b-it),通过谷歌托管的 Gemini API 调用,用的是同一个免费密钥。密钥缺失或调用失败时,基于规则的兜底方案接管,页面上会写明当前是哪种。
设计思路来自一个早期教训:向模型要一个价格,它就会给你一个价格,哪怕客户根本没提过。所以作者不再让模型决定数字。客户写了预算或截止时间,core/extract.py 里的一小组规则直接从文本里读出来,模型改不了。规则能处理英语、Hinglish 和天城文数字:1500 tak、₹१२००、parso、agle hafte、Friday tak。
如果客户什么都没写,模型给出的数字会被标注为“粗略猜测,并非来自真实价格”,并回头去问客户。如果模型写出的交付项里含有客户消息中没有的数字,这一行会被丢掉。留给 Gemma 的,是规则做不到的事:读懂一条 Hinglish 请求,写出交付项和待确认问题。
32份需求,25个预算对了22个
为了验证,作者先手写了 30 份需求(英语、Hinglish、天城文),据此搭出规则。然后冻结 extract.py,哈希记录在 eval/FROZEN.txt 里,另写 32 份新需求,只评分一次。
接着用真实的 Gemma 跑完整条流水线,32 份需求全部由模型处理:25 个预算里对了 22 个,27 个截止时间里对了 25 个,没有一个是错的,也没有一个是凭空编的。这个结果和纯规则一致,而这正是重点——Gemma 改不动客户写下的数字。
五个漏判分别是:paanch hazar(用文字写的金额)、1800 mein ho jaye、due 25 Oct,以及 within 48 hours。漏判的含义是应用会去问客户,它从不显示错误的数字。
作者也说明了这个测试的局限:规则和测试需求都是他自己写的,所以这个留出集分数偏乐观。而且它只衡量数字。Gemma 自己的输出——待确认问题、技能、交付项——还没有评分,这是下一步,同时还要接入真实客户的真实消息,以及一个交付检查:学生描述自己交了什么,模型逐项标记完成或缺失。
踩过的坑
第一版离线正则表达式在“posters, 4”上崩了,因为它把“posters”里的“rs”读成了卢比。在 Windows 上,评分脚本用错编码读需求,把 ₹ 符号弄乱了,预算分数从 22 掉到 16,查了一阵才找到原因。Gemma 最初的回复根本解析不成 JSON,有一段时间每份需求都悄悄走了离线规则,作者没察觉。后来重写解析器,取回复中最大的合法 JSON 对象,评测现在会打印实际是哪个后端在服务。
还有一次,他发了一张截图,里面带着自己的 API 密钥。密钥已吊销。
安全方面也花了一个晚上:带 nonce 的 CSP、按会话和按 IP 的限流、编辑和雇佣操作的所有权校验。共 24 个 Django 测试,另有 7 个针对规则的测试。
开源在这里改变了什么
作者没有拿闭源模型和 Gemma 对比,所以不会声称它更好。他只说开源对这个项目意味着什么。
这个设计不需要前沿模型。因为数字由代码决定,模型只需要读懂一条杂乱请求、写出一份简短需求,中等规模的开源模型够用。这让模型变得可替换——改一下 GEMMA_MODEL 就能换。
钱很紧。一单是 ₹600。眼下免费 API 密钥让一份需求的成本为零,而开放权重意味着免费额度变了也不会被卡住,他可以在自己的硬件上跑同样的提示词。
隐私是他最在意、也完成度最低的部分。这些消息里经常带电话号码。目前文本会发到谷歌的 API,也就是离开他的服务器。用开放权重,店主的消息不必落进某家闭源厂商的系统里。Gemma 的调用集中在一个函数里,把它指向本机模型意味着重写那个函数,而不是提示词。这部分他还没做。
项目以 MIT 协议开源,状态是已部署的可运行原型。截图和第一位真实用户,都在下一步。
热门跟贴