Install
openclaw skills install chat-to-podcast将与 AI 的对话内容整理成 Podcast 风格文稿,经用户确认后一键发布到 Halo 博客。 支持:指定话题/时间范围/关键词提取对话 → 自动整理成播客文稿(开场白、对话体、要点总结、结尾)→ 预览确认 → 发布 Halo。 当用户提到「整理成播客」「对话转文稿」「发布播客」「聊天内容发博客」「把我们的对话整理成文章」 「对话整理成播客」「chat to podcast」「生成播客文稿」时触发。
openclaw skills install chat-to-podcast将你与 AI 助手的特定对话内容,自动整理成 Podcast 风格的文稿,确认后一键发布到 Halo 博客。
@halo-dev/cli:
npm install -g @halo-dev/cli
blog-danke)并完成登录halo-blog skill 作为发布规范参考询问用户要整理哪些对话内容。支持以下方式定位:
| 定位方式 | 示例 | 说明 |
|---|---|---|
| 话题关键词 | "关于 Halo 配置变更的对话" | 从当前/历史 session 中搜索匹配内容 |
| 时间范围 | "今天下午的对话"、"最近3天" | 按时间过滤 session 消息 |
| 当前对话 | "刚才我们聊的"、"这段对话" | 从当前 session 上下文提取 |
| 指定 session | "上一次关于 XX 的对话" | 从历史 session 日志中查找 |
方式 A:从当前 session 提取
直接读取当前会话的上下文或 memory/YYYY-MM-DD.md 中的当日记录。
方式 B:按日期筛选历史 session
# 列出最近 session 文件
ls -lt ~/.openclaw/agents/main/sessions/*.jsonl | head -20
# 按日期筛选
for f in ~/.openclaw/agents/main/sessions/*.jsonl; do
ts=$(head -1 "$f" | python3 -c "import sys,json; print(json.load(sys.stdin).get('timestamp',''))" 2>/dev/null)
echo "$ts $f"
done | grep "2026-04-15"
方式 C:按关键词搜索历史 session
for f in ~/.openclaw/agents/main/sessions/*.jsonl; do
if python3 -m json.tool "$f" 2>/dev/null | grep -qi "Halo"; then
echo "MATCH: $f"
fi
done | head -10
找到目标 session 后,提取完整对话记录(不做条数限制)。
序号计数器文件:~/.openclaw/workspace/memory/podcast-counter.json
默认格式:
{
"nextEpisode": 1,
"lastGenerated": ""
}
操作规则:
podcast-counter.json 获取当前 nextEpisode 值05、12)「XX.」文章主标题nextEpisode 加 1,lastGenerated 更新为当天日期,写回文件将提取的对话内容加工为播客风格文稿。核心理念:不是整理会议纪要,而是还原一场真实的探索对话——有提问、有试探、有卡壳、有恍然大悟。
文稿结构:
# [播客标题]
> 📅 录制日期:YYYY-MM-DD
> 🎙️ 主播:[用户名] & [AI助手名]
> 📝 时长:约 X 分钟阅读
> 🏷️ 标签:#话题1 #话题2
---
## 🎬 开场
[用对话体写开场,像播客主持人开场一样自然。]
**[用户名]**:[用一两句话抛出本期核心话题/问题/困惑,像是随口聊起]
**[AI助手名]**:[自然接话,表达兴趣或初步反应]
---
## 💬 正文
### [章节1标题 — 用疑问句或口语化短语]
**[用户名]**:[提出问题/想法/困惑——保留真实的思考痕迹]
**[AI助手名]**:[回应,但不是直接给答案。展现分析思路:
"我先想到的是..." → "但仔细一看..." → "所以其实..."]
**[用户名]**:[追问、质疑、或者补充新信息——体现对话的推进感]
**[AI助手名]**:[进一步展开,可以有修正之前观点的过程]
> 🤔 **[用户名]的思考**:[记录用户在这个环节的关键洞察或决策理由]
### [章节2标题]
**[用户名]**:[新的问题或话题转折——可以加入"等等,我突然想到..."]
**[AI助手名]**:[回应,保留探索过程中的不确定性]
**[用户名]**:[反馈、验证、或表达新理解]
**[AI助手名]**:[确认、补充、或给出最终建议]
> 💡 **转折点**:[记录"从不确定到想明白"的关键拐点]
---
## 🧵 复盘:我们是怎么想明白的
一开始我们以为 [初始假设/问题]...
聊着聊着发现 [转折点/新发现]...
最后得出的结论是 [最终洞察]...
**如果用一句话总结**:[一句精辟的总结]
---
## 🎯 尾声
**[用户名]**:[用对话体收尾——这次聊下来最大的收获/下一步打算做什么]
**[AI助手名]**:[自然回应,可以带一点展望或调侃]
---
*本文由 [AI助手名] 基于真实对话整理,经 [用户名] 确认发布。*
整理原则:
将生成的文稿完整展示给用户,并发送封面图(如果已生成),询问:
播客文稿已整理完毕,请确认:
- ✅ 内容准确,直接发布到 Halo 博客
- ✏️ 需要修改(请告诉我哪里需要调整)
- ❌ 放弃发布
如果用户要求修改,按反馈调整后再次确认,直到用户满意。
头图和封面图是两个不同的东西:
cover 字段,用于列表/卡片缩略图展示image_generate 生成## 🎬 开场 之前,禁止写  或任何带 alt 文本的语法,否则 Halo 会显示图片标题Prompt 必须包含:
头图生成后,另外生成一张封面图,用于 Halo 文章封面(cover)。
cover,不在正文中显示cover用户确认后,按 halo-blog skill 的发布规范执行:
Markdown → HTML
npx marked 转成 HTMLhalo post import-markdown --file article.md --force创建文章
halo post create \
--profile blog-danke \
--name <slug> \
--title <标题> \
--slug <slug> \
--content <html> \
--raw-type html \
--publish true
设置头图、封面、分类、标签
)coverAI 生成声明(必选) 所有由 AI 生成的播客文稿,必须添加 AI 生成声明。 Halo 后台实际读取的是这两个字段:
halo post export-json <name> --output /tmp/post.json
python3 -c "
import json
with open('/tmp/post.json', 'r') as f:
d = json.load(f)
d['post']['metadata']['annotations']['ai_generated'] = 'true'
d['post']['metadata']['annotations']['ai_generated_desc'] = '本文内容由 AI 辅助生成,已经人工审核和编辑。'
with open('/tmp/post.json', 'w') as f:
json.dump(d, f, ensure_ascii=False)
"
halo post import-json --file /tmp/post.json --force
⚠️ 注意:import-json 会将文章状态重置为 DRAFT(未发布),导入后必须重新执行 halo post update <name> --publish true。
可见性检查
halo post update <name> --visible PUBLIC
halo post update <name> --publish true
更新播客序号
发布成功后,立即更新 ~/.openclaw/workspace/memory/podcast-counter.json:
nextEpisode = nextEpisode + 1lastGenerated = 当天日期(YYYY-MM-DD)发布成功后,返回完整反馈:
✅ 播客文稿已发布到 Halo 博客! 📄 文章链接:https://blog.codingshen.top/archives/<slug> 🖼️ 头图:[✅ 吉卜力风格头图已插入正文 / ⏱️ 头图生成超时,纯文字版本] 📕 封面:[✅ Podcast 风格封面已设置 / ⏱️ 封面生成超时] 📝 字数:约 XXXX 字 🏷️ 标签:#日常 #AI生成 #碎碎念
🎙️ [引发好奇的短句]🎙️ 工单能不能自己变聪明?— 我和 AI 折腾了一天配置自动化🎙️ 从"查不到数据"到"原来是这么回事" — 一次排查的完整探索🎙️ 这个权限为什么总是报错?— 踩坑三小时的真实记录