ワンクリックで
pipeline-persondata
/pipeline-persondata、修待补充、人物数据占位符 — Content Pipeline Stage 4 (person-data 构造) 运维 skill,修 "待补充/暂无数据" 导致的图片占位符问题
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
/pipeline-persondata、修待补充、人物数据占位符 — Content Pipeline Stage 4 (person-data 构造) 运维 skill,修 "待补充/暂无数据" 导致的图片占位符问题
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
今日头条自动发布工具 - 微头条/文章/视频 + NAS 统一调度(生产就绪)
/pipeline-diagnose、pipeline 挂了、看 pipeline 状态 — Content Pipeline 总体健康诊断,一键输出所有关键状态并引导到具体 stage skill
/pipeline-regen、重生图、V6 出图失败 — Content Pipeline Stage 4 (V6 图片生成) 运维 skill
/pipeline-run、用 X 做一套内容、给我生成 X 的内容 — Content Pipeline 手动即时触发(主理人在 Claude Code 对话里临时跑一条,走和 Dashboard 自动路径完全一样的 6 阶段 pipeline,但即时给进度反馈)
金句卡片生成工作流的质检和选择
抖音自动发布工具 - 图文/视频/文章三种类型(生产就绪)
| name | pipeline-persondata |
| description | /pipeline-persondata、修待补充、人物数据占位符 — Content Pipeline Stage 4 (person-data 构造) 运维 skill,修 "待补充/暂无数据" 导致的图片占位符问题 |
这是最常用的介入点——image_review 会因为 person-data.json 里含 "待补充/暂无数据/待产出" 直接 FAIL。本 skill 完整演示主理人已验证过的全流程。
person-data 含占位符,LLM 生成不完整KEYWORD="<关键词>"
# 1. 把 keyword slug 化(中文关键词带空格,直接 glob 会失败)
SLUG=$(python3 -c "import re; print(re.sub(r'-+','-',re.sub(r'[^a-zA-Z0-9\u4e00-\u9fff-]','-','${KEYWORD}'))[:40])")
# 2. 定位 output_dir(用 slug)
OUT_DIR=$(ls -d ~/content-output/*"${SLUG}"* 2>/dev/null | grep -v research | head -1)
echo "SLUG=${SLUG}"
echo "OUT_DIR=${OUT_DIR}"
# 2. 看现有 person-data 是否含占位符
grep -cE "待补充|暂无数据|待产出" "${OUT_DIR}/person-data.json" 2>/dev/null
# 3. 看 findings 数量(决定限制数)
find ~/content-output/research -name findings.json | xargs -I {} \
python3 -c 'import json,sys; d=json.load(open(sys.argv[1])); print(sys.argv[1], "count=", len(d.get("findings",[])))' {}
# 不清会导致 V6 脚本沿用旧 person-data + 老 PNG 混在 cards/
rm -f "${OUT_DIR}/person-data.json"
rm -f "${OUT_DIR}/cards/"*.png
rm -f ~/claude-output/images/*.png # V6 输出默认位置
cd /Users/administrator/perfect21/zenithjoy/services/content-pipeline
KEYWORD="${KEYWORD}"
OUT_DIR="${OUT_DIR}"
# 限制 findings 数避免 prompt 过长;主理人实测 5 条效果最稳
PYTHONPATH=. python3 - <<PYEOF
import json, glob, re
from pathlib import Path
from pipeline_worker.person_data_builder import build_person_data
KEYWORD = "${KEYWORD}"
OUT_DIR = Path("${OUT_DIR}")
slug = re.sub(r"-+", "-", re.sub(r"[^a-zA-Z0-9\u4e00-\u9fff-]", "-", KEYWORD))[:40]
findings = []
for fp in glob.glob(f"/Users/administrator/content-output/research/*-{slug}-*/findings.json"):
data = json.load(open(fp))
findings = data.get("findings", [])[:5] # 硬限 5 条
break
assert findings, "findings 为空,先跑 /pipeline-research"
person = build_person_data(KEYWORD, findings)
print("name=", person["name"], "handle=", person["handle"])
print("timeline=", len(person["timeline"]), "schedule=", len(person["day_schedule"]), "qa=", len(person["qa"]))
(OUT_DIR / "cards").mkdir(parents=True, exist_ok=True)
(OUT_DIR / "person-data.json").write_text(
json.dumps(person, ensure_ascii=False, indent=2), encoding="utf-8")
print("→", OUT_DIR / "person-data.json")
PYEOF
说明:build_person_data 会调 tier=thalamus LLM 按 V6 字段预算生成合规 JSON,失败时用 findings 真实字段硬填 fallback(不再出现 "待补充")。
KEYWORD_SLUG=$(python3 -c "
import re
print(re.sub(r'-+', '-', re.sub(r'[^a-zA-Z0-9\u4e00-\u9fff-]', '-', '${KEYWORD}'))[:40])
")
node /Users/administrator/claude-output/scripts/gen-v6-person.mjs \
--data "${OUT_DIR}/person-data.json" \
--slug "${KEYWORD_SLUG}"
# 产出 9 张 PNG 到 ~/claude-output/images/
说明:V6 产出固定位置 ~/claude-output/images/,不直接写 cards/。
mkdir -p "${OUT_DIR}/cards"
cp ~/claude-output/images/${KEYWORD_SLUG}-*.png "${OUT_DIR}/cards/"
ls "${OUT_DIR}/cards/"*.png | wc -l # 期望 9
PIPELINE_ID="<pipeline_id,从 /api/pipelines 查>"
NAS_BASE="/volume1/workspace/vault/zenithjoy-creator/content"
NAS_PATH="${NAS_BASE}/${PIPELINE_ID}"
ssh nas "mkdir -p '${NAS_PATH}'"
tar -cf - -C "${OUT_DIR}" . | ssh nas "cd '${NAS_PATH}' && tar -xf -"
# 占位符数 = 0
grep -cE "待补充|暂无数据|待产出" "${OUT_DIR}/person-data.json"
# 期望:0
# 9 张 PNG
ls "${OUT_DIR}/cards/"*.png | wc -l
# 期望:9
# NAS 同步成功
ssh nas "ls '${NAS_PATH}/cards/' | wc -l"
# 期望:≥ 9 + person-data.json + copy.md + llm-card-content.json
| 症状 | 原因 | 修法 |
|---|---|---|
待补充 漫天飞 | 旧版 prompt 只让 LLM 生成 7 字段,timeline/schedule/qa 走模板兜底 | 新版 person_data_builder.py 已扩 prompt 生成所有字段;重跑 build_person_data |
| name 是整段 keyword | LLM 抽取不成功,走 _fallback_name 启发式 | 换简短 keyword 或手工改 name 字段 |
head 里只显前 2 字 | name > 8 字被模板 substring 裁切 | 按预算改短 name(BUDGET["name"]=8) |
| V6 脚本报 "数据文件不存在" | person-data.json 没写到位 | 确认步骤 2 的 OUT_DIR/cards/person-data.json 存在 |
| PNG 生了但 cards/ 空 | V6 输出到 ~/claude-output/images/,没 cp | 步骤 4 必须手动 cp |
| avatar 是 initials 头像 | avatar_b64_file: null → 模板用首字母画圈 | 这是预期行为,不是 bug |
| image_review 仍报占位符 | step 1 没清 cards/ 老图 | 重跑,确保步骤 1 rm 完整 |
| LLM 返回字符超预算 | LLM 超预算 | _enforce_budget 会硬截断,无需担心 |
tar over ssh 报 Permission denied | NAS 账号是中文用户名,rsync mangle | 本命令用 tar+ssh alias 绕开,rsync 不行 |
/Users/administrator/perfect21/zenithjoy/services/content-pipeline/pipeline_worker/executors/generate.py/Users/administrator/perfect21/zenithjoy/services/content-pipeline/pipeline_worker/person_data_builder.py/Users/administrator/claude-output/scripts/gen-v6-person.mjsperson_data_builder.py 顶部 BUDGET dict/Users/administrator/perfect21/zenithjoy/services/content-pipeline/pipeline_worker/nas_uploader.py