普通视图
速卖通AliExpress智能插座品类增长超过50%
海关总署:2025年我国跨境电商进出口2.75万亿元,比2020年增长69.7%
海关总署:我国将连续17年成为全球第二大进口市场
20余天近40亿元,封关后平均每天有2.4万人在海南免税购物
融资丨红杉中国、星航资本领投OMOWAY Pre-A轮融资
近日,智能科技品牌OMOWAY宣布连续完成Pre-A和Pre-A+轮融资,金额达数千万美元,分别由红杉中国与星航资本领投,所有机构股东真格基金、惠友资本以及创始人何涛继续跟投。本轮资金将主要用于核心产品的量产交付、关键智能技术研发以及全球市场布局。
从技术概念到规模化产品在两轮出行赛道整体趋于成熟的背景下,资本仍选择在此阶段加码OMOWAY,核心在于其已率先完成关键技术“自平衡功能”的量产验证。随着首款旗舰产品OMO X完成产前验证并进入市场交付准备阶段,OMOWAY或将成为全球首个自平衡智能电摩量产交付的品牌。
摩托车自平衡并非新概念,受限于系统复杂度、长期稳定性与成本等因素,该技术一直以来多停留在展示级原型阶段,难以真正进入规模化量产交付。
OMOWAY的突破并不在于自平衡技术的实现,而在于完成了从技术概念到商品的转化——自平衡功能车辆能在复杂的真实道路场景下长期、稳定地运行,并以可接受的成本进入用户的日常通勤。依靠自研可持续运行、成本可控的自平衡系统,OMOWAY首款产品OMO X实现了在低速巡航、拥堵启停等高频场景中“渐进式、无感知”地智能介入,驾驶者无需频繁落脚也能保持车辆稳定,这将有效解决长期存在摩托车用户的痛点。
新物种?两轮车也可能是“MotoRobot”OMOWAY强调,智能化并非增加使用难度,而是通过系统级设计提升低速稳定性和通勤安全感,实现技术的日常可用性。基于团队在汽车电气化与智能化领域十余年的技术积累,OMOWAY将“主动智能”引入两轮出行,使车辆具备环境感知、风险判断与执行能力。
OMO X从两轮交通工具变为具备自主判断力的智能体(MotoRobot)。在复杂驾驶场景下,系统可识别潜在风险并向骑行者发出避险提示,必要时介入制动;车辆出现异常位移时会自动触发安全预警;在坡道驻车等低速场景下,自平衡系统持续工作以稳定车身。通过将智能系统嵌入车辆安全与控制层,OMOWAY试图重新定义智能电摩的价值边界,使智能成为参与每一次骑行决策的核心能力。
面向全球:东南亚首发,老牌代理商助推OMO X计划在印尼先行开售。一个月前,OMOWAY已与当地十多家摩托车代理商完成签约。这些合作商大多深耕当地市场数十年,已建立起稳定的用户基础与成熟的渠道网络,为新技术产品在当地市场的落地与验证提供了现实条件。
东南亚摩托车市场被业内估算具备千亿级潜力,作为全球摩托车保有量最高的市场之一,东南亚用户对车辆在复杂路况、高频通勤与耐用性方面有着更高要求。本地成熟代理商的加入,被视为OMOWAY加速市场验证的重要一步。OMOWAY印尼市场负责人陈碧峰表示,“当地老牌经销商最了解市场需要什么。”
长远来看,OMOWAY在成立之初即将全球市场作为产品定义的重要前提,围绕不同国家地区的道路环境对产品进行系统化设计。选择在摩托车使用强度和环境复杂度极高的东南亚市场率先落地,也被视为其主动接受真实市场检验、验证规模化路径的重要一步。
查看更多项目信息,请前往「睿兽分析」。
现货白银史上首次站上90美元/盎司关口
沪深两市成交额突破2万亿元
前小鹏高管创业,给美国家庭造了台户外陪伴机器人
文|邱晓芬
编辑|苏建勋
CES 2026上,一家中国机器人公司的展台外挤满了人。大家围观的,不是CES上司空见惯的人形机器人或四足狗,而是一台双轮足、身躯四四方方、带有显示屏的机器人——只有15公斤重,40厘米高。
它在草皮上时不时抱着皮球行进,稳稳穿越不同状态的地面。看到有观众拍摄它时, 它会停下来与人互动,左右轻轻摇晃,并在屏幕上切换不同表情。仔细看,它上方还加装了全景相机,实时记录下被围观的画面。
这台机器Rovar X3人出自「深庭纪」,主打户外陪伴。
目前,这台机器人尚未正式发售,但「深庭纪」的创始人王弢告诉《智能涌现》,未来的价格会低于5000美金,“可能会击穿很多美国人对机器人品类的价格预期”。
![]()
△Rovar X3能踢球还能当摄影支架
这种全新的机器人构型,背后的设计者同样大胆——「深庭纪」的创始人王弢,享受一切不确定性。
这种偏好,体现在他过去每一项关键的职业生涯抉择中。2015年,在斯坦福攻读深度学习和视觉感知博士的他,和导师吴恩达联合创办了专攻L4的自动驾驶公司Drive AI。
在自动驾驶沉浮的岁月里,这一公司最终迎来一个不错的归宿——2019年,这家200人的硅谷明星公司被苹果“招聘式收购”,吸纳进苹果的造车项目“泰坦”。
但王弢没有像其他人一般加入苹果。“不是苹果不好,是我能看到十年后我在哪个位置,对于这种未来,我很抗拒”,王弢直言。
最后,他选择加入了小鹏。在时任自动驾驶副总裁吴新宙麾下,王弢用三年时间,从0到1搭建了小鹏汽车的视觉感知团队。
不管是2015年进入自动驾驶领域,还是2024年离开小鹏投身机器人创业,王弢喜欢在赛道尚未收敛的时候,趟出一条路——不确定性的背后,恰恰藏着“十倍增长”的红利。
![]()
△王弢,图源:受访者提供
享受不确定性的背后,王弢性格的另一面是,务实,关注落地。
在行业大讲人形机器人干活的故事时,王弢选择先从户外切入,并向家庭场景蜿蜒进发。他将他们的户外陪伴机器人Rovar X3,称为最有机会进入家庭的物理AI MVP(最小可行性产品)。
在硅谷生活了16年的王弢告诉我们,这种产品思路,源于他对身边人的观察。
在硅谷,当全世界最聪明的一群人聚集在一起时,最大的困扰是无聊,在当地有“湾区三俗”的说法——这群人在周末基本只做三件事:带孩子户外徒步、去野外摘樱桃、看房子。
寻求户外搭子,是这群硅谷人士的真实需求——在此前,大家的选择只有两个,宠物狗,或者售价高达7.5万美元的波士顿动力四足狗。
为此,王弢为Rovar X3设计了三大主要用途:
首先,它能充当“户外搭子”。其视觉系统通过识别主人的生物特征(人脸、步态、身形),紧紧跟随主人。在相对复杂的户外路面下不仅能灵活避障,还能 驮重物,整个过程不需要经过遥控;
其次,它还可以在帮忙照看小孩,和小孩躲猫猫、帮忙捡球、和人类踢球等等;另外,你还可以把手机和全景相机支在上面,让Rovar X3充当拍摄支架。
![]()
△2026年CES上,Rovar X3和观众打招呼
在机器人领域创业,王弢坦言,比曾经的自动驾驶领域,多了一份“造物”的兴奋感——现在的机器人,已不是冷冰冰的自动化设备,而是有自主性、有生命感的“物理AI”。
只是,现下“造物”的方向,五花八门。陪伴型机器人的产品形态明显尚未收敛。而王弢对于这个品类的很多判断,也和市面上的大多数人不一样。
在Rovar X3的设计逻辑中,相较于“机器人会不会聊天”,他更强调“有没有一起做过事”。让机器人参与到真实世界的行动中,与人协同完成任务,长久地陪伴才会发生。
这种启发,源于「深庭纪」公司的第九号员工——一只小狗。他观察到,在午休时间,员工们会自发把小狗带到草坪上,扔球、奔跑。现实世界里的互动,让人和小狗建立了深刻的情感链接。
![]()
△Rovar X3能捡球
建立链接后,更进一步的思考是:如何让机器人智能体持续变强?
大多数人的选择是,将机器人送进工厂,或者锁定在某一个细分的场景里,让模型进化。
王弢反而认为,这种做法虽然能带来交付,并不利于机器人智能体的提升——以工厂场景为例,特点是高度标准化,容错率低。
这意味着,能帮助模型进化的不确定性因素、信息也随之消失。而参考GPT,却是在复杂多样数据的加持下,才出现涌现时刻。
特斯拉是一个经典案例。马斯克一开始并不是直接去矿山或者封闭园区落地,特斯拉的MVP是直接在高速上跑L2辅助领航。“当时看起来并不是很fancy,但是它最早的使用场景,和最终FSD的场景,都是公共道路。数据的DOMAIN(范围)是比较接近的”。
在王弢看来,户外陪伴场景,正是一个天然更贴近家庭的选项,且两者数据诉求也基本一致。因此,在初步取得用户的信任之后,王弢还希望机器人进一步逐渐走入庭院、家庭,收集用户更多多样化的数据。
而这些数据,也将成为其训练操作模型的专有数据,加深机器人对于世界的理解,逐渐形成“数据飞轮”。
近期,「深庭纪」完成了亿元天使轮融资,由蓝驰创投领投,粒子未来基金跟投。《智能涌现》与王弢聊了聊,关于他鲜少披露的过往、以及他对打造具身智能MVP的理解。
以下是交流实录(略经摘编)
职业选择中,寻找“十倍增长”
《智能涌现》:之前你跟着吴恩达一起创办Drive.ai,这个项目被苹果收购后,你没有加入泰坦那个项目里,反而是加入小鹏。当时做出这种选择的人,多吗?
王弢:我是2009年在斯坦福大学读硕士,做深度学习和视觉感知,后来跟着吴恩达读博士。当时自动驾驶一下子火起来。吴恩达和他的太太、我们几个师兄弟联创一起创办了Drive AI ,做L4 无人驾驶。
我是联创,也是工程与研发总监,负责PNC模块,就是规划与控制模块、系统集成。Drive AI 是2019年被苹果收购。被收购之后没加入苹果的人,说实话不是很多,我当时的选择确实看起来有一点非主流。
《智能涌现》:不加入苹果,你当时怎么判断的?
王弢:第一点,对我来说,真正有吸引力的不是进入一家已经被证明的公司,而是去做一件还没有标准答案的事。苹果代表的是完成度,而我当时更在意的是创造的过程。
第二点,我当时对L4自动驾驶的判断是,这是一个非常长周期,可能很多年都看不到产品的赛道,作为一家创业公司,比较明智的选择还是要去抱一个口袋很深的“金主爸爸”。
在技术上面,L4需要全局地优化,感知、预测、规划、后台数据闭环、算力平台都是强耦合的。
但是苹果作为一家非常典型也很成功的公司,它的组织方块、组织模式是非常模块化的。我当时看到苹果的每个团队成员是把自己输入、输出的接口定义得很清楚,尽量减少耦合,这个很明显是一个硬件公司的做法。
所以我当时的判断是,在苹果做L4,会可能变成一个很难落地的科研项目。但我自己的风格是,希望把东西做出来,落到实地。
《智能涌现》:所以落地这件事情,对于你来说非常重要。
王弢:是的。
![]()
△Rovar X3有不同的表情
《智能涌现》:你刚刚说不希望进入一家已经被市场证明过的公司,为什么后面选择加入小鹏?
王弢:我是吴新宙招进去的。在小鹏的前三年我是从0到1搭建视觉感知团队,负责模型训练、数据采集标注、模型部署、工程化等。其实在小鹏相当于是一次创业的经历。
2023年初,我判断自动驾驶的感知和AI 已经比较收敛了,格局也已经定了。我自己的职业规划经历都是寻找10倍增长,我当时的判断就是,自动驾驶其实已经不是下一个十倍增长了。
《智能涌现》:后来是发生了什么,让你觉得创业的时机真正成熟了?
王弢:2023年,我在鹏行带AI团队。一线的实践当中,我们看到很多这个领域长期存在,但是被低估的很多问题。
比如说,真实世界数据的采集成本、标注成本很高,哪怕到今天还是存在;sim to real有巨大的鸿沟;硬件平台为了追求极致运动性能,存在过度设计的问题。我们当时内部也在非常频繁讨论,走路应该用轮式底盘还是双足?
这些问题会导致系统复杂度指数级上升,拖慢智能化的迭代速度。我就慢慢开始萌生了一个想法:如果我去解决这件问题,我有充足的资源,我会怎么去解决?
这种思考慢慢的指向了一个判断:真正要推动具身智能向前,需要一些全新的产品路径。
创业是一场持续的思考,不是一瞬间的灵感。我推演了一段时间,从鹏行出来是2024年1月,我4月份才成立新公司。我觉得具身肯定是下一个10年、10倍增长的机会。但如果要重新定义一代机器人,机器人应该是有自主性、有生命感、以AI为先的,而不是一个冷冰冰的自动化设备。我当时有一种造物的冲动、兴奋感,
《智能涌现》:推演的三个月,你在做什么?户外这个方向是怎么思考出来的
王弢:机器人我把它分成四个大的板块——移动、操作、智能、导航。
我觉得移动、操作、导航这三块很多可以复用自动驾驶能力。智能这一块,我当时判断它处于比较早的阶段,我当时思考的是,如何让智能体要持续地变强?
我们最终还是希望借鉴特斯拉或者小鹏数据飞轮的方法论。过去的经验是,谁能够把数据飞轮跑起来,谁就能够在具身智能趋势里面成为赢家。
进厂,对智能体训练不是好事
《智能涌现》:关于智能体要怎么去变强,你是怎么推演的?
王弢:第一,需要找到一个MVP,一个真正能够走入终局的场景。拿特斯拉来举例,它一开始并不是去矿山或者封闭园区,它的 MVP 是在车上去跑 L2 辅助领航。
当时这个技术并不是很fancy,只是在高速上做自适应巡航和车道保持。但是它的实际使用的场景,跟最终FSD需要使用的场景,都是公共道路,数据的DOMAIN(范围)是比较接近的。
我的判断就是,如果机器人最终要达到像马斯克说的几亿台甚至十几亿台,那一定是要走入家庭的。
虽然我们不是一开始就走入到家庭,我一定要尽可能贴近家庭,获取家庭用户的信任、获取家庭用户的数据。 第二,我认为机器人使用的场景一定是diverse(多样)的,不是限定几个垂域,不能在垂域里面去采数据。
《智能涌现》:但很多具身智能公司都在疯狂找垂域场景,比如工厂,但是你的MVP是落在家庭和户外。你们怎么看待这种分野?
王弢:我觉得在商业化上,Tob是不错的一个选择。Tob最大的优势是需求很清晰,只要把场景限定好,机器人是有机会做到稳定执行和交付的。
Tob的场景里面,最重要的目标是不出错,为了达成这个目标,产线也会把环境标准化。
这意味着有很多不确定的行为或者因素会在场景里面消失。我觉得这对于智能体的训练来并不是一件好事。GPT是在所有的领域都有数据的情况下才能涌现,不是只在少量的几个垂域训模型。
《智能涌现》:你是怎么发现户外场景有陪伴的需求?
王弢:大家都调侃湾区是高科技大农村,全球最聪明的人聚集一起,但高性价比的放松娱乐活动非常少。工程师、码农们周末最常见的活动就是徒步、摘樱桃还有看房子,我们叫“湾区三俗”。
我自己也是徒步大军中的一员。但走多了你会发现,风景很美、也很无聊。这时候我都在想,如果能有一台自主移动的陪伴机器人随行,它既能承担5公斤的负重,帮忙背包,在露营空地也能陪孩子做游戏,是非常有价值的。
这不是一个完全脱离生活的幻想,而是湾区人们的真实需求,特别是在科技行业的有孩人群。
《智能涌现》:那你们的机器人是怎么从户外场景,一步步进入家庭场景?
王弢:我们虽然是先切入户外的场景,但未来我们一定会走入家庭。
家庭室内的门槛非常高,任何一次失误都会摧毁消费者的互信。户外是一个切入点,它的付费意愿高,试错成本是比较低的。在户外哪怕是土坡上面摔了一下,其实只要自己能站起来,问题就不是很大。
其次,在户外的场景,我们可以复用很多在自动驾驶领域已经相对成熟的方法论。在户外自主移动,是在更加开放的环境中实现自动驾驶系统。在低速场景下和人的交互,又和新能源车舱内的智能座舱智能有一定的相似性。
我和很多土生土长的美国人去聊,美国的主流文化对于最先进的科技,持有一种既好奇又谨慎的态度。比如你看终结者系列,他们对于人形机器人有比较大的疑虑。
我们第一步用Rovar这种双轮足形态,个子也不高,不会像人一样跟你长篇大论的,有比较可爱的表情,更容易切入到家庭中。其次,它的主要使用场景是在户外,用户对它的疑虑也会更小一些,通过这样的一代产品,能够获得用户的信任,未来可以走到室内。
《智能涌现》:那后面的第二步、第三步,具体怎么走?
王弢:关于第二步、第三步,我们现在有很多的选择。一个是在户外做得更加重度、更硬核,我们会做一个客单价更高的产品。
第二就是从户外慢慢走入庭院,再走入家庭内部。我会鼓励用户利用机器人采集到更多的数据,比如用户在后院清理杂草、清理树叶、丢垃圾的数据。
这些数据我都可以鼓励用户去上传,最后变成我们训练操作模型的专有数据。这是用户真正从场景中得到的,和数据采集工厂里的数据不同。
《智能涌现》:这些数据去反哺到模型之后,能让机器人产生什么新的玩法?
王弢:从最简单的说起,比如说用户指某一个方向说,“你帮我把那个罐子拿过来”时,机器人需要先有对于世界的理解。我们希望未来机器人能够理解用户的指令,自己去执行命令。这是可以通过模型学习的。
《智能涌现》:你们未来这两个方向都会去兼顾?
王弢:我觉得在够长的时间维度里,这些都是可以做的选项。具身智能是一个10年的赛道,很多时候需要通过市场反馈来决定下一个发力点。大疆刚刚一开始在做无人机的时候,他也没有想到会变成飞行相机。
陪伴机器人,不应该只聊天
《智能涌现》:你们刚创业的时候是四足,但现在变成了轮足。为什么有这种改变?
王弢:我觉得现在物理AI最优的构型,远远都没有收敛。虽然大家都做人形机器人,但如果仔细去看,构型都是不一样的。
从四足到双轮足的演进,是因为我们产品定义逐渐清晰,才做了一次系统收敛。双轮足的电机数量首先比四足要少一半,系统复杂度的出错概率会低很多。双轮足的运动方式是靠轮毂、电机,运动的能效比足式要高很多。
《智能涌现》:陪伴,最重要的是什么?很多厂商更侧重语言上的陪伴,但你们好像不是这么想。
王弢:人其实也可以跟我们的机器人说话,通过手势或者语音。不过,我们不希望Rovar变成GPT聊天的工具。它可以输出一些简单的词汇来表达自己的情绪,但是他不会长篇大论。
我觉得陪伴,最重要的是和用户形成情感上的连接。这个连接来自于,在某一个场景中和用户一起去完成一些事情,这是最长效、最牢固的。 关于陪伴粘性的思考,启发自我们公司的9号员工,也是一条小狗。我们养了一个宠物,体验一下小狗跟人之间是怎么样建立连接。
我们发现中午午休的时候,我们的员工非常乐意带着小狗去草地上面去玩球,把球丢出去,小狗会把球叼回来。
现实世界里非常简单的事情,但是大家都乐此不疲。我觉得陪伴产品,应该去做一些力所能及的物理连接。
《智能涌现》:你曾说你们的受众可以归纳为“硅谷老男孩”,这群人有什么共性?
王弢:“硅谷老男孩”是一个统称,更加细化的话,其实是几个类别:
一个是企业主和公司高管,他们时间稀缺,愿意为高质量的产品体验付费;
第二个是创意工作者,比如抖音短视频制作者、好莱坞的人,他们对于新形态的产品、审美有很高的敏感度;
第三个就是医生、律师这类高收入专业人士,他们的共性是,不会问机器人是什么,更关心机器人能不能融入生活。他们中一部分人还是保留着探索的乐趣,有对少年感的向往。
我们做过一些审美取向的调研。“硅谷老男孩”们并不喜欢过度的科幻机甲风,产品必须好看,但又克制不浮夸。
《智能涌现》:你们的产品,具体有什么玩法?
王弢:我们有三个最大的使用场景。
一个是户外的陪伴,你在山上走,它像一个小宠物一样在走在前面,有简单的交互,让我感觉到不那么孤独,也可以帮忙背个水、背个相机。
从心理学的角度去分析,人在户外,特别是美国这种地广人稀的地方,心理上需要去寻找安全港湾。这也是为什么很多人会带着宠物狗出去徒步。
第二个场景是小孩陪护,比如躲猫、追逐、嬉戏。现在很多陪伴类的产品侧重对话式陪伴,但是据我的观察,粘性相对比较低。
为什么大家对于把球踢进门里这样一件简单的事情,会有成瘾,我自己踢球那么多年从来没有腻。我觉得这也是物理世界一部分的魅力。
第三个功能是可以加装各种配件,手机或者是全景相机。Rovar有大量想象空间,用户会找到千奇百怪的玩法,我们希望早期有一个发散的过程。
《智能涌现》:如果从技术的层面去拆解,背后都包含了哪些核心技术,有什么比较难的地方?
王弢:这背后的技术挑战是,如何让机器人做好社交导航,比如在步道上面能够进行避障,美国很多步道都不是铺装路面,而是泥土路或者沙石路。
其次,机器人在户外要能够持续识别到主人,不会被干扰,这首先考验我们的视觉能力。我们用了一个纯视觉的解决方案,没有去使用激光雷达,机器人通过深度特征去感知人类,比如人脸的特征、步态、身形。
在户外场景里,续航、重量、地形通过性其实是一个不可能三角,考验着我们做取舍和平衡的能力。
《智能涌现》:你们提出的端侧 “慢脑 + 快脑”AI架构,但是市面上大家用的是“大脑+小脑”。两者有什么差异?
王弢:“大脑+小脑”架构中,大脑负责思考、小脑负责运动控制。但我认为这种划分方式并不十分全面。
现实情况下,有许多思考过程需要极快的处理速度,大脑的运行速度相对较慢,仅依赖大脑无法完成某些任务。同理,一些运动控制类操作,也并非单纯由小脑就能实现。
所以,我们所提出端侧的“慢脑+快脑”架构——“慢脑”负责把事情想清楚,而“快脑”则负责快速反应。
具体而言,“慢脑”处理那些无需毫秒级或亚秒级反应,但需要深入理解的事务。例如,自动识别当前所处环境是公园、家庭庭院、室内还是公共道路;识别用户及其偏好,如记住小孩和家长的长相。
“快脑”则进行实时响应。比如,当听到用户喊“你快回来”时,立刻停止当前任务并原路返回;当与机器人进行踢球时,在每次与球触碰后,机器人迅速判断下一步与球的接触方式。
快脑与慢脑,二者并行运行、产生交互数据。慢脑会提前向快脑传达大致的任务信息,快脑则在此基础上,负责向控制规划模块传达如何执行当前任务。
《智能涌现》:陪伴机器人这个赛道有同质化的趋势,你觉得这个领域核心的竞争力是什么?
王弢:陪伴这个赛道,产品形态是没有收敛的。我觉得最核心的能力是持续的用户洞察,和领先竞品一代的技术认知。这两个可能听起来稍微抽象,但是要做创新品类,这两点是最重要的。
《智能涌现》:要保持和竞品有一代的差距,行动上要怎么体现?
王弢:我觉得公司除了找PMF(产品和市场匹配度)之外,还需要找到PTF(团队和产品的匹配度)。我们团队在美国生活了很多年,在文化、场景的理解上,天生是有一些优势的,能够站在用户角度去思考产品的功能。
我更多的是从算法研发的角度,在现有的算法中,寻找高潜力的、还没有被使用到产品上的新技术,做出人无我有的体验。
比如说踢球,市面上没有任何一个机器人可以在草地上,像一条小狗一样跟你玩球。
《智能涌现》:这两年陪伴型的机器人密集爆发,背后有什么因素推动?
王弢:更多的就是物理 AI 概念的带动。之前大家说 AI 更多的是GPT,能够跟你对话、帮你解题,停留在虚拟世界当中。但是这一波首先是自动驾驶的AI能力有溢出,自动驾驶是一个物理AI非常初级的形态。
第二是硬件成本持续下降到有望走入家庭了。以前说到北美机器狗,大家想到的都是Boston Dynamics(波士顿动力),售价7.5万美元。
但是我们的产品能做到5000美金以下,会击穿很多美国人对机器人品类的价格预期。
《智能涌现》:陪伴机器人可能在什么时候达成你预期的“十倍增长”?
王弢:在我们的规划当中,26年、27年是我们探索MVP 的阶段,在鸿沟的左侧,去找早期的种子用户,持续寻找killer APP。
未来确切的时间点,我可能没办法很好去判断。你看马斯克在2012年说,还有两年就能实现全自动驾驶,最后证明他的时间判断基本上都是错的。
我自己的方法论就是,不会刻意从时间上面去做判断,但是我会关注实际技术的进展。
如果某一天具身智能的操作领域,大家都用同一个Benchmark(标准),那我判断“Alex moment”到来的时间,可能不会大于两年了。用自动驾驶来比喻的话,现在是在自动驾驶2012、2013年的阶段。
《智能涌现》:你觉得陪伴型机器人的PMF已经找到了吗?
王弢:我觉得初步是找到了,但是如果真的要形成爆款,我觉得可能还需要一定时间的用户洞察。我们在美国其实做了很多用户调研,初步找到一波种子用户。
但是种子用户和大众用户之间的鸿沟怎么跨过去,如何寻找到更精准的PMF,对于新品类来说是比较挑战的。
但是一旦这个鸿沟跨过去,作为新品类的定义者,也能收获到巨大的红利。
封面来源|受访者提供
![]()
end
![]()
end
阿里千问月活突破1亿
TinyPro v1.4 空降:Spring Boot 集成,后端兄弟也能愉快写前端!
本文由体验技术团队Kagol原创。
TinyPro 是一个基于 TinyVue 打造的前后端分离的后台管理系统,支持在线配置菜单、路由、国际化,支持页签模式、多级菜单,支持丰富的模板类型,支持多种构建工具,功能强大、开箱即用!
- 源码:github.com/opentiny/ti…(欢迎 Star ⭐)
- 官网:opentiny.design/vue-pro
我们很高兴地宣布,2026年1月10日,TinyPro 正式发布 v1.4.0 版本,本次发布集中在扩展后端模板、增强移动端体验以及对 NestJS 后端功能的实用增强。
本次 v1.4.0 版本主要有以下重大变更:
- 增加 Spring Boot 后端
- 增强移动端适配
- 增加卡片列表和高级表单页面
- 支持多设备登录
- 支持配置预览模式
你可以更新 <span leaf="">@opentiny/tiny-toolkit-pro@1.4.0</span> 进行体验!
tiny install @opentiny/tiny-toolkit-pro@1.4.0
详细的 Release Notes 请参考:github.com/opentiny/ti…
1 支持 Spring Boot 后端
之前只有 NestJS 后端,有不少开发者提出需要 Java 版本后端,大家的需求必须安排,所以本次版本新增对 Spring Boot 的支持,使得偏 Java / Spring 的团队可以更快速地用熟悉的后端框架搭建 TinyPro 全栈样板。
该支持包括 Docker 化示例、配置覆盖示例(application.yaml 覆写示例)以及针对 deploy 的说明,便于在容器化环境中直接部署或做二次开发。
如果你或团队偏向 Java 技术栈,这次更新显著降低了启动成本与集成难度。
详细使用指南请参考文档:Spring Boot 后端开发指南
2 移动端响应式与布局优化
本次引入移动端适配方案,包含布局调整、样式优化和若干移动交互逻辑改进。配套增加了端到端测试(E2E),保证常见移动场景(小屏导航、侧边栏收起、页签/页面切换)行为稳定。
适配覆盖了常见断点,页面在手机端的易用性和可读性有明显提升,适合需要同时兼顾桌面与移动管理后台的项目。
效果如下:
![]()
详细介绍请参考文档:TinyPro 响应式适配指南
3 增加卡片列表页面
之前列表页仅提供单一的查询表格形式,功能相对有限,难以满足日益多样化、复杂化的业务需求。为了提升用户体验、增强系统的灵活性,我们在原有基础上新增了一个卡片列表页面,以更直观、灵活的方式展示数据,满足不同场景下的使用需求。
体验地址:opentiny.design/vue-pro/pag…
效果如下:
![]()
4 增加高级表单页面
表单页增加了高级表单,在普通表单基础上增加了表格整行输入功能。
体验地址:opentiny.design/vue-pro/pag…
效果如下:
![]()
5 支持多设备登录
之前只能同时一个设备登录,后面登录的用户会“挤”掉前面登录的用户,本次版本为账号登录引入设备限制(Device Limit)策略,可限制单账号并发活跃设备数,有助于减少滥用和提高安全性,适配企业安全合规需求。
可通过 <span leaf="">nestJs/.env</span> 中的 <span leaf="">DEVICE_LIMIT</span> 进行配置。
比如配置最多 2 人登录:
DEVICE_LIMIT=2
如果不想限制登录设备数,可以设置为 -1:
DEVICE_LIMIT=-1
6 演示模式
由于配置了 RejectRequestGuard,默认情况下,所有接口都只能读,不能写,本次版本增加了演示模式(PREVIEW_MODE),要修改 NestJS 后端代码才能改成可写的模式(<span leaf="">nestJs/src/app.module.ts</span>)。
本次版本增加了演示模式的配置,可通过 <span leaf="">nestJs/.env</span> 中的 <span leaf="">PREVIEW_MODE</span> 进行配置。
<span leaf="">PREVIEW_MODE</span> 默认为 true, 会拒绝所有的增加、修改、删除操作,设置为 false,则变成可写模式。
PREVIEW_MODE=false
7 Redis 引入应用安装锁(redis app install lock)
主要用于避免重复安装或初始化时的竞态问题。
默认情况下,第一次运行 NestJS 后端,会生成 Redis 锁,后续重新运行 NestJS 后端,不会再更新 MySQL 数据库的数据。
如果你修改了默认的菜单配置(<span leaf="">nestJs/src/menu/init/menuData.ts</span>)或者国际化词条(<span leaf="">nestJs/locales.json</span>),希望重新初始化数据库,可以在开发机器 Redis 中运行 <span leaf="">FLUSHDB</span> 进行解锁,这样重新运行 NestJS 后端时,会重新初始化 MySQL 数据库的数据。
更多更新,请参考 Release Notes:github.com/opentiny/ti…
8 社区贡献
感谢所有为 v1.4.0 做出贡献的开发者!你们的辛勤付出让 TinyPro 变得更好!
- GaoNeng-wWw
- zhaoxiaofeng876
- WangWant7
- zzl12222
- discreted66
注:排名不分先后,按名字首字母排序。
如果你有任何建议或反馈,欢迎通过 GitHub Issues 与我们联系,也欢迎你一起参与 TinyPro 贡献。
往期推荐文章
- 🎉TinyPro v1.2.0 正式发布,趁着 TinyPro 项目刚创建不久,快来参与贡献吧!
- TinyPro 后台管理系统从启动 ➡️ 使用 ➡️ 二开,看这一篇就够了!点赞、收藏⭐,不迷路!
- 💥TinyPro Vue v1.1.0 正式发布:增加细粒度权限管理、页签模式、多级菜单,支持 Webpack/Vite/Rspack/Farm 多种构建工具
关于OpenTiny
欢迎加入 OpenTiny 开源社区。添加微信小助手:opentiny-official 一起参与交流前端技术~
OpenTiny 官网:opentiny.design
OpenTiny 代码仓库:github.com/opentiny
TinyVue 源码:github.com/opentiny/ti…
TinyEngine 源码: github.com/opentiny/ti…
欢迎进入代码仓库 Star🌟TinyEngine、TinyVue、TinyNG、TinyCLI、TinyEditor~ 如果你也想要共建,可以进入代码仓库,找到 good first issue标签,一起参与开源贡献~
当代码照进生活:一个程序员眼中的欲望陷阱
写代码写了这么多年,我一直觉得编程和生活是两个完全不相干的世界。直到最近读了《模仿欲望》这篇文章,我才恍然大悟:原来我的生活,早就被写进了别人的代码里。
vx公众号:TSing_addiction
01. 我们都在implements一个看不见的接口
做TypeScript开发的人都知道,interface是定义一个对象"应该长什么样"的蓝图。我们常常这样写:
interface IdealLife {
fancyCar: boolean;
luxuryWatch: boolean;
weekendTravel: boolean;
perfectSkin: boolean;
}
然后我们拼命让自己去"实现"这个接口,买各种东西,去各种地方打卡,仿佛不这样就不是个"合格的对象"。
上周我刷小红书,看到一个和我同龄的博主展示他的"程序员精致生活":苹果全家桶、最新款机械键盘、咖啡店远程工作照。我的第一反应不是"这很酷",而是"我怎么没有这些"。那一刻,我突然意识到:我正在试图implements一个从未明确定义、却无处不在的社会接口。
最可怕的是,这个接口不是写在代码里的,而是通过算法悄悄注入到我们脑海中的。就像TypeScript的类型推断,我们甚至没有意识到自己正在被定义。
02. 闭包里的无限循环
在编程中,闭包是指函数记住并访问它的词法作用域,即使这个函数在其作用域外执行。这听起来很技术,但其实我们每天都在经历:
那天晚上,我本来只想刷5分钟抖音,结果两小时后才放下手机。算法给我推荐了第一个露营视频,我点了赞;然后是第二个、第三个...每一个互动都被记住,用来决定下一个推荐什么。我就这样被困在一个闭包里,不断循环,无法跳出。
就像这段代码:
let timeSpent = 0;
function scrollFeed() {
timeSpent += 15; // 每次刷15分钟
if (timeSpent < 120) { // 两小时后才意识到
scrollFeed();
} else {
console.log("天啊,已经凌晨1点了!");
}
}
我们的注意力就这样被算法捕获,形成一个完美的闭包,而我们甚至不知道自己被困住了。
03. "精致穷"就像危险的类型断言
做前端开发的都知道,TypeScript中有一种操作叫类型断言——你告诉编译器:"相信我,这个变量就是这个类型"。有时候这很危险,特别是当你断言一个不可能的类型时。
// 明知工资不高,却断言自己能过上博主的生活
const myWallet = { balance: 5000 } as LuxuryLifestyleWallet;
在编译阶段(发朋友圈时),一切看起来完美无缺。但到了运行时(月底交房租时),就会抛出一个残酷的错误:Uncaught BalanceError: Insufficient funds for projected lifestyle。
我有个朋友就是这样。他月薪1万,却买了3万的相机,理由是"博主都用这个"。结果是接下来三个月天天吃泡面。这不就是把BudgetReality强行断言为InfluencerBudget的后果吗?
04. 职场内卷:递归函数没有退出条件
在编程中,递归是很强大的工具,但必须有明确的退出条件,否则会导致栈溢出。现在想想,职场内卷不就是这样一个没有退出条件的递归函数吗?
function workHarder(colleagues) {
// 看到同事加班
const maxOvertime = colleagues.reduce((max, c) =>
Math.max(max, c.overtimeHours), 0);
// 于是你也加更长时间的班
myOvertimeHours = maxOvertime + 1;
// 但没有人问:为什么要加班?
return workHarder(updatedColleaguesList);
// 没有退出条件,直到精神崩溃
}
我们团队就有这样的情况。一开始只有一两个人晚走,渐渐地,七点下班变成了常态,然后是八点、九点...没有人明确要求这样,但就像递归函数没有base case,我们陷入了无限循环。
最讽刺的是,项目进度并没有因此加快多少。就像算法复杂度,我们的努力是O(n²),但产出只是O(n)。这种内卷,本质上就是一段写得很烂的代码。
05. 重写人生代码
意识到这些问题后,我开始尝试"重构"自己的生活代码。这不是件容易事,就像重构一个老旧的系统,处处都是隐患。
首先是依赖注入的问题。以前我的消费决策严重依赖外部注入:小红书推荐、博主种草、同事攀比。现在我尝试这样写:
class MyLife {
private coreValues = ['growth', 'health', 'authenticity'];
decidePurchase(item: any): boolean {
// 不再依赖外部注入
return this.coreValues.includes(item.value) &&
this.budget.allows(item.price);
}
}
其次是打破那个闭包。我给自己装了个屏幕时间管理app,设置每天刷短视频不超过30分钟。第一次看到自己一天刷了4小时短视频时,我惊呆了。这就像在调试时突然看到一个函数被调用了几百次——你必须找出为什么循环停不下来。
还有很重要的一点:接受自己不是泛型。TypeScript中有泛型,可以适配各种类型。但生活不是代码,我们不必成为"通用模板"。我开始允许自己:
- 用便宜的键盘写代码(只要它好用)
- 周末在家休息而不是去网红地点打卡
- 穿舒适的衣服而不是"程序员该穿"的潮牌
06. 从any到明确类型
TypeScript最强大的功能之一,就是将JavaScript的"any"世界变成明确类型的系统。我们的人生也需要这样的转变——从"别人怎么做我也怎么做"(any)到"这是我真正想要的"(明确类型)。
以前,我的消费决定就像这样:
// 以前的我
let wantToBuy: any = trendingOnXiaohongshu;
现在,我尝试这样:
// 现在的我
let wantToBuy: unknown = trendingOnXiaohongshu;
function isRealNeed(item: unknown): item is GenuineNeed {
return (
typeof item === 'object' &&
'solvesMyActualProblem' in item &&
item.solvesMyActualProblem
);
}
if (isRealNeed(wantToBuy)) {
buy(wantToBuy);
} else {
ignore(wantToBuy);
}
这种转变并不容易。有时候看到同事换了新手机,我还是会心动;刷到精致生活的内容,依然会感到焦虑。但至少现在,我有了一个"类型守卫"来检查这些欲望是否真实。
最后
作为一个程序员,我习惯了相信代码是理性的、有逻辑的。但我没想到,我们的欲望和行为,也早已被写入了某种看不见的代码中。
这篇文章不是要批判所有消费或所有社交媒体的使用。就像代码本身没有好坏,关键是谁在控制它,以及它服务于什么目的。
当我开始用程序员的眼睛观察生活,我发现自己不再那么容易被算法操控。当我看到小红书推送"必买清单",我会想:"这是callback hell,我不能陷入这个异步循环。"当同事炫耀新买的奢侈品,我会提醒自己:"不要进行不安全的类型断言。"
或许,理解这些"代码"就是夺回控制权的第一步。就像我们重构一段混乱的代码,生活也可以被重构成更真实、更符合自己核心价值观的样子。
下次当你想买一个东西、做一个重要决定,或者感到莫名焦虑时,不妨问自己:这真的是我的需求,还是我在implements别人的接口?我的人生代码,到底是谁在编写?
写完这篇文章,我要去关掉手机通知,好好享受一个没有算法干扰的周末。毕竟,最好的代码,是能服务于人,而不是让人服务于它的代码。
苹果Siri新功能或于春季及WWDC期间推出,将不包含谷歌标识
谷歌宣布推出开源医疗模型MedGemma 1.5
海关总署:2025年锂电池、风力发电机组出口分别增长26.2%、48.7%
金饰克价涨至1438元
看板必备的丝滑、高端技巧 — 数字滚动
但行好事,莫问前程
前言
最近需要开发看板功能,涉及到给用户展示一些 number 数据的场景。
作为看板页面,我们要 避免突兀的数值变化,让数字的变化更加自然、更有视觉吸引力,提升用户体验。
最后我采用了 数字滚动 动效,并封装为 hooks 方便复用。
效果如下,其中有不少有趣的设计思路值得复盘。
![]()
预览:我的后台 -> Editor
源文件:github.com/XIwE1/react…
<NumberScroll value={numberValue} options={{ decimals: 0 }} className="justify-center self-center" />
![]()
文中已附上源代码和思路,如果对你有所帮助,还望点赞、收藏、关注三连😽。
方案
整理一下思路,如果要实现 0 -> 100 或者 100 -> 0,会想到什么方法?
- 最简单的是直接更新对应 state,但这样一闪而过十分突兀
- 其次是步进,即
value / time = step,例如step = 10,0 -> 10 -> 20 ... -> 100- 这样不错,但这种线性的变化还是略显生硬
- 最后我们可以利用缓动函数来控制过程
0 -> ... -> 50 -> 70 -> 80 -> 85 -> ... -> 98 -> 99 -> 100
实现:
- 迅速完成大部分数值变化,视觉上快速地接近最终值 +
- 剩余小部分差值平滑变化,平稳、自然减速并抵达终点
变量分为:更新频率 和 更新步幅(数值)
原理是结合变量与场景,使用缓动函数(贝塞尔曲线数学公式)。
程序逻辑:
例:
初始值: 0 → 目标值: 1000,
duration = 3500ms,1 / 3 = 1167ms 时间用于快速的线性变化,剩下时间用于平滑滚动
线性阈值 = 1000 * 2 / 3 = 666.67,滑动值 = 1000 / 3 = 333.33
│
├─ determine(): 在不同节点,判断需要变化的数值A和线性阈值B,设置新的数值变化目标C
│ ├─ 第一阶段:剩余变化量A 1000 > 阈值B 666.67(大数值线性变化),0 → 目标C 666.67(线性,3500 / 3 = 1167ms)
│ └─ 第二阶段:剩余变化量A 333.33 < 阈值B 666.67(小数值平滑滚动),666.67 → 目标C 1000(缓动,3500 - 1167 = 2333ms)
│
└─ count() 循环执行:循环改变计数值
├─ 第一阶段:
│ ├─ 线性变化
│ ├─ 目标数值 = 666.67
│ ├─ 当前数值 = 0 -> 666.67
│ ├─ 耗时 = 3500 / 3 = 1167ms
│ └─ 动画结束,调用 determine() 重新计算
│
└─ 第二阶段:
│ ├─ 平滑滚动
│ ├─ ...类上
└─ 动画结束,currentValue = 1000
还有很多场景要考虑,数值为负数,减操作,数字被减为0...
缓动函数
简单来说,是 “通过数学公式来 控制 变化的进度 或者 运动的轨迹”。
它使数据和动画摆脱生硬、呆板的线性变化,它让事物的变化 更加符合视觉常识。
详情可见 贝塞尔曲线:实现更好的动画效果和图形
![]()
// utils/index.ts
// 生成对应三次贝塞尔曲线的js代码
export function createBezierFunction(p1x: number, p1y: number, p2x: number, p2y: number) {
return function (t: number) {
return 3 * Math.pow(1 - t, 2) * t * p1y + 3 * (1 - t) * Math.pow(t, 2) * p2y + Math.pow(t, 3);
};
}
实践
我们封装成hooks来重复使用
/src/hooks/useNumberDuration.ts
import { useEffect, useRef, useState, useMemo, useCallback } from "react";
// 缓动函数
const easeOutExpo = (t: number) => (t === 1 ? 1 : 1 - Math.pow(2, -10 * t));
const linear = (t: number) => t;
export interface UseNumberDurationProps {
value: number;
duration?: number;
decimals?: number;
split?: string;
}
const useNumberScroll = ({
value,
duration = 5500,
decimals = 2,
split = ",",
}: UseNumberDurationProps) => {
const rafRef = useRef<number>();
const currentRef = useRef<number>(0);
const durationRef = useRef<number>(duration);
const startTime = useRef<number>();
const startValue = useRef<number>(0);
/** 线性变化的值 */
const EasingThreshold = useMemo(() => {
const diff = value - startValue.current;
const threshold = (Math.abs(diff) * 2) / 3;
return startValue.current + (diff > 0 ? threshold : -threshold);
}, [value]);
/** 滑动变化的值 */
const EasingAmount = useMemo(() => {
const amount = value - EasingThreshold;
return amount;
}, [value, EasingThreshold]);
// 当前的实际值
const [currentValue, setCurrentValue] = useState(0);
// 格式化后用于展示的值
const _current = useMemo(
() =>
currentValue.toFixed(decimals).replace(/\B(?=(\d{3})+(?!\d))/g, split),
[currentValue, decimals, split]
);
// 当前目标的结束值
const endValue = useRef<number>(value);
// 最终值
const finalValue = useRef<number | null>(null);
const result = useMemo(
() => value.toFixed(decimals).replace(/\B(?=(\d{3})+(?!\d))/g, split),
[value, decimals, split]
);
// determine - 判断变化采用线性还是缓动,设置最终值final和当前目标结束值end
const determine = useCallback(() => {
const end =
finalValue.current !== null ? finalValue.current : endValue.current;
const animateAmount = Math.abs(end - startValue.current);
if (animateAmount > Math.abs(EasingThreshold)) {
finalValue.current = end;
endValue.current = end - EasingAmount;
// 拿出小部分时间用于线性变化
durationRef.current = duration / 3;
} else {
finalValue.current = null;
endValue.current = end;
durationRef.current = duration; // 这样动画滑动更明显一点
// durationRef.current = (duration * 2) / 3;
}
}, [duration, EasingThreshold, EasingAmount]);
const count = useCallback(
(timestamp: number) => {
if (!startTime.current) startTime.current = timestamp;
// 根据时间差计算当前进度
const elapsed = timestamp - startTime.current;
const progress = Math.min(elapsed / durationRef.current, 1);
const eased =
finalValue.current !== null ? linear(progress) : easeOutExpo(progress);
const currentValue =
startValue.current + (endValue.current - startValue.current) * eased;
currentRef.current = currentValue;
setCurrentValue(currentValue);
if (progress < 1) {
rafRef.current = requestAnimationFrame(count);
} else {
startValue.current = currentValue;
// 最终值不为空 = 还未到最终值 = 剩下的值要平滑增加
if (finalValue.current !== null) {
cancelAnimationFrame(rafRef.current!);
startTime.current = undefined;
endValue.current = finalValue.current;
finalValue.current = null;
determine();
rafRef.current = requestAnimationFrame(count);
}
}
},
[determine]
);
useEffect(() => {
if (rafRef.current) cancelAnimationFrame(rafRef.current);
// 变化时重置状态
endValue.current = value;
finalValue.current = null;
durationRef.current = duration;
startValue.current = currentRef.current;
startTime.current = undefined;
// 判断当前的变化方式,并开始动画循环
determine();
rafRef.current = requestAnimationFrame(count);
return () => {
if (rafRef.current) cancelAnimationFrame(rafRef.current);
startTime.current = undefined;
};
}, [value, duration]);
return { current: _current, result };
};
export default useNumberScroll;
数字滚动
上述的hooks已经实现数字增长的效果了,但还有样式上的问题需要解决,
- 数据变化的过程中,元素占宽也在不断变化
- 非等宽字体的数字占宽不同
以上因素会导致 数据抖动
我采用的解决方案:
- if 可以使用等宽字体
- 预先使用
result渲染真实元素获取所占宽度estimateWidth
- 预先使用
- else
-
result内的数字替换为占宽最大数字来渲染预估值
-
最后我们封装一个ui组件进行复用
/src/ui/NumberScroll/index.tsx
import React, { useRef, useLayoutEffect, useState } from "react";
import useNumberScroll, { UseNumberDurationProps } from "../hooks/useNumberScroll";
interface NumberScrollProps {
value: number;
options?: Omit<UseNumberDurationProps, 'value'>;
className?: string;
suffix?: string;
style?: React.CSSProperties;
}
const NumberScroll: React.FC<NumberScrollProps> = ({
value,
options,
suffix = "",
className,
style,
}) => {
const { current, result } = useNumberScroll({
value,
...options
});
const measureRef = useRef<HTMLSpanElement>(null);
const [fixedWidth, setFixedWidth] = useState<number | undefined>(undefined);
useLayoutEffect(() => {
if (measureRef.current) {
const { width } = measureRef.current.getBoundingClientRect();
setFixedWidth(width);
}
}, [result]);
return (
<>
{/* estimate width */}
<span
className={className}
ref={measureRef}
style={{
position: "absolute",
visibility: "hidden",
height: "auto",
width: "auto",
whiteSpace: "nowrap",
...style,
}}
>
{result}
{suffix}
</span>
<span
className={className}
style={{
display: "inline-block",
width: fixedWidth,
...style,
}}
>
{current}
{suffix}
</span>
</>
);
};
export default NumberScroll;
总结
我们可以看出数字滚动动画的核心:
1. 分阶段策略
- 大数值快速线性变化:使用 1/3 的时间快速完成 2/3 的数值变化
- 小数值平滑缓动:使用 2/3 的时间平滑完成剩余的 1/3 变化
- 关键参数:线性阈值(2/3)、滑动值(1/3)、时间分配(1/3 vs 2/3)
2. 缓动函数选择
-
第一阶段:使用
linear线性函数,快速接近目标 -
第二阶段:使用
easeOutExpo指数缓出函数,自然减速到达
3. 样式优化
- 固定宽度:避免动画过程中的布局抖动
- 等宽字体优先:如果可以使用等宽字体,直接测量最终宽度
- 预估宽度:非等宽字体时,用最宽数字预估宽度
4. 封装复用
-
逻辑层:使用
hooks处理动画逻辑,返回当前值和最终值 - UI 层:使用组件处理样式和布局,确保视觉稳定
结语
不要光看不实践哦,希望本文能对你有所帮助。
持续更新前端知识,脚踏实地不水文,真的不关注一下吗~
写作不易,如果有收获还望 点赞+收藏 🌹
才疏学浅,如有问题或建议还望指教~
海关总署回应中美经贸走势:中美经贸关系应成为中美关系的压舱石和推进器
反诈的360在印度被「诈」
作者 | 王汉博
编辑 | 张帆
2025年底,奇富科技拿奖拿到手软。
12月,奇富科技凭借反诈技术获工信部通报表扬,自主研发的AI合规智能体入选“金信通”典型案例;1月,联合高校发布首个信贷多模态评测基准,AI合规智能体又在中国互联网协会主办的赛事上连获三奖,同时,公司团队还在2025黑灰产检测技能大赛上斩获一组别“团队金奖”。
这家起初由360集团内部孵化、前身为360数科的金融科技公司,在技术研发与强势能力上,也带着鲜明的“反诈”标签。
与此同时,自2025年下半年起,港股市场上的奇富科技却走出了一条陡峭的下行曲线——股价从年中高点一路滑落,累计跌超57%。
![]()
奇富科技港股股价走势 图源:Wind
股价与技术认可的背离,折射出资本市场的深层疑虑。
当蚂蚁集团清仓印度信贷股权、小米“Mi Credit”停止放贷的消息接连传出,市场终于清晰地意识到:那场始于2019年的中资网贷印度淘金潮,似乎正以全行业溃败中止。
作为当年的出海先锋之一,奇富科技在印度市场或也难免“被坑”的宿命。而由此可能产生的坏账风险也正成为左右其估值逻辑的关键变量。
网贷印度淘金:从蓝海诱惑到坏账泥潭
2019年前后,国内网贷监管收紧与印度市场的“完美数据”形成强烈引力场。
彼时印度14亿人口中,银行金融覆盖率不足50%,信用卡渗透率仅4%,6亿智能手机用户背后存在巨大的信贷缺口。
更关键的是,对于非银机构与数字网贷平台,当地无明确贷款利率上限,这令网贷平台有条件复制“高息放贷+高效催收”模式。据观察者网报道,部分中资平台早期年化利率折算后可高达200%-300%。
对奇富科技等一类中资平台而言,印度堪称“低配版的中国”。国内市场验证的风控算法、成熟的线上放贷流程,似乎能轻松实现降维打击。
巅峰时期,印度每3家在线借贷平台就有1家中资背景:奇富科技通过子公司布局贷款超市业务;小米则将信贷产品“Mi Credit”直接预装在印度市场的手机中;而360集团透过奇虎科技控股的“摩比神奇”,据知情人士在2019年向媒体透露,在印度市场已可做到“日放6万单”借款。
不过行至当下,这场狂欢正演变为灾难。行业数据显示,中资网贷平台在印度的坏账率普遍突破50%,中小平台更是高达80%。据观察者网的报道,行业估算中国资本在印度数字借贷市场的损失规模达数十亿美元。
这一问题的核心症结源于网贷模式与印度本土环境的错配。
首先,征信体系的真空地带是第一道死穴。印度征信机构数据显示,截至2024年3月,仅9%的印度人查询过信用分,农村地区近乎为零——中资平台依赖的“大数据风控”失去根基。而且当地Adhaar身份证系统漏洞百出,假证产业链每分钟催生12起欺诈事件,风控形同虚设。
其次,印度当地的文化背景也令催收逻辑试图引发的“社会性死亡”在当地基本失灵,这加剧了回款困境。印度22种官方语言让催收脚本沦为废纸,借款人亲友不仅不施压,反而追问借款渠道。法律程序拖沓,债务纠纷案件平均耗时3-5年,中文律师函基本失去法律约束力。
同时,反向收割产业链的形成更具毁灭性。曾有熟悉规则的中国用户扮演“撸贷导师”,在社交平台培训印度人伪造身份借贷,贷后按比例分成,甚至主动举报无牌照平台以脱身。中资网贷平台从“收割者”沦为“提款机”。
此外,监管的变化也为网贷出海印度这场征程痛下最后一击。2022年,印度《数字借贷指南》落地,强制要求所有借贷相关数据必须存储于本土服务器;2024年《禁止无监管借贷活动法案》草案出台,明确利率上限、禁止暴力催收,网贷平台依赖的“高息覆盖高坏账”模式就此崩塌。
奇富科技难逃“印度魔咒”
奇富科技似乎也难逃“印度赚钱印度花”的行业宿命。
2019年其通过子公司切入贷款超市赛道,依托流量优势对接借贷需求。后续虽未公开具体放贷规模与坏账数据,但奇富科技的印度业务轨迹与行业溃败曲线基本重合。
从行业共性来看,中资在印度累计亏损超10亿美元,奇富科技作为先锋之一,大概率难以摆脱资金沉淀的困境。
财务数据间接反映其海外业务或形成了拖累。2025年三季报显示,奇富科技投资活动现金流净额为-120.77亿元,较上年同期的-32.40亿元大幅扩大。
同时奇富科技应收贷款拨备为8.38亿元,同比增长75%;或有负债拨备为7.73亿元,相较上年同期的0.64亿元大幅增长超过11倍。这显示其信贷违约风险也在扩大,资产减值损失将进一步影响盈利水平。
尽管奇富科技未披露印度资产减值金额,但结合蚂蚁集团、小米的清仓动作,部分市场观点认为其存在隐性损失。
值得注意的是,奇富科技此前国内业务表现强劲,一定程度上对冲了海外失利。2024年公司营收171.66亿元,净利润62.64亿元,净利同比增长46.18%。不过其2025年第三季度营收52.06亿元,调整后净利润降至15.08亿元,显示印度折戟之后,维持后续增长仍面临较大挑战。
奇富科技的估值困局
结合财务表现来看,港股股价57%的跌幅,或反映着资本市场对奇富科技估值逻辑的重构,进一步下探,深层原因或在于三项预期差距。
一方面,海外扩张能力的信任瓦解或是直接诱因。此前,奇富科技乃至360集团一度在印度市场上成为“急先锋”的一员,但后来的被动撤离暴露了其本地化能力不足——既未建立本地征信合作,也缺乏监管沟通渠道,与国内的成熟策略形成反差。市场担忧其未来海外布局重蹈覆辙,风险溢价有所提升。
另一方面,估值水平的行业性价比劣势愈发凸显。截至目前(2026年1月12日),奇富科技港股市盈率仅为2.7倍,不仅低于同业的零在科技金融的41倍、易鑫集团的16倍,也低于自身历史均值的约5.1倍。
![]()
奇富科技近年PE水平 图源:Wind
同时,信贷风险敞口扩大也正引得市场关注。财报显示,近年来,奇富科技30天逾期率和180天逾期率总体呈上升趋势。三季度信贷业务的首日逾期率约为5.5%,去年同期为4.6%;30天回收率为85.7%,同比亦有下降,显示违约风险有所增加。
展望后续,奇富科技在去年三季报中表示,由于宏观环境中的不确定性持续存在,公司拟将风控作为当前第一要务,并在接下来几个季度的业务规划中持审慎态度。因此,于2025年第四季度,公司预计将���生净利润9.2-11.2亿元及非公认会计准则净利润10-12亿元,同比下降39%-49%。
因此,尽管中金公司的研报认为奇富科技“长期增长根基监实”,但眼下的估值困局则显示,投资者仍在短期风险和长期价值之间博弈。
而要实现估值修复,奇富科技或需解答三大命题:一是印度资产的真实减值规模能否透明化;二是业务结构能否持续优化,改善重资产模式依赖,对抗信贷违约风险压力;三是海外战略是否会调整,避免重蹈“重复制、轻本地化”的覆辙。
从行业视角来看,奇富科技折戟印度并非个例,而是中资金融科技出海的集体代价。正如福特退出印度的教训所示,这个市场从不是“下一个中国”,任何忽视本地化的冒险都难以为继。对奇富科技而言,唯有厘清海外包袱、聚焦核心优势,才能让估值回归业绩基本面。
*免责声明:
本文内容仅代表作者看法。
市场有风险,投资需谨慎。在任何情况下,本文中的信息或所表述的意见均不构成对任何人的投资建议。在决定投资前,如有需要,投资者务必向专业人士咨询并谨慎决策。我们无意为交易各方提供承销服务或任何需持有特定资质或牌照方可从事的服务。
![]()
关注获取更多资讯