素材中枢(Media Hub)
功能概述
本 Skill 是交通安全宣传教育的素材管理系统,提供三大核心能力:
- •自然语言素材搜索:用户用自然语言描述需求,Agent 语义匹配素材库元数据,返回最相关的素材列表
- •自动标签标引:为新入库的素材自动生成多维度标签(事故类型、违法种类、路段、天气、场景等)
- •素材库统计:汇总素材总量、类型分布、热门标签等概况信息
触发条件(When to Use)
当用户的输入匹配以下意图时激活本 Skill:
- •要求搜索或查找交通安全宣传素材
- •提到"找素材""搜索素材""查找素材""有没有……的素材""找一些……的视频/图片"
- •要求为素材添加标签或进行标引
- •提到"素材标签""标引素材""给素材打标签""添加素材"
- •要求查看素材库概况
- •提到"素材统计""素材库有多少""素材概况"
不激活的情况:用户要求生成文案内容(由 content-producer 处理)、审核内容(由 content-reviewer 处理)。
工作流程(Instructions)
模式一:素材搜索
步骤 1:解析搜索意图
分析用户的自然语言查询,提取搜索维度:
| 维度 | 说明 | 示例 |
|---|---|---|
| 场景关键词 | 事故类型、场景描述 | "追尾事故""行人闯红灯" |
| 天气条件 | 天气相关 | "雨天""雾天""冰雪" |
| 道路类型 | 道路环境 | "高速公路""城区路口""农村道路" |
| 素材类型 | 文件格式偏好 | "视频""图片" |
| 时间范围 | 拍摄时间 | "去年冬季""2025年" |
| 来源 | 素材来源 | "执法记录仪""道路监控" |
步骤 2:读取素材索引
读取 data/materials/index.json 获取全量素材元数据列表。
索引数据结构:
json
{
"version": "1.0",
"total_count": 256,
"last_updated": "2026-02-11",
"materials": [
{
"id": "mat-001",
"title": "雨天高速公路追尾事故",
"type": "video",
"tags": ["追尾", "雨天", "高速公路", "事故"],
"thumbnail": "thumbs/mat-001.jpg",
"usage_count": 12
}
]
}
步骤 3:语义匹配
对用户查询词与每条素材的 title、tags、description 进行语义匹配:
匹配策略:
- •直接关键词匹配:查询词与标签完全匹配
- •语义近似匹配:查询"暴雨"可匹配标签含"雨天"的素材;查询"交通事故"可匹配"追尾""碰撞"等
- •多维度交叉匹配:多个查询条件取交集
匹配算法:
code
匹配分数 = Σ(标签匹配度 × 权重) 其中: - 完全匹配:1.0 - 同义词匹配:0.8 - 相关词匹配:0.5
步骤 4:返回搜索结果
为每条匹配的素材返回以下信息:
- •素材 ID 和标题
- •素材类型(视频/图片)
- •标签列表
- •描述信息
- •文件路径(相对路径)
- •使用次数
搜索结果格式:
markdown
## 搜索结果:"{查询关键词}"
共找到 {N} 条相关素材:
### 1. {素材标题}
- **ID**: {mat-XXX}
- **类型**: {视频/图片}
- **标签**: {标签1}, {标签2}, ...
- **描述**: {描述}
- **已使用**: {N} 次
### 2. ...
步骤 5:提供使用建议
根据搜索结果,建议用户:
- •可以将哪些素材用于 content-producer 生成文案
- •哪些素材适合制作海报或视频
- •如果搜索结果不理想,建议调整搜索关键词
模式二:素材标引
步骤 1:获取素材信息
用户提供新素材的基本信息:
- •文件名(必填)
- •素材类型(视频/图片,必填)
- •简要描述(必填,1-2句话说明素材内容)
- •来源(可选,如"执法记录仪""道路监控")
- •拍摄地点(可选)
- •拍摄日期(可选)
步骤 2:生成多维度标签
基于素材信息,使用 LLM 自动生成以下维度的标签:
| 维度 | 示例标签 |
|---|---|
| 事故类型 | 追尾、侧翻、碾压、单车事故 |
| 违法种类 | 酒驾、超速、闯红灯、逆行 |
| 道路类型 | 高速公路、城区道路、农村道路、山区公路 |
| 天气条件 | 晴天、雨天、雾天、冰雪 |
| 时间特征 | 夜间、早高峰、晚高峰 |
| 涉及对象 | 货车、电动车、行人、学生、老年人 |
| 宣传用途 | 安全教育、警示教育、正能量、节日宣传 |
标签生成规则:
- •每条素材至少生成 3 个标签,最多 8 个
- •标签使用中文短词(2-4个字)
- •标签必须基于素材的实际内容,不臆造
步骤 3:生成元数据并保存
生成完整的素材元数据 JSON 文件:
json
{
"id": "mat-{新序号}",
"title": "{标题}",
"type": "{video/image}",
"filename": "{文件名}",
"tags": ["标签1", "标签2", ...],
"source": "{来源}",
"description": "{描述}",
"location": "{地点}",
"date": "{日期}",
"usage_count": 0,
"created_at": "{入库时间}",
"thumbnail": "{缩略图路径}"
}
保存到 data/materials/items/mat-{序号}.json,并更新 data/materials/index.json 索引文件。
标引结果格式:
markdown
## 素材标引完成
- **素材ID**: {mat-XXX}
- **标题**: {标题}
- **生成标签**: {标签列表}
- **保存路径**: data/materials/items/{id}.json
- **索引已更新**: 是
模式三:素材统计
读取 data/materials/index.json,汇总以下统计信息:
- •素材总数
- •按类型分布(视频/图片各多少条)
- •热门标签 Top 10(出现频率最高的标签)
- •最近入库的素材列表
- •使用频率最高的素材列表
统计报告格式:
markdown
## 素材库概况
- **素材总数**: {N} 条
- **视频素材**: {N} 条
- **图片素材**: {N} 条
### 热门标签 Top 10
| 排名 | 标签 | 出现次数 |
|------|------|---------|
| 1 | {标签} | {次数} |
### 最近入库
[最近入库的5条素材]
### 高频使用
[使用次数最多的5条素材]
资源文件清单
| 文件路径 | 类型 | 用途 |
|---|---|---|
reference/tagging-standards.md | 文档 | 标签标引标准 |
reference/search-tips.md | 文档 | 搜索技巧指南 |
data/materials/index.json | 数据 | 素材索引(全量素材概要) |
data/materials/items/mat-{序号}.json | 数据 | 单条素材完整元数据 |
标签体系
标签分类
1. 事故类型标签
- •追尾、侧面碰撞、正面碰撞
- •翻车、侧翻、碾压
- •行人事故、非机动车事故
- •单车事故、多车事故
- •火灾、爆炸
2. 违法类型标签
- •酒驾、醉驾、毒驾
- •超速、超员、超载
- •闯红灯、逆行、占道
- •疲劳驾驶、分心驾驶
- •无证驾驶、准驾不符
3. 道路类型标签
- •高速公路、城市快速路
- •城区道路、郊区道路
- •农村道路、山区公路
- •隧道、桥梁
- •路口、路段
4. 天气条件标签
- •晴天、阴天
- •雨天、暴雨
- •雾天、团雾
- •雪天、冰雪
- •大风
5. 时间特征标签
- •早高峰、晚高峰
- •夜间、凌晨
- •节假日、工作日
- •白天、黄昏
6. 涉及对象标签
- •货车、客车、轿车
- •电动车、摩托车、自行车
- •行人、学生、老年人
- •特种车辆
7. 宣传用途标签
- •警示教育
- •安全教育
- •正能量
- •节日宣传
- •天气提醒
标签命名规范
- •使用中文简短词组(2-4字)
- •使用名词或名词性短语
- •避免使用形容词
- •保持标签含义明确
搜索技巧
有效搜索策略
- •
关键词组合
- •好的查询:"雨天高速公路追尾"
- •避免:"找一些视频"
- •
具体化描述
- •好的查询:"学生闯红灯视频"
- •避免:"交通事故"
- •
多维度限定
- •"2025年冬季农村道路事故"
- •"早高峰城区路口电动车"
同义词扩展
系统自动处理的同义词:
- •暴雨 ↔ 大雨 ↔ 雨天
- •高速公路 ↔ 高速 ↔ 快速路
- •追尾 ↔ 追撞 ↔ 撞车
- •酒驾 ↔ 醉驾 ↔ 酒后驾驶
约束规则
搜索规则
- •搜索结果按相关度排序,最多返回 10 条
- •如果没有匹配结果,告知用户并建议调整搜索词
- •语义匹配时要考虑同义词和近义词
- •不返回与查询完全不相关的素材
标引规则
- •每条素材至少生成 3 个标签,最多 8 个
- •标签使用中文短词(2-4个字)
- •标签必须基于素材的实际内容,不臆造
- •新素材 ID 必须按顺序递增(检查现有最大 ID 后 +1)
- •更新 index.json 时保持数据结构一致
数据完整性
- •不修改已有素材的元数据(除非用户明确要求更新标签)
- •index.json 和单条 JSON 文件中的信息必须保持一致
- •usage_count 字段由其他 Skill 更新,本 Skill 不主动修改
脚本工具
| 脚本 | 功能 |
|---|---|
scripts/search-materials.js | 素材搜索脚本(占位) |
scripts/auto-tag.js | 自动标引脚本(占位) |
scripts/update-index.js | 索引更新脚本(占位) |
使用示例
示例 1:语义搜索
code
用户: 找一些雨天高速公路事故的视频素材 Agent 执行流程: 1. 提取搜索维度: 天气=雨天, 道路=高速公路, 场景=事故, 类型=视频 2. 读取 data/materials/index.json 3. 匹配标签含 "雨天/暴雨" + "高速公路" + "追尾/事故" + type=video 的素材 4. 返回排序后的匹配结果列表
示例 2:模糊搜索
code
用户: 有没有跟学生安全教育相关的素材? Agent 执行流程: 1. 提取搜索维度: 场景=学生安全教育 2. 匹配标签含 "学生/学校/安全教育/校园" 的素材 3. 返回匹配结果
示例 3:素材标引
code
用户: 新入库一个视频素材,文件名 drunk-driving-case-20260201.mp4,内容是2月1日城区查获的一起醉驾案件现场记录 Agent 执行流程: 1. 收集素材信息 2. 生成标签: ["酒驾", "醉驾", "城区", "查处", "夜间", "执法"] 3. 生成 mat-021.json 并保存 4. 更新 index.json
示例 4:查看素材概况
code
用户: 素材库现在有多少素材?各类型分布怎样? Agent 执行流程: 1. 读取 index.json 2. 统计总数、类型分布、热门标签 3. 输出统计报告