docs: 全量相对路径规范化(移除 maidou/废弃盘符/应用子技能锚点)

- 自动化任务调度机制.md: Debug SQL cd ~/.workbuddy + python 便携化
- mcn-data-insight(SKILL+抖音数据规则): 榜单落盘 C:/Users/maidou/Desktop 改桌面解析规则
- MCP_工具调用规范.md(主+ dou-analysis 副本): 废弃 MCNVideo AI 路径锚点改 D:/AgentSkill 两步判定
- 创作流程规范.md + 4_/11_ 流程: MCNSkillCase 残留改 产出根目录/{账号名} 规则
- mcn-video-prompt(SKILL+references-add): 废弃 DSHSkill项目 兜底并入用户环境
- 豁免保留: 禁止性规则示例行/变更记录历史行/references-add 路径配置
This commit is contained in:
maogeigei committed 2026-09-04 09:54:30 +08:00
1 parent 9d8f90861b
commit 757c2f1959
13 files changed
+47 -26

No files matched your search

@@ -49,8 +49,8 @@ QUEUED(排队, meta.queuedPosition)
## 六、排查命令(Windows / Git Bash)
```bash
cd "C:/Users/maidou/.workbuddy"
"D:/miniconda3/python.exe" -c "
cd ~/.workbuddy
python -c "
import sqlite3
db = sqlite3.connect('workbuddy.db'); db.row_factory = sqlite3.Row
for r in db.execute(\"SELECT id,name,scheduled_at,next_run_at,last_run_at,status FROM automations WHERE deleted_at IS NULL ORDER BY created_at DESC LIMIT 10\"):
@@ -207,7 +207,7 @@
- 人设校验结论(7项逐项检查结果)
- 合规校验结论(5项逐项检查结果)
- 脚本格式规范检查结果(参照 `../创作流程规范.md` 三、脚本格式规范)
- 🔴 **创作回顾.html**(Gate-6 确认后必须生成)— 整合全流程 1-11 步各阶段产出的可视化回顾页,命名 `脚本{编号}_{脚本标题}_创作回顾.html`,存放于桌面 `MCNSkillCase/{账号名}/` 账号文件夹根目录
- 🔴 **创作回顾.html**(Gate-6 确认后必须生成)— 整合全流程 1-11 步各阶段产出的可视化回顾页,命名 `脚本{编号}_{脚本标题}_创作回顾.html`,存放于产出根目录 `{账号名}/` 账号文件夹根目录(产出根以 `references-add/路径配置.md` 为唯一权威:开发机/用户环境默认桌面 `MCNSkill项目/`、dsh 环境 `D:\dshworkspace\创作任务\`)
## 上下游依赖
- 上游:[步骤9:生成短视频脚本] + [步骤10:生成短视频分镜脚本] + [步骤4:账号设定解析和确认(约束引用)] + [步骤6:生成短视频框架(约束引用)] + [步骤7:生成短视频大纲(约束引用)] + [步骤8:植入广告内容(约束引用)]
@@ -251,7 +251,7 @@ Gate-6 确认通过后,必须生成创作回顾.html。**页面板块顺序严
| S10 分镜脚本 | 10_分镜脚本.md | |
| S11 诊断报告 | 11_诊断报告.md | |
命名规则:`脚本{编号}_{脚本标题}_创作回顾.html`,存放于产出根目录 `MCNSkillCase/{账号名}/`(默认用户桌面,Windows/macOS 按系统解析;用户自定义路径以 `references-add/路径配置.md` 为准)。
命名规则:`脚本{编号}_{脚本标题}_创作回顾.html`,存放于产出根目录 `{账号名}/` 下(产出根以 `references-add/路径配置.md` 为唯一权威:开发机/用户环境默认桌面 `MCNSkill项目/`、dsh 环境 `D:\dshworkspace\创作任务\`;用户自定义路径优先)。
---
@@ -132,7 +132,7 @@
| 账号设定 | 账号基本信息 + 内容策略(定位/内容打法/内容规则/结构偏好/视听风格/系列内容) | 新建账号时填写,后续脚本创作全程参照 |
| 达人设定 | 人物的创作约束(身份/性格/外在特质/价值观与底线/说话风格/行为决策) | 账号设定完成后填写,台词/选题/诊断时做一致性校验 |
> 两份板块合并为同一份产物文件:`{账号名}人设卡片.md`(账号层级,存放于桌面 `MCNSkillCase/{账号名}/` 根目录,**三种模式均落盘**)+ `脚本{编号}/04_人设卡片.md`(脚本层级副本,**仅开发模式落盘**,自动/共创模式不写盘)。
> 两份板块合并为同一份产物文件:`{账号名}人设卡片.md`(账号层级,存放于产出根目录 `{账号名}/` 下,**三种模式均落盘**)+ `脚本{编号}/04_人设卡片.md`(脚本层级副本,**仅开发模式落盘**,自动/共创模式不写盘)。产出根目录以 `references-add/路径配置.md` 为唯一权威(默认开发机/用户环境 = 桌面 `MCNSkill项目/`、dsh 环境 = `D:\dshworkspace\创作任务\`)。
## 上下游依赖
- 上游:[步骤2:需求完善] / [步骤3:对标视频账号拆解(如有)]
@@ -411,13 +411,13 @@ F05 教程教学类脚本必须包含**完整步骤链**,缺任一段 = 格式
# 五、产出路径规范
> 🔴 **每次执行步骤后,必须将产物写入对应文件路径。** 产出根目录默认为**用户电脑桌面**的 `MCNSkillCase/` 文件夹,按运行系统自动解析:**Windows** → `C:\Users\{用户名}\Desktop\MCNSkillCase\`;**macOS** → `~/Desktop/MCNSkillCase/`。开发机与部署机一致,**与技能安装位置无关**;目录不存在时自动创建。
> 🔴 **每次执行步骤后,必须将产物写入对应文件路径。** 产出路径唯一权威 = `references-add/路径配置.md`(运行时先读该文件,用户自定义路径优先)。默认产出根按三环境判定:**①开发机 / ③用户环境** = 用户桌面 `MCNSkill项目/`(`{账号名}/脚本{编号}/` 直挂,无技能文件夹层);**②dsh 环境** = `D:\dshworkspace\创作任务\`(主工作区「创作任务」,与开发机同构 `{账号名}/脚本{编号}/`)。Windows/macOS 按运行系统解析桌面路径;目录不存在时自动创建。
> ⚠️ **用户自定义路径优先**:若 `references-add/路径配置.md` 存在「用户自定义路径」记录,一律以用户指定为准,本默认路径自动失效(AI 每次执行前先查该文件)。
## 输出根目录
```
{产出根目录}/MCNSkillCase/{账号名}/ ← 默认:{用户桌面} 按系统解析(Windows / macOS)
{产出根目录}/{账号名}/ ← 默认:开发机/用户环境 = 桌面 MCNSkill项目/;dsh 环境 = D:\dshworkspace\创作任务\(按系统解析)
{用户自定义根目录}/{账号名}/ ← 用户指定时(以 references-add/路径配置.md 为准)
```
@@ -438,11 +438,11 @@ F05 教程教学类脚本必须包含**完整步骤链**,缺任一段 = 格式
| 🔴 | 创作回顾.html | `脚本{编号}_{标题}_创作回顾.html` | Gate-6确认后自动生成 |
**规则:**
- 步骤1执行时创建目录:在桌面 `MCNSkillCase/` 下先建 `{账号名}/`,再建 `{账号名}/脚本{编号}/`
- 步骤1执行时创建目录:在产出根目录(`references-add/路径配置.md` 判定,默认桌面 `MCNSkill项目/` 或 `D:\dshworkspace\创作任务\`)下先建 `{账号名}/`,再建 `{账号名}/脚本{编号}/`
- `{编号}` 首次为 `01`,后续自增(检查已有文件夹确定编号)
- `{账号名}人设卡片.md` 写入账号根目录(跨脚本复用),步骤4同步写入一份到 `脚本{编号}/04_人设卡片.md`
- 🔶 步骤无对应输入时跳过
- 产出根目录默认固定在用户桌面 `MCNSkillCase/`(开发机与部署机一致),不存在则自动创建,部署到任意电脑均可正常工作
- 产出根目录由 `references-add/路径配置.md` 唯一权威判定(用户未自定义时:开发机/用户环境=桌面 `MCNSkill项目/`、dsh 环境=`D:\dshworkspace\创作任务\`),不存在则自动创建,部署到任意电脑均可正常工作
- **用户自定义路径**:用户明确指定其他位置时,以用户指定为准(记录在 `references-add/路径配置.md`,运行时优先);产出结构(`{账号名}/脚本{编号}/`)不变,仅根目录变化
**三种模式的落盘清单:**
@@ -481,7 +481,7 @@ F05 教程教学类脚本必须包含**完整步骤链**,缺任一段 = 格式
| 知识库 | `references/知识库/` | 账号名、角色名、账号专属机制名 | 通用描述词、方法论术语 | 方法论是通用原则,不是某账号说明书 |
| 素材库·标准库 | `references/素材库/*.md` | 账号名、角色关系绑定(如"XX账号的XX") | 具体物品(菜品/对话/穿搭) | 库本身存具体物品,但不能绑定到某账号 |
| 素材库·分块定义 | `references/素材库/分块定义/` | 账号名、角色名 | 账号A/账号B + 具体物品做格式示例 | 定义文件示格式,不是存数据 |
| MCNSkillCase/ | `{桌面}/MCNSkillCase/{账号名}/`(或用户自定义产出根目录) | — | 全部允许 | 账号专属产出目录(桌面/用户指定位置),就该写具体的 |
| 账号产出目录 | `{产出根目录}/{账号名}/`(产出根由 `references-add/路径配置.md` 判定:桌面 `MCNSkill项目/` 或 `D:\dshworkspace\创作任务\`,或用户自定义) | — | 全部允许 | 账号专属产出目录,就该写具体的 |
## 关键区分:素材库存具体物品 ≠ 硬编码
@@ -504,15 +504,15 @@ F05 教程教学类脚本必须包含**完整步骤链**,缺任一段 = 格式
| 具体角色名 | 角色A/角色B | "做梦" → "角色A" |
| 具体角色关系 | 通用关系描述 | "女老板→做梦" → "角色A→角色B" |
| 账号专属机制 | 通用机制描述 | "金钱机制" → "孩子掌管家庭开支的固定环节" |
| 账号专属路径 | 通用路径占位符 | `MCNSkillCase/做梦/` → `MCNSkillCase/{账号名}/` |
| 账号专属路径 | 通用路径占位符 | `MCNSkill项目/做梦/` → `MCNSkill项目/{账号名}/` |
## 验证命令
每次修改通用文件后,执行以下命令验证零硬编码残留:
```bash
# 在技能根目录执行,排除 MCNSkillCase/ 和 scripts/(账号专属产出目录允许硬编码)
grep -rn "做梦\|俊希\|大炮说电影\|旧梦留声机\|温情短剧\|女老板\|小姨\|广西口音\|手绘手表\|金钱机制" --include="*.md" . | grep -v "MCNSkillCase/" | grep -v "scripts/"
# 在技能根目录执行,排除产出目录 MCNSkill项目/(账号专属产出目录允许硬编码)
grep -rn "做梦\|俊希\|大炮说电影\|旧梦留声机\|温情短剧\|女老板\|小姨\|广西口音\|手绘手表\|金钱机制" --include="*.md" . | grep -v "MCNSkill项目/" | grep -v "scripts/"
```
- 零输出 = 通过 ✅
@@ -15,11 +15,11 @@
## 2) 环境判定与安装策略
复用技能已有的部署检测机制(路径含 `MCNVideo AI` = 开发环境)。
复用技能已有的部署检测机制(两步判定锚点:本机有 `D:\AgentSkill` 且技能根目录路径在 `D:\AgentSkill\` 下 = 开发机;技能路径含 `.dsh` = dsh 部署环境;本机无 `D:\AgentSkill` = 用户环境——开发机装正式+测试,其余只装正式)。
| 环境 | 判定条件 | 安装内容 |
|------|---------|---------|
| **开发环境** | Skill 根目录路径包含 `MCNVideo AI` | `myai-mcp-production` + `myai-mcp-test`(推荐两个都装,可选只装正式) |
| **开发环境** | 本机存在 `D:\AgentSkill` 且 Skill 根目录路径在 `D:\AgentSkill\` 下(源技能仓库) | `myai-mcp-production` + `myai-mcp-test`(推荐两个都装,可选只装正式) |
| **非开发环境** | 部署到其他路径(组员机器、服务器) | 只装 `myai-mcp-production`(正式),不装测试环境 |
---
@@ -91,7 +91,7 @@ export REDFOX_API_KEY="ak_xxx..."
| 环境 | 落盘目录 |
|---|---|
| ①③ 用户环境 / 开发机(本机无 `.dsh`) | `C:\Users\maidou\Desktop\MCNSkill项目\三方数据\红狐数据\抖音榜单\` |
| ①③ 用户环境 / 开发机(本机无 `.dsh`) | 桌面\MCNSkill项目\三方数据\红狐数据\抖音榜单\(Windows/macOS 按系统解析桌面,禁止硬编码用户目录) |
| ② dsh 环境(本机有 `.dsh`) | `D:\dshworkspace\抖音榜单\`(兼容工作台 RANKING_DIR 现有读取) |
### 目录结构(09-03 起分目录管理,按工作台 tab 对齐)
@@ -52,7 +52,7 @@
| 数据类型 | 归档目录(①③用户/开发机) | 归档目录(②dsh 环境) | 说明 |
|---|---|---|---|
| **榜单数据**(账号周榜/视频热榜/点赞榜/涨粉榜/日榜/月榜/七日飙升等) | `C:\Users\maidou\Desktop\MCNSkill项目\三方数据\红狐数据\抖音榜单\` | `D:\dshworkspace\抖音榜单\` | 桌面顶层先分「业务账号/三方数据」:三方数据统一 `三方数据\{数据源}\`(当前=红狐数据);文件命名 `{榜名}_{赛道}_{数据日期}.json` 不加数据源前缀;详见 [SKILL.md 榜单数据落盘规范](../../SKILL.md) |
| **榜单数据**(账号周榜/视频热榜/点赞榜/涨粉榜/日榜/月榜/七日飙升等) | 桌面\MCNSkill项目\三方数据\红狐数据\抖音榜单\(按运行系统解析桌面,禁止硬编码用户目录) | `D:\dshworkspace\抖音榜单\` | 桌面顶层先分「业务账号/三方数据」:三方数据统一 `三方数据\{数据源}\`(当前=红狐数据);文件命名 `{榜名}_{赛道}_{数据日期}.json` 不加数据源前缀;详见 [SKILL.md 榜单数据落盘规范](../../SKILL.md) |
| **信息源数据**(AI信息源、短剧信息源等) | `RedFox数据\信息源数据\YYYY-MM\` | 同(沙箱内) | 按月分文件夹 |
| **作品数据**(单作品爬取、账号诊断等) | `RedFox数据\作品数据\YYYY-MM-DD\` | 同 | 按日分文件夹 |
@@ -17,7 +17,7 @@
| 环境 | 判定条件 | 安装内容 |
|------|---------|---------|
| **开发环境** | Skill 根目录路径包含 `MCNVideo AI` 或 `MCNDouAnalysis` | `myai-mcp-production` + `myai-mcp-test`(推荐两个都装,可选只装正式) |
| **开发环境** | 本机存在 `D:\AgentSkill` 且 Skill 根目录路径在 `D:\AgentSkill\` 下(源技能仓库) | `myai-mcp-production` + `myai-mcp-test`(推荐两个都装,可选只装正式) |
| **非开发环境** | 部署到其他路径(组员机器、服务器) | 只装 `myai-mcp-production`(正式),不装测试环境 |
---
@@ -583,10 +583,10 @@ F4 输出 = 主题 + 导演阐述 + 完整提示词(代码块包裹)。多
### 二、过程产物目录(产出落盘位置)
> **⛔ 产出路径唯一权威:`references-add/路径配置.md`**。执行分镜创作前必须先读该文件;用户自定义路径优先。默认路径按运行环境判定(两步:第一步查本机 `D:\AgentSkill` 是否存在——**无 = ③用户环境**(技能无论装在哪、什么路径);有 → 第二步看技能自身路径——**在 `D:\AgentSkill\` 下 = ①开发机**、**含 `.dsh` = ②dsh 环境**):dsh 环境**优先操作主工作区** `D:\dshworkspace\创作任务\`(与脚本创作技能同根同构),无主工作区时兜底**用户桌面 `DSHSkill项目/`**;开发机/用户环境为**用户桌面 `MCNSkill项目/`**(**账号层直挂**:`{账号名}/提示词{编号}/`,与脚本创作「脚本{编号}」同构,Windows/macOS 自动适配)。按账号名/提示词编号建子目录(编号默认继承上游脚本编号)。
> **⛔ 产出路径唯一权威:`references-add/路径配置.md`**。执行分镜创作前必须先读该文件;用户自定义路径优先。默认路径按运行环境判定(两步:第一步查本机 `D:\AgentSkill` 是否存在——**无 = ③用户环境**(技能无论装在哪、什么路径);有 → 第二步看技能自身路径——**在 `D:\AgentSkill\` 下 = ①开发机**、**含 `.dsh` = ②dsh 环境**):dsh 环境**优先操作主工作区** `D:\dshworkspace\创作任务\`(与脚本创作技能同根同构),无主工作区时并入用户环境;开发机/用户环境为**用户桌面 `MCNSkill项目/`**(**账号层直挂**:`{账号名}/提示词{编号}/`,与脚本创作「脚本{编号}」同构,Windows/macOS 自动适配)。按账号名/提示词编号建子目录(编号默认继承上游脚本编号)。
```
D:\dshworkspace\创作任务\ ← dsh 环境优先根目录(主工作区「创作任务」,与脚本创作同根;无主工作区时兜底桌面 DSHSkill项目/)
D:\dshworkspace\创作任务\ ← dsh 环境优先根目录(主工作区「创作任务」,与脚本创作同根;无主工作区时并入用户环境)
└── {账号名}/ ← 对应账号(从上游脚本创作上下文继承,来自 references-add/路径配置.md;开发机/用户环境为 桌面 MCNSkill项目/{账号名}/,账号层直挂)
└── 提示词{编号}/ ← 与「脚本{编号}」平级(编号默认继承上游脚本编号)
├── 00_剧本分析.md ← Step 1 剧本分析(5维度)
@@ -7,7 +7,7 @@
```
references-add/
├── README.md ← 本文件
├── 路径配置.md ← 产出路径唯一权威(dsh 环境优先 `D:\dshworkspace\创作任务\`、无主工作区时桌面 DSHSkill项目/;开发机/用户环境 桌面 MCNSkill项目/{账号名}/提示词{编号}/ 账号层直挂,运行时必读)
├── 路径配置.md ← 产出路径唯一权威(dsh 环境优先 `D:\dshworkspace\创作任务\`、无主工作区时并入用户环境;开发机/用户环境 桌面 MCNSkill项目/{账号名}/提示词{编号}/ 账号层直挂,运行时必读)
├── 制作流程/ ← 新增/变更的制作流程文件
├── 接口调用/ ← 新增的 API 接口文档与平台规范
└── 知识库/ ← 新增知识(15 维度,与 references/ 结构对应)
@@ -11,7 +11,7 @@
|:---|:---|:---|:---|
| 第一步 | 本机**无** `D:\AgentSkill`(源技能仓库目录,只存在于开发机) | ③ 用户环境(技能无论装在哪、什么路径) | 用户桌面 `MCNSkill项目/`(**账号层直挂**:`{账号名}/提示词{编号}/`,与脚本创作「脚本{编号}」同构) |
| 第二步 | 本机有 `D:\AgentSkill`,且技能路径在 `D:\AgentSkill\` 下 | ① 开发机(源技能) | 用户桌面 `MCNSkill项目/`(**账号层直挂**:`{账号名}/提示词{编号}/`,与脚本创作「脚本{编号}」同构) |
| 第二步 | 本机有 `D:\AgentSkill`,且技能路径含 `.dsh`(如 `C:\Users\{用户名}\.dsh\skills\storyboard-prompt`) | ② dsh 部署环境 | **优先** `D:\dshworkspace\创作任务\`(主工作区「创作任务」目录);主工作区不存在时用用户桌面 `DSHSkill项目/` |
| 第二步 | 本机有 `D:\AgentSkill`,且技能路径含 `.dsh`(如 `C:\Users\{用户名}\.dsh\skills\storyboard-prompt`) | ② dsh 部署环境 | **优先** `D:\dshworkspace\创作任务\`(主工作区「创作任务」目录);无主工作区时并入用户环境 → 桌面 `MCNSkill项目/` |
桌面路径按运行系统自动解析:
@@ -21,7 +21,7 @@
| macOS | `~/Desktop/`(即 `/Users/{用户名}/Desktop/`) |
**AI 执行规则:**
1. 先按两步判定运行环境——第一步查本机 `D:\AgentSkill` 是否存在(**无 = ③用户环境**,技能无论装在哪、什么路径);有 → 第二步看技能自身路径(**在 `D:\AgentSkill\` 下 = ①开发机**;**含 `.dsh` = ②dsh 环境**)。再按上表确定产出根目录(dsh 环境 → **优先操作** `D:\dshworkspace\创作任务\`,主工作区 `D:\dshworkspace` 存在即用(「创作任务」子目录不存在则创建);主工作区不存在时用桌面 `DSHSkill项目/`;开发机/用户环境 → 桌面 `MCNSkill项目/`,**账号层直挂**(`{账号名}/提示词{编号}/`,与脚本创作同构))
1. 先按两步判定运行环境——第一步查本机 `D:\AgentSkill` 是否存在(**无 = ③用户环境**,技能无论装在哪、什么路径);有 → 第二步看技能自身路径(**在 `D:\AgentSkill\` 下 = ①开发机**;**含 `.dsh` = ②dsh 环境**)。再按上表确定产出根目录(dsh 环境 → **优先操作** `D:\dshworkspace\创作任务\`,主工作区 `D:\dshworkspace` 存在即用(「创作任务」子目录不存在则创建);无主工作区时并入用户环境 → 桌面 `MCNSkill项目/`;开发机/用户环境 → 桌面 `MCNSkill项目/`,**账号层直挂**(`{账号名}/提示词{编号}/`,与脚本创作同构))
2. 再判断当前运行系统(Windows / macOS),拼接桌面路径
3. 目录不存在则自动创建
4. 产出结构:`{产出根目录}/{账号名}/提示词{编号}/…`(内部文件结构不变,仅根目录可变)
@@ -31,7 +31,7 @@
**产出结构示例(6步流程产物):**
```
D:\dshworkspace\创作任务\ ← dsh 环境优先根目录(主工作区「创作任务」,与脚本创作同根;无主工作区时兜底桌面 DSHSkill项目/)
D:\dshworkspace\创作任务\ ← dsh 环境优先根目录(主工作区「创作任务」,与脚本创作同根;无主工作区时并入用户环境)
└── {账号名}/ ← 对应账号(从上游脚本创作上下文继承,与脚本创作同口径)
└── 提示词{编号}/ ← 与「脚本{编号}」平级(编号默认继承上游脚本编号;开发机/用户环境为 桌面 MCNSkill项目/{账号名}/提示词{编号}/,账号层直挂)
├── 00_剧本分析.md ← Step 1 剧本分析(5维度)
@@ -58,7 +58,7 @@ D:\dshworkspace\创作任务\ ← dsh 环境优先根目录(主
## 三、解析规则(优先级从高到低)
1. 本文件「用户自定义路径」记录 → 用自定义路径(最新一条生效)
2. 本文件默认路径 → 先按两步判定运行环境(第一步查本机 `D:\AgentSkill` 是否存在:无 = ③用户环境;有 → 第二步看技能路径:在 `D:\AgentSkill\` 下 = ①开发机、含 `.dsh` = ②dsh 环境),再按上表确定产出根目录(dsh 环境 → 优先 `D:\dshworkspace\创作任务\`、主工作区不存在时用桌面 `DSHSkill项目/`;开发机/用户环境 → 桌面 `MCNSkill项目/`,**账号层直挂** `{账号名}/提示词{编号}/`),再按系统拼接桌面路径
2. 本文件默认路径 → 先按两步判定运行环境(第一步查本机 `D:\AgentSkill` 是否存在:无 = ③用户环境;有 → 第二步看技能路径:在 `D:\AgentSkill\` 下 = ①开发机、含 `.dsh` = ②dsh 环境),再按上表确定产出根目录(dsh 环境 → 优先 `D:\dshworkspace\创作任务\`、无主工作区时并入用户环境 → 桌面 `MCNSkill项目/`;开发机/用户环境 → 桌面 `MCNSkill项目/`,**账号层直挂** `{账号名}/提示词{编号}/`),再按系统拼接桌面路径
3. 路径含 `~` 时自动展开为用户主目录
4. 路径含 `{用户名}` 时替换为当前系统用户名
5. 目录不存在时自动创建