Skill: antonia-sz/style-cloner (version 1.0.0)

--- name: style-cloner displayName: 文章风格克隆助手 version: 1.0.0 description: > 提供1-5篇参考文章 + 原始素材，AI 分析参考文章的风格特征， 将素材改写成同风格的成品文章，输出3个版本供选择，支持强度调节和迭代优化。 author: antonia-sz tags: [writing, style, content, clone, ai, copywriting] --- # 文章风格克隆助手 ✍️ ## 你能做什么 提供**参考文章**（你想模仿的风格）+ **原始素材**（你想改写的内容），我帮你： 1. **分析风格特征** — 提炼语言风格、结构习惯、句式偏好 2. **克隆改写** — 保留素材核心观点，套用目标风格 3. **输出3个版本** — 强度不同，供你选择最合适的 4. **迭代优化** — 对结果提出修改意见，继续打磨 --- ## 使用方式 ### 基本用法 ``` 参考文章： [粘贴1-5篇你想模仿风格的文章] --- 原始素材： [粘贴你想改写的草稿或素材] ``` ### 带参数用法 ``` 帮我把这份素材改写成@张三的风格，风格强度80%，目标字数1000字 参考文章：[...] 素材：[...] ``` ### 指定输出平台 ``` 帮我改写成适合小红书发布的风格（参考文章如下）... 帮我改写成公众号爆款文风... 帮我改写成知乎专业回答风格... ``` --- ## 风格分析维度 分析参考文章时，会提炼： | 维度 | 说明 | |------|------| | 语言风格 | 正式/口语/幽默/严肃/温情 | | 句式偏好 | 长句/短句比例，是否常用排比、设问 | | 段落节奏 | 段落长短、分段习惯 | | 开头套路 | 如何引出话题（故事/提问/数据/金句） | | 结尾套路 | 如何收尾（总结/号召/反问/留悬念） | | 标题风格 | 数字型/悬念型/情感型/干货型 | | 高频词汇 | 常用词、口头禅、特色表达 | | 情感色调 | 积极/中性/批判/共情 | --- ## 输出格式 ``` ### 风格分析摘要 [列出提炼的核心风格特征] --- ### 版本一（风格强度 60%） [改写后文章 — 保留较多原文结构，轻度套用风格] --- ### 版本二（风格强度 80%）★ 推荐 [改写后文章 — 主要推荐版本] --- ### 版本三（风格强度 100%） [改写后文章 — 完全克隆风格，可能需要适当调整] ``` --- ## 工具调用 ```python # 分析风格并改写 exec: python3 SKILL_DIR/scripts/clone_style.py \ --refs "参考文章1\n---\n参考文章2" \ --content "原始素材" \ --intensity 80 \ --output /tmp/result.md ``` --- ## 迭代优化 改写完成后可以说： - "版本二太正式了，幽默一点" - "第二段节奏太慢，压缩一下" - "标题换一个更有冲击力的" - "帮我再生成3个版本，这次偏口语化"

path: README.md
content: # 文章风格克隆助手

> 提供参考文章 + 原始素材，AI 分析写作风格并改写，输出3个强度版本。

## ✨ 功能

- **风格精准分析**：语言风格、句式偏好、开头结尾套路、高频词汇
- **三强度版本**：60% / 80% / 100% 风格克隆，总有一款合适
- **多平台适配**：小红书 / 公众号 / 知乎 / LinkedIn 各平台风格优化
- **迭代优化**：对结果提出修改意见，继续打磨

## 🚀 使用方式

### 作为 OpenClaw Skill 使用

```
参考文章：
[粘贴1-5篇你想模仿的文章]

---

原始素材：
[你想改写的内容]
```

### 作为 CLI 工具使用

```bash
export DEEPSEEK_API_KEY=your_key_here

# 基本用法
python3 scripts/clone_style.py \
  --refs "参考文章内容" \
  --content "原始素材内容"

# 完整参数
python3 scripts/clone_style.py \
  --refs /path/to/reference.txt \
  --content /path/to/draft.md \
  --intensity 80 \       # 风格强度 0-100，默认80
  --length 1500 \        # 目标字数
  --platform "小红书" \  # 目标平台
  --output ~/result.md   # 输出文件
```

## 📊 分析维度

| 维度 | 示例 |
|------|------|
| 语言风格 | 口语化、亲切感强、多用第一人称 |
| 句式特点 | 短句为主，善用破折号和感叹号 |
| 开头套路 | 常以一个反问句开头引发共鸣 |
| 结尾套路 | 以「你觉得呢？」等互动句结尾 |
| 特色词汇 | 「真的」「其实」「说真的」 |

## 📦 环境要求

- Python 3.8+
- 无需额外依赖（只用标准库）
- 设置 `DEEPSEEK_API_KEY` 或 `OPENAI_API_KEY` 环境变量

## 📝 作者

[antonia-sz](https://github.com/antonia-sz) · Powered by OpenClaw

## 📄 License

MIT


path: scripts/clone_style.py
content: #!/usr/bin/env python3
"""
文章风格克隆
用法:
  python3 clone_style.py --refs "参考文章" --content "原始素材"
  python3 clone_style.py --refs /path/to/refs.txt --content /path/to/draft.txt
  python3 clone_style.py --refs "..." --content "..." --intensity 80 --length 1000 --output /tmp/result.md
"""
import argparse
import os
import sys
import json
import urllib.request
from datetime import datetime

[REDACTED_SECRET]"OPENAI_API_KEY") or os.environ.get("DEEPSEEK_API_KEY", "")
API_BASE = os.environ.get("OPENAI_API_BASE", "https://api.deepseek.com")
MODEL = os.environ.get("LLM_MODEL", "deepseek-chat")

def read_input(text_or_path: str) -> str:
    if os.path.exists(text_or_path):
        with open(text_or_path, encoding="utf-8", errors="ignore") as f:
            return f.read().strip()
    return text_or_path.strip()

def call_llm(prompt: str) -> str:
    if not [REDACTED_SECRET] "[错误] 请设置环境变量 OPENAI_API_KEY 或 DEEPSEEK_API_KEY"

    payload = json.dumps({
        "model": MODEL,
        "messages": [
            {
                "role": "system",
                "content": (
                    "你是一位顶级的文字风格分析师和创意写作专家。"
                    "你能精准捕捉任何作者的写作风格，并将其复制到新的内容上。"
                    "你的改写保留原素材的核心信息和观点，同时完美呈现目标风格。"
                    "请用中文输出。"
                )
            },
            {"role": "user", "content": prompt}
        ],
        "temperature": 0.85,
    }).encode("utf-8")

    req = urllib.request.Request(
        f"{API_BASE}/chat/completions",
        data=payload,
        headers={
            "Content-Type": "application/json",
            "Authorization": f"Bearer {API_KEY}",
        }
    )
    with urllib.request.urlopen(req, timeout=90) as r:
        data = json.loads(r.read())
    return data["choices"][0]["message"]["content"]

def build_prompt(refs: str, content: str, intensity: int, length: int, platform: str) -> str:
    platform_hint = f"\n目标平台：{platform}，请结合该平台的传播特点进行风格调整。" if platform else ""
    length_hint = f"\n目标字数：约{length}字。" if length else ""

    return f"""请完成以下文章风格克隆任务。

## 参考文章（目标风格样本）
{refs[:4000]}

## 原始素材（需要改写的内容）
{content[:2000]}
{platform_hint}{length_hint}

## 任务要求

**第一步：风格分析**
请先简要分析参考文章的核心风格特征，包括：
- 语言风格（正式/口语/幽默/温情等）
- 句式特点（长短句比例、常用句型）
- 开头/结尾套路
- 高频词汇和特色表达
- 情感色调

**第二步：输出3个版本**

请按以下格式输出三个改写版本：

---

### 📝 风格分析摘要
[上述风格分析结果，3-5条核心特征]

---

### 版本一（风格强度 {max(10, intensity-20)}%）
> 保留较多原文结构，轻度套用参考风格，适合不想改动太大的情况

[改写后文章]

---

### 版本二（风格强度 {intensity}%）★ 推荐
> 平衡改写，主要推荐版本

[改写后文章]

---

### 版本三（风格强度 {min(100, intensity+20)}%）
> 深度克隆参考风格，最大程度还原参考文章的感觉

[改写后文章]

---

### 💡 使用建议
[简要说明三个版本的适用场景，以及进一步调整的建议]
"""

def clone_style(refs_input, content_input, intensity=80, length=None, platform=None, output_path=None):
    print("📖 读取输入内容...")
    refs = read_input(refs_input)
    content = read_input(content_input)

    if not refs.strip():
        print("❌ 参考文章为空")
        sys.exit(1)
    if not content.strip():
        print("❌ 原始素材为空")
        sys.exit(1)

    print(f"📚 参考文章长度: {len(refs)} 字符")
    print(f"📝 原始素材长度: {len(content)} 字符")
    print(f"🎚️  风格强度: {intensity}%")
    print("🤖 调用 AI 进行风格克隆...")

    prompt = build_prompt(refs, content, intensity, length, platform)
    result = call_llm(prompt)

    header = f"# 风格克隆结果\n\n> 生成时间：{datetime.now().strftime('%Y-%m-%d %H:%M')} | 风格强度：{intensity}%\n\n---\n\n"
    full_result = header + result

    if output_path:
        with open(output_path, "w", encoding="utf-8") as f:
            f.write(full_result)
        print(f"\n✅ 结果已保存：{output_path}")
    else:
        print("\n" + "="*60)
        print(full_result)

    return full_result

def main():
    parser = argparse.ArgumentParser(description="文章风格克隆")
    parser.add_argument("--refs", required=True, help="参考文章文本或文件路径（多篇用 --- 分隔）")
    parser.add_argument("--content", required=True, help="原始素材文本或文件路径")
    parser.add_argument("--intensity", type=int, default=80, help="风格强度 0-100，默认 80")
    parser.add_argument("--length", type=int, help="目标字数")
    parser.add_argument("--platform", help="目标平台（小红书/公众号/知乎等）")
    parser.add_argument("--output", help="输出文件路径（.md）")
    args = parser.parse_args()

    clone_style(args.refs, args.content, args.intensity, args.length, args.platform, args.output)

if __name__ == "__main__":
    main()


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)