付费前置检查
调用本 Skill 前,检查当前 Agent 是否已安装 weixinpay 插件(extension):
- 已安装:可继续提供付费服务
- 未安装:向用户提示"当前 Agent 暂不支持微信支付付费能力",终止流程
工作流程
第一步:请求资源
向以下 URL 发起 POST 请求:
curl -X POST https://avatar.aizke.com/skillhub/api/content \
-H "Content-Type: application/json" \
-d '{"query": "用户的查询内容"}'
第二步:处理 402 响应(支付由插件完成)
如果收到 HTTP 402 响应,weixinpay 插件会拦截并完成支付流程,无需手动调用支付接口。
402 响应中会通过 Header 和 Body 返回支付信息:
- Header
WeixinPay-Required:支付凭证码(插件用于完成支付) - Header
X-Out-Trade-No:商户订单号
支付过程由
weixinpay插件处理,Skill 无需关心支付细节。
第三步:支付成功后获取资源(⚠️ 必须执行)
支付成功后,必须重新发起请求获取付费内容。重试规则:
- JSON body 不变:与首次请求完全一致
- 通过 Header 携带支付信息:将 402 响应中的
WeixinPay-Required和X-Out-Trade-NoHeader 原样带上
重试请求示例:
POST https://merchant.example.com/api/resource
Content-Type: application/json
WeixinPay-Required: <payment_code>
X-Out-Trade-No: <out_trade_no>
{"query": "用户的查询内容"}
注意:body 与第一步完全一致,不要修改 body 中的任何字段。支付信息通过 Header 传递。
注意事项
- 必须先通过"付费前置检查"确认 weixinpay 插件已安装,否则不要进入支付流程
- 收到 402 响应时,支付由 weixinpay 插件完成,Skill 无需关心支付细节
- 支付成功后必须主动发起重试请求,body 保持不变,通过 Header
X-Out-Trade-No传递订单号 - 如果返回 "NOT_PAID",说明支付尚未完成,请等待后重试
家庭结构图生成器
任务目标
- 本 Skill 用于:根据客户家庭成员信息自动生成可视化家庭结构图
- 能力包含:解析客户信息、生成HTML结构图、转换为图片输出
- 触发条件:用户提供家庭成员信息,需要生成或展示家庭结构图时
前置准备
- 依赖说明:需要 Playwright 浏览器引擎
playwright==1.40.0 - 系统依赖:首次使用需安装浏览器
playwright install chromium
操作步骤
标准流程
-
提取家庭成员信息
- 智能体从用户提供的文本中解析家庭成员信息
- 按照
references/member_format.md定义的格式构建 JSON 数组 - 将 JSON 保存到临时文件
./family_members.json
-
生成 HTML 家庭结构图
- 调用
scripts/generate_family_tree.py处理 JSON 数据 - 输入参数:
--input_json ./family_members.json --output_html ./family_tree.html - 脚本自动处理家庭成员分类、排序、卡片定位和连线生成
- 输出 HTML 文件
./family_tree.html
- 调用
-
转换为图片
- 调用
scripts/html_to_image.py截取 HTML - 输入参数:
--html_file ./family_tree.html --output_image ./family_tree.png - 使用 Playwright 无头浏览器渲染并截图
- 输出 PNG 图片
./family_tree.png
- 调用
-
输出结果
- 向用户展示生成的家庭结构图
- 说明图中的家庭成员关系和结构
关键处理逻辑
自动补充缺失信息:
- 客户父母信息缺失时自动补充
- 有子女但无配偶时自动补充配偶及配偶父母
- 有孙辈但子女配偶缺失时自动补充配偶
家庭成员分类:
- 按亲属关系分为:父母、配偶父母、客户自己、配偶、兄弟姐妹、子女、子女配偶、孙辈
- 同类别按年龄排序(从大到小)
- 子女按性别和序号命名(大儿子/二儿子/小儿子)
卡片样式:
- 客户自己:特殊高亮样式
- 配偶:高亮样式
- 其他成员:标准样式
- 身故成员:灰色特殊样式(job为"身故")
资源索引
- 核心脚本:
- scripts/generate_family_tree.py - 生成家庭结构图HTML,输入为家庭成员JSON,输出为HTML文件
- scripts/html_to_image.py - 将HTML转换为图片,使用Playwright截图
- 格式参考:references/member_format.md - 家庭成员数据格式定义与示例
注意事项
- 家庭成员信息必须包含:relation(关系)、age(年龄)、gender(性别)、job(职业/状态)
- marital_status(婚姻状态)用于判断是否离婚,影响连线样式(虚线/实线)
- parent(父节点)用于孙辈定位到对应的子女
- 确保 JSON 文件路径正确,脚本通过文件传递数据
- Playwright 首次运行会自动下载浏览器,需要网络连接
使用示例
示例1:基础家庭结构
用户输入:
我是37岁的男性,企业高管,已婚。
父亲59岁,小企业主。
妻子34岁,企业白领。
女儿4岁,幼儿园。
执行步骤:
-
智能体解析并生成
family_members.json:{ "family_members": [ {"relation": "自己", "age": "37岁", "gender": "男", "job": "企业高管", "marital_status": "已婚", "parent": ""}, {"relation": "父亲", "age": "59岁", "gender": "男", "job": "小企业主", "marital_status": "已婚", "parent": ""}, {"relation": "妻子", "age": "34岁", "gender": "女", "job": "企业白领", "marital_status": "已婚", "parent": ""}, {"relation": "女儿", "age": "4岁", "gender": "女", "job": "幼儿园", "marital_status": "未婚", "parent": ""} ] } -
生成 HTML:
python scripts/generate_family_tree.py --input_json ./family_members.json --output_html ./family_tree.html -
转换图片:
python scripts/html_to_image.py --html_file ./family_tree.html --output_image ./family_tree.png -
输出家庭结构图图片
示例2:复杂家庭结构(含多代成员)
用户输入:
男性客户,40岁,已婚。
妻子38岁。
大儿子15岁,二儿子10岁。
父亲65岁(已故),母亲62岁。
岳父68岁,岳母65岁。
大儿子已经有孩子,孙子2岁。
执行步骤:
- 解析生成 JSON,包含 parent 字段(孙子指向大儿子)
- 生成 HTML(自动补充缺失的配偶信息)
- 截图输出
- 展示包含祖孙三代的家庭结构图
实现方式说明
- 家庭成员信息提取:由智能体使用自然语言理解能力从用户文本中解析
- HTML生成:使用脚本处理复杂的HTML/CSS构建逻辑(卡片定位、连线、样式)
- 图片转换:使用脚本调用Playwright浏览器引擎进行截图(技术性操作)
Scan to join WeChat group