结构化回复
数字人与 Yeaft 原生 Session 可按需使用 PresentResponse,将已经获得的结果表达为更易阅读的结构化内容。普通短回答仍然直接使用文字;这不是每轮必经的「美化模型」,不会为渲染额外调用模型。
展示与边界
同一份版本化内容协议和前端组件服务两条链路;消息身份、执行生命周期及持久化仍分别归属于原生 Session transcript 与数字人的 owner-scoped 存储。
支持 Markdown、方案卡片、紧凑指标、对比表、柱状/折线图、时间线、关系图、图片、交付链接与地点坐标示意。组件的布局、颜色及几何由客户端控制,不接受模型提供的 HTML、CSS、JavaScript 或任意 SVG。
- 卡片用于实际分组,避免把所有段落装进重复的卡片外壳。
- 图表必须使用真实数据,并说明单位、来源和限制;渲染不会验证数据真实性。
- 未设置
embed的地图仍是明确标注的坐标示意图与地点列表,不加载外部地图瓦片,不是导航地图。可选的受认可第三方地图直接嵌入回复;坐标与详情独立可读,不依赖服务商加载成功。不得凭空推测坐标。 - 外部图片自动加载,不发送来源信息,失败时可手动重试;外链仅接受无凭据的 HTTP(S),Server/Agent 不抓取。查看会向对应站点发起浏览器请求,应注意隐私。此工具不生成图片,也不按路径读取本机文件。
- 已有本地图片、文件交付机制保持独立;不要用不受所有权校验的本机路径或其他 owner 的资源代替有效交付链接。
一个工具,十种内容类型
PresentResponse 是统一发布工具,单次 blocks 可以混合多种类型,不需要为图表、图片、地图分别调用渲染工具。
type | 用途 | 当前边界 |
|---|---|---|
markdown | 标题、段落、列表、代码与文字链接 | 不执行 HTML、脚本;Markdown 图片不会自动转成图片块 |
cards | 方案与条目分组,可选已提供图片/来源 | 最多 8 张卡片 |
metrics | 重点数字与说明 | 最多 8 项 |
table | 方案对比与数据 | 最多 8 列、50 行,局部横向滚动 |
chart | 柱状/折线图 | 最多 4 系列、40 个横轴标签,提供数据表 |
timeline | 时间/步骤序列 | 最多 16 项 |
diagram | 架构与关系 | 最多 12 个节点、24 条边 |
image | 已有图片展示 | 自动加载、失败重试、展开预览;不生成图片 |
link | 来源、报告与交付链接 | 默认在所属内置浏览器中打开 |
map | 坐标示意或受认可地图嵌入,保留地点列表 | 最多 20 点;可选 OpenStreetMap/Google 分享嵌入 |
普通点击富响应中的链接:Session/Work Center 打开其所属 Workbench 浏览器;数字人复用同一个浏览器组件,在自己的交付侧栏打开,绝不借用其他 Session 的 route。点击链接旁的 ↗、浏览器内「新标签页打开」,或使用 Ctrl/Cmd/中键等浏览器操作可显式选择外部打开。内置浏览器不可用时提示,不自动跳转新标签页。部分网站禁止嵌入;不因此放宽 iframe 隔离或代理远端内容。
数字人的窄屏阅读器支持使用 Tab / Shift+Tab 进入和离开嵌入网页控件。跨域网页内的 Escape 无法传递给阅读器;可使用“返回阅读器控件”或“关闭阅读器”。
卡片图片与地图嵌入选项
这些是 v1 的增量可选字段,不是新工具或新类型;仍是一个工具、十种内容类型。
卡片可设置 image: { "url": "https://…", "alt": "…", "fit": "contain" },以及来源/操作 url。URL 只接受无凭据的 HTTP(S)。已有 logo/图标使用 fit: "contain",摄影使用 "cover"(默认)。图片自动加载且不发送 referrer,预留展示空间、保留可访问描述,失败可重试。天气、NBA 等信息仅在实际提供有效图片引用时显示图片;组件不会编造数据或图标。
地图可设置 embed: { "provider": "openstreetmap" }。客户端生成官方 https://www.openstreetmap.org/export/embed.html URL,使用有边界的 bbox、layer=mapnik 和 marker=纬度,经度。多地点时通过「地图地点」选择一个嵌入标记,完整编号坐标/详情列表始终保留。不要提供任意 OSM 嵌入地址。经度跨越 ±180° 时地图保持选中位置居中;纬度超出 Web Mercator 支持范围(约 ±85.05113°)时明确提示,仅保留坐标和详情,不替换为其他位置的地图。
也可设置 embed: { "provider": "google", "url": "https://www.google.com/maps/embed?pb=…" },但必须是已验证的官方分享嵌入 URL。从 Google 地图的分享/嵌入功能复制 iframe 的 URL,而不是 HTML。通用首页、未知域名、任意 HTML、URL 凭据、API key 及 /maps/embed/v1/… API 均不支持。Google Maps Embed API 需要另行获得授权的密钥配置,本功能不支持该 API。 分享视图可能与列表坐标不同,因此保留全部地点详情,不声称能在该视图中选择任意地点标记。
iframe 仅授予 sandbox="allow-scripts allow-same-origin",使用 referrerpolicy="no-referrer"、可访问标题和键盘焦点;不授予定位、弹窗或顶层导航权限。加载会联系外部服务商。跨域 load 事件不能验证内容,网络限制、CSP 或服务商策略仍可能导致空白。没有事件时 12 秒后提示超时;可重试、选择「仅显示坐标」、点击服务商/来源链接或显式 ↗。任何失败都不会自动打开外部标签页。未设置 embed 的现有坐标示意保持不变。
「在 Google 地图中导航」使用 https://www.google.com/maps/dir/?api=1&destination=纬度,经度。Google 可能在其页面询问出发位置,这不授予 Yeaft 定位权限。来源/服务商/导航链接普通点击仍打开所属内置浏览器,↗ 才是显式的浏览器新标签页操作。
{
"type": "cards",
"items": [{
"title": "已验证地点",
"text": "来自所提供来源的详情。",
"image": { "url": "https://example.org/place.jpg", "alt": "所提供的地点照片", "fit": "cover" },
"url": "https://example.org/place"
}]
}{
"type": "map",
"embed": { "provider": "openstreetmap" },
"points": [{ "label": "Civic Center", "latitude": 37.7793, "longitude": -122.4193, "detail": "已验证坐标,并非入口位置。" }]
}Loop 中的语义
工具/能力首先校验全部内容,然后发布用户可见回复。非法类型、超限内容、不一致的表格/图表、不存在的关系端点及不安全 URL 均拒绝发布;模型可以修正参数或使用文字回复。
phase: "progress" 表示阶段性沟通;phase: "final" 表示交付意图,不自行终止 turn、提交认知状态或证明任务完成。Session 沿用引擎 terminal boundary;数字人仍由认知提案的 next:null 完成提交。发布后的取消/失败不能撤销已交付内容,执行中的状态也不能因存在 final 内容而变成成功。
不强制工具只能在最后调用。先展示有依据的部分结果,可以继续检查;完整结果发布后,不需要再重复输出相同长文。
协议示例
原生 Session 工具参数,以及数字人能力的 args,使用相同结构:
{
"title": "两种方案对比",
"summary": "建议先选择方案 A:验证成本更低。下列成本仅为估计,尚未包含外部服务费用。",
"phase": "final",
"blocks": [
{
"type": "cards",
"items": [
{ "title": "方案 A", "label": "建议", "text": "复用既有能力,先验证关键链路。" },
{ "title": "方案 B", "text": "单独建设,维护成本较高。" }
]
},
{
"type": "table",
"columns": ["方案", "改动范围", "验证"],
"rows": [["A", "局部", "聚焦测试与浏览器"], ["B", "跨模块", "端到端与恢复"]]
}
]
}summary 必须独立可读,供复制、搜索、模型历史和旧客户端降级,不只是「见上图」。单次内容上限 48 KiB,最多 12 个 block;每种 block 还有条目、长度和维度限制。原生工具 schema 和数字人按需加载的完整能力契约描述实际字段。
兼容范围
- 原生 Session:通过内置工具按需发现、执行并发布,支持实时展示与持久历史回放。
- 数字人:通过能力目录发现、准备、调用,继续使用现有同 episode 分段展示。
- Claude Code/Copilot CLI Chat:前端组件可以复用,但其 CLI 工具协议不因原生工具注册而自动增加此能力。
- 旧消息没有结构化内容,保持原来的文字展示;不迁移旧 transcript 或运行数据。未知内容版本保留可读摘要。
验证关注点
变更需要同时覆盖协议校验、发布与终止分离、取消/失效执行权、持久化重开、实时与历史去重、身份隔离,以及 light/dark、320px 窄屏、桌面、长内容、键盘访问和外部图片失败。没有调用该工具的普通文字回答不应改变。