回答中的图表
当回答包含一组可比较的数字时,智能体会主动绘制图表——无需提示,在对话过程中完成。九种图表类型,每种均附有示例,以及拒绝绘制数字不在您材料中的图表的过滤机制,并解释为何衍生数据通过代码而非模型计算得出。
```
```
```
询问支持智能体每个计划的价格,你会得到一段文字。询问真人,他们会画出四条柱状图。智能体做的是第二件事:当答案已经包含一组可比较的数字时,它会将其绘制出来——**无需被要求**,在普通对话的中间。
本页面上的每个图表都由访客看到的同一组件渲染,基于模型发出的同一规范。这里没有截图。
## 模型实际写入的内容
一个代码块,紧挨着文字:
{"type": "bar", "source": "passage:kb", "title": "Registration fee by market", "unit": "USD",
"labels": ["Brazil", "Mexico", "Colombia", "Chile", "Peru", "Argentina"],
"series": [{"name": "standard", "values": [4200, 2800, 1900, 2100, 2450, null]},
{"name": "expedited", "values": [6300, 4100, 2600, 3050, 3400, null]}]}
渲染为:
```chart
{"type": "bar", "source": "passage:kb", "title": "Registration fee by market", "unit": "USD",
"labels": ["Brazil", "Mexico", "Colombia", "Chile", "Peru", "Argentina"],
"series": [{"name": "standard", "values": [4200, 2800, 1900, 2100, 2450, null]},
{"name": "expedited", "values": [6300, 4100, 2600, 3050, 3400, null]}], "cite": 1}
```
该示例中有三个关键要素。
**`null`,而非 `0`。** 阿根廷的费用未在材料中公布,因此没有数字——而零值柱状图将是一个材料从未做出的声明。零是一个有意义的值;“未知”不是零,空位用 `0` 会撒谎的地方表明了这一点。
**正文保留。** 图表补充答案,从不替代它。Telegram、WhatsApp 和屏幕阅读器接收到的内容与紧凑表格相同,因此仅以图片回答的智能体在半数渠道上等于没有回答。
**`source` 是必需的。** 没有来源的图表是没有引用的数字,角落里的徽章说明了它来自哪种材料。当单个检索到的段落包含这些数字时,该徽章是一个可打开的实时引用。
## 数字必须来自你的材料
这比绘图部分更重要。
`passage:` 图表是常见情况:数字来自你的知识库,模型将其复制出来。复制是可靠的——在三个模型从检索到的文本中提取价格表的测量中,有一个过时的价格与干扰项坐在同一段落中:9 次正确,9 次正确,没有被诱饵迷惑。
算术不行。相同的模型,相同的段落,要求从基础费用加上超额费率计算账单:**12 次错误,12 次错误**。每次乘法都是正确的,但每个公式都是错误的。
因此,在图表渲染之前,确定性检查会对其运行:每个标签-值对必须出现在智能体**本轮**实际检索到的材料中。无法找到的对意味着**整个块被丢弃**——答案保留其文字,失去其图片。与产品中其他地方句子级接地标记不同,这一拒绝而非注释:画错的柱状图在任何人阅读脚注之前就已经完成了它的观点。
<Callout tone="warning">
检查比较数字,以它们出现的每种书写形式——`4,200` 和 `4200`、`25M` 和 `25000000`、`2500万` 和 `25 million`。它不验证单位,也不能总是判断一个句子中的两个标签哪个属于数字。它是防止捏造的底线,而不是正确性的证明。
</Callout>
## 派生数字是计算的,而非写入的
份额、增长率和累计总额正是模型出错的地方,也是让图表值得观看的地方。因此,模型不计算它们。
它将逐字数字交给工具,命名它想要的推导——占总数的份额、百分比变化、累计总额——平台在**代码**中计算该系列。结果保留在服务器上;模型写入引用,数字在块发送之前填入。它没有机会打错代码刚刚算出的内容。
图表说明了这一点:以此方式计算系列在图表本身中标记,因为“从你的材料复制”和“为你计算”是不同的保证,读者有权知道他们正在看哪一个。
## 可对话的图表
点击一个柱状图——或表格的一行——智能体会收到关于该类别的后续问题,就像访客输入了一样。图表不再是输出,而是输入:无法表达想要数据哪一部分的人只需指向它。
每个图表也导出为 CSV,柱状图/横向/折线/面积是同一句话的四种说法,因此读者可以在它们之间切换。饼图、漏斗图、雷达图和散点图是*不同*的句子——组成、流失、形状、相关性——因此它们不提供切换。
## 九种类型,以及每种适用的场景
模型无法在之间选择的类型集与只有一种类型相同。每种都回答不同的问题,选错比不画更糟:图表仍然存在, quietly 说着别的东西。
### `bar` — 这些类别如何比较?
默认值。当没有更具体的内容时,伸手去拿它。
```chart
{"type":"bar","source":"tool:x","title":"Cases closed by team","unit":"cases",
"labels":["Intake","Triage","Review","Drafting","Filing","QA","Appeals","Renewals","Archive"],
"series":[{"name":"closed","values":[128,116,94,88,61,54,37,29,22]}]}
```
### `hbar` — 相同的问题,带有长标签
国家或产品名称的类别名称不适合垂直柱状图下方,轴开始将它们旋转 45°。横向放置它们只是适合。平台在超过十二个类别时自动切换到这个——**不是**折线图,因为这些类别没有顺序,折线会发明趋势。
```chart
{"type":"hbar","source":"tool:x","title":"Leads by market",
"labels":["United Kingdom","Germany","France","Spain","Poland","Netherlands","Italy","Sweden","Portugal","Ireland","Denmark"],
"series":[{"name":"leads","values":[812,640,455,390,210,180,164,131,98,76,54]}]}
```
### `line` — 这正走向何方?
对于真正有顺序的类别:月份、阶段、版本。间隙被连接而不是断开,因为断开被读作两个单独的系列而不是一个缺失的数字。
```chart
{"type":"line","source":"tool:x","title":"Monthly recurring revenue","unit":"k",
"labels":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],
"series":[{"name":"new business","values":[12,15,14,19,23,28,31,29,35,41,44,52]},
{"name":"expansion","values":[3,4,6,5,9,11,10,14,16,15,19,24]}]}
```
### `area` — 相同的趋势,当数量是重点时
当累积数量比变化率更重要时使用。
```chart
{"type":"area","source":"tool:x","title":"Tickets received","stacked":true,
"labels":["W1","W2","W3","W4","W5","W6","W7","W8","W9","W10","W11","W12"],
"series":[{"name":"answered by the agent","values":[40,62,58,90,120,138,151,144,166,180,175,198]},
{"name":"escalated to a person","values":[22,25,21,28,31,27,24,20,18,17,15,12]}]}
```
### `stacked` — 一个也有部分的比较
不是其自身的类型,而是 `bar`、`hbar` 和 `area` 的修饰符:仍然是比较,但每个柱状图打开以显示其构成。
```chart
{"type":"bar","source":"tool:x","stacked":true,"title":"Revenue by quarter","unit":"k",
"labels":["Q1 24","Q2 24","Q3 24","Q4 24","Q1 25","Q2 25","Q3 25","Q4 25"],
"series":[{"name":"new","values":[30,45,50,62,68,74,81,96]},
{"name":"renewal","values":[20,25,40,44,52,58,66,71]},
{"name":"expansion","values":[6,9,11,15,18,21,27,34]}]}
```
### `pie` — 这个整体由什么组成?
仅当部分真正加起来构成整体时。一个系列,没有负数,最多八个切片——超过这个,没有人能分辨哪个切片是哪个,它退化为柱状图。
```chart
{"type":"pie","source":"tool:x","title":"Where the questions come from",
"labels":["Website widget","WhatsApp","Telegram","Email hand-off","Embedded in-app","Shared link"],
"series":[{"name":"conversations","values":[6200,2700,1100,640,380,210]}]}
```
### `funnel` — 人们在哪里流失?
每个阶段必须是其上方的子集。不下降的系列不是漏斗,它是一组并排的数字——平台将其绘制为柱状图。
```chart
{"type":"funnel","source":"tool:x","title":"From visit to paid",
"labels":["Visits","Started a chat","Left an email","Signed up","Activated","Paid"],
"series":[{"name":"people","values":[4200,1980,1140,860,410,120]}]}
```
### `radar` — 每个选项有什么形状?
几个选项在相同的几个维度上进行比较。它需要维度在可比的比例上:将 0-10 评级放在 0-1,000,000 计数旁边,一个轴固定,另一个平坦,所以平台回退到柱状图。
```chart
{"type":"radar","source":"tool:x","title":"Vendor comparison","labels":["Speed","Cost","Support","Coverage","Ease"],"series":[{"name":"agent4.io","values":[9,7,8,9,8]},{"name":"Incumbent","values":[5,9,6,4,5]}]}
```
### `scatter` — 这两件事有关联吗?
恰好两个系列:第一个是 x,第二个是 y,标签命名点。
```chart
{"type":"scatter","source":"tool:x","title":"Answer length against satisfaction",
"labels":["A","B","C","D","E","F","G","H","I","J","K","L","M","N"],
"series":[{"name":"words in the answer","values":[40,55,70,85,95,110,130,145,160,180,205,230,260,300]},
{"name":"satisfaction %","values":[62,68,74,79,83,86,88,87,84,80,74,69,61,55]}]}
```
### `table` — 当以上都不诚实时
两个不同比例上的措施,或始终是表格的数据。当其他所有类型的假设破裂时,它也是所有其他类型的落脚点。
```chart
{"type":"table","source":"passage:kb","title":"Registration by market",
"labels":["Brazil","Mexico","Colombia","Chile","Peru","Argentina"],
"series":[{"name":"days","values":[90,60,45,55,70,null]},
{"name":"fee (USD)","values":[4200,2800,1900,2100,2450,null]}]}
```
## 何时保持沉默
三个数字是底线。“从 120k 上升到 150k”是一句话,不是柱状图,绘制它是噪音。是/否问题和单值查找得到答案,而不是图片。一次回复中最多两个图表,第二个仅在两个措施单位不同时——平台计数,所以模型不能说服自己画第三个。
如果本轮没有检索到任何内容,就没有什么可绘制的。智能体说出它所知道和不知道的,这与它用文字做的一样。
## 开启它
无需开启。任何具有知识库或工具的智能体都已经这样做,并且 containment 门意味着它不应该绘制的图表永远不会到达访客。图表与消息一起存储,所以一个月后重新打开对话显示相同的图片,而不是仍然讨论它的答案中间的洞。