跳到正文
cccskills
免费在 GitHub 公开

chat-widgets

Present images, comparisons, and numeric data directly in chat using image views, cards, bar or line charts, and short forms for gathering needed details. Choose a format that fits the request while keeping ordinary answers in Markdown.

中文简介正在准备中。当前显示英语简介。

原文查看原文说明

在普通聊天中直接展示图片、图文卡片和数值图表,或用简短表单收集用户回答。展示图片或截图时优先 Image/ImageGroup;图片需要配合说明、参数或比较时组合 Card、Row、Col;分类比较用柱状图,时间趋势用折线图;需要填写多个条件时用 Form、文本输入、单选和日期。

按用途主动读取本 Skill,无需用户指定组件或 JSON;普通文字回答保持 Markdown。

xerrors/Yuxi星标 7,543(GitHub 7,543 + cccskills 0)

实测评分 未实测

查看安装方法

适用场景

  • Showing one or several images
  • Comparing category values with a bar chart
  • Displaying trends over time with a line chart
  • Collecting several task details in a form

包含的文件(1)

  • SKILL.md19.6 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

对话组件

普通聊天的直接响应

按用户目的选结构,先完成数据获取工具,再在最终回复中输出下列对应模板,替换全部示例文字、数据和图片地址:

用户目的最终回复
给出分类数值,希望直观比较、查看主要占比简短结论 + Card 中的柱状图 + 单位与来源
展示一张或多张图片单张以 Image 为根,多张以 ImageGroup 为根;短语用 Image.caption 放在左下角
图片需要配合说明或比较Card 内用 Row、Col 组合 Image 与文字
需要用户填写几个条件再继续Card 中的 Form,按需放文本输入、单选、日期和提交按钮

这些短请求直接在回复里呈现内容即可。组件无需创建文件、执行脚本或更新待办。每个模板的开头是三个反引号紧接 widget,结尾是三个反引号。协议使用 Markdown 围栏,<widget> 标签不会被渲染。所有要展示的围栏放在最后一次工具调用之后的最终回复中,用户才能在正式消息里看到它。

分类比较模板

{
  "type": "Card",
  "size": "full",
  "children": [
    {
      "type": "Title",
      "value": "阅读时长对比"
    },
    {
      "type": "Caption",
      "value": "示例数据 · 单位:分钟"
    },
    {
      "type": "Chart",
      "label": "四类阅读时长",
      "xAxis": "activity",
      "data": [
        {
          "activity": "论文",
          "minutes": 120
        },
        {
          "activity": "技术文档",
          "minutes": 80
        },
        {
          "activity": "笔记",
          "minutes": 45
        },
        {
          "activity": "网页",
          "minutes": 60
        }
      ],
      "series": [
        {
          "type": "bar",
          "dataKey": "minutes",
          "label": "阅读时长"
        }
      ]
    }
  ]
}

分类和数值逐项对应用户数据。模板中的 activity、minutes 都是示例数据列名;数据列改名时,同步修改 xAxis 和 series[].dataKey。时间趋势使用 line,xAxis 引用实际日期列名。字段对应关系按下文“图表与图片组合”校验。

图片优先展示

用户主要想看图片时,单张直接使用 Image,多张使用 ImageGroup,让图片紧接简短引导出现。caption 是可选短语,叠放在图片左下角;没有短语时只显示图片。

{
  "type": "Image",
  "src": "https://example.com/replace-with-real-image.jpg",
  "alt": "用户提供的户外风景图片",
  "caption": "周末去户外"
}

纯图片展示优先合并为一个 ImageGroup,children 只放 Image。前端使用统一 5:4 缩略图横向排列,窄屏可横向滑动,点击查看完整图片并切换。需要每张图对应说明、参数或对比时,使用下面的图文组合;Image 和 ImageGroup 都可以放在 Card、Row、Col 内。

{
  "type": "ImageGroup",
  "children": [
    {
      "type": "Image",
      "path": "/home/user/workspace/projects/<project-dir>/first.png",
      "alt": "第一张生成图片"
    },
    {
      "type": "Image",
      "path": "/home/user/workspace/projects/<project-dir>/second.png",
      "alt": "第二张生成图片",
      "caption": "另一个方案"
    }
  ]
}

示例 URL 和文件路径均为占位符,替换为用户提供或工具确认存在的实际来源。尚未实际读取画面时,alt 和短语沿用用户描述。

纯图片展示以对话正文中的图片为结果:用一两句简短引导后,立即输出一个顶格闭合的 Image 或 ImageGroup 围栏。不要长篇解释搜索过程、来源站点选择、地址验证或 HTTP 状态;没有被要求时不重复讲解图片检索方法。不要只返回 Markdown 图片链接、普通图片 Markdown、源代码或“已找到图片”的文字。需要说明来源时,围栏外最多附上简洁来源链接。Card 用于确有标题、文本或操作等内容的信息卡片;图片本身不构成套 Card 的理由。

图文组合与信息层次

图片与文字共同解释一个内容时,用 Card 组织它们。Row 横向组织,Col 纵向组织;较长说明放在 flex:1 的 Col 中,窄屏由前端换行。例子中的图片地址替换为实际来源:

{
  "type": "Card",
  "size": "full",
  "children": [
    {"type": "Title", "value": "两个房间的采光比较", "size": "lg"},
    {"type": "Caption", "value": "根据用户提供的图片比较"},
    {
      "type": "Row",
      "align": "start",
      "gap": 4,
      "children": [
        {
          "type": "Col", "flex": 1,
          "children": [
            {"type": "Image", "src": "https://example.com/room-a.jpg", "alt": "用户提供的房间 A"},
            {"type": "Title", "value": "房间 A", "size": "sm"},
            {"type": "Text", "value": "这里填写实际观察到的采光特点。"}
          ]
        },
        {
          "type": "Col", "flex": 1,
          "children": [
            {"type": "Image", "src": "https://example.com/room-b.jpg", "alt": "用户提供的房间 B"},
            {"type": "Title", "value": "房间 B", "size": "sm"},
            {"type": "Text", "value": "这里填写与 A 有意义的差异。"}
          ]
        }
      ]
    }
  ]
}

按内容决定结构,不为普通回答强加卡片:同一主题放在一个容器中;Title 表达内容主题或核心结论,Text 放必要解释,Caption 放单位、范围或来源,Badge 只表示有意义的状态。正文与卡片各自承载不同信息,避免整段重复。简单展示图片保持图片优先;只有文字确实帮助理解时才组合图文。需要较长解释时保留在围栏外,卡片保留便于浏览的要点。

收集信息的表单

用户要求填写,或下一步确实需要几个尚未提供的条件时,提供简短 Form;一个简单问题直接在正文询问即可。只询问当前任务需要的内容,已知条件不重复问。自由回答用 Input,较长说明用 Textarea,少量互斥选项用 RadioGroup,日期用 DatePicker。每个字段有稳定可见的 label;只有必要条件才标 required,不替用户预选尚未确认的偏好。

表单 Card 使用 size:full,标题使用 size:md。按阅读顺序连续放置字段,前端在正文宽度足够时将短字段排为两列,多行备注占整行,提交按钮放在末尾。只有确实需要额外分组时才使用 Row、Col。正文用一句引导说明用途,卡片说明只放填写所需的条件;字段名称、必填标记和提交按钮已经表达的信息无需再逐项复述。

{
  "type": "Card",
  "size": "full",
  "children": [
    {"type": "Title", "value": "补充出行安排", "size": "md"},
    {"type": "Text", "value": "填写出行条件,提交后生成一天行程。", "size": "sm"},
    {
      "type": "Form",
      "onSubmitAction": {"type": "send_message", "payload": {"text": "请根据以下出行条件安排一天行程。"}},
      "children": [
        {"type": "Input", "name": "destination", "label": "目的地", "required": true, "placeholder": "城市或地区"},
        {"type": "DatePicker", "name": "date", "label": "出行日期", "required": true},
        {
          "type": "RadioGroup", "name": "pace", "label": "游玩节奏", "required": true,
          "options": [{"label": "轻松", "value": "relaxed"}, {"label": "紧凑", "value": "busy"}]
        },
        {"type": "Textarea", "name": "notes", "label": "其他需求", "rows": 2, "placeholder": "选填,例如饮食偏好或同行情况"},
        {"type": "Button", "label": "提交并安排行程", "submit": true, "style": "primary"}
      ]
    }
  ]
}

提交先验证必填项和日期范围,再把提交目的与各字段的可见标签、填写值组成一条用户消息发送,模型收到后继续工作。payload.text 写明当前任务以及应如何使用这些回答;按钮文字说明提交后的下一步。点击本身只发送回答,后续工具和业务动作沿正常会话处理。生成期间、提交中或会话不能接收消息时控件只读;失败时保留填写内容并显示原因。编辑器里未发送的草稿、图片和附件保持独立。

独立 Button 也可发送明确的用户请求,例如 {"type":"Button","label":"按这些条件生成计划","onClickAction":{"type":"send_message","payload":{"text":"请按上面的条件生成计划。"}}}。当前只支持这一种发送动作,表单内使用 submit:true,由 Form.onSubmitAction 统一提交。

共同协议

输出前先完成结构检查:根对象、children 数组及每个节点都完整;所有键和字符串使用成对双引号;字段来自下表,括号与围栏闭合。JSON 按模板跨行缩进,每个节点独立成对象。最终回复只输出检查完成的组件;需要修改的草案在输出前修正,用户看到的是一份完整定稿。

回答以普通 Markdown 说明结论和上下文。在卡片、图表、图片能清晰呈现内容,或表单能方便用户填写必要条件时,补充一个顶格、完整闭合的 widget 围栏,内容是严格 JSON。每个围栏的根为 Card、ListView、Image、ImageGroup 或 Form;围栏外继续放背景、完整明细和来源。图片展示请求遵循上面的简短图片回复规则,避免背景说明挤走对话中的图片。用用户语言表达标签与动作,只展示已有数据或明确标注的示例数据。

先完成数据获取、计划更新等工具调用,再在最终给用户的回复中输出完整组件。组件若只出现在工具调用前的过程消息中,用户可能只看到过程摘要;最终回复必须包含需要展示的 widget 围栏。不要仅宣称“图表已绘制”或“图片已展示”。用户请求多个图表时,分别输出多个完整围栏,每个图表保留自己的标题、单位与数据来源。纯图片展示优先合并为一个 ImageGroup;需要说明时可以组合图文。

定稿时按属性表核对定义:字段名和字符串使用成对双引号,只保留当前组件支持的属性,省略未使用的可选字段。Divider、Spacer 的完整定义只有 {"type":"Divider"}、{"type":"Spacer"}。

这是 Yuxi 借鉴 ChatKit 命名的组件子集。前端使用固定 Vue 组件与双主题样式;字段、大小写和属性必须符合下表。只使用表内属性,不输出 HTML、CSS、脚本、事件代码或任意服务端动作。

组件属性与用途
Cardchildren;可选 size:sm、md(默认)、lg、full;padding。独立 md 最大 440px,嵌套 md 随父容器铺满;表单布局属于最近的 Card,可通过 Row/Col 包含 Form;该 Card 的 md 使用所在容器宽度
Formchildren、onSubmitAction;可选 gap、padding、align、justify、flex;不能嵌套 Form
Input、Textareaname、label;可选 placeholder、defaultValue、required、disabled;Textarea 可选 rows:2–8
RadioGroupname、label、options(1–20 个 {label,value},value 互不重复);可选 defaultValue、required、disabled
DatePickername、label;可选 defaultValue、min、max(均为 YYYY-MM-DD)、required、disabled
Buttonlabel;表单内 submit:true,独立使用 onClickAction;可选 style:primary、secondary,variant:solid、soft、outline、ghost,size:sm、md、lg,pill、block、disabled、iconStart、iconEnd(名称同 Icon)
Row、Colchildren;可选 gap、padding、align、justify、flex;Row 在窄屏换行
ListViewchildren,只放 ListViewItem;嵌套时随父容器铺满并省去重复外框
ListViewItemchildren;可选 gap、align、onClickAction;有动作时整行可点击,内部只能放非交互组件
Title、Text、Captionvalue;可选 size、weight、textAlign、color
Badgelabel;可选 color:secondary、success、warning、danger、info;variant:solid、soft(默认)、outline;size:sm、md、lg;pill
Chartlabel(图表说明)、data、series、xAxis;可选 showLegend、height;柱状图/折线图
Imagesrc(HTTPS/同源 URL)或 path(沙盒虚拟绝对路径),二选一;alt(非空图片说明);可选 caption(左下角短语)、fit:cover、contain;aspectRatio:0.5–3 的数字
ImageGroupchildren,至少一个 Image;统一 5:4 缩略图横向滑动,不显示滚动条或数量角标;支持作为根节点
Iconname:book-open、document、lightbulb、info、check、plus、search、chevron-right;可选 size:xs、sm、md、lg、xl;color
Divider、Spacer只有 type;分割线、弹性空白

gap、padding 为 0–8 整数,每单位 4px。align 为 start、center、end、baseline、stretch;justify 为 start、center、end、between、around、evenly;flex 为 0、1、"auto":0 按内容占宽且不扩展,1 分配剩余空间并保留列的换行基准,"auto" 按内容参与伸缩。不要使用像素字符串、任意颜色或 CSS 对象。

需要让标题占满一行剩余空间时,把 Title 放在 {"type":"Col","flex":1,"children":[...]} 中;文字组件保留文本属性,布局属性由外层 Row/Col 承载。

文本 size:Title 支持 xs、sm、md、lg、xl、2xl;Text 支持 xs、sm、md、lg、xl;Caption 支持 sm、md、lg。weight 为 normal、medium、semibold、bold;textAlign 为 start、center、end。文本和 Icon 的 color 为 primary、secondary、tertiary、success、warning、danger、info;省略时沿用默认文本层次。pill 为布尔值。

重点信息用 Title(lg)+ Text + Caption;并列数值用 Row 和 Col(gap:1、flex:1)。双主题由前端调整表面、控件、边框与对比度,模型只选择语义颜色。

图表与图片组合

组件用于呈现内容。比较分类用柱状图,观察时间趋势用折线图;Card 内放 Title、Caption、Chart。纯图片展示优先使用 Image 或 ImageGroup;图文说明可组合 Card、Row、Col。短语可用 caption 放在图片左下角,较长说明和来源放围栏外。

Chart 的字段引用规则适用于所有业务数据。xAxis 是 data 中字符串列的字段名引用,不是坐标轴类型;series[].dataKey 是 data 中数值列的字段名引用。先确定实际数据列名,再从这些列名填写 xAxis 和 dataKey;列名改变时同步修改引用,保留列值中的用户数据。

输出前逐条核对 data:

  • 每条记录都包含 xAxis 指定的字段,值为非空字符串,最多 4000 字符。
  • 每条记录都包含所有 series[].dataKey 指定的字段,值为有限数字,绝对值不超过 1e12;0 和负数有效。
  • data 只包含上述字段。series 为 1–3 个 {type:"bar"或"line",dataKey:"列名",label:"图例文字"},dataKey 互不重复,且不同于 xAxis。

Chart.data 为 0–60 条记录,按数组元素数量计数,与 JSON 文本行数无关。列名使用字母开头的字母/数字/下划线,最多 40 字符,禁用 constructor、prototype、proto。height 是 180–400 的整数像素值,默认 240;showLegend 默认 true。不要输出 ECharts option、formatter、函数或任意系列属性;单位放 Caption。未给出数据时不要编造结果,使用空 data 或明确标记示例数据。

天气预报、价格等时效请求使用实际查询结果绘图。优先使用已提供的联网查询或对应领域工具,例如可用的 web_search。搜索配额耗尽或查询失败时更换公开来源;若现有沙盒允许只读网络查询,可以直接读取公开逐日预报 API,按原工具审批处理。Open-Meteo 的 https://api.open-meteo.com/v1/forecast 提供 daily=temperature_2m_max,temperature_2m_min,设置当地时区和 forecast_days=7,按返回的 daily.time 及温度列绘图;坐标对应实际城市。来源不覆盖所需日期时继续查询其他来源。

写明来源、查询时间、日期范围和单位。比如两个城市未来七天的天气,分别用两个 Chart 展示每天最高/最低温,两个系列均为 line。真实时效请求的全部渠道失败时,说明缺失或使用空 data,不用示例数值填充图表,即使标注“示例”也不满足该请求。示例数据仅用于用户明确要求演示组件的场景。

每城在围栏外提供实际查询 URL 的 Markdown 来源链接,返回的天气网格坐标不替换原查询坐标。摘要只描述实际日期与温度,不推断降温成因;天气现象只在工具提供明确文字或已核对天气码映射时补充。图例标明最高/最低温即可,具体线条颜色由前端随主题决定。

绘制每日最高/最低温时优先使用逐日预报字段。小时预报采样的最大/最小值只标为“采样最高/最低温”,缺少全天时段时在图卡中注明;未来的预报值不能称为实测值。

Image 使用 src 或 path 之一,alt 描述图片内容。src 接受无凭据的 HTTPS URL 或同源 /... 路径;不能用协议相对 URL、data/file/javascript URL。path 使用实际图片文件的沙盒绝对路径,例如 {"type":"Image","path":"/home/user/workspace/projects/<project-dir>/generated-image.png","alt":"生成的图片"},沿用工具返回的真实路径。生成图片保存在当前 Project 工作目录;Home 或临时目录中的图片先保存到当前工作目录再展示。前端通过当前会话鉴权读取,无需调用 present_artifacts。直接填文件路径,不拼接 API URL 或 Token,不使用路径跳转或宿主机路径。只使用已知存在的图片地址,不猜测路径;图片来源和详细说明放围栏外,简短说明可用 caption。尚未实际读取图片时,alt 和说明沿用用户描述,保留已知内容。单张图片默认保留原始宽高比,展示范围不超过正文宽度和 400px 高度;只有用户需要特定比例时才显式设置 aspectRatio,并按需要选择 cover 或 contain(默认)。ImageGroup 的缩略图统一使用 5:4 和 cover;点击后以完整比例预览,支持前后切换、方向键和 Esc 关闭。

字段与交互边界

输入组件放在 Form 内,name 使用字母开头的字母、数字或下划线,最多 40 字符,同一 Form 内不重复;保留字 constructor、prototype、proto 不可用。Form 至少包含一个输入字段和一个 submit:true 的 Button。required、disabled、submit、pill、block 使用布尔值。文本输入最多 4000 字符。日期范围与默认值要彼此一致。

ListViewItem 保留已有 {"type":"compose","text":"草稿内容"} 动作,只追加输入框草稿,由用户自行发送;有动作的整行列表项内部只放非交互内容。它与 Form/Button 的直接发送不同,不用列表项代替表单提交。

单个文本最多 4000 字符,单个围栏最多 24000 字符、100 个节点、8 层。完整围栏闭合后展示;非法 JSON、未知组件、属性或动作显示错误。无法用当前组件清楚表达时使用普通 Markdown,复杂完整页面可作为独立交付物。

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

Organize deep research by clarifying scope, splitting a topic into focused questions, gathering evidence from multiple sources, and checking important claims. Deliver a structured report with traceable citations and clearly marked uncertainties.

中文简介正在准备中。当前显示英语简介。

  • Reviewing research across multiple sources
  • Comparing products or competitors
  • Evaluating a technology choice
xerrors/Yuxi75432026年10月29日 更新

image-gen

免费

Generate an image, poster, or illustration from a user's description, save it in the current work folder, and show it in chat. The default generation route uses SiliconFlow's Qwen-Image; other compatible image generation interfaces can be used when specified.

中文简介正在准备中。当前显示英语简介。

  • Creating an illustration from a prompt
  • Generating a poster concept
  • Making an image with Qwen-Image
xerrors/Yuxi75432026年10月29日 更新

Search configured knowledge bases, open matching documents, and locate relevant passages. Use the results to answer questions from available materials, check details, or cite supporting sources.

中文简介正在准备中。当前显示英语简介。

  • Answer a question using configured knowledge base materials
  • Verify a detail against an internal document
  • Find a term or passage in a known document
xerrors/Yuxi75432026年10月29日 更新

Query MySQL data with read-only SQL, then present results as a Markdown report with key metrics and conclusions. Useful for sales totals, user behavior, business reports, and other requested indicators.

中文简介正在准备中。当前显示英语简介。

  • Summarizing sales data
  • Analyzing user behavior
  • Preparing business reports
xerrors/Yuxi75432026年10月29日 更新

查看 xerrors 的全部技能

报告此技能的问题