Install
openclaw skills install @thcjp/content-templateopenclaw skills install @thcjp/content-templatev25.0合并: content-catalog已合并到本Skill(R75.5 Skill去重)。内容品类目录查询(返回支持的内容生成品类/格式/平台/方法)由content_catalog.py执行。原content-catalog目录已删除。
运行环境: 本Skill的exec脚本必须使用 Python 3.11.x (
.venv/Scripts/python.exe) 执行。禁止使用系统Python 3.14+。
内容模板管理、Jinja2引擎变量替换/条件渲染/循环/继承、A/B测试、文案润色(去AI味)、内容品类目录查询。
{var}格式){% if has_discount %}限时优惠{% endif %} 按条件显示内容{% for item in features %}• <动态配置>{% endfor %} 批量生成列表{% extends "parent_id" %} + {% block name %} 继承父模板{var}和Jinja2格式<动态配置>/{% if var %}/{% for x in var %}tpl_{category}_{seq}data/content/templates/{tpl_id}.json,注册索引到 index.json<动态配置>/{% %}→Jinja2引擎,仅含{var}→自动转换为<动态配置>后Jinja2渲染<动态配置> + 条件渲染{% if %} + 循环{% for %}{% extends "parent_id" %},加载父模板{% block name %}被子模板{% block name %}新内容{% endblock %}覆盖多版本改写: 克制版(品牌官方号) / 种草版(KOC素人号) / 转化版(促销活动)
旧格式(向后兼容): 大家好,今天是{date},今天我们来{topic}
Jinja2格式: 大家好,今天是<动态配置>,今天我们来<动态配置>
{% if has_discount %}限时特惠,原价<动态配置>元,现价<动态配置>元{% endif %}
{% if is_new %}新品首发{% else %}经典回归{% endif %}
{% for feature in features %}• <动态配置>
{% endfor %}
{% for item in product_list %}<动态配置> - <动态配置>元
{% endfor %}
父模板(base): {% block title %}默认标题{% endblock %} - {% block content %}默认内容{% endblock %}
子模板: {% extends "tpl_base_001" %}{% block title %}自定义标题{% endblock %}{% block content %}自定义内容{% endblock %}
| 类型 | 说明 | 适用场景 |
|---|---|---|
| video | 视频文案模板 | 短视频、Vlog |
| article | 图文文案模板 | 小红书图文 |
| reply | 回复话术模板 | 客服自动回复 |
| product_desc | 商品描述模板 | 电商商品描述 |
| hook | 引流钩子模板 | 评论区/私信引流引导 |
完整模板JSON格式、钩子模板字段说明、exec脚本命令、输入/输出JSON示例、润色语气适配表详见 scripts/content_template_reference.json
{
"action": "create|generate|replace|ab_test|polish|render_inheritance",
"template_id": "tpl_video_001",
"name": "视频文案模板",
"type": "video|article|reply|product_desc|hook",
"category": "video",
"content": "大家好,今天是<动态配置>,今天我们来<动态配置>",
"variables": [{"name": "date", "default": ""}, {"name": "topic", "default": ""}],
"extends": "tpl_base_001",
"metric": "click_rate",
"duration": "7d"
}
字段说明:
action: 操作类型(create创建模板/generate LLM生成内容/replace渲染/ab_test A/B测试/polish文案润色/render_inheritance继承渲染)template_id: 模板ID(tpl_{category}_{seq}格式)type: 模板类型(video视频/article图文/reply回复话术/product_desc商品描述/hook引流钩子)content: 模板内容,支持Jinja2语法(<动态配置>变量/{% if %}条件/{% for %}循环/{% extends %}继承)variables: 变量定义数组(name变量名/default默认值)extends: 父模板ID(用于模板继承)metric: A/B测试指标(click_rate点击率/conversion_rate转化率)duration: A/B测试持续时间{
"success": true,
"data": {
"template_id": "tpl_video_001",
"generated_content": "大家好,今天是2026-04-07,今天我们来健身打卡",
"engine_used": "jinja2",
"variables_resolved": 2,
"variables_missing": [],
"ab_test_result": null,
"polished_content": null
},
"error": null,
"code": null
}
字段说明:
template_id: 模板IDgenerated_content: 渲染后的内容(replace/render_inheritance操作返回)engine_used: 实际使用的渲染引擎(jinja2/simple_string_replace降级)variables_resolved: 成功解析的变量数variables_missing: 缺失的变量列表(降级使用默认值)ab_test_result: A/B测试结果(winner_template_id/significance/sample_size)polished_content: 润色后的内容(polish操作返回)完整输入/输出JSON示例详见 scripts/content_template_reference.json
| 异常类型 | 错误代码 | 处理方式 |
|---|---|---|
| 模板不存在 | TEMPLATE_NOT_FOUND | 返回错误提示 |
| 变量缺失 | MISSING_VARIABLES | 返回缺失变量列表 |
| 参数无效 | INVALID_PARAMS | 返回参数校验错误 |
| A/B测试样本不足 | INSUFFICIENT_SAMPLE | 返回当前数据,标注样本不足 |
| Jinja2语法错误 | CT-ERR-07 | 降级为简单字符串替换 |
| 父模板不存在 | CT-ERR-05 | 返回错误提示 |
| Jinja2不可用 | CT-ERR-06 | 降级为简单字符串替换 |
python scripts/content_template.py (action=create, content="大家好,今天是{date},今天我们来{topic}"){date}→<动态配置>→Jinja2渲染→"大家好,今天是2026-04-07,今天我们来健身打卡"更多示例(A/B测试/文案润色)详见 scripts/content_template_reference.json
| 版本 | 日期 | 变更说明 |
|---|---|---|
| v2.1 | 2026-06-13 | Jinja2模板引擎升级: 条件渲染/循环/继承,向后兼容旧{var}格式 |
| v2.0 | 2026-05-16 | 新增hook模板类型,支持引流钩子 |
| v1.3 | 2026-05-03 | 新增文案润色场景 |
| v1.0 | 2026-04-05 | 初稿 |