我复刻了 Claude 刚发布的生成式 UI 交互!
歸藏的AI工具箱·2026-03-15 17:24

Anthropic推出生成式UI交互功能 - Anthropic在Claude中上线了基于生成式UI的新交互方式,能够在聊天信息流中以可视化方式介绍概念和信息,比纯文本更易理解[1] 生成式UI的核心功能与体验 - 该功能允许AI直接在聊天中绘制交互式图表,并实现流式输出,边生成边渲染,用户可观看图表在画布上逐步绘制的动态过程[5] - 生成过程完成后,用户可直接与生成的图表进行交互,而非静态图片[6] - 该功能与模型结合紧密,用户可与生成的示意图交互并要求模型进行更深入的解释[17][19] 生成式UI的具体应用场景 - 数据分析可视化:可将复杂数据(如“美国和伊朗冲突每天成本估算”)转化为图表,使数字关系一目了然,实现文字与图表混合输出[7] - 创建交互式小工具:例如可生成一个复利计算器,用户可通过拖拽滑块修改初始金额、投资年限等参数,下方的图表和数字会实时变化[10] - 绘制技术架构图:可帮助程序员可视化项目架构或实现方案(如API到JWT身份验证的完整流程),通过图形化呈现特性对比、流程图和层级结构,加快理解速度[12] - 分析线上项目数据:例如,向AI发送GitHub仓库链接,AI可自动抓取数据并可视化分析星数、fork数、技术栈、架构设计、核心模块等信息[14] - 教育辅助:可用于物理、数学等复杂公式的可视化,学生可通过滑块和输入框调整参数,动画会立即发生相应变化[21][22] 生成式UI的技术实现方案 - Claude官方方案:Claude.ai采用tool_use机制,模型调用专用工具输出结构化的小部件内容,前端解析工具调用的输入参数进行渲染[26] - CodePilot的替代方案:由于Claude Agent SDK在preset: 'claude_code'模式下无法注册自定义工具,且tool_use方案不支持流式体验下的HTML增量渲染,因此选择了不同的技术路径[26][27] - 触发机制:模型通过输出特殊的Markdown代码围栏(show-widget)来触发前端渲染[32] - 渲染与隔离:每个小部件在一个sandbox="allow-scripts"iframe中渲染,实现了彻底的JavaScript执行环境隔离,并通过CSP策略精确控制资源加载,防止样式泄漏和脚本逃逸[30][31][32] - 主题同步:通过CSS变量桥接层,将CodePilot基于OKLCH色彩空间的CSS变量值注入iframe,使小部件能自动适配应用的深色/浅色主题[33][34] - 流式渲染处理:这是实现中最复杂的部分,需要处理模型逐token生成时可能不完整的JSON、HTML或<script>标签,并采用120ms防抖等技术优化体验[36] 多模型支持与性能表现 - CodePilot实现的生成式UI功能不仅支持Anthropic原生模型,也支持国产模型如Kimi K2.5和Minimax M2.5[24] - 在图形绘制方面,Kimi K2.5的表现被认为甚至优于Anthropic的Sonnet 4.6模型,其架构分析也很详细,因此被推荐为首选尝试模型[24] 实现过程中的体验优化挑战与解决方案 - 文字消失问题:修复了因解析函数处理不当导致小部件围栏出现时其前的介绍文字突然消失的问题[42][43][44][45] - 高度跳变问题:通过在小部件首次报告高度时临时禁用CSS过渡动画,解决了渲染瞬间聊天区域抖动的问题[46][47][48][49][50] - 最终渲染闪烁:通过比较新旧可视化HTML内容,在内容相同时跳过DOM整体替换,仅追加执行脚本,实现了纯SVG小部件的零重绘最终渲染[51] - 滚动回跳问题:通过引入模块级高度缓存,使新组件实例能读取缓存中的正确高度进行初始化,避免了因高度从0开始变化而触发的滚动调整[51] - 脚本代码泄露:通过检测并处理流式传输中不完整的<script>标签,防止JavaScript代码被浏览器渲染为可见文本,并在处理期间展示加载状态提示[51] - 小部件渲染失败:通过为iframe元素添加onLoad回调作为兜底机制,确保能可靠检测到小部件就绪信号,解决了因事件监听时序问题导致的渲染失败[52] - 组件树稳定性:通过为流式部分的小部件计算稳定的React key,并将加载指示器移至组件内部控制,避免了因key值或组件结构变化导致的重渲染闪烁[52]

我复刻了 Claude 刚发布的生成式 UI 交互! - Reportify