什么是代码块?
在聊天消息(包括开场白与 AI 回复)中,代码块不会以纯代码文本显示,而会渲染成一个真正可交互的网页——按钮可以点击、动画可以播放,任何你能用前端技术(HTML、CSS、JavaScript)实现的界面都可以出现在消息里。
配合 开放能力,代码块还能与聊天页面交互——例如把选项文本填入输入框、切换开场白版本。所有开放能力函数都只能写在代码块中调用。
怎么写代码块
把完整的网页代码包进围栏代码块,就会渲染成可交互的网页。语言标记写 html 最常用,也是推荐写法:
markdown
```html
<!doctype html>
<html>
<head>
<style>
button { padding: 8px 16px; }
</style>
</head>
<body>
<button onclick="this.textContent = '已点击'">点击</button>
</body>
</html>
```偶尔也会有 xml、无标记或其他语言标记的写法——只要是围栏代码块、内容是完整网页,同样会被识别:
markdown
```xml
<!doctype html>
<html>
<body>...</body>
</html>
```注意:只写 <div>、<button> 等裸片段且未标 html 的代码块不会被识别,请始终按完整网页编写。
展示效果
代码块总是占据聊天气泡的最大宽度,高度随内容自动撑开。
运行环境与限制
代码块运行在独立的沙盒中,应把自己视为一个小型独立网页,通过开放能力函数请求聊天页面操作,而不是查找或修改聊天页面的内容。
脚本
- 支持经典内联脚本,
onclick等内联事件处理器会保留 - 所有
<script>会统一移动到文档底部执行,不保留原来在代码中的位置。依赖「脚本必须先于某个后续 DOM 节点运行」的代码,需要改为在 DOM 创建后执行,或监听DOMContentLoaded <script src="...">外部脚本不会加载;type="module"等脚本属性不会保留eval、Function、window.open、print等能力被屏蔽
网络与资源
fetch、XMLHttpRequest、WebSocket 等网络连接会被拒绝- 图片支持
data:、blob:、HTTP 和 HTTPS;音视频支持 HTTP 和 HTTPS;字体支持data:、HTTP 和 HTTPS - 内联样式与 HTTP/HTTPS 外部样式表可用
存储
localStorage/sessionStorage是仅当前代码块可见的内存实现,消息重新渲染后即重置,不能用于持久存储- 不提供 IndexedDB
页面访问
- 代码块无法访问聊天页面的 DOM 和状态;
parent、top都指向代码块自身 - 与聊天页面的交互只能通过 开放能力 函数
样式限制
position: fixed会被改为position: absolute- 大于
999的z-index会被压到999
小提示
- 按完整网页编写并标
html语言标记,是最可靠的写法 - 代码块的核心逻辑不要依赖网络请求和持久存储