作者 | Annie Xu
采访 | CSDN&Boolan 首席顾问 卢威
责编 | 何苗
出品 | GOSIM 开源创新汇

从小热衷于参加乐高全球机器人竞赛的 Jonathan Kelly 对编程的探索欲十分强烈,他时常将脑海中有趣的项目写出来并分享在 Github 上。灵光乍现下,他用 Rust 编程语言构建出跨平台应用开源框架 Dioxus,项目迅速走红,短短两三天便在 GitHub 上收获了 3,000 颗 Star。

如今,Dioxus 的 Star 数已接近 20,000,并被许多初创企业以及知名大型公司如空客(Airbus)和欧洲航天局(ESA)采用。

本期 GOSIM 独家对话栏目 Open AGI Forum 由CSDN&Boolan 首席顾问卢威担任主持,与 Dioxus 实验室创始人、Rust 前端框架 Dioxus 的创建者 Jonathan Kelley 面对面,揭秘一鸣惊人的 Dioxus 项目从诞生到逐渐壮大的故事。对 AI 助力多平台 APP 搭建方面,Kelly 有些独道见解:

  • 在性能尤其是推理引擎方面,Llama3-70B 与 GPT-4 非常接近,能够在 Groq 上运行。Groq 速度与GPT 系列模型一样,都非常快,且性能远超 ChatGPT。因此,这是一条非常有趣的捷径,并且微调的成本基本上是免费的。

  • 约束生成是构建大语言模型中的一个非常重要的特性。它将模型的性能,即提示输出的准确性,从 20%提高到了 90%。这是一个工程问题,而非数学问题。我们正试图在重新发现任何新的数学规律前,通过良好的工程找到所有可能的优化点。

  • 中国的用户并不拘泥于 MacBook Pro 和 iOS,而有很多可供选择的设备和平台,开发者也对于 Dioxus 有浓厚的兴趣。相反在美国,70%的用户都使用 iPhone。

  • Android、iOS 的分布现状表明美国的操作系统市场存在垄断,导致大量资金投入这些不同的开发框架和生态系统建设中。Dioxus 致力于成为未来所有平台之间的中间地带。

  • 一个结构体或类的方法是有限的,如果进行微调或以某种方式修改权重,改变处理 tokens 的方式,进行结构化生成,理论上这种生成方式速度更快,质量更高。

以下是本次采访的主要内容:

Dioxus 的诞生:偶然的灵感迸发

GOSIM:大家好,欢迎来到 Open AGI Forum。我是来自 CSDN 的卢威,我们现在在荷兰德尔夫特 GOSIM 欧洲站进行现场直播。我们非常荣幸地邀请到了来自旧金山 Dioxus 实验室的 Jonathan Kelly。他有许多值得分享的传奇故事,欢迎 Jonathan。请先向观众简短介绍一下自己?

Jonathan Kelley:我是 Jonathan Kelly,用 Rust 编程语言构建跨平台应用开源框架 Dioxus 的创建者。在创建 Dioxus 前,我曾在 Cloudflare 工作,再之前是美国宇航局兰利研究中心。

GOSIM:你能分享一下你是如何对科技知识和编程产生兴趣的吗?以及你是如何开始编程的?为什么选择了 Rust?

Jonathan Kelley:我对编程的兴趣始于小时候。我所在的地区会举办 FFL(乐高全球机器人竞赛),我很喜欢参加乐高小型 Mindstorms 机器人编程比赛。从一开始学习拖拽式的编程语言,循序渐进地,我最终掌握了了 C 和 C++,进行了很多物理模拟。

我在 NASA 工作过一段时间,那里面包含很多物理学的内容。然后,我接触到了 Rust。Rust 速度很快,性能也很好,非常适合高性能的物理模拟。自此,我开始构建应用程序。

GOSIM:截至目前,Dioxus 在开发者中产生了巨大的影响力——在 GitHub 上收获了近 20,000 颗 Star。你能分享一下启动和管理一个成功开源项目的经验吗?

Jonathan Kelley:我从未预料到 Dioxus 会在 GitHub 上能斩获 20,000 颗 Star,变得如此受欢迎。对我来说,它最初只是我在夏天随手做的一个业余项目。它发布后,在一个偶然的周末变得非常流行,两三天内就在 GitHub 上收获了 3,000 颗 Star,这让我很惊喜。

直到现在,它已经推出近两年了。我们借此加入了 GitHub 加速器计划,并与其他一些非常酷的项目合作,全职搭建 Dioxus。随后,在旧金山筹集了一些风险投资,成立了一家创业公司。

GOSIM:所以它起初并不是一个正式项目?

Jonathan Kelley:我喜欢动手实践,把脑海中的想法付诸实践,然后发布,观察人们是否喜欢它。并非我所做的每一件事都能取得成功,有些事情看起来很酷,但人们并不感兴趣,但 Dioxus “一鸣惊人”。

GOSIM:Rust 最特别的地方是速度,那它与其他语言或工具相比还有其他特别之处吗?

Jonathan Kelley:我原本是学物理的,要进行很多 Python 模拟,因此写了很多 Python 代码。有时启动和运行 Python 是一件很有挑战性的事情,我在弄清 Python 安装上花的时间比在 Rust 上花的时间还多。

Rust 编程语言有点难,但你可以用它解锁很多有趣的项目。比如,一个 Dioxus 应用可以在一个小小的树莓派上运行,也可以部署在超级计算集群上,甚至可以用于 AI 项目。Rust 也非常灵活,其他语言可能擅长某些特定任务,但不能处理所有事情。Rust 学习起来可能稍显困难,但它几乎能够胜任各种任务,虽然可能并不是那么完美,写起来也不那么容易,不过我们正在努力改进。

微调模型助力构建高质量合成数据集

GOSIM:你本次的演讲主题与 AI 有关吗?请简要介绍一下。 

Jonathan Kelley:我们构建并微调了一个 Llama 模型,同时也对一个 Phi 模型进行了微调。很少有专门基于特定项目对大语言模型进行微调,微软新推出的专注于编码的 AI 模型是其中之一,我们也基于 Dioxus 代码对其模型进行了微调。

所以我们的 Llama 模型可以做很多有趣的事情,比如编写代码组件。如果用户需要搭建一个新的博客组件或作品集组件,只需给出一个简单的提示,就能得到对应的代码。

我们生成了大量合成数据,并将自己的项目投入其中,创建和测试组件。同时,模型有一个相对应的代理模式,可以浏览网站并对搭建的应用程序提供反馈。它可以评估布局、可访问性、样式等内容。并且,我们即将推出新功能:直接创建修复这些问题的拉取请求,即在构建应用的过程中,代理可以直接修复创建中存在的所有 bug(错误)。 

GOSIM:令人印象深刻。实际上,我也在从事这种大语言模型或 AI 编码助手的工作。请问你用了大约多少 Dioxus 代码库的 tokens 来微调 Llama? 

Jonathan Kelley:有趣的是,我们没有使用太多 Dioxus 代码,实际上并没有数百万个组件,由人编写的公开组件大概只有两到三万个,但这些组件的质量是未知的。因此,我们决定创建一个合成数据集——这也是演讲的主题,即如何构建一个高质量的合成数据集

我们生成了大约 100,000 个prompts,之后缩减到大约 10,000 个非常好的prompts。根据具体的提示内容,这些提示的长度大约在 500 到 2,000 个 tokens 之间。由于模型实际上是在本地而非云端运行的,我们也尝试压缩提示以减小其所占空间。

GOSIM:你使用的模型有多大?

Jonathan Kelley:我们对两个模型进行了微调。如果你有一台配置较高的机器,你可以使用 Llama AP,它的输出质量优于 Phi 模型,但它需要有 5 到 6GB 的 GPU 显存——并非每台笔记本电脑都有这么高的配置。如果你拥有一台配置较低或更便携的设备,也可以使用微调过的 Phi-3 模型——大概只需要 2GB 显存。

GOSIM:对于相对较少的数据量,你有什么看法?有人建议不要进行微调,而是使用 IG 或其他解决方案。你怎么看?你曾经尝试过比较微调和 Phi 的性能吗?

Jonathan Kelley:显然有很多方法可以处理这些问题,有些模型的上下文窗口非常大。由于 Dioxus 以 HTML 作为主要语法,能够参考其大量经过训练的数据语料库。因此,只需要稍作调整,就能创建一个非常好的合成数据集。

我认为,我们需要一个更大的数据集,需要更多的 Dioxus 组件供模型生成。鉴于 HTML 与 Dioxus 间相似的映射关系,可以基于 HTML 微调,将 HTML tokens 转换为 Dioxus tokens。

Dioxus Al:APP开发的未来

GOSIM:Python 是大语言模型的原生语言,而 JavaScript 的表现虽然不如 Python,但比其他的要好。如果没有特殊的微调,Code Llama 在 Rust 上的表现如何?

Jonathan Kelley:大语言模型在生成 Rust 代码方面表现一般。幸运的是,我们与 React 很接近,因此可以进行一些 React 代码的转换,比如点击事件处理器。JavaScript 代码可以轻松转换为 Rust,这种转换并不完美,但大多数 UI 代码都很简单,因此处理起来并不复杂。 

我们的 AI 系统也由 Rust 编写,如推理引擎。同时,结构化生成、约束生成等也都是在 Rust 中实现的。

GOSIM:我们也尝试提高 Code Llama 或其他代码元素在 C++ 或其他特定语言上的表现,要使其在性能上达到与 Python 同等的水平并不容易。

Jonathan Kelley:是的。

GOSIM:我认为如何实现代码生成模型对各种编程语言的支持是一个很好的研究主题。

Jonathan Kelley:我认为这非常有意义,我们也对你在演讲中提到的 RAG 检索感兴趣。我们一直在考虑是否可以使用 Rust 的类型系统来生成合成数据集,以非常有限的方式限制 tokens 的搜索空间。一个结构体或类的方法是有限的,如果进行微调或以某种方式修改权重,改变处理 tokens 的方式,进行结构化生成,理论上这种生成方式速度更快,质量更高。

Rust 比 Python 复杂。幸运的是,UI 代码相当简单,而我们主要生成的是 HTML,而 HTML 并不是一种图灵完备语言。因此,生成 HTML 比生成高质量的 C++ 要简单得多。

GOSIM:你使用什么模型来合成数据?是 GPT-4 吗?

Jonathan Kelley:Llama 模型相当不错,我们使用的是 Meta 最近发布的开源模型 Llama3-70B 进行数据生成。

GOSIM:它是否能满足数据生成的需求?

Jonathan Kelley:在性能尤其是推理引擎方面,Llama3-70B 与 GPT-4 非常接近。我们能够在 Groq 上运行它,且 Groq 的性能远超 ChatGPT。Groq 速度与 GPT 系列模型一样,非常快。因此,这是一条非常有意思的捷径,并且微调的成本几乎是免费的。鉴于我们有一些积分和其他支持,可能只需要 5 到 10 美元。 

GOSIM:在你启动 Dioxus 项目时,是否从一开始就计划了这些 AI 功能,还是在后来几年里才考虑到的?

Jonathan Kelley:我们一直希望构建小部件和 UI 设计变得更容易。大语言模型支持本地运行且性能非常好,给我们打开了一个全新应用世界的大门。一年前,这一切难以想象。

GOSIM:现在你们的研究人员、教授、博士,或者是程序员是否已经进行 AI 相关的事情?

Jonathan Kelley:我们的 AI 主管为 Rust 编写了一个 AI 元框架 Kalosm。它能做很多很酷的事情。它可以在本地运行大语言模型,支持 OCR,能够读取图片内容,还支持语音转文本等功能。在构建这个项目的过程中,他积累了很多关于大语言模型的经验。

看起来这确实像一个可以轻松入门的领域。随着研究的深入,它显然涉及到更多数学问题。深入模型内部需要吸收更多知识,但到目前为止,还没到必须是博士才解决的地步。

GOSIM:我们的某些项目中既有 AI 人员,也有编程人员,他们的思考方式不同,这有点像集成问题。

Jonathan Kelley:是的,约束生成是构建大语言模型中一个非常重要的特性。它将模型的性能,即提示输出的准确性,从 20% 提高到了 90%。这是一个工程问题,而非数学问题。我们正试图在重新发现任何新的数学规律前,通过良好的工程找到所有可能的优化点。

面向国际化的 Dioxus

GOSIM:我注意到你们的项目中有一些中国开发者。你觉得西方开发者和中国开发者之间有何不同?

Jonathan Kelley:我确实很惊讶这个项目国际化的程度。当查看它的下载者和贡献者时,我们发现中国社区为 Dioxus 做出了很多贡献。人们非常热衷于翻译。我只擅长英语,但我很高兴看到大家热衷于把 Dioxus 推向更广泛的受众。我们看到了来自每个人的热情,人们在探索新的功能和组件库,这很棒。我很开心看到这个项目是国际性的,而不仅仅是美国的。

GOSIM:你们也有来自欧洲的开发者吗?

Jonathan Kelley:从新西兰到西班牙,再到中国和日本,我们的开发者分布很广。中国也很多对项目感兴趣的开发者。他们并不拘泥于 MacBook Pro 和 iOS,有很多可供选择的设备和平台。在这种情况下,跨平台性能变得非常重要。而在美国,由于 iPhone 覆盖了 70%的用户,人们要么使用 React Native,要么使用 Flutter,甚至有时只写 iOS 应用。

GOSIM:在我看来,AI 的话题在美国和中国非常热门,但在欧洲相对冷淡。 

Jonathan Kelley:从我的经验来看,那些对 AI 感兴趣的欧洲人往往会来美国,我猜这可能与态度、监管、文化,或者恐惧有关。美国确实有人担心会被 AI 取代工作,但同时,工程和开发社区对 AI 解锁的潜力非常兴奋。我不知道中国的态度如何,但我交谈过的每个人都对 AI 和未来充满热情。

GOSIM:你认为在不远的将来,你们的项目工作有可能通过自己训练的模型实现完全自动化吗?

Jonathan Kelley:我们编写了各种各样的自动化工具,我希望一切都能自动化。当我需要亲自处理某些事情时,它会分散我对自己想做事情的注意力。我认为我们很快能实现简单设计的自动化。

比较明显的是阅读文档,并确保它与代码相匹配。我们经常收到关于某个函数的抱怨,文档上描述的功能与函数的实际参数不匹配——这些都是可以由大语言模型处理的简单任务。以此为起点,进而修复 bug、添加功能。我认为这个领域潜力巨大。

GOSIM:我问这个问题是因为大多数大语言模型模型的评估都是与人类相比较的,但这在开源项目中可能并不现实。在一些大型企业中,有些工作被外包给了不知名——我不确定,可能是分布在印度或者中国——的团队。这项工作的某些部分是否已经可以通过模型自动化生成了呢?

Dioxus 是否也采用了这种思维方式呢?一些容易的任务由自动化的语言模型解决,而不是所有的事情都必须由程序员或用户完成。

Jonathan Kelley:是的。

GOSIM:你对 Dioxus 项目未来的功能和运行方式有什么计划?你对未来有什么愿景?

Jonathan Kelley:我认为美国的平台太少了,Android、iOS 的应用现状表明存在垄断。未来,我们想成为未来所有平台之间的中间地带,无论是汽车还是物联网,无论是手机还是增强现实,希望 Dioxus 可以在任何地方运行。

今天人们不得不面对平台锁定的问题,如果能在一个平台实现所有功能体验感会更好。用户在 Dioxus 上发布产品,由我们负责处理所有与 Swift UI 或 Android 工具链等平台之间令人烦恼的中间环节。人们可以信任我们作为中间平台。

这种方式非常简单。你使用 Dioxus 创建一个新应用,拖拽小部件组合在一起,使用提示输入来添加新功能,几乎就像一个无代码的解决方案。但生成的 Rust 代码是你能找到的最强大的代码。

长远来看,我们还计划推出云服务,你的团队可以一起迭代应用程序,实现实时协作。我们可以通过 Dioxus 做很多有趣的事情。

GOSIM:那太好了,感谢 Jonathan 分享的见解和讨论,感谢所有开发者的观看。本次采访到此结束,我们下次再见!

相关阅读:

《双嘉宾登台的超人气演讲!两位创始人深入解读Dioxus架构演进思路:关注开发者体验,打造APP开发未来》

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐