普通视图
requestAnimationFrame 与 JS 事件循环:宏任务执行顺序分析
Firebase CLI 一直关联失败
比如执行`firebase login``然后跳转浏览器,进行关联
解决办法:
export https_proxy=http://127.0.0.1:xxxx
export http_proxy=http://127.0.0.1:xxxx
export all_proxy=socks5://127.0.0.1:xxxx
firebase login
原因:
macOS 上开 V 只是让浏览器等应用走代理,但终端默认不走代理。终端里的命令(如 firebase)需要手动设置 http_proxy 和 https_proxy 环境变量才能走代理访问 Google 服务。
为什么在 Agent 时代,我选择了 Bun?
同步至个人站点:为什么在 Agent 时代,我选择了 Bun? - Bun 指南
![]()
一切都从那条「收购 Bun」的新闻开始
上周三,看到 Anthropic 的一则新闻:他们宣布收购 Bun,并在文中明确写到——对 Claude Code 的用户来说,这次收购意味着更快的性能、更高的稳定性以及全新的能力。(Anthropic)
简单翻译一下就是:
我们要把整个编码 Agent 的基础设施,换成一个更快、更顺手的 JS/TS 运行时。
这条新闻对我触动很大,至少暴露出两个事实:
-
Agent 时代的基础设施在变化 以前我们写 CLI、写后端,Node 足够用了;但到了 Agent 这种「到处起小进程、到处跑工具」的场景里,启动速度、冷启动性能、all-in-one 工具链,突然变得非常关键。
-
Bun 不再只是一个「新玩具」 它已经成为一家头部 AI 公司的底层组件之一:Anthropic 早就在内部用 Bun 跑 Claude Code,现在索性直接收购,把它当作下一代 AI 软件工程的基础设施。(bun.sh)
当我再去翻 Bun 的官网时,就会发现:
这是一个集 JavaScript/TypeScript 运行时、包管理器、打包器、测试运行器 于一身的 all-in-one 工具。(bun.sh)
这和我对「传统 JS 运行时」的印象已经完全不一样了。
![]()
先说说我的技术背景:为什么要写这个专题?
我平时写代码偏向两类技术栈:
- TypeScript:前端、工具脚本、Node 小服务
- Go:服务端、一些偏底层的活
很长一段时间里,我对 Node 的使用场景大概就是这几种:
- 写个小脚本:
ts-node/tsx+ 一点配置,跑完就扔 - 写个中小型服务端:Express / Nest 这一类
这些场景里,一个很明显的感受是:
- Node 够成熟:生态庞大,资料多,出了问题很容易搜到坑
- 但 Node 也够「厚重」:一堆配置、各种工具组合、打包测试 lint 各种链路
直到我开始认真看 Bun 的文档,第一次有一种很强烈的对比感:
「哦,原来现在写 JS/TS 后端已经可以这么简单了?」
- 不用写
tsconfig.json(很多时候默认就很好用) - dev / build / test 基本就是一行命令:
bun run/bun build/bun test - 起一个 HTTP server,用的还是 JS/TS,但 API 明显更简洁,很多地方甚至不需要 Node 的那一套底层 API
再加上我最近在做 Agent 相关的东西,自然就顺势产生了一个问题:
既然我本来就想用 TS 写一个 ReAct Agent,那为什么不干脆用 Bun 来做 runtime 呢?
Agent CLI 的选型:为什么会想到 Bun?
在开搞之前,我特地去看了一圈现在比较热门的 Agent CLI 都是怎么选技术栈的:
- Google 的 Gemini CLI:Node
- OpenAI 的 Codex CLI:Rust写核心逻辑,UI交给Node和TypeScript
- Claude Code CLI 和基础设施:Bun(Reuters)
如果你把这些信息放在一起,会大致看到一个趋势:
- Rust:更偏向极致性能、可控性、安全性,适合那种「我要把一套工具做到很底层、很稳」的团队。
- Node:稳定、生态成熟,但随着项目往 AI 工程、Agent 方向发展,在冷启动、工具链整合上没有那么「顺手」。
- Bun:尝试在 Node 的生态基础上,往前推进一步,做一个all-in-one、性能极强的 JS/TS 运行时。
而我这个人,有个很明显的偏好:
能用 TS 解决的,就先别急着上 Rust。
所以,当我看到:
- Anthropic 在 Agent 业务上,押注 Bun
- Bun 自己的定位又是:“把你写 Node 的那套事,全部做到更快、更简单”(bun.sh)
那我心里那个问题就更具体了:
在「写 Agent」这个具体场景里,Bun 真的比 Node 体验更好吗?
我不太喜欢只看 benchmark,于是就决定写点实打实的东西来试试看。
一个不到百行的 ReAct Agent Demo
为了验证这个问题,我给自己定了一个很小的练习目标:
用 Bun + TypeScript,写一个「不到百行代码」的极简 ReAct Agent Demo。
![]()
这个 Agent 不追求多复杂的功能,专注这几件事:
-
维护一个最小可用的 ReAct loop(思考 → 行动 → 观察 → 再思考)
-
内置少量工具,比如:
-
read:读取文件内容 -
write:写入/更新文件
-
-
整个项目尽量清爽,不做多余封装
写的过程非常「AI 化」:
- 先用 Node 写了一版最朴素的版本
- 再让 AI 帮我改写为 Bun 的 API
- 我负责补坑、重构、整理结构
结果出乎意料地顺畅:
- 很多原来需要
fs模块、各种工具库的地方,在 Bun 里可以用自己的 API 写得更简洁,比如Bun.file()、Bun.write()这种。(bun.sh) - dev / build / test 自己都不用纠结,直接
bun xxx的那一套就行,几乎不需要额外配置。 - Agent loop 那段代码本身是比较核心的逻辑,集中精力在这里就好了,不太需要为工程化配置分心。
更关键的是:
整个 Demo 框架搭好后,我有一种「这个东西是可以往前认真维护」的感觉,而不是写完就丢。
这和我之前写很多 Node 小脚本的心理预期是完全不一样的。
再聊一句「全栈」:TS 之后,运行时是谁?
周末刷 X,看到老许的帖子,如下:
![]()
这句话我很认同。 前后端统一 TS 技术栈,对个人开发者来说太友好了:
- 一门语言,从浏览器跑到服务端、再到 CLI、工具链
- 类型系统本身就成为你的「文档 + 校验器」
那顺着这个思路,下一步的问题就自然来了:
既然语言是 TypeScript,那运行时呢? 未来的 TS 运行时,会不会从 Node,逐渐走向 Bun(一部分场景)?
我不打算在这里给出一个结论——毕竟 Node 的体量、生态、历史沉淀摆在那里,而 Bun 目前也还只是一个「两年多一点」的新 runtime。(bun.sh)
但从我自己的体验看,有两点很值得关注:
-
Bun 是为「现代 JS/TS 开发」重新设计过的 它自带 bundler、test runner、包管理器,不再是「一个 runtime + 一堆第三方工具拼装」的模式。(bun.sh)
-
Bun 和 Agent、AI 工程这类新场景的契合度异常高
- CLI 需要冷启动快 → Bun 做得很好
- 项目喜欢 all-in-one 工具链 → Bun 直接内置
- 你本来就写 TS → Bun 对 TS 原生友好
这些特性,叠加起来就会让人产生那种感觉:
「如果我要重写一遍现在手里这些 Node 脚本、工具、Agent,那好像真的可以考虑直接上 Bun。」
这个专题想写些什么?
既然已经有了实践的契机(ReAct Agent Demo),再加上我一贯「学新东西喜欢顺手写点东西」的习惯,那干脆就开一个新专题:《Bun 指南》。
这第一篇就是引言,只回答一个问题:为什么要学 Bun?
后面的几篇,我打算按这样的节奏展开(暂定):
-
安装与上手:从 Node 迁移到 Bun 有多难?
- 安装 Bun
- 跑起第一个
bun run/bun dev - 把一个简单的 Node 脚本迁移到 Bun
-
Bun 的 all-in-one 工具链
- 包管理器:
bun installvs npm/pnpm -
bun test:内置测试如何用 -
bun build:打包、构建、单文件可执行
- 包管理器:
-
用 Bun 写 HTTP 服务
-
Bun.serve()的基本用法(bun.sh) - 和 Node / Express 的直观对比
- 简单的 API 服务实战
-
-
文件、进程与工具脚本:Bun 的标准库体验
-
Bun.file()/Bun.write()等常用 API - 用 Bun 写一个实用 CLI 小工具
-
-
实战篇:用 Bun + TS 写一个 ReAct Agent Demo
- 核心 loop 逻辑拆解
- 如何组织「工具」层(read / write / 调用外部接口)
- 运行、调试与「AI Coding 助攻」的一些经验
-
踩坑记录 & 迁移经验
- 哪些地方真的爽了
- 哪些地方还不如 Node 成熟
- 写给准备从 Node 迁到 Bun 的你
如果你已经会写 JavaScript / Node,这个专题不会从「什么是 Promise」讲起,而会更聚焦在:
- 从 Node 迁移到 Bun 时,大脑需要切换的那一小部分东西
- 在 Bun 里,如何用尽量少的代码做更多事
- 结合 Agent / AI 工程场景,感受下一代 JS/TS runtime 的味道
写在最后
我并不打算把 Bun 神化成「Node 杀手」——至少短期内,它更像是:
一个极适合「个人开发者 / 小团队 / 新项目 / Agent 工程」尝鲜的 JS/TS 运行时。
而这个系列,就是我在这个尝试过程中的「实践笔记」:
- 一部分是 Bun 本身的能力整理
- 一部分是我做 ReAct Agent 的真实踩坑经验
- 还有一部分,是在这个过程中我对「全栈 / TS / runtime 演进」的一些小思考
如果你:
- 已经会 Node / TS
- 正在关注 Agent / AI 工程
- 又对「更快、更简洁的 JS/TS 运行时」有点好奇
那欢迎一起把这个系列看下去,也欢迎你在实践中告诉我: 在你的场景里,Bun 到底是不是一个更好的选择?
鸿蒙智行首款 MPV 命名为「智界 V9」,余承东:超越市面上所有旗舰
![]()
在上个月底的享界 S9 发布会尾声,余承东带来了一个「One more thing」——鸿蒙智行首款旗舰 MPV 将落地智界。
而在刚刚「鸿蒙智行 超凡一步」的直播中,余承东和奇瑞董事长尹同跃宣布这款 MPV 正式被命名为智界 V9。
![]()
这也意味着,鸿蒙智行的产品线将将进一步拓展,覆盖轿车、SUV、旅行车、MPV 等多个细分品类。
「超越所有旗舰」
根据直播中和近期谍照中透露的信息,智界 V9 在鸿蒙智行体系中属于旗舰级定位。
智界 V9 车长约 5.3 米,轴距或接近 3.2 米,与岚图梦想家(车长 5315mm)处于同一量级。车身造型整体偏方正,且采用了双电动侧滑门的设计,空间表现和使用便利性应当有保障。
![]()
在具体的座舱配置上,直播中透露智界 V9 将配备主副驾双零重力座椅、后排双抽屉、电吸电弹前备箱三项亮点配置。
而从前段时间的谍照中还可以观察到智界 V9 采用了一块横贯主副驾的大连屏,整合仪表、中控与副驾娱乐功能。相比起问界 M9 屏幕,V9 的这块屏幕似乎一体化程度更强,边框更窄,或许采用了华为自研的车规级 OLED 面板。
![]()
新车的中控台则是极简风格,配备电子怀挡、双无线充电面板和优化储物格。二排座椅则配备了多向电动调节、加热、通风功能,扶手后方疑似设置了一块触控屏来控制空调与影音。门板内侧则设计了一个旋钮,猜测智界 V9 的二排座椅或许可以支持 360 度旋转,与第三排形成对坐布局。此外,车顶横梁预留位被猜测用于安装后排屏幕。
![]()
从车内配置来看,智界 V9 的目标客户似乎并不局限于家庭用户,而是更多希望拓展到商务、聚会等更广泛的出行群体。
动力方面,智界 V9 已经确定将提供增程和纯电两种版本,增程器可能沿用与智界 R7 一致的 1.5T 四缸发动机,纯电版本的 CLTC 续航预计超 600 公里。
而在智能化的部分,智界 V9 将使用一枚 192 线的激光雷达,毫无疑问将搭载乾崑智驾 ADS 4 和鸿蒙座舱 5。
![]()
再一次破局
对于智界而言,V9 或许是其冲击高端市场的又一次宝贵机会。
目前智界有两款在售车型,轿车 S7 与中大型 SUV R7。
其中 S7 自上市以来始终未能站稳脚跟,近半年仅售出了 5866 辆,基本退出主流高端纯电轿车竞争序列。反倒是 R7 的表现相对亮眼,以 3 万多辆的成绩排在整个鸿蒙智行体系中的第 4 位。
但只凭借 R7 一款车型,显然难以在激烈的价格战和竞品围剿下突出重围,不仅既无法满足商务接待、多人家庭出行等高价值场景需求,也难以在用户心智中建立高端品牌的完整认知。
![]()
正因如此,奇瑞正在以前所未有的力度集中资源来支持智界。
(今年智界)最大的变化是——我听余承东的。
除了暂停原定由星纪元进行的高端 MPV 项目,转而将其交由智界开发外,奇瑞董事长尹同跃还表示奇瑞将在智界品牌上累计投入超 100 亿元资金,并组建一支超过 5000 人的专属研发团队,涵盖智能驾驶、电子电气架构、热管理、座舱生态等核心领域。这一投入强度远超星途或星纪元历史任何项目,甚至接近整个 EXEED 品牌三年的研发总和。
![]()
这种史无前例的支持力度背后,是奇瑞和智界对过往双线战略失败的深刻反思。
与智界同期推出的星纪元 ES/ET 系列,与智界 S7/R7 共享平台、动力总成甚至部分供应链,但在营销体系、渠道归属和品牌调性上却各自为战。结果就是导致终端价格混乱、用户认知模糊。2025 年上半年数据显示,星纪元 ES 月销长期徘徊在 1000 辆上下。双线作战并未带来 1+1>2 的效果,反而稀释了本就有限的研发与营销资源。
如今随着资金、团队与独立性的全部到位,奇瑞又迎来了一次机会,而 MPV,正是当前最合适的突破口。
![]()
▲ 星途目前的车型序列
MPV 在中国市场是个相对特殊的存在。
在新能源浪潮兴起之前,这一细分市场几乎被丰田、别克等合资品牌垄断,用途也高度集中于公务与商务场景。近年来,随着国产高端 MPV 的崛起,国产品牌开始加速切入中高端市场。然而,与家用 SUV 或轿车领域不同,MPV 市场并未出现国产对合资的「碾压式」替代,而是呈现出多方势力交织、势均力敌的格局。
无论是中国品牌与海外品牌的竞争,家用导向与商用导向的博弈,还是燃油车与新能源车的较量,目前都还处于胶着状态。
数据显示,近半年 MPV 销量冠军仍是丰田赛那,累计售出 46158 辆;别克 GL8 新能源与丰田格瑞维亚销量也均突破 3 万辆,与魏牌高山、腾势 D9 等国产新锐车型差距并不显著。
![]()
▲ 近半年的 MPV 销量榜前 6 数据来源:汽车之家
MPV 的核心价值固然在于空间,但要在激烈的竞争中脱颖而出,仅靠「大」远远不够。真正的胜负手,在于能否在空间基础上,叠加更多维度的差异化优势。
传统合资品牌走的是「空间 + 品牌溢价」路线;而国产品牌则尝试了多种组合策略——「空间 + 豪华」、「空间 + 节能」、「空间 + 场景化体验」,以及「空间 + 智能化」。然而至今,尚未有一款车型能在这些维度上做到全面领先、无懈可击。
因此,下一阶段 MPV 市场的破局点,或许就取决于是否会出现一款真正能够打破现有平衡、定义新标准的标杆产品。
那么问题来了:
这台集鸿蒙生态、华为智驾、奇瑞制造与旗舰定位于一身的智界 V9,会成为那个引领变革的「答案」吗?
![]()
#欢迎关注爱范儿官方微信公众号:爱范儿(微信号:ifanr),更多精彩内容第一时间为您奉上。
掌握原型链,写出不翻车的 JS 继承
兴齐眼药:SQ-22031滴眼液干眼Ⅱ期临床试验完成首例受试者入组
热门中概股美股盘前普跌,百度跌超3%
美股大型科技股盘前多数下跌,特斯拉跌0.83%
龙江交通:控股子公司拟26.79亿元投建年处理200万吨石墨矿采选联合项目
Anthropic与埃森哲达成三年协议,将联合销售人工智能服务
思瑞浦:终止筹划购买奥拉股份股权等事项,股票明起复牌
EssilorLuxottica董事称Meta持有雷朋制造商至少3%股份
百度慧播星数字人技术演进
导读
从2023年成立到如今日均服务2万+直播间,百度慧播星已演进为覆盖脚本生成、实时问答、智能决策、音视频克隆的全链路AI直播平台。本文深入解读其技术架构:如何通过检索增强和强化学习生成高转化脚本;如何利用强化学习智能中控动态优化直播策略;以及如何将语音与形象克隆效率提升至“小时级”;如何构建“先验-后验”数据飞轮,让模型自主进化;。罗永浩数字人直播GMV突破5500万的案例,验证了其“超越真人”的带货能力。未来,慧播星正朝着更智能、更拟真、更高效的方向持续迭代。
01 慧播星介绍
电商数字人直播(慧播星)正式成立于2023年,是一款汇集了百度在视觉,语音和语言方面AI能力的原生AI应用产品,致力于打造代际领先的超越真人的直播体验。25年底日均开播直播间已达2万多个,覆盖电商、教育、健康、金融、泛知识内容等多个行业。经过两年多的产品打磨和技术突破,慧播星数字人直播已具备超越真人的能力。例如,这些能力支撑了罗永浩2025年6月15 日的数字人直播首秀,吸引了超 1300 万人次观看,GMV(商品交易总额)突破 5500 万元,这一成绩超过了其同年 5 月的真人直播首秀(GMV 5000 万)。
1.1 商家业务视角——开播流程
商家在慧播星获得带货权限后,即可自助开启数字人直播,主要包括如下流程。
1. 商品选择,可从百度直营店铺(度小店),三方电商平台(京东淘宝拼多多)和百度本地生活的海量商品中选择带货商品
![]()
△ 海量内外部商品一键挂接
- 形象选择或者定制,从7800+公共库形象中选择主播形象,或通过自助录制5分钟视频定制私有形象
![]()
△ 形象选择或定制
- 直播间装修,从3600+套直播间模板中选择装修风格和元素,或通过AI自动生成直播间背景图和营销挂件
![]()
△ 直播间装修,丰富的模板&组件
- 脚本生成,从多种公共风格中选择脚本带货风格,或自定义目标带货风格,补充少量营销信息,一键生成专业的直播脚本
![]()
△ 一键脚本生成
- 音色选择,从3200+个公共库音色中选择主播音色,或通过手百自助录制,3天内得到私有定制音色
![]()
△ 音色选择或制作
6. 直播间互动配置,一键开启一言问答接管,也支持手动配置预置问答对,补充商家知识
![]()
△ 直播间互动配置
02 整体技术架构
慧播星整体架构主要由商家端、视觉语音和文本各模态模型、实时渲染引擎、站内外分发系统组成。
![]()
为实现更好的直播体验,数字人采用云端生成方案,云端生成系统主要包括如下几个子系统。
1. 商品理解,为脚本,问答,互动等各种内容生成模型提供商品知识增强
2. 脚本生成,围绕商品自动生成风格化口语化的带货脚本
3. 智能问答,用户提问时实时检索商品知识,生成精准的回复,支持弹幕和口播回复
4. 智能互动,以直播效果(评论率、用户退场率、观看时长等)为目标主动向用户发起互动
5. 直播间装修,智能生成直播间背景,合成带营销内容的挂件
![]()
03 内容生成
3.1 风格化脚本生成
直播脚本水平与带货效果息息相关,优秀主播的脚本能够打动用户,循循善进引导用户成交。由于普通商家的带货营销水平有限,商家希望仅表达学习某某主播,系统自动为其生成风格相似的脚本。在此需求背景下,慧播星利用多模态商品理解富集构建商品知识库,借助EB4/turbo在电商直播语料上进行大规模预训练,结合人工专家精标数据SFT,通用和电商知识增强等手段实现一键风格化仿写。
- 商家仅需选定商品和补充少量营销信息,即可按预设风格或者自定风格(提供最少400字的带货文案)一键生成风格相似的带货脚本。客户采纳率92%,开播渗透率67%,相比客户脚本转化率+14%。
- 考虑到风格化脚本创作需求的独立性,慧播星已将脚本生成独立为工具,商家可脱离直播业务流使用工具。
![]()
△ 风格化脚本生成工具UI
技术架构
整体技术主要包括商品理解、检索增强、强化学习风格化生成和后处理阶段。
![]()
- 商品理解。系统通过多模态商品解析技术对商品详情页、海报图、参数图等视觉素材进行 OCR、版面结构识别与多模态模型融合,自动抽取核心卖点、适用人群、功能亮点、使用场景等结构化商品知识。可在单张图里同时捕获“文本内容 + 图示含义 + 排版语义”等特征,并利用 LLM 对解析结果进行归一化和字段对齐,形成高覆盖、高一致性的商品知识库。
- 检索增强(RAG)链路。用户输入的风格范文(不少于 400 字)会先经过标签分析模块,由大模型识别出其关键风格维度,如:表达节奏(快/慢)、情绪浓度(热情/克制)、营造气氛策略(故事、对比、疑问句)、用户痛点定位、直播常用带货技巧(强调稀缺、促单压力、利益点递进)等。基于这些风格标签,系统自动生成 Query,用于从通用知识库与电商知识库中检索对应表达方式、句式模板与知识上下文(卖点顺序推荐、商品类别常用话术、场景化句法等)。
- 风格化生成模型。模型基于电商专精的电商直播语料预训练能力,并结合海量运营专家的精细化标注数据(SFT),能够在保持范文风格一致性的同时,将内容自动替换为目标商品的卖点和营销逻辑。为确保生成内容既符合直播场景使用习惯,又具备高情绪感染力,系统引入轻量级 RLHF/强化学习优化,通过人类偏好数据持续调优,使模型能够稳定输出“自然、顺畅、带货效果强”的脚本。为持续提升模型能力,通过数据飞轮对该生成模型进行对齐。
- 标签化与后处理。脚本被进一步结构化,包括:分镜逻辑、开场引导、利益点铺垫、情绪高点、促单推进、收尾金句等,方便商家在实际直播中灵活调用或进行定制化编辑。
脚本数据飞轮
数字人直播的内容绝大部分来自大模型生成,前期领域专家知识为生成标准,脚本、问答、互动场景的生成质量已达到普通真人主播的水平。然而人工先验知识存在主观偏差,且缺乏全面性和快速适应新变化的能力,完全依赖人工只能达到次优水平。为持续攀升超越域内外头部真人主播,需建立业务和大模型的数据飞轮,通过飞轮效应持续提升模型在数字人直播场景的后验效果。
![]()
先验对齐
在真实直播场景中,数字人模型最终追求的是“后验效果最优”——即用户停留、评论增长、转化提升等真实业务指标。然而后验目标往往天然伴随风险:例如激进促单、夸大效果、模糊描述等内容可能在短期内获得更高的用户反馈,却越过事实边界与平台规范,形成安全问题。因此,在模型全面对齐后验之前,必须构建一套稳健、可解释、与平台规范一致的先验对齐体系作为基础。先验奖励模型作为“守门人”,以推理专家模型为判断核心,通过结构化的偏好评分与规则奖励引导模型学习合规、高质、可控的内容风格,实现“先验对齐 → 强化学习 → 专精模型 → 回流验证”的闭环。
自动偏好合成。传统先验奖励完全依赖人工标注,成本高且存在主观性。为解决这一问题,我们集成了多个先进推理类基模型(如 EB4-4T、Deepseek-R1/V3、GPT-o 系列等),通过多模型投票、结果对比分级等方式自动合成偏好。这一自动化偏好生成机制能够模拟“专家标注”,但具备:
- 一致性更高,减少人工主观波动
- 覆盖范围更广,数百万级先验数据
- 适应变化更快,模型可随平台规范或内容趋势变化即时更新
最终形成先验 RM(Reward Model)的核心训练数据。先验 RM 的核心职责是确保模型在任何情况下都不会突破内容安全边界,为后续后验对齐提供稳固底座。
![]()
后验数据飞轮
为了让模型吸收用户的真实后验反馈,慧播星构建了一套以“内容探索 + 奖励建模”为两条主线的数据飞轮,实现模型的自主进化与持续增强。
![]()
基于后验统计的内容探索:可控、高解释的偏好数据生成链路。后验统计路径主要面向高精度、强可控、可解释性强的偏好数据生产需求,结合在线实验框架,通过真实用户反馈驱动的方式生成偏好样本。通过高频在线实验,系统不断沉淀千级规模的偏好数据,支撑后续的模型偏好对齐训练(如 DPO/IPO 等策略优化方法)。
可泛化的奖励 uplift 建模:大规模偏好数据的高效补充路径。相比基于后验统计的实验方式,uplift 建模路径旨在解决用户行为稀疏、实验成本高的问题,通过泛化模型直接对用户偏好进行预测,生成百万级的偏好数据,实现更高效的数据扩容。采用 S-Learner / T-Learner 等 uplift 方法,构建用户行为因果效应模型,直接预测“某段内容是否会提升用户的互动/评论/停留等关键指标?”
3.2 智能问答
慧播星建设了一套完备的直播场景RAG系统,包括电商领域知识检索模型,通过千亿模型蒸馏的低时延生成模型(12s->2s),数据飞轮。目前已实现多模素材调度,高拟真明星问答,客户个性化表达,垂类适配,商家/商品知识库等产品能力。客户可一键开启智能问答,问答端到端可用率95%,优质率90%,客户开启率94%,运营和客户反馈较好。
![]()
△ 智能问答架构
技术架构
慧播星的直播实时问答系统在工程上形成了知识整合 → 领域检索 → 低延迟生成 → 后处理 → 数据飞轮的完整闭环,为超拟真数字人提供了媲美真人的实时互动能力。
- 在知识整合层,系统将商家侧的商品图文、卖点、FAQ、视频脚本、类目属性以及运营沉淀的数据统一入库,并通过向量化处理构建高可用的电商知识底座。
- 领域知识检索模块结合了千帧蒸馏后的 EB-lite/行业模型与高维向量语义搜索,通过「意图识别 → 精准匹配 → 语义聚类 → 知识召回」的流水线,确保系统能够从复杂直播语境中准确捕捉用户提问意图。直播场景中存在大量口语化、短句化、甚至噪声语料(如: “这个能用多久啊”。“有别的颜色吗?”),系统通过深度语义 embedding(如 ernie embedding)实现高鲁棒性的实时检索,使检索召回的准确率在实时环境下依然保持稳定。
- 低延时生成模块。基于千亿模型蒸馏结果构建,针对直播高并发、低时延、强一致性的要求,模型经过结构裁剪、张量并行优化与 Prompt 规约,使单轮响应时延从 12s 压缩到 2s,在保证语义丰富度和口播自然度的同时提升端到端体验。
- 数据飞轮实现持续自我优化:运营反馈、用户互动日志、误匹配案例以及高质问答样本会自动回流到数据处理模块,驱动知识库更新与模型重训练。
3.3 智能中控
真人主播会根据直播间实时状态决策当前应发起何种动作(action),比如直播间互动氛围差的时候是应该邀评,换卖点讲解还是促单?确定动作后主播知道如何最好的的执行动作,例如怎么把邀评讲出来?说什么话,用什么语气,邀请特定观众还是所有观众。行为决策和行为内容生成两者相结合实现直播间下单,关注,留联等最大化目标。超拟真数字人需要具备上述两种核心能力,即给定一个长期目标(如每场次的订单总数,评论总数,观看时长等),要求数字人1)判断在不同直播间状态下应该做出什么行为,是切换卖点讲解,促单逼单,邀评还是多轮互动?2)确定某种行为后生成适合的的行为内容,如塑品讲解,优惠讲解,促单逼单等的具体口播内容。
技术架构
智能中控架构核心由基于强化学习的决策Agent,和基于一言大模型的多任务融合两个部分组成。
![]()
基于强化学习的行为决策Agent
行为决策的目标是在不同直播状态下选择最优动作,最大化长期目标(订单、评论、观看时长等)
![]()
上图展示了直播环境与RL决策Agent的交互流程:
- 状态 St:观看人数、评论频率、当前商品、用户行为序列、是否有提问等
- 动作 At:邀评 / 多轮互动 / 促单 / 动态讲解 / 切换卖点 / 回答问题……
- 奖励 Rt:订单数变化、评论数增加、停留时长、转化率提升等
- Agent 通过不断试错 & 策略迭代,获得最优策略。
这使数字人能够像真人主播一样:氛围低时发起互动,用户观望时进行促单,新观众进入时进行商品介绍。RL 的优势在于目标导向:不是优化单句话,而是优化整场直播的 KPI。
基于大模型的行为内容生成与融合
当 RL Agent 选择了一个动作后,例如“促单”,还需要生成对应的动作参数:如促单的口播内容,使用什么语气?内容是偏温和还是强节奏?是否引用当前观众的评论?实践中我们通过强化学习训练了一系列action内容生成专精模型,能够生成特定参数指定的直播内容。
未来我们将以语言模型为基座对决策和内容生成任务进行端到端训练,减少分阶段建模带来的累计误差。
04 语音克隆与合成
普通商家原声演绎状态不佳,缺乏带货感。慧播星利用风格迁移TTS技术自动合成感染力强,拟真度高的直播音频。经过两年多的迭代TTS开播使用率从30.3%提升至92.8% ,制作时效性从1月降低到1分钟。
电商TTS发展主要经历两个阶段:
第一阶段(2023.3~2024.Q2) **:语音定制工牌麦收音,依赖大量人工传导,整个周期长达一个月
第二阶段(2024.Q3至今) **:小程序自助收音提高收音效率,自动训练架构升级,抑扬顿挫带货效果持续优化
![]()
第一阶段:工牌麦收音效率低下
![]()
第二阶段:小程序自助录制
现状:当前慧播星支持原生和激情带货两种音色克隆,客户仅需在手百小程序上录制15分钟语音,系统在1天内自动为客户生成克隆音(对比如下)。目前慧播星已制作12w多个音色,2.7w多个客户定制音色。
![]()
两种音效可选
1. 原声效果:还原本人说话特点,如语速和语调
http://blob:https://unitools.fun/fb87134d-97ec-42a5-a0a0-b74980b1cfc3
2. 激情带货效果:让整体情绪更激昂,抑扬顿挫
http://blob:https://unitools.fun/85e53903-5672-4988-85ae-19a4c867a607
未来计划利用海量直播场景的语料数据,进一步降低克隆门槛(对齐竞品的30s)、提升克隆效率(分钟级可完成克隆进行合成)、优化朗读效果(对标直播/视频/讲述/咨询等不同语境的真人) ,同时从单声音的克隆和合成成本达到业内头部领先水平。
克隆+合成技术架构
整体架构主要包括离线声纹注册和模型训练,在线合成三个部分。
![]()
△ 形象克隆及合成架构
05 形象克隆与合成
主播形象是直播的核心要素,高拟真形象能够提升用户观看时长,进而提升成单效果。慧播星与视觉技术部深度合作,基于2D数字人技术针对直播场景定制形象克隆和合成能力,建设了接近7800+个公共库形象,有效地支撑商家在慧播星的前期探索,为自建形象做好准备。
![]()
△ 慧播星形象制作
形象克隆技术发展主要经历了四个阶段:
第一阶段(2023.3~2023Q4) :V1版本唇形驱动方案适配电商直播场景,跑通录制约束较多的**闭嘴且无遮挡录制+**形象克隆流程,建立起第一批公共库形象
第二阶段(2024.Q4~2024.Q2) :V3V4版本唇形驱动通过数据建设和模型算法优化实现张嘴录制和更自然的唇动效果
第三阶段(2024.Q3~2025.Q2) :进一步降低录制门槛,支持录制中遮挡、大幅度侧脸和人脸出镜。
当前阶段客户仅需上传5分钟左右的自然演绎视频,系统在3小时内即可自动为客户生成克隆形象。时至25年底慧播星已累计制作32万多多个形象,8万多个客户定制形象,线上可用率95% 。
第三阶段(2025.Q3~至今):突破唇形驱动,建设多人出镜,动作驱动,表情驱动,持物驱动等下一代形象生成能力(多模协同的超级主播)。
视觉技术
实时场景下早期的唇动方案采用单阶段建模(如wav2lip),输入音频直接输出像素空间的唇形图片。实践中单阶段方案无法达到逼真的唇动效果,后来的商用方案几乎都采用两阶段方案:第一阶段将音频转化为2D关键点或3D人脸模型作为中间表达,第二阶段将中间表达利用GAN网络解码到像素空间。
视觉生成模型
核心由三个模型组成,3D人脸重建模型,音频到3D人脸生成模型,3D空间到像素空间人脸生模型。
- 3D人脸重建利用3DMM将人脸图片(像素)转换为3D mesh(三维空间点)
- 基于Faceformer改进的音频到3D mesh预估模型,mesh作为中间表达携带了丰富的面部动态,使得生成模型能够生成逼真的唇形图片。
- 基于StyleGan2改进的人脸生成模型,训练目标包括像素空间的重建损失,特征空间的感知损失,以及对抗生成损失。实现个性化增量微调方案,复用预训练底座只学习每个主播的个性化唇动风格,新形象仅需微调,3小时内完成制作。
![]()
模型pipeline
在线合成架构
形象合成以tts音频、底板视频帧和直播间背景为输入,通过生成模型实时合成主播嘴部区域,最后组装成视频流推送给用户。其中任务队列建立缓冲区,保障了视频流的连续性。目前已实现单卡多路流式渲染,支撑2万多直播间同时开播
![]()
在线流式合成架构
06 总结
历经两年多的持续打磨与技术突破,慧播星已经从一款数字人直播工具,成长为覆盖脚本生成、实时问答、智能中控、语音克隆、形象合成等多模态全链路的原生 AI 直播平台。它不仅复刻了真人主播的内容表达与带货节奏,更通过商品理解增强、强化学习决策、先验—后验数据飞轮、大规模音视频生成模型等关键技术,实现了“超越真人”的直播能力。随着业务规模的快速扩张与技术体系的持续演进,慧播星已在日均2万+直播间、万级定制形象与音色、覆盖电商与泛行业场景的真实生产环境中验证了 AI 直播的成熟度和商业价值。未来慧播星将继续沿着“更智能、更具说服力、更高效”的方向迭代:让脚本更精准、互动更自然、视觉更逼真、声音更生动、决策更智慧,并通过持续运转的数据飞轮不断突破直播体验的天花板。
听说你毕业很多年了?那么来做题吧🦶
序言
![]()
自别学宫,岁月如狗,撒腿狂奔,不知昔日学渣今何在?
左持键盘,右捏鼠标,微仰其首,竟在屏幕镜中显容颜!
心中微叹,曾几何时,提笔杀题,犹如天上人间太岁神。
知你想念,故此今日,鄙人不才,出题小侠登场献丑了。
起因
在这一篇《从 0 到上架:用 Flutter 一天做一款功德木鱼》文章中,我的 木鱼APP 最终陨落了,究其原因就是这种 APP 在 商店中太多了,如果你要想成功上架,无异于要脱胎换骨。
后面有时间了,我打算将其重铸为
修仙敲木鱼,通过积攒鱼力,突破秩序枷锁,成就无上木鱼大道。
因此,我吸取失败的教训,着力于开发一款比较 独特的APP ,结合这个AI大时代的背景,这款AI智能 出题侠 就应运而生了。最后总算是不辜负我的努力,成功上架了。
接下来就向大家说说 它的故事 吧。
![]()
实践
一. 准备阶段
1.流程设计
flowchart TD
%% 启动与登录
A[启动页] --> B[无感登录]
B --> C[进入导航页]
%% 主壳导航
C --> H[首页]
C --> R[记录]
C --> T[统计]
C --> P[我的]
%% 首页出题 → 记录
H --> H1[输入主题/高级设置]
H1 --> H2[生成题目]
H2 --> H3[提示后台生成]
H3 --> R
%% 记录 → 答题/详情
R --> R1{记录状态}
R1 -->|进行中| Q[进入答题页]
R1 -->|已完成| RD[记录详情]
RD --> E[秒懂百科]
%% 答题流程
Q --> Q1[作答 / 提交]
Q1 --> Q2[保存成绩]
Q2 --> R
%% 统计页
T --> T1[刷新统计数据]
%% 我的页
P --> P1[设置/关于]
P --> P2[隐私政策]
P --> P3[注销]
P3 --> |确认后| P4[清除 token / 返回未登录状态]
2. 素材获取
![]()
App的 logo 和其中的 插图,我都是用的 Doubao-Seedream-4.0 生成的,一次效果不行就多生成几次,最终还是能得到相对满意的结果。
到我写文章的时候,已经有了 Doubao-Seedream-4.5,大家可以去体验体验。
![]()
二. 开发阶段
1. 前端
前端毫无争议的使用的是 Flutter,毕竟要是以后发行 Android 也是非常方便的,无需重新开发。再结合 Trae,我只需要在口头上指点指点,那是开发的又快又稳,非常的轻松加愉快。
无须多言,这就是赛博口嗨程序员!🫡
![]()
2. 后端
后端就是,世界上最好的编程语言 JAVA 了,毕竟 SpringBoot 可太香了,我也是亲自上手。
2.1 依赖概览
<!-- ✅ 核心 LangChain4j 依赖 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.12.0</version>
</dependency>
<!-- Validation -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!-- Spring Aop -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- HuTool -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<!-- MyBatis-Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot-starter.version}</version>
</dependency>
<!-- MyBatis-PageHelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper.version}</version>
</dependency>
<!-- Sa-Token -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot3-starter</artifactId>
<version>${sa-token.version}</version>
</dependency>
<!-- Sa-Token 整合 RedisTemplate -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-redis-template</artifactId>
<version>1.42.0</version>
</dependency>
<!-- 提供 Redis 连接池 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- Knife4j -->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.8.6</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>4.4.0</version>
</dependency>
<!-- 短信验证码 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-auth</artifactId>
<version>0.2.0-beta</version>
</dependency>
<!-- 阿里云短信服务 SDK -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>2.0.24</version> <!-- 使用最新版 -->
</dependency>
......
这依赖一添加,满满的安全感:
- 数据库:我有MyBatis。
- AI:我有LangChain4j。
- 登录鉴权:我有Sa-Token。
- ......
2.2 接口限流
要说到项目中最需要重点关注的部分,接口限流 无疑排在首位。无论是短信发送接口,还是调用 AI 的接口,一旦被恶意刷取或滥用,都可能导致资源耗尽、费用爆炸💥。
因此,本项目采用 注解 + AOP + Redis 的方式,构建了一套 轻量级、可配置、低侵入 的接口限流方案,在不影响业务代码结构的前提下,对高风险接口进行有效保护,确保系统在高并发场景下依然稳定可控。
代码示例:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RateLimit {
/**
* 限流 key 的前缀(唯一标识一个限流维度)
*/
String key();
/**
* 时间窗口,单位秒
*/
long window() default 60;
/**
* 时间窗口内允许的最大次数
*/
int limit() default 10;
/**
* 是否按 IP 维度区分限流
*/
boolean perIp() default false;
/**
* 是否按用户维度区分限流
*/
boolean perUser() default false;
/**
* 自定义提示信息
*/
String message() default "请求过于频繁,请稍后再试";
}
@Slf4j
@Aspect
@Component
public class RateLimitAspect {
@Resource
private RateLimitRedisUtil rateLimitRedisUtil;
@Around("@annotation(org.dxs.problemman.annotation.RateLimit)")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
RateLimit rateLimit = method.getAnnotation(RateLimit.class);
String key = buildKey(rateLimit);
boolean allowed = rateLimitRedisUtil.tryAcquire(
key, rateLimit.limit(), rateLimit.window());
if (!allowed) {
log.warn("限流触发:key={}, limit={}, window={}s", key, rateLimit.limit(), rateLimit.window());
throw new RateLimitException(rateLimit.message());
}
return joinPoint.proceed();
}
private String buildKey(RateLimit rateLimit) {
StringBuilder key = new StringBuilder("ratelimit:").append(rateLimit.key());
if (rateLimit.perIp()) {
String ip = IpUtils.getIpAddress();
key.append(":").append(ip);
}
if (rateLimit.perUser()) {
String userId = StpUtil.getLoginIdAsString();
key.append(":").append(userId);
}
return key.toString();
}
}
在使用上,开发者只需在需要保护的接口方法上添加 @RateLimit 注解,即可声明该接口的限流规则。通过 key 区分不同业务场景,并可按需开启 IP 维度 或 用户维度 的限流控制,从而精确限制单一来源或单一用户的访问频率。
@NotLogin
@PostMapping("/sms")
@RateLimit(key = "sms", limit = 200, window = 3600, message = "短信调用太频繁,请1小时后再试")
public AjaxResult<String> sms(@Validated @RequestBody PhoneDTO dto) {
return AjaxResult.success(loginService.sms(dto));
}
@PostMapping("/generate")
@RateLimit(key = "generate", limit = 3, perUser = true, window = 3600*24, message = "每人每天仅可体验三次!")
@Operation(summary = "依据条件,生成题目")
public AjaxResult<Object> generate(@Validated @RequestBody GenerateRequestDTO dto) throws IOException, InterruptedException {
questionService.generate(dto);
return AjaxResult.success();
}
请求进入时,AOP 切面会拦截带有 @RateLimit 注解的方法,根据注解配置动态构建限流 Key,并交由 Redis 进行原子计数校验;若在指定时间窗口内超过访问上限,则直接中断请求并返回友好的限流提示,同时记录告警日志,便于后续排查与监控。
限流 Key 的结构统一为:
ratelimit:{业务key}:{ip}:{userId}
通过 Redis 过期机制自然形成时间窗口,既保证了并发场景下的准确性,也避免了额外的清理成本。
三. 上架备案
1.前提
![]()
![]()
想要备案上架,域名和服务器是必不可少的。
- 域名:你是在手机上,其实不需要啥好域名,因为大家根本看不见,十几块钱一年就行了。
- 服务器:花了三四百买个轻量级服务器就行了。
2. 阿里云备案
![]()
![]()
💡
小建议
像这里阿里云备案和获取管局审核,可以先行一步,在app开发完之前就可以提交了。
因为管局审核是要2-3周的,有可能我们的小APP开发好了,备案号都没有下来。
3. 苹果商店上架
![]()
信息这里按部就班,按照提示,一点点填写完成就行了,没啥特别的。
踩坑总结:
- 测试账号:你的APP中只要有登录模块,就一定要提供测试账号,就算你纯手机号登录也不行,必须提供测试账号。
-
注销功能:苹果商店硬性要求,必须要有
注销功能,但其实也没那么严格,你只要UI显示是那么回事就行,就当退出登录功能去做就行了。
4. 预览图制作推荐
![]()
![]()
![]()
注意是需要订阅付费的,要是有什么更好的,希望评论告知。😂
展望
在后续规划的新功能中,将以大学期末考试复习作为典型应用场景进行设计。通常在期末阶段,老师都会给出明确的考试范围、复习大纲以及相关资料文档,而临阵磨枪的学生往往面临资料繁多、重点分散、不知从何下手的问题。
针对这一痛点,用户可以将老师提供的复习文档直接导入 App,系统会基于 AI 对内容进行自动解析与归纳,将零散的文本信息整理为思维导图形式的知识图谱,清晰呈现各章节与知识点之间的层级与关联关系。
在此基础上,用户可围绕任意知识节点一键生成对应题目,用于针对性复习与自测,做到哪里薄弱练哪里。通过文档 → 知识图谱 → 题目练习 的闭环方式,帮助用户更高效地理解重点内容,提升期末复习的针对性与整体效率。
![]()
😭 作为大学毕业生的深彻感悟。
支持
![]()
AppStore 搜索 出题侠 即可,每个用户每天可免费使用三次。
感谢大家的支持与反馈。🙏