最近几年一直在 GitHub 上维护 awesome-shiny-extensions 这个列表。现在已经扩展到了 600 多个包,能想到的前端组件和交互基本都有现成的实现。但是见得多了,就会感觉审美疲劳。并且我觉得在完全由开发者定制一个界面和完全由一个聊天框生成一堆文字之间,肯定存在一个中间地带。后来一查,这概念其实早就有人提了,就叫「生成式 UI」,而且像 Vercel 的 json-render 和 Google 的 A2UI 这样的通用框架已经在实践中应用了。
Shiny 本身的响应式编程设计(后端即前端)很适合做这个,R 中也已经有现成的语言模型基础设施 {ellmer} 和 {shinychat}。于是我趁着东风,写了一个新包 {shinygenui},让语言模型直接从自然语言输入中理解用户意图,从开发者事先定义的组件库中选择,用工具调用的方式生成定制界面。现已上线 CRAN,欢迎拍砖!
博客文章:https://nanx.me/blog/post/shinygenui/