通用 AI 生图:文生图 / 图生图 / 图像变体。当用户说 AI 生图、AI 画图、文生图、图生图、生成图片、生成配图、图像生成、AI 出图、AI 作图、换图、改图、图像编辑、给我画一张、生成一张图 时使用。支持 OpenAI 兼容 API 与 apimart 异步 API,用户自备 API key。
日本語の概要は準備中です。原文の説明を表示しています。
知乎问答回答发布:在知乎问题下发布原创回答——搜热门问题、检查可答性、写内容、 Playwright 发布(绕 header 遮挡 + JS 遍历发布按钮)。当用户说"回答知乎问题""在知乎问答下回答" "发知乎回答""知乎答题""帮我回答这个知乎问题""批量回答知乎"时使用。
与 skill-zhihu-publisher 区别:那个发**专栏文章**(zhuanlan),本 SKILL 专发**问答区的回答**;回答内容写作用制作层 SKILL (novel-writer / copywriting)。
インストールする前に、エージェントに与えられる指示の中身を確認できます。
在知乎问答帖子下发布原创回答:搜索热门问题 → 检查可答性 → 调用制作层 SKILL 写内容 → Playwright 发布。 核心脚本:
skills/shared/scripts/zhihu_answer.py(CWD=项目根)。命令速查见references/commands.md。
| SKILL | 定位 |
|---|---|
| skill-zhihu-answer(本 SKILL) | 知乎问答帖的回答发布:搜题 + 写内容 + 发布 |
| skill-zhihu-publisher | 知乎专栏文章(zhuanlan)发布,非问答回答 |
| skill-cross-platform-publish | 一稿多发,多平台分发 |
| novel-writer / copywriting | 制作层,生产回答正文;本 SKILL 调用它 |
1. 搜索热门问题(可选,或用户直接给 URL)
↓
2. 检查可答状态(未答过 + WriteAnswerButton 存在)
↓
3. 制作层写内容(用 novel-writer / copywriting SKILL,或用户自备文本)
↓
4. 发布前人设检查(有 Profile 时)
↓
5. zhihu_answer.py --exec 发布
↓
6. 发布后留痕(persona_gate record + publish-log record)
用已登录的 ZhihuProfile 搜索问题,直接访问候选页取真实回答数(搜索结果元数据不准):
page.goto("https://www.zhihu.com/search?type=question&q=<关键词>", wait_until="networkidle")
# 直接访问候选问题页取真实数据
page.goto("<问题URL>", wait_until="domcontentloaded")
import re
m = re.search(r'(\d[\d,]*)\s*个回答', page.inner_text("body"))
ans_count = int(m.group(1).replace(',', '')) if m else 0
zhihu_answer.py目前不含搜索功能,搜索用临时脚本或用户直接给 URL(逻辑见references/commands.md§6)。
has_write = page.locator(".WriteAnswerButton").count() > 0
already_answered = page.evaluate("""
() => Array.from(document.querySelectorAll('button'))
.some(b => (b.innerText||'').trim() === '编辑回答')
""")
can_answer = has_write and not already_answered
⚠️ 每个用户在同一问题只能回答一次。已答的问题显示「编辑回答」而非「写回答」。 对已答问题不要重复发布,否则进入编辑旧答案流程(发布按钮变为「提交修改」)。
回答正文属于制作层,用制作层 SKILL 写(novel-writer 或 copywriting),也可用用户提供的文本。
内容存为 outputs/主题名/answer_<问题ID>.md。
写作要点(恐怖/悬疑题材示例):第一人称、冷静克制、暗示>直白;短段落多换行适配手机; 开篇 500 字内建立世界观 + 第一个恐怖节点;文末加"本故事纯属虚构"。
cd <项目根> && python skills/shared/scripts/persona_gate.py check --score <评分>
# 始终退出码 0;低于 80 分时告知偏离点,但不阻断用户发布
# Dry-run 预检(默认,不真正发布)
cd <项目根> && python skills/shared/scripts/zhihu_answer.py \
--question <问题URL> --content-file <回答内容.md>
# 正式发布
cd <项目根> && python skills/shared/scripts/zhihu_answer.py \
--question <问题URL> --content-file <回答内容.md> --exec
# 调试模式(有头浏览器,首次校验选择器时用)
cd <项目根> && python skills/shared/scripts/zhihu_answer.py \
--question <问题URL> --content-file <回答内容.md> --exec --headed
根本原因:知乎顶部
<header class="AppHeader">覆盖「写回答」按钮,Playwright 常规.click()因 pointer event 被拦截而 30s 超时。必须绕过覆盖层。
策略1: btn.dispatch_event("click") ← 绕过 header,多数页面有效
策略2: React 完整事件序列(mousedown+mouseup+click,dispatchEvent bubbles)
策略3: btn.focus() + keyboard.press("Enter") ← 最可靠降级,焦点触发 React 事件
每策略后检查 .public-DraftEditor-content 是否出现,出现即成功,否则进入下一策略。
根本原因:内容输入后按钮可能滚出视口,
wait_for(state="visible")超时;且同页有 「发布设置」与「发布回答」两个含「发布」的按钮,需精确匹配「发布回答」。
// JS 遍历全部 button,不依赖视口可见性
const pub = Array.from(document.querySelectorAll('button'))
.find(b => (b.innerText || '').trim().includes('发布回答'));
if (pub) { pub.scrollIntoView({block:'center'}); pub.dispatchEvent(new MouseEvent('click',{bubbles:true,cancelable:true,view:window})); }
降级:locator("button:has-text('发布回答')").wait_for(state="attached") + scroll_into_view_if_needed() + dispatch_event("click")。
cd <项目根> && python skills/shared/scripts/persona_gate.py record \
--topic <主题> --profile <画像> --score <评分> --verdict <pass|warn>
cd <项目根> && python skills/builtin/skill-publish-log/scripts/log.py record \
--platform 知乎 --title <问题标题> --profile <画像> \
--persona-score <评分> --persona-verdict <结论> --skill-source zhihu-answer
| 问题 | 说明 |
|---|---|
| 同一问题只能回答一次 | 检查 can_answer 过滤,已答的跳过 |
| 知乎 Draft.js 编辑器 | 只支持纯文本段落,Markdown **加粗** 不渲染、会原样显示星号 |
| header 遮挡 | 已通过 dispatch_event 三策略绕过 |
| 发布按钮视口外 | 已通过 JS 遍历 + scrollIntoView 绕过 |
| 反爬风控 | 用 --disable-blink-features=AutomationControlled;发布间隔 ≥ 30s |
| 登录态 | 读 ~/.easel-browser-profiles/ZhihuProfile;未登录时输出 未登录知乎 并退出 |
python skills/shared/scripts/zhihu_answer.py --selftest # 脚本自测(不启浏览器)
python skills/shared/scripts/account_stats.py check # playwright 环境
python skills/shared/scripts/web_publisher.py whoami --platform zhihu # 知乎登录态
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
通用 AI 生图:文生图 / 图生图 / 图像变体。当用户说 AI 生图、AI 画图、文生图、图生图、生成图片、生成配图、图像生成、AI 出图、AI 作图、换图、改图、图像编辑、给我画一张、生成一张图 时使用。支持 OpenAI 兼容 API 与 apimart 异步 API,用户自备 API key。
日本語の概要は準備中です。原文の説明を表示しています。
AI 音乐 / BGM 生成:给短视频、社媒内容生成原创背景音乐 / 配乐 / 纯音乐。通过可插拔 provider(阿里 DashScope / Suno 类第三方 API)文生音乐,异步提交→轮询→下载,产物可再裁剪/归一化或加到视频。当用户说“AI 音乐”“AI 配乐”“生成 BGM”“背景音乐”“原创音乐”“AI 作曲”“纯音乐”“给视频配乐”“做首曲子”时使用。与 tts-voiceover 的区别:tts-voiceover 生成人声口播/旁白,ai-music 生成背景音乐/配乐(无人声或带演唱)。
日本語の概要は準備中です。原文の説明を表示しています。
AI 视频生成:文生视频 / 图生视频 / 数字人首帧驱动。通过可插拔 provider(通义万相 Wan / 火山 Seedance / 快手可灵 / OpenAI 兼容)异步生成视频,用户自备 API key。当用户说 AI 视频生成、文生视频、图生视频、AI 生成视频、AI 短视频、让图片动起来、数字人视频、生成一段视频 时使用。与 video-strategy(选型/策略)、video-editing(剪辑处理)、clipify(切片)区别:本 SKILL 是从 0 用 AI 生成新视频。
日本語の概要は準備中です。原文の説明を表示しています。
outputs/ 目录下的产物管理:按日期/平台/类型归档、打标签、搜索历史内容、生成素材清单。 当用户说"整理素材"、"归档"、"找之前的内容"、"搜索历史"、"素材管理"、 "outputs 整理"、"之前做的"时使用。 与其他 produce 层 SKILL 的区别:produce 层负责生成内容, asset-manager 负责生成后的产物管理(归档、检索、标签)。
日本語の概要は準備中です。原文の説明を表示しています。
音频降噪:去除录音中的背景噪声、电流声、风噪、嗡嗡声,基于 ffmpeg 滤镜链(afftdn/highpass/lowpass)。 当用户说"降噪""去噪""去杂音""消除背景噪声""电流声""风噪""录音有杂音""音频降噪"时使用。 和 audio-editing 的区别:audio-editing 做剪辑/转码/音量等通用音频操作(内置 denoise 兜底),本 SKILL 专做降噪调参。
日本語の概要は準備中です。原文の説明を表示しています。
通用音频处理:音频剪辑/裁剪、格式转码(mp3/wav/m4a/aac)、音量归一化、从视频提取音轨、多段拼接、淡入淡出、变速(保音高)。当用户说“剪音频”“裁一段”“转成 mp3”“调音量/响度”“提取音轨/扒音频”“拼接音频”“淡入淡出”“加速/减速音频”“变速不变调”时使用。与 audio-denoise 的区别:audio-denoise 专做降噪,audio-editing 做除降噪外的通用音频操作(也内置 denoise 作为兜底)。
日本語の概要は準備中です。原文の説明を表示しています。