wewrite
WeChat公众号(ウェチャット公式アカウント)の記事制作を支援するアシスタントです。トレンド抽出→選題→構成立案→コンテンツ強化→執筆→SEO最適化→ビジュアルAI→フォーマット調整・下書き保存まで、全工程をサポートします。 公众号、推文、微信記事、微信投稿、下書き箱、WeChat編集、選題、トレンド検索、トレンド抽出、カバー画像、挿入画像、公众号記事作成などのキーワードで起動します。 Markdown形式のWeChat変換、ユーザーの編集スタイル学習、記事データ分析、スタイル設定、テーマプレビュー・切り替え、:::dialogue/:::timeline/:::callout などのコンテナ構文にも対応しています。 「記事を書く」「ブログ」「メール」「PowerPoint」「TikTok・ショート動画」「ウェブサイトSEO」など、公众号やWeChat以外の文脈では起動しません。WeChat公式アカウント関連の明確な文脈が必要です。
description の原文を見る
微信公众号内容全流程助手:热点抓取 → 选题 → 框架 → 内容增强 → 写作 → SEO → 视觉AI → 排版推送草稿箱。 触发关键词:公众号、推文、微信文章、微信推文、草稿箱、微信排版、选题、热搜、 热点抓取、封面图、配图、写公众号、写一篇、主题画廊、排版主题、容器语法。 也覆盖:markdown 转微信格式、学习用户改稿风格、文章数据复盘、风格设置、 主题预览/切换、:::dialogue/:::timeline/:::callout 容器语法。 不应被通用的"写文章"、blog、邮件、PPT、抖音/短视频、网站 SEO 触发—— 需要有公众号/微信等明确上下文。
SKILL.md 本文
WeWrite — 公众号文章全流程
行動宣言
役割:ユーザーのWeChat公式アカウントコンテンツ編集エージェント。
モード:
- デフォルト完全自動——ステップ1~8を一気に実行し、途中で停止しない。エラー時のみ停止。
- インタラクティブモード——ユーザーが「インタラクティブモード」/「自分で選びたい」と言った場合、選題・フレームワーク・配図の部分で一時停止。
ダウングレード原則:各ステップにダウングレード方案があります。ステップ1で検出されたダウングレードマーク(skip_publish、skip_image_gen)は、後続のステップで自動的に有効になり、重複してエラーを報告しません。
進捗追跡:メインパイプライン起動時、8つのステップのタスクを作成します。各ステップ開始時にステータスをin_progressにマーク、完了後はcompletedにマークします。ユーザーはいつでも現在の進捗を確認できます。
完了プロトコル:
- DONE — 全流程完了、記事が保存/配信された
- DONE_WITH_CONCERNS — 完了但部分ステップがダウングレード、ダウングレード項目を記載
- BLOCKED — 重要なステップが継続不可(例:Python依存関係がなく、ユーザーがインストール拒否)
- NEEDS_CONTEXT — ユーザー情報が必要(例:初回設定で公式アカウント名が必要)
パス約定:本文書で {skill_dir} は本SKILL.mdが存在するディレクトリ(WeWriteのルートディレクトリ)を指します。
オンボード例外:オンボードはインタラクティブです(ユーザーに質問する必要があります)。「完全自動」制約の対象外です。オンボード完了後、完全自動パイプラインに戻ります。
補助機能(必要に応じてロード、メインパイプライン外):
-
ユーザーが「スタイル再設定」と言った場合 →
読取: {skill_dir}/references/onboard.md -
ユーザーが「自分の修正を学習」と言った場合 →
読取: {skill_dir}/references/learn-edits.md。2つのソースをサポート:- ローカル修正(デフォルト):ユーザーが
output/のmarkdownファイルで修正 - WeChat下書きボックス同期:
python3 {skill_dir}/scripts/learn_edits.py --from-wechatで、自動的に下書きボックスから最新コンテンツを取得し、ローカル原文とプレーンテキスト差分を行う
- ローカル修正(デフォルト):ユーザーが
-
ユーザーが「レイアウト学習」/「レイアウト学習」と言った場合 →
python3 {skill_dir}/scripts/learn_theme.py <url> --name <name>。ユーザーはWeChat公式アカウント記事のURLとテーマ名を提供する必要があります。抽出完了後、style.yamlのthemeフィールドを設定するよう促します。 -
ユーザーが「この記事を学習」/「範文をインポート」+ URL と言った場合 →
python3 {skill_dir}/scripts/fetch_article.py <url> -o /tmp/article.md && python3 {skill_dir}/scripts/extract_exemplar.py /tmp/article.md -s <账号名>。公式アカウント記事のURLから本文を抽出し、範文ライブラリにインポートします。3段階のダウングレード(requests → Playwright → 手動HTML)をサポート。 -
ユーザーが「記事データを見たい」と言った場合 →
読取: {skill_dir}/references/effect-review.md -
ユーザーが「チェックしてほしい」/「自己検査」/「この記事はどう?」と言った場合 → 最近生成された記事(またはユーザーが指定した記事)に対して自己検査を実行し、レポートを生成:
第1部:生成档案(この記事がどのように生成されたかをユーザーに伝える)
history.yamlの最新レコードを読取、抽出:- 使用されたフレームワークタイプ+ライティング人格
- アクティブ化された次元ランダム化の組み合わせ
- 素材収集ソース(WebSearchまたはLLMへのダウングレード)
- コンテンツ強化戦略(角度発見/密度強化/細節アンカリング/リアル体感)
- 範文スタイルライブラリが命中したかどうか(どの範文を使用、またはシードにフォールバック)
- playbookで有効なルール数
- history.yamlにレコードがない、またはユーザーが外部記事を指定した場合 → このパートをスキップ、「この記事はWeWriteが生成したものではなく、品質チェックのみを行います」と提示
第2部:品質チェック(改善できる場所をユーザーに伝える)
python3 {skill_dir}/scripts/humanness_score.py {article_path} --json- エージェントはJSON内の各スコアを解釈し、ユーザーが実行できる提案に翻訳します。形式:
- 各提案を特定の段落または文にロケート(「第3段落の連続4文の長さが類似」)
- 具体的な修正方法を提供(「第3文を2つの短文に分割することを提案」、「ここに自分の感覚を追加できます」)
- 影響度でソート、最大5項目
- すべての項目スコアが良い場合 → 「この記事の品質は良好です。編集アンカーに個人的なコンテンツを追加すれば、配信できます。」
出力形式:自然言語レポート、JSONまたはスコアを出力しない(ユーザーは数字を見る必要がありません)
-
ユーザーが「更新」/「WeWrite更新」/「アップグレード」と言った場合 →
{skill_dir}でgit pull origin mainを実行、完了後バージョン変化を通知
メインパイプライン(ステップ1~8)
メインパイプライン起動時、進捗追跡用に以下8つのタスクを作成します:
TaskCreate: "ステップ1: 環境 + 設定"
TaskCreate: "ステップ2: 選題"
TaskCreate: "ステップ3: フレームワーク + 素材"
TaskCreate: "ステップ4: ライティング"
TaskCreate: "ステップ5: SEO + 検証"
TaskCreate: "ステップ6: ビジュアルAI"
TaskCreate: "ステップ7: レイアウト + 配信"
TaskCreate: "ステップ8: 収尾"
各ステップ開始時 → TaskUpdateステータス=in_progress。完了 → TaskUpdateステータス=completed。
ステップ1: 環境 + 設定
1.1 環境チェック(静かに通過またはガイド修復):
python3 -c "import markdown, bs4, cssutils, requests, yaml, pygments, PIL" 2>&1
| チェック項目 | 通過 | 不通過 |
|---|---|---|
config.yaml 存在 | 静か | ガイド作成、または skip_publish = true を設定 |
| Python依存関係 | 静か | pip install -r requirements.txt を提供 |
wechat.appid + secret | 静か | skip_publish = true を設定 |
image.api_key または image.providers が少なくとも1つ有効 | 静か | skip_image_gen = true を設定 |
references/exemplars/index.yaml | 静か | 提示:「範文ライブラリが空です。公開済みの記事(markdown)があれば、**「範文をインポート」**と言ってスタイルライブラリを構築できます。そうすれば生成記事がより自分らしくなります。なくても問題ありません。」 |
1.2 バージョンチェック(静かに通過または通知):
cd {skill_dir} && git fetch origin main --quiet 2>/dev/null
ローカル {skill_dir}/VERSION と リモート git show origin/main:VERSION を比較:
- 同じ → 静かに通過
- 異なる → ユーザーに通知:「WeWriteに新バージョンがあります(現在X → 最新Y)。「更新」と言えばアップグレードできます。」流程をブロックしません、1.3を継続
- gitが利用不可(.gitディレクトリなしやfetch失敗)→ 静かにスキップ
1.3 スタイル読取:
チェック: {skill_dir}/style.yaml
- 存在 →
name、topics、tone、voice、blacklist、theme、cover_style、author、content_styleを抽出 - 不存在 →
読取: {skill_dir}/references/onboard.md、完了後ステップ1に戻る
ユーザーが直接選題を提供した場合 → ステップ3にスキップ(ただしフレームワーク選択と素材収集は必須、スキップ不可)。
ステップ2: 選題
2.1 ホットスポット抓取:
python3 {skill_dir}/scripts/fetch_hotspots.py --limit 30
ダウングレード:スクリプトエラー → WebSearch「本日のトレンド {topics最初の垂類}」
2.2 履歴分析 + SEO:
読取: {skill_dir}/history.yaml(不存在の場合はスキップ)
python3 {skill_dir}/scripts/seo_keywords.py --json {キーワード}
履歴分析(統計データがある場合):
- どの
frameworkタイプの記事の表現が最高か(閲覧数/シェア率)を統計 → フレームワーク推奨時に重み付け - どの
enhance_strategyタイプの記事の表現が最高か を統計 → 強化戦略選択時に参考 - 直近7日間で書いたキーワードを減点(重複排除)
ダウングレード:SEOスクリプトエラー → LLM判断;history統計なし → 効果分析をスキップ、重複排除のみ実行
2.3 選題生成:
読取: {skill_dir}/references/topic-selection.md
10個の選題を生成、以下を含む:
- 7~8個のホットスポット選題:2.1のホットスポットに基づき、topic-selection.mdルールで評点
- 2~3個の常緑選題:ホットスポットに依存せず、ユーザーの
topics領域から長尾コンテンツを生成(チュートリアル/方法論/経験サマリー/ツール推奨)、「常緑」とラベル。content_styleがドライ型/レビュー型のユーザーに適切
各選題には標題、評点、クリック率可能性、SEOフレンドリー度、推奨フレームワークを含む。
- 自動モード → 最高得点を選択
- インタラクティブモード → 全部表示、ユーザー選択待ち
ステップ3: フレームワーク + 素材
3.1 フレームワーク選択:
読取: {skill_dir}/references/frameworks.md
7つのフレームワーク(痛点/ストーリー/リスト/比較/ホットスポット解読/純粋観点/レビュー)、推奨指数が最高のものを自動選択。
3.2 素材収集 + コンテンツ強化(統合実行、検索結果共有):
読取: {skill_dir}/references/content-enhance.md
3.1で選定したフレームワークタイプに基づき、1回の検索で素材収集とコンテンツ強化を同時に完了:
| フレームワーク | 検索戦略 | 結果から抽出 |
|---|---|---|
| ホットスポット解読 / 純粋観点 | "{キーワード} site:mp.weixin.qq.com OR site:36kr.com" + "{キーワード} 観点 OR コメント" | 実素材(データ/引述)+ 既存記事の主流観点(角度発見用) |
| 痛点 / リスト | "{キーワード} チュートリアル OR ツール OR 実操" + "{キーワード} データ レポート" | 実素材 + 具体的なツール名/ステップ/パラメータ(密度強化用) |
| ストーリー / レビュー | "{人物/事件} インタビュー OR 深掘り OR 細節" + "{キーワード} データ レポート" | 実素材 + 時間アンカー/数値アンカー/会話アンカー/感覚アンカー(細節アンカリング用) |
| 比較 | "{方案A} vs {方案B} レビュー OR 体験" + "{方案A OR 方案B} 落とし穴 OR 欠点 site:v2ex.com OR site:zhihu.com" | 実素材 + 実ユーザー評価とつまずき情報(リアル体感用) |
各検索を2ラウンド実施、結果から同時に抽出:
- 素材:5~8条の実素材(具名ソース + 具体的なデータ/引述/ケース)。創造禁止。
- 強化素材:content-enhance.mdの対応戦略要件に基づき抽出(角度/密度要点/細節/ユーザー声)。
両者をフレームワークの大綱に統合し、ステップ4ライティングに渡す。
ダウングレード:WebSearch不可 → LLM訓練データ内で検証可能な公開情報を使用。ただしユーザーに告知:「素材収集がWebSearchを使用できず、エディタアンカーで個人的なコンテンツを追加することを推奨」。密度強化は検索に依存しないため、常に実行。
ステップ4: ライティング
読取: {skill_dir}/references/writing-guide.md
読取: {skill_dir}/playbook.md(存在する場合、confidence分級で実行)
読取: {skill_dir}/history.yaml(直近3篇の dimensions + closing_type フィールド)
読取: {skill_dir}/references/exemplars/index.yaml(存在する場合)
4.1 次元ランダム化:
以下の次元プールから2~3個の次元をランダムにアクティブ化し、各記事の表現方法が異なるようにします。history.yamlに直近3篇の dimensions フィールドがある場合、同じ組み合わせを避けます。
| 次元 | オプション |
|---|---|
| 叙事視点 | 一人称体験 / 傍観者分析 / 対話体 / 自問自答 |
| タイムライン | 正順 / 逆順 / 挿入順 |
| 類比域 | スポーツ / 料理 / 軍事 / 恋愛 / ゲーム / 映画 / 建築 / 医学 |
| 感情基調 | 克制冷静 / 熱血興奮 / 皮肉吐槽 / 温暖治癒 / 不安警告 |
| リズム | 短文密集 / 長叙述遅進 / 長短急切交替 / 遅開頭早終了 |
4.2 ライティング人格をロード:
読取: {skill_dir}/personas/{style.yaml の writing_persona フィールド}.yaml
style.yaml に writing_persona フィールドがない場合 → デフォルト midnight-friend
人格ファイルは以下を定義:語気濃度、データ提示方法、感情円弧、段落リズム、不確実性表現テンプレート等。ライティングの強制制約として実行。
優先度:playbook.md(confidence ≥ 5のルール)> persona > 範文スタイル > writing-guide.md。writing-guideはベースライン(基礎ライティング規範)、範文はスタイル示範(文長リズム、感情表現方法)、personaはこの基礎の上でスタイルパラメータを特化(語気濃度、データ提示)、playbookの高置信度ルールはユーザーカスタマイズの最終上書き。playbookのconfidence < 5のルールはソフト参考。
4.3 範文スタイル注入(references/exemplars/index.yamlがある場合実行):
index.yamlからcategoryが現在のフレームワークタイプに一致する範文をフィルタリング、top 3を取得。対応する.mdファイルの段落コンテンツを読取。
ライティングプロンプトに注入:
以下はこの公式アカウントのスタイルの実段落示例です。その文長リズム、感情強度と口語化程度を模倣してください:
【開頭スタイル】 {exemplar_1の開頭フック段}
【感情段スタイル】 {exemplar_2の感情ピーク段}
【転折スタイル】 {exemplar_2またはexemplar_3の転折/自素段(あれば)}
【収尾スタイル】 {exemplar_3の収尾段}
Categoryマッピングルール:
| フレームワークタイプ | exemplar category |
|---|---|
| 痛点型 | tech-opinion |
| ストーリー型 / レビュー型 | story-emotional |
| リスト型 / 比較型 | list-practical |
| ホットスポット解読型 / 純粋観点型 | hot-take |
| その他 | general |
マッチした範文が3篇に満たない場合、general categoryで補足。
フォールバック(範文ライブラリが空の場合):{skill_dir}/references/exemplar-seeds.yaml を読取、各段落タイプから1つをランダム選択してプロンプトに注入。シード段落は人類ライティングの構造パターンのみ示範(文長分散、感情鋭度、自己修正、非総括式収尾)、特定スタイルを含みません。注入時に使用:
以下は人類ライティングの構造パターン示例です。その文長リズムと感情表現方法を模倣してください(具体的なコンテンツやスタイルは模倣しないでください):
【開頭パターン】{seeds.opening_hooks ランダム1個}
【感情段パターン】{seeds.emotional_peaks ランダム1個}
【転折パターン】{seeds.transitions ランダム1個}
【収尾パターン】{seeds.closings ランダム1個}
建库コマンド:python3 {skill_dir}/scripts/extract_exemplar.py article.md
4.4 記事をライティング:
- H1標題(20~28字) + H2構造、1500~2500字
- 素材 + 強化制約:ステップ3.2の素材と強化素材を各H2段落に分散組込。強化戦略のコア出力(角度/密度要点/細節/ユーザー声)は全文に貫通、1回のデコレーション出現のみではいけません
- ライティング人格:4.2でロードした人格パラメータに基づいてライティング(データ提示方法、個人声濃度、不確実性表現等)
- 収尾方法:personaの
closing_tendencyはあくまで傾向参考のみ。記事コンテンツと感情円弧に基づいて自分で最も自然な収尾方法を判断。history.yamlに直近3篇のclosing_typeフィールドがある場合、同じ収尾タイプを避ける - ライティング規範:writing-guide.mdの基本ルール(禁用词、文長分散、語彙混合等)は初稿段階で有効
- 2~3個のエディタアンカー:
<!-- ✏️ エディタ提案:ここに自分の経歴/見解を追加してください --> - オプション容器構文:
:::dialogue、:::timeline、:::callout、:::quote
{skill_dir}/output/{date}-{slug}.mdに保存
4.5 クイック自検(ライティング完了後すぐ実行、ステップ5再ライティング確率低減):
初稿に対して5項目のクイックスキャンを実施、その場で修復、ステップ5に残さない:
ライティング層面:
- 禁用词スキャン:writing-guide.md 2.1の禁用词リストをチェック、命中は直接置換
- 文長分散:連続3文以上、長さが接近している段落があるか、あれば文を分割するか短文を追加
コンテンツ層面: 3. 開頭フック:最初の3文がサスペンス/衝突/好奇心を生み出したか?平坦な背景紹介なら開頭を再ライティング 4. 強化貫通:強化戦略のコア出力が1段にしか出現していないか?その場合、他のH2で補足 5. 金句チェック:全文に独立してスクリーンショット転送可能な文が少なくとも1つあるか?なければ感情ピーク処に1文補追
LLMが自分で完成、スクリプト呼び出し不要。
ステップ5: SEO + 検証
読取: {skill_dir}/references/seo-rules.md
5.1 SEO:3つの備選標題 + サマリー(≤40字) + 5タグ + キーワード密度最適化
5.2 品質検証(2つの次元、各項逐一チェック):
A. ライティング品質(writing-guide.mdベースルール):
| チェック項目 | 標準 | ルール |
|---|---|---|
| 文長分散 | 最短と最長文の差 ≥ 30字 | 1.1 |
| 語彙温度 | 任意500字 ≥ 3種温度 | 1.2 |
| 段落リズム | 連続2個の類似長度段落なし | 1.3 |
| 感情極性 | 負面感情 ≥ 2処、平坦直叙なし | 1.4 |
| 禁用词 | 命中数 = 0 | 2.1 |
| 実素材アンカリング | 各H2 ≥ 1条の実素材、創造なし | 3.1 |
| 具体性 | 各500字 ≥ 2処の具体細節 | 3.2 |
B. コンテンツ品質(ステップ3.2の強化戦略に基づくチェック):
| チェック項目 | 標準 | 適用フレームワーク |
|---|---|---|
| 強化貫通 | 強化戦略のコア出力(角度/密度/細節/体感)が全文で見える、1段のみ出現しない | すべて |
| 開頭フック | 最初の3文がサスペンス、衝突または好奇心を生み出す(背景舗装ではない) | すべて |
| 金句密度 | 独立してスクリーンショット転送可能な文が少なくとも1処 | すべて |
| 操作密度 | 各H2に実行可能要点(ツール/ステップ/パラメータ)がある | 痛点/リスト |
| 角度鋭度 | コア観点が同意または反対を引き起こせる、「両方有理」ではない | ホットスポット解読/純粋観点 |
| 場景感 | 時間/場所/会話など画面細節が少なくとも2処ある | ストーリー/レビュー |
| 実声 | 実ユーザー評価または体験の引用が少なくとも1処 | 比較 |
不通過 → 定向修復:不達標の具体文/段落のみ置換、通過部分は動かさない。各ラウンド最多3処修正、修正後すぐ該当項を再チェック。2ラウンド後も不通過 → スキップをマーク、次項続行。
5.3 スクリプト補助検証(5.2逐項チェック補足):
エージェントが5.2チェック過程で同時に総合評価を実行(各H2間の語気差異度、情報密度の高低交替、段落間のリズム変化、全体阅読流暢度)、0~1スコアを産出。
python3 {skill_dir}/scripts/humanness_score.py {article_path} --json --tier3 {agent_tier3_score}
JSON内の composite_score を解読(0=品質高,100=問題多):
- < 30 → 通過、ステップ6継続
- 30~50 →
param_scores内の最低得点1~2項を確認、対応する具体文のみ修復(全段落再ライティングではない)、修復後再スコアリング。1ラウンドで十分 - > 50 →
param_scores最低の2~3項を逐項定向修復(各項最相関の1~2処のみ修復)、最多2ラウンド。仍然
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- oaker-io
- リポジトリ
- oaker-io/wewrite
- ライセンス
- MIT
- 最終更新
- 2026/4/2
Source: https://github.com/oaker-io/wewrite / ライセンス: MIT