{
  "metadata": {
    "id": "ch18",
    "title": "第18章：内容创作 Agent",
    "volume": "vol5",
    "volume_title": "专项篇",
    "word_count": 2326,
    "difficulty": "intermediate",
    "prerequisites": [
      "ch05",
      "ch06"
    ],
    "key_concepts": [
      "概述：当 AI 学会\"写作\"",
      "内容创作 Agent 的能力光谱",
      "内容创作 Agent 的核心挑战",
      "文章写作与编辑引擎",
      "文章结构化管理器",
      "内容风格控制器",
      "营销文案生成",
      "多渠道文案生成器",
      "多语言翻译与本地化",
      "翻译引擎",
      "SEO 优化模块",
      "智能关键词分析与布局",
      "内容审核与合规",
      "多层审核管道",
      "完整集成：内容创作 Agent"
    ],
    "learning_objectives": [],
    "estimated_tokens": 1396,
    "source_file": "vol5/ch18_内容创作Agent.md"
  },
  "overview": "",
  "sections": [
    {
      "id": "18.1",
      "title": "18.1 概述：当 AI 学会\"写作\"",
      "level": 2,
      "content": "内容创作是 Agent 技术在创意领域的深度应用。从营销文案到技术文档，从社交媒体帖子到长篇报告，内容创作 Agent 正在重新定义\"写作\"的边界。",
      "subsections": [
        {
          "id": "18.1.1",
          "title": "18.1.1 内容创作 Agent 的能力光谱",
          "content": "- **文章写作与编辑**：长文生成、段落重组、风格调整、多版本迭代\n- **营销文案生成**：广告语、产品描述、社交媒体帖子、邮件营销\n- **多语言翻译与本地化**：不仅是翻译，更是文化适配\n- **SEO 优化**：关键词布局、标题优化、Meta 描述生成\n- **内容审核与合规**：敏感词检测、版权检查、品牌一致性"
        },
        {
          "id": "18.1.2",
          "title": "18.1.2 内容创作 Agent 的核心挑战",
          "content": "| 挑战 | 说明 | 解决方案 |\n|------|------|---------|\n| 品牌一致性 | 输出内容需要符合品牌调性 | 品牌风格指南 + Few-Shot 示例 |\n| 事实准确性 | AI 可能产生幻觉 | RAG 检索增强 + 事实核查链 |\n| 多语言质量 | 不同语言的表达习惯差异大 | 本地化知识库 + 母语者审校 |\n| 合规风险 | 广告法、隐私法、平台规则 | 多层审核管道 + 敏感词库 |\n| 内容多样性 | 避免千篇一律的\"AI味\" | Temperature 控制 + 风格注入 |"
        }
      ]
    },
    {
      "id": "18.2",
      "title": "18.2 文章写作与编辑引擎",
      "level": 2,
      "content": "",
      "subsections": [
        {
          "id": "18.2.1",
          "title": "18.2.1 文章结构化管理器",
          "content": "高质量的文章需要清晰的结构。文章结构化管理器负责大纲生成、段落组织和逻辑流控制。\n\n{{\n    \"title\": \"文章标题\",\n    \"subtitle\": \"副标题（可选）\",\n    \"target_audience\": \"目标读者\",\n    \"sections\": [\n        {{\n            \"title\": \"章节标题\",\n            \"points\": [\"要点1\", \"要点2\", \"要点3\"],\n            \"estimated_words\": 400\n        }}\n    ]\n}}"
        },
        {
          "id": "18.2.2",
          "title": "18.2.2 内容风格控制器",
          "content": ""
        }
      ]
    },
    {
      "id": "18.3",
      "title": "18.3 营销文案生成",
      "level": 2,
      "content": "",
      "subsections": [
        {
          "id": "18.3.1",
          "title": "18.3.1 多渠道文案生成器",
          "content": "营销文案需要针对不同渠道（微信、抖音、小红书、邮件等）调整格式和风格。\n\n{{\n    \"version\": 1,\n    \"headline\": \"标题/首句\",\n    \"body\": \"正文内容\",\n    \"cta\": \"行动号召语\",\n    \"hashtags\": [\"标签1\", \"标签2\"],\n    \"word_count\": 实际字数,\n    \"tone\": \"该版本的语气描述\"\n}}"
        }
      ]
    },
    {
      "id": "18.4",
      "title": "18.4 多语言翻译与本地化",
      "level": 2,
      "content": "",
      "subsections": [
        {
          "id": "18.4.1",
          "title": "18.4.1 翻译引擎",
          "content": "{{\n    \"translated_text\": \"翻译后的文本\",\n    \"adaptations\": [\"所做的本地化调整说明\"],\n    \"glossary_used\": [\"使用的术语表条目\"]\n}}"
        }
      ]
    },
    {
      "id": "18.5",
      "title": "18.5 SEO 优化模块",
      "level": 2,
      "content": "",
      "subsections": [
        {
          "id": "18.5.1",
          "title": "18.5.1 智能关键词分析与布局",
          "content": "{{\n    \"optimized_title\": \"优化后的标题（含核心关键词，60字以内）\",\n    \"meta_description\": \"Meta 描述（含核心关键词，150字以内）\",\n    \"h1_suggestion\": \"H1 标签建议\",\n    \"h2_suggestions\": [\"H2 子标题建议1\", \"H2 子标题建议2\"],\n    \"content_improvements\": [\"内容改进建议1\", \"内容改进建议2\"],\n    \"internal_link_suggestions\": [\"内链建议1\"],\n    \"alt_text_suggestions\": {{\"image_1\": \"图片 alt 文本建议\"}},\n    \"schema_suggestions\": [\"结构化数据建议\"]\n}}"
        }
      ]
    },
    {
      "id": "18.6",
      "title": "18.6 内容审核与合规",
      "level": 2,
      "content": "",
      "subsections": [
        {
          "id": "18.6.1",
          "title": "18.6.1 多层审核管道",
          "content": ""
        }
      ]
    },
    {
      "id": "18.7",
      "title": "18.7 完整集成：内容创作 Agent",
      "level": 2,
      "content": "",
      "subsections": [
        {
          "id": "18.7.1",
          "title": "18.7.1 统一工作流",
          "content": ""
        },
        {
          "id": "18.7.2",
          "title": "18.7.2 端到端使用示例",
          "content": ""
        }
      ]
    },
    {
      "id": "18.8",
      "title": "18.8 生产级考量",
      "level": 2,
      "content": "",
      "subsections": [
        {
          "id": "18.8.1",
          "title": "18.8.1 内容质量保证",
          "content": "| 环节 | 策略 | 说明 |\n|------|------|------|\n| 事实核查 | RAG + 知识库检索 | 对关键声明进行事实验证 |\n| 原创性检测 | 指纹哈希 + 相似度计算 | 防止内容重复发布 |\n| A/B 测试 | 多版本生成 + 自动投放 | 数据驱动的内容优化 |\n| 反馈循环 | 用户评分 → Prompt 优化 | 持续提升生成质量 |"
        },
        {
          "id": "18.8.2",
          "title": "18.8.2 多租户内容管理",
          "content": ""
        }
      ]
    },
    {
      "id": "本章小结",
      "title": "本章小结",
      "level": 2,
      "content": "本章从文章写作引擎出发，构建了完整的内容创作 Agent 体系：\n\n1. **文章写作与编辑**：结构化大纲生成、逐节写作、多版本迭代修改\n2. **品牌风格控制**：品牌指南定义、风格合规检查、自动修复\n3. **多渠道营销文案**：渠道适配、多版本生成、统一活动管理\n4. **多语言翻译与本地化**：术语表驱动、文化适配、格式本地化\n5. **SEO 优化**：关键词分析、Meta 标签生成、内容优化建议\n6. **内容审核与合规**：多层审核管道、广告法检测、品牌一致性\n\n核心思想：**内容创作的核心不是\"生成文字\"，而是\"管理约束\"**——在品牌调性、法律法规、SEO 要求和用户偏好之间找到最佳平衡点。",
      "subsections": []
    }
  ],
  "code_blocks": [
    {
      "id": "code-1",
      "language": "text",
      "description": "内容创作是 Agent 技术在创意领域的深度应用。从营销文案到技术文档，从社交媒体帖子到长篇报告，内容创作 Agent 正在重新定义\"写作\"的边界。",
      "code": "补全 → 改写 → 摘要 → 翻译 → 生成 → 多语言适配 → SEO 优化 → 合规审核\n │     │     │     │     │       │            │           │\n续写  语气  提炼  语言  从零   本地化文化    关键词布局    敏感词检测\n     调整  核心  转换  创作   适配调整      搜索友好     政策合规",
      "section_ref": "18.1.1",
      "runnable": false,
      "dependencies": []
    },
    {
      "id": "code-2",
      "language": "python",
      "description": "高质量的文章需要清晰的结构。文章结构化管理器负责大纲生成、段落组织和逻辑流控制。",
      "code": "\"\"\"\n内容创作 Agent - 文章写作与编辑引擎\n\"\"\"\n\nfrom dataclasses import dataclass, field\nfrom enum import Enum\nfrom typing import Optional\nimport json\nimport re\nimport hashlib\nimport time\n\n\nclass ContentType(Enum):\n    BLOG = \"blog\"              # 博客文章\n    TECH_DOC = \"tech_doc\"      # 技术文档\n    MARKETING = \"marketing\"    # 营销文案\n    SOCIAL = \"social\"          # 社交媒体\n    EMAIL = \"email\"            # 邮件\n    PRODUCT_DESC = \"product\"   # 产品描述\n    PRESS_RELEASE = \"press\"    # 新闻稿\n    WHITEPAPER = \"whitepaper\"  # 白皮书\n\n\nclass ToneStyle(Enum):\n    PROFESSIONAL = \"professional\"  # 专业严谨\n    CASUAL = \"casual\"              # 轻松活泼\n    HUMOROUS = \"humorous\"          # 幽默风趣\n    ACADEMIC = \"academic\"          # 学术规范\n    PERSUASIVE = \"persuasive\"      # 说服性\n    STORYTELLING = \"storytelling\"  # 故事性\n\n\n@dataclass\nclass ArticleOutline:\n    \"\"\"文章大纲\"\"\"\n    title: str\n    subtitle: str = \"\"\n    sections: list[dict] = field(default_factory=list)\n    target_audience: str = \"通用读者\"\n    estimated_words: int = 0\n    keywords: list[str] = field(default_factory=list)\n\n    def to_prompt_context(self) -> str:\n        \"\"\"转化为 Prompt 上下文\"\"\"\n        lines = [f\"# 文章标题: {self.title}\"]\n        if self.subtitle:\n            lines.append(f\"副标题: {self.subtitle}\")\n        lines.append(f\"目标读者: {self.target_audience}\")\n        lines.append(f\"目标字数: {self.estimated_words}\")\n        lines.append(f\"核心关键词: {', '.join(self.keywords)}\")\n        lines.append(\"\\n## 大纲结构\\n\")\n        for i, sec in enumerate(self.sections, 1):\n            lines.append(f\"{i}. {sec['title']}\")\n            lines.append(f\"   - 核心要点: {', '.join(sec.get('points', []))}\")\n            if sec.get(\"estimated_words\"):\n                lines.append(f\"   - 目标字数: {sec['estimated_words']}\")\n        return \"\\n\".join(lines)\n\n\nclass ArticleGenerator:\n    \"\"\"文章生成器\"\"\"\n\n    def __init__(self, llm_client=None, brand_guide: Optional[dict] = None):\n        self.llm_client = llm_client\n        self.brand_guide = brand_guide or {}\n        self.version_history: list[dict] = []\n\n    def _call_llm(self, prompt: str, temperature: float = 0.7) -> str:\n        \"\"\"调用 LLM\"\"\"\n        if self.llm_client:\n            return self.llm_client.chat(prompt, temperature=temperature)\n        return self._mock_response(prompt)\n\n    def _mock_response(self, prompt: str) -> str:\n        \"\"\"模拟 LLM 返回\"\"\"\n        return \"这是模拟生成的文章内容。实际使用时请替换为真实 LLM API 调用。\"\n\n    def generate_outline(self, topic: str, content_type: ContentType,\n                         keywords: list[str], sections_count: int = 5,\n                         target_words: int = 2000) -> ArticleOutline:\n        \"\"\"生成文章大纲\"\"\"\n        prompt = f\"\"\"你是一位资深的{content_type.value}写作者。请为以下主题生成一份详细的文章大纲。\n\n主题: {topic}\n内容类型: {content_type.value}\n核心关键词: {', '.join(keywords)}\n目标字数: {target_words}\n章节数量: {sections_count}\n\n请以 JSON 格式返回:",
      "section_ref": "18.2.1",
      "runnable": true,
      "dependencies": []
    },
    {
      "id": "code-3",
      "language": "text",
      "description": "}}",
      "code": "\n要求:\n1. 标题要吸引眼球且包含核心关键词\n2. 章节之间有逻辑递进关系\n3. 每个章节的要点要具体、可展开\n4. 总字数分配要合理\"\"\"\n\n        response = self._call_llm(prompt, temperature=0.8)\n\n        try:\n            json_match = re.search(r'```json\\s*(.*?)\\s*```', response, re.DOTALL)\n            data = json.loads(json_match.group(1)) if json_match else json.loads(response)\n        except (json.JSONDecodeError, AttributeError):\n            data = {\n                \"title\": topic,\n                \"subtitle\": \"\",\n                \"target_audience\": \"通用读者\",\n                \"sections\": [\n                    {\"title\": f\"第{i}部分\", \"points\": [\"待展开\"],\n                     \"estimated_words\": target_words // sections_count}\n                    for i in range(1, sections_count + 1)\n                ]\n            }\n\n        # 计算总预估字数\n        total = sum(s.get(\"estimated_words\", 0) for s in data[\"sections\"])\n\n        return ArticleOutline(\n            title=data[\"title\"],\n            subtitle=data.get(\"subtitle\", \"\"),\n            sections=data[\"sections\"],\n            target_audience=data.get(\"target_audience\", \"通用读者\"),\n            estimated_words=total,\n            keywords=keywords\n        )\n\n    def write_section(self, outline: ArticleOutline, section_index: int,\n                      context: str = \"\") -> str:\n        \"\"\"根据大纲写某个章节\"\"\"\n        if section_index >= len(outline.sections):\n            return \"\"\n\n        section = outline.sections[section_index]\n        prev_summary = \"\"\n        if section_index > 0 and self.version_history:\n            prev = self.version_history[-1].get(\"content\", \"\")[:500]\n            prev_summary = f\"\\n\\n上一节内容摘要: {prev}...\"\n\n        brand_context = \"\"\n        if self.brand_guide:\n            brand_context = f\"\\n\\n品牌风格指南:\\n- 语气: {self.brand_guide.get('tone', '专业')}\\n\"\n            brand_context += f\"- 禁用词: {', '.join(self.brand_guide.get('forbidden_words', []))}\\n\"\n            brand_context += f\"- 品牌术语: {json.dumps(self.brand_guide.get('terminology', {}), ensure_ascii=False)}\"\n\n        prompt = f\"\"\"你是一位专业写作者。请根据大纲撰写以下章节。\n\n## 全文大纲\n\n{outline.to_prompt_context()}\n\n## 当前要写的章节\n\n第 {section_index + 1} 节: {section['title']}\n核心要点: {', '.join(section.get('points', []))}\n目标字数: {section.get('estimated_words', 500)}\n{brand_context}\n{prev_summary}\n{f\"## 额外上下文\\n{context}\" if context else \"\"}\n\n要求:\n1. 严格围绕核心要点展开，不要跑题\n2. 段落之间要有自然的过渡\n3. 如果有品牌术语，请正确使用\n4. 保持全文的语气和风格一致\n5. 避免使用品牌禁用词\"\"\"\n\n        content = self._call_llm(prompt, temperature=0.7)\n\n        self.version_history.append({\n            \"section_index\": section_index,\n            \"section_title\": section[\"title\"],\n            \"content\": content,\n            \"timestamp\": time.time()\n        })\n\n        return content\n\n    def write_full_article(self, outline: ArticleOutline,\n                            context_per_section: Optional[dict] = None) -> str:\n        \"\"\"生成完整文章\"\"\"\n        sections = []\n        context_per_section = context_per_section or {}\n\n        for i in range(len(outline.sections)):\n            ctx = context_per_section.get(i, \"\")\n            section_content = self.write_section(outline, i, ctx)\n            sections.append(f\"## {outline.sections[i]['title']}\\n\\n{section_content}\")\n\n        return f\"# {outline.title}\\n\\n\" + \"\\n\\n\".join(sections)\n\n    def revise_section(self, section_index: int, instruction: str) -> str:\n        \"\"\"根据指令修改某个章节\"\"\"\n        if not self.version_history or section_index >= len(self.version_history):\n            return \"\"\n\n        original = self.version_history[section_index][\"content\"]\n\n        prompt = f\"\"\"请根据修改指令，对以下文章段落进行修改。\n\n## 原始内容\n\n{original}\n\n## 修改指令\n\n{instruction}\n\n要求:\n1. 只修改与指令相关的部分，保持其余内容不变\n2. 保持原有的语气和风格\n3. 直接输出修改后的完整内容，不要解释修改了什么\"\"\"\n\n        revised = self._call_llm(prompt, temperature=0.5)\n\n        self.version_history[section_index][\"content\"] = revised\n        self.version_history[section_index][\"revisions\"] = (\n            self.version_history[section_index].get(\"revisions\", []) + 1\n        )\n\n        return revised",
      "section_ref": "18.2.1",
      "runnable": false,
      "dependencies": []
    },
    {
      "id": "code-4",
      "language": "python",
      "description": "",
      "code": "\"\"\"\n内容风格控制器 - 确保输出符合品牌调性\n\"\"\"\n\n\n@dataclass\nclass BrandGuide:\n    \"\"\"品牌风格指南\"\"\"\n    name: str\n    tone: str                     # 语气描述\n    vocabulary_level: str         # 词汇难度: formal / casual / mixed\n    forbidden_words: list[str]    # 禁用词列表\n    preferred_words: dict         # 术语偏好: {\"AI\": \"人工智能\", \"app\": \"应用程序\"}\n    sentence_style: str           # 句式风格: short / mixed / complex\n    emoji_usage: str              # Emoji 使用: allowed / limited / forbidden\n    perspective: str              # 人称: first / third / second\n    examples: list[str]           # 风格示例文本\n\n\nclass StyleController:\n    \"\"\"风格控制器\"\"\"\n\n    def __init__(self, guide: BrandGuide):\n        self.guide = guide\n\n    def build_style_prompt(self) -> str:\n        \"\"\"构建风格 Prompt\"\"\"\n        g = self.guide\n        lines = [\n            \"## 写作风格规范\",\n            f\"- 品牌名称: {g.name}\",\n            f\"- 语气: {g.tone}\",\n            f\"- 词汇级别: {g.vocabulary_level}\",\n            f\"- 句式风格: {g.sentence_style}\",\n            f\"- 人称视角: {g.perspective}\",\n            f\"- Emoji: {g.emoji_usage}\",\n        ]\n\n        if g.forbidden_words:\n            lines.append(f\"- 禁用词: {', '.join(g.forbidden_words)}\")\n        if g.preferred_words:\n            pairs = [f'\"{k}\" → \"{v}\"' for k, v in g.preferred_words.items()]\n            lines.append(f\"- 术语偏好: {', '.join(pairs)}\")\n\n        if g.examples:\n            lines.append(\"\\n### 风格示例\\n\")\n            for i, ex in enumerate(g.examples, 1):\n                lines.append(f\"示例 {i}:\\n{ex}\\n\")\n\n        return \"\\n\".join(lines)\n\n    def check_compliance(self, text: str) -> dict:\n        \"\"\"检查文本是否符合风格规范\"\"\"\n        issues = []\n\n        # 检查禁用词\n        text_lower = text.lower()\n        for word in self.guide.forbidden_words:\n            if word.lower() in text_lower:\n                # 找到上下文\n                idx = text_lower.find(word.lower())\n                start = max(0, idx - 20)\n                end = min(len(text), idx + len(word) + 20)\n                context = text[start:end]\n                issues.append({\n                    \"type\": \"forbidden_word\",\n                    \"word\": word,\n                    \"context\": context,\n                    \"severity\": \"high\",\n                    \"suggestion\": f\"请替换'{word}'为更合适的表达\"\n                })\n\n        # 检查术语一致性\n        for preferred, standard in self.guide.preferred_words.items():\n            if preferred.lower() in text_lower:\n                count = text_lower.count(preferred.lower())\n                issues.append({\n                    \"type\": \"terminology\",\n                    \"word\": preferred,\n                    \"suggestion\": f\"应使用'{standard}'替代'{preferred}'，共 {count} 处\",\n                    \"severity\": \"medium\"\n                })\n\n        # 检查句子长度\n        sentences = re.split(r'[。！？]', text)\n        long_sentences = [s for s in sentences if len(s) > 80]\n        if self.guide.sentence_style == \"short\" and long_sentences:\n            issues.append({\n                \"type\": \"sentence_length\",\n                \"detail\": f\"发现 {len(long_sentences)} 个过长的句子（>80字），建议拆分\",\n                \"severity\": \"low\"\n            })\n\n        # 检查 Emoji 使用\n        emoji_pattern = re.compile(\n            \"[\\U0001F600-\\U0001F64F\\U0001F300-\\U0001F5FF\"\n            \"\\U0001F680-\\U0001F6FF\\U0001F700-\\U0001F77F\"\n            \"\\U0001F780-\\U0001F7FF\\U0001F800-\\U0001F8FF\"\n            \"\\U0001F900-\\U0001F9FF\\U0001FA00-\\U0001FA6F\"\n            \"\\U0001FA70-\\U0001FAFF\\U00002702-\\U000027B0]\")\n        emojis = emoji_pattern.findall(text)\n        if self.guide.emoji_usage == \"forbidden\" and emojis:\n            issues.append({\n                \"type\": \"emoji\",\n                \"detail\": f\"发现 {len(emojis)} 个 Emoji，当前风格不允许使用\",\n                \"severity\": \"high\"\n            })\n        elif self.guide.emoji_usage == \"limited\" and len(emojis) > 3:\n            issues.append({\n                \"type\": \"emoji\",\n                \"detail\": f\"Emoji 数量 {len(emojis)} 超过限制（最多3个）\",\n                \"severity\": \"medium\"\n            })\n\n        return {\n            \"compliant\": len([i for i in issues if i[\"severity\"] == \"high\"]) == 0,\n            \"issues\": issues,\n            \"score\": max(0, 100 - len(issues) * 10)\n        }\n\n    def auto_fix(self, text: str) -> str:\n        \"\"\"自动修复简单的风格问题\"\"\"\n        result = text\n        for old, new in self.guide.preferred_words.items():\n            result = result.replace(old, new)\n        return result",
      "section_ref": "18.2.2",
      "runnable": true,
      "dependencies": []
    },
    {
      "id": "code-5",
      "language": "python",
      "description": "营销文案需要针对不同渠道（微信、抖音、小红书、邮件等）调整格式和风格。",
      "code": "\"\"\"\n营销文案生成器 - 多渠道适配\n\"\"\"\n\n@dataclass\nclass CampaignBrief:\n    \"\"\"营销活动简报\"\"\"\n    product_name: str\n    product_description: str\n    target_audience: str\n    key_benefits: list[str]\n    promotion_details: str\n    cta: str                     # Call-to-Action\n    channels: list[str]          # 目标渠道\n    constraints: list[str] = field(default_factory=list)\n\n\nclass MarketingCopyGenerator:\n    \"\"\"多渠道营销文案生成器\"\"\"\n\n    CHANNEL_TEMPLATES = {\n        \"wechat\": {\n            \"name\": \"微信公众号\",\n            \"max_length\": 5000,\n            \"style\": \"深度内容、情感共鸣\",\n            \"format\": \"标题 + 导语 + 正文分段 + CTA\"\n        },\n        \"xiaohongshu\": {\n            \"name\": \"小红书\",\n            \"max_length\": 1000,\n            \"style\": \"种草、真实体验、emoji 丰富\",\n            \"format\": \"吸睛标题 + 痛点描述 + 使用体验 + Emoji + 标签\"\n        },\n        \"douyin\": {\n            \"name\": \"抖音\",\n            \"max_length\": 200,\n            \"style\": \"口语化、节奏快、有悬念\",\n            \"format\": \"3秒钩子 + 核心卖点 + CTA\"\n        },\n        \"email\": {\n            \"name\": \"邮件营销\",\n            \"max_length\": 3000,\n            \"style\": \"专业、个性化、有紧迫感\",\n            \"format\": \"主题行 + 个性化称呼 + 价值主张 + CTA\"\n        },\n        \"weibo\": {\n            \"name\": \"微博\",\n            \"max_length\": 500,\n            \"style\": \"话题性强、可互动\",\n            \"format\": \"话题标签 + 核心信息 + 互动引导\"\n        }\n    }\n\n    def __init__(self, llm_client=None):\n        self.llm_client = llm_client\n\n    def _call_llm(self, prompt: str, temperature: float = 0.8) -> str:\n        if self.llm_client:\n            return self.llm_client.chat(prompt, temperature=temperature)\n        return \"模拟生成的营销文案内容。\"\n\n    def generate(self, brief: CampaignBrief, channel: str,\n                 variations: int = 3) -> list[dict]:\n        \"\"\"为指定渠道生成多个版本的文案\"\"\"\n        template = self.CHANNEL_TEMPLATES.get(channel)\n        if not template:\n            return [{\"error\": f\"不支持的渠道: {channel}\"}]\n\n        prompt = f\"\"\"你是一位资深营销文案专家。请为以下产品生成 {variations} 个不同版本的{template['name']}文案。\n\n## 产品信息\n- 产品名称: {brief.product_name}\n- 产品描述: {brief.product_description}\n- 目标受众: {brief.target_audience}\n- 核心卖点: {', '.join(brief.key_benefits)}\n- 促销信息: {brief.promotion_details}\n- 行动号召: {brief.cta}\n\n## 渠道要求\n- 渠道: {template['name']}\n- 风格: {template['style']}\n- 格式: {template['format']}\n- 最大字数: {template['max_length']}\n\n## 限制条件\n{chr(10).join('- ' + c for c in brief.constraints) if brief.constraints else '- 无特殊限制'}\n\n## 输出要求\n\n请为每个版本生成以下 JSON 格式:",
      "section_ref": "18.3.1",
      "runnable": true,
      "dependencies": []
    },
    {
      "id": "code-6",
      "language": "text",
      "description": "}}",
      "code": "\n请生成 {variations} 个版本，每个版本风格略有不同（如理性/感性/幽默等）。\"\"\"\n\n        response = self._call_llm(prompt)\n\n        # 解析多个 JSON 对象\n        versions = []\n        try:\n            json_matches = re.findall(r'```json\\s*(.*?)\\s*```', response, re.DOTALL)\n            if not json_matches:\n                # 尝试直接解析\n                json_matches = [response]\n\n            for match in json_matches:\n                try:\n                    data = json.loads(match)\n                    if isinstance(data, list):\n                        versions.extend(data)\n                    else:\n                        versions.append(data)\n                except json.JSONDecodeError:\n                    continue\n        except Exception:\n            pass\n\n        # 如果解析失败，返回模拟结果\n        if not versions:\n            for i in range(variations):\n                versions.append({\n                    \"version\": i + 1,\n                    \"headline\": f\"{brief.product_name} - 版本{i+1}\",\n                    \"body\": f\"模拟生成的{template['name']}文案版本{i+1}\",\n                    \"cta\": brief.cta,\n                    \"hashtags\": [brief.product_name],\n                    \"word_count\": 100,\n                    \"tone\": \"专业\"\n                })\n\n        return versions\n\n    def generate_full_campaign(self, brief: CampaignBrief) -> dict:\n        \"\"\"为所有目标渠道生成完整营销素材\"\"\"\n        campaign = {\"brief\": brief, \"materials\": {}}\n\n        for channel in brief.channels:\n            versions = self.generate(brief, channel)\n            campaign[\"materials\"][channel] = versions\n\n        # 生成统一的品牌关键词\n        campaign[\"brand_keywords\"] = (\n            [brief.product_name] + brief.key_benefits[:3])\n\n        return campaign",
      "section_ref": "18.3.1",
      "runnable": false,
      "dependencies": []
    },
    {
      "id": "code-7",
      "language": "python",
      "description": "",
      "code": "\"\"\"\n多语言翻译与本地化引擎\n支持术语表、风格适配和文化本地化\n\"\"\"\n\nfrom dataclasses import dataclass, field\n\n\n@dataclass\nclass Glossary:\n    \"\"\"术语表\"\"\"\n    language: str\n    entries: dict[str, str] = field(default_factory=dict)  # 源语言 -> 目标语言\n\n    def to_prompt(self) -> str:\n        lines = [f\"## {self.language} 术语表\\n\"]\n        for src, tgt in self.entries.items():\n            lines.append(f\"- {src} → {tgt}\")\n        return \"\\n\".join(lines)\n\n\n@dataclass\nclass LocaleProfile:\n    \"\"\"地区文化配置\"\"\"\n    locale: str                  # 如 zh-CN, en-US, ja-JP\n    date_format: str = \"YYYY-MM-DD\"\n    number_format: str = \"1,234.56\"\n    currency_symbol: str = \"¥\"\n    reading_direction: str = \"ltr\"   # ltr 或 rtl\n    formality_level: str = \"formal\"  # formal / casual\n    cultural_notes: list[str] = field(default_factory=list)\n\n\nclass TranslationEngine:\n    \"\"\"翻译与本地化引擎\"\"\"\n\n    SUPPORTED_LOCALES = {\n        \"zh-CN\": LocaleProfile(\"zh-CN\", \"YYYY年MM月DD日\", \"1,234.56\", \"¥\", \"ltr\", \"formal\",\n                               [\"使用敬语时注意等级\", \"避免直接否定，使用委婉表达\"]),\n        \"en-US\": LocaleProfile(\"en-US\", \"MM/DD/YYYY\", \"1,234.56\", \"$\", \"ltr\", \"casual\",\n                               [\"直接表达，避免过于委婉\", \"使用美式英语拼写\"]),\n        \"ja-JP\": LocaleProfile(\"ja-JP\", \"YYYY年MM月DD日\", \"1,234\", \"¥\", \"ltr\", \"very_formal\",\n                               [\"使用适当的敬语体系\", \"长句中保持主语明确\"]),\n        \"ko-KR\": LocaleProfile(\"ko-KR\", \"YYYY.MM.DD\", \"1,234\", \"₩\", \"ltr\", \"formal\",\n                               [\"注意敬语和非敬语的使用场景\"]),\n        \"de-DE\": LocaleProfile(\"de-DE\", \"DD.MM.YYYY\", \"1.234,56\", \"€\", \"ltr\", \"formal\",\n                               [\"德语名词首字母大写\", \"复合词使用正确\"]),\n        \"ar-SA\": LocaleProfile(\"ar-SA\", \"DD/MM/YYYY\", \"١٬٢٣٤٫٥٦\", \"﷼\", \"rtl\", \"formal\",\n                               [\"从右到左书写\", \"避免使用猪相关的比喻\"]),\n    }\n\n    def __init__(self, llm_client=None, glossaries: Optional[dict[str, Glossary]] = None):\n        self.llm_client = llm_client\n        self.glossaries = glossaries or {}\n\n    def _call_llm(self, prompt: str, temperature: float = 0.3) -> str:\n        if self.llm_client:\n            return self.llm_client.chat(prompt, temperature=temperature)\n        return \"模拟翻译结果。\"\n\n    def translate(self, text: str, source_locale: str,\n                  target_locale: str, context: str = \"\") -> dict:\n        \"\"\"翻译文本\"\"\"\n        source_profile = self.SUPPORTED_LOCALES.get(source_locale)\n        target_profile = self.SUPPORTED_LOCALES.get(target_locale)\n\n        if not target_profile:\n            return {\"success\": False, \"error\": f\"不支持的目标语言: {target_locale}\"}\n\n        glossary_text = \"\"\n        if target_locale in self.glossaries:\n            glossary_text = self.glossaries[target_locale].to_prompt()\n\n        cultural_notes = \"\"\n        if target_profile.cultural_notes:\n            cultural_notes = \"\\n## 文化注意事项\\n\" + \"\\n\".join(\n                f\"- {n}\" for n in target_profile.cultural_notes)\n\n        prompt = f\"\"\"你是一位专业的翻译专家。请将以下文本从 {source_locale} 翻译为 {target_locale}。\n\n## 源文本\n\n{text}\n\n## 翻译要求\n\n1. 保持原文的语义和语气\n2. 使用 {target_profile.formality_level} 语体\n3. 确保表达符合目标语言的习惯用法\n4. 保留专业术语的准确性\n{f\"5. 额外上下文: {context}\" if context else \"\"}\n{glossary_text}\n{cultural_notes}\n\n请以 JSON 格式返回:",
      "section_ref": "18.4.1",
      "runnable": true,
      "dependencies": []
    },
    {
      "id": "code-8",
      "language": "\"\"\"",
      "description": "}}",
      "code": "\n        response = self._call_llm(prompt, temperature=0.3)\n\n        try:\n            json_match = re.search(r'```json\\s*(.*?)\\s*```', response, re.DOTALL)\n            result = json.loads(json_match.group(1)) if json_match else json.loads(response)\n            result[\"success\"] = True\n            return result\n        except (json.JSONDecodeError, AttributeError):\n            return {\"success\": False, \"translated_text\": response}\n\n    def batch_translate(self, segments: list[dict], source_locale: str,\n                        target_locale: str) -> list[dict]:\n        \"\"\"批量翻译（保持术语一致性）\"\"\"\n        results = []\n        for seg in segments:\n            r = self.translate(\n                seg[\"text\"], source_locale, target_locale,\n                context=seg.get(\"context\", \"\"))\n            results.append({\n                \"source\": seg[\"text\"],\n                **r,\n                \"segment_id\": seg.get(\"id\")\n            })\n        return results\n\n    def localize_content(self, content: dict, target_locale: str) -> dict:\n        \"\"\"本地化完整内容（包括日期、数字、货币等格式）\"\"\"\n        profile = self.SUPPORTED_LOCALES.get(target_locale)\n        if not profile:\n            return {\"success\": False, \"error\": f\"不支持: {target_locale}\"}\n\n        localized = {\"locale\": target_locale}\n\n        # 翻译文本字段\n        for key, value in content.items():\n            if isinstance(value, str) and len(value) > 10:\n                result = self.translate(value, \"zh-CN\", target_locale)\n                localized[key] = result.get(\"translated_text\", value)\n            elif isinstance(value, (int, float)):\n                # 数字格式化\n                if isinstance(value, float):\n                    localized[key] = f\"{value:,.2f}\"\n                else:\n                    localized[key] = f\"{value:,}\"\n            else:\n                localized[key] = value\n\n        return localized",
      "section_ref": "18.4.1",
      "runnable": false,
      "dependencies": []
    },
    {
      "id": "code-9",
      "language": "python",
      "description": "",
      "code": "\"\"\"\nSEO 优化模块 - 关键词分析、内容优化和排名建议\n\"\"\"\n\n@dataclass\nclass SEOKeyword:\n    \"\"\"SEO 关键词\"\"\"\n    keyword: str\n    search_volume: int         # 月搜索量\n    difficulty: float          # 竞争难度 0-100\n    current_rank: Optional[int] = None\n    relevance: float = 0.0     # 与内容的关联度 0-1\n\n\nclass SEOOptimizer:\n    \"\"\"SEO 优化器\"\"\"\n\n    def __init__(self, llm_client=None):\n        self.llm_client = llm_client\n\n    def _call_llm(self, prompt: str, temperature: float = 0.5) -> str:\n        if self.llm_client:\n            return self.llm_client.chat(prompt, temperature=temperature)\n        return '{\"keywords\": [], \"title\": \"\", \"meta_description\": \"\"}'\n\n    def analyze_keywords(self, content: str,\n                         target_keywords: list[str]) -> dict:\n        \"\"\"分析内容的关键词使用情况\"\"\"\n        content_lower = content.lower()\n        total_words = len(content)\n\n        analysis = {}\n        for kw in target_keywords:\n            kw_lower = kw.lower()\n            count = content_lower.count(kw_lower)\n            density = (count * len(kw.split())) / max(total_words, 1) * 100\n\n            # 检查关键词位置\n            in_title = kw_lower in content_lower[:100]\n            in_first_para = kw_lower in content_lower[:500]\n\n            analysis[kw] = {\n                \"count\": count,\n                \"density\": round(density, 2),\n                \"in_title\": in_title,\n                \"in_first_paragraph\": in_first_para,\n                \"status\": self._keyword_status(density, in_title)\n            }\n\n        return analysis\n\n    def _keyword_status(self, density: float, in_title: bool) -> str:\n        \"\"\"判断关键词使用状态\"\"\"\n        issues = []\n        if density < 0.5:\n            issues.append(\"密度偏低\")\n        elif density > 3.0:\n            issues.append(\"密度过高（可能被视为关键词堆砌）\")\n        if not in_title:\n            issues.append(\"未出现在标题中\")\n        return \"良好\" if not issues else \" | \".join(issues)\n\n    def optimize_content(self, title: str, content: str,\n                         keywords: list[str]) -> dict:\n        \"\"\"SEO 内容优化建议\"\"\"\n        analysis = self.analyze_keywords(content, keywords)\n\n        prompt = f\"\"\"你是一位 SEO 专家。请分析以下内容并提供优化建议。\n\n## 当前内容\n标题: {title}\n正文（前1000字）: {content[:1000]}\n\n## 目标关键词\n{', '.join(keywords)}\n\n## 关键词使用分析\n{json.dumps(analysis, ensure_ascii=False, indent=2)}\n\n请以 JSON 格式返回:",
      "section_ref": "18.5.1",
      "runnable": true,
      "dependencies": []
    },
    {
      "id": "code-10",
      "language": "\"\"\"",
      "description": "}}",
      "code": "\n        response = self._call_llm(prompt)\n\n        try:\n            json_match = re.search(r'```json\\s*(.*?)\\s*```', response, re.DOTALL)\n            return json.loads(json_match.group(1)) if json_match else json.loads(response)\n        except (json.JSONDecodeError, AttributeError):\n            return {\"optimized_title\": title, \"meta_description\": content[:150]}\n\n    def generate_meta_tags(self, title: str, content: str,\n                            keywords: list[str]) -> dict:\n        \"\"\"生成 SEO Meta 标签\"\"\"\n        # 标题优化（含核心关键词，控制在60字内）\n        primary_kw = keywords[0] if keywords else \"\"\n        opt_title = f\"{title} | {primary_kw}\" if primary_kw and primary_kw not in title else title\n        if len(opt_title) > 60:\n            opt_title = opt_title[:57] + \"...\"\n\n        # Meta 描述（含核心关键词，控制在150字内）\n        desc = content[:300].replace(\"\\n\", \" \").strip()\n        # 尝试在描述中自然插入关键词\n        if primary_kw and primary_kw not in desc:\n            desc = f\"{primary_kw}相关的{desc}\"\n        meta_desc = desc[:147] + \"...\" if len(desc) > 150 else desc\n\n        return {\n            \"title\": opt_title,\n            \"description\": meta_desc,\n            \"keywords\": \", \".join(keywords),\n            \"og_title\": opt_title,\n            \"og_description\": meta_desc,\n            \"twitter_card\": \"summary_large_image\",\n            \"canonical_suggestion\": \"建议设置 canonical URL 防止重复内容\"\n        }",
      "section_ref": "18.5.1",
      "runnable": false,
      "dependencies": []
    },
    {
      "id": "code-11",
      "language": "python",
      "description": "",
      "code": "\"\"\"\n内容审核与合规模块\n多层审核：敏感词 → 合规规则 → 品牌一致性\n\"\"\"\n\n@dataclass\nclass ComplianceRule:\n    \"\"\"合规规则\"\"\"\n    name: str\n    description: str\n    pattern: str               # 正则表达式或关键词\n    severity: str              # \"error\" / \"warning\" / \"info\"\n    suggestion: str\n\n\n@dataclass\nclass AuditResult:\n    \"\"\"审核结果\"\"\"\n    passed: bool\n    score: float               # 0-100\n    issues: list[dict] = field(default_factory=list)\n    summary: str = \"\"\n\n\nclass ContentAuditor:\n    \"\"\"内容审核器\"\"\"\n\n    # 中国广告法敏感词\n    AD_LAW_FORBIDDEN = [\n        \"最\", \"第一\", \"首个\", \"最好\", \"最大\", \"最高级\",\n        \"极品\", \"顶级\", \"绝对\", \"独家\", \"首家\", \"首选\",\n        \"国家级\", \"世界级\", \"全网最低价\", \"销量冠军\"\n    ]\n\n    # 通用敏感词模式\n    SENSITIVE_PATTERNS = [\n        {\"pattern\": r'包?(治|好|消|退)', \"severity\": \"warning\",\n         \"suggestion\": \"避免使用保证性用语，建议改为'有助于'\"},\n        {\"pattern\": r'[\\d]+%\\s*(保证|承诺)', \"severity\": \"warning\",\n         \"suggestion\": \"避免使用百分比承诺\"},\n    ]\n\n    def __init__(self, brand_guide: Optional[BrandGuide] = None):\n        self.brand_guide = brand_guide\n        self.compliance_rules: list[ComplianceRule] = []\n\n    def add_rule(self, rule: ComplianceRule):\n        \"\"\"添加自定义合规规则\"\"\"\n        self.compliance_rules.append(rule)\n\n    def audit(self, text: str) -> AuditResult:\n        \"\"\"执行完整的内容审核\"\"\"\n        issues = []\n\n        # 层1: 敏感词检测\n        issues.extend(self._check_sensitive_words(text))\n\n        # 层2: 正则模式检测\n        issues.extend(self._check_patterns(text))\n\n        # 层3: 自定义合规规则\n        issues.extend(self._check_compliance_rules(text))\n\n        # 层4: 品牌一致性检查\n        if self.brand_guide:\n            style_result = StyleController(self.brand_guide).check_compliance(text)\n            for issue in style_result[\"issues\"]:\n                issues.append({\n                    \"layer\": \"brand_consistency\",\n                    **issue\n                })\n\n        # 计算分数\n        error_count = sum(1 for i in issues if i.get(\"severity\") == \"error\")\n        warning_count = sum(1 for i in issues if i.get(\"severity\") == \"warning\")\n        score = max(0, 100 - error_count * 20 - warning_count * 5)\n\n        return AuditResult(\n            passed=error_count == 0,\n            score=score,\n            issues=issues,\n            summary=self._generate_summary(issues, score)\n        )\n\n    def _check_sensitive_words(self, text: str) -> list[dict]:\n        \"\"\"检测敏感词\"\"\"\n        issues = []\n        text_lower = text.lower()\n\n        for word in self.AD_LAW_FORBIDDEN:\n            if word in text_lower:\n                # 排除合理的上下文用法\n                idx = text_lower.find(word)\n                start = max(0, idx - 10)\n                end = min(len(text), idx + len(word) + 10)\n                context = text[start:end]\n\n                issues.append({\n                    \"layer\": \"sensitive_word\",\n                    \"type\": \"ad_law_violation\",\n                    \"word\": word,\n                    \"context\": context,\n                    \"severity\": \"error\",\n                    \"suggestion\": f\"根据《广告法》第九条，禁止使用'{word}'等绝对化用语\"\n                })\n\n        return issues\n\n    def _check_patterns(self, text: str) -> list[dict]:\n        \"\"\"正则模式检测\"\"\"\n        issues = []\n        for p in self.SENSITIVE_PATTERNS:\n            matches = re.findall(p[\"pattern\"], text)\n            if matches:\n                issues.append({\n                    \"layer\": \"pattern_match\",\n                    \"type\": \"risky_expression\",\n                    \"matches\": matches,\n                    \"severity\": p[\"severity\"],\n                    \"suggestion\": p[\"suggestion\"]\n                })\n        return issues\n\n    def _check_compliance_rules(self, text: str) -> list[dict]:\n        \"\"\"自定义合规规则检测\"\"\"\n        issues = []\n        for rule in self.compliance_rules:\n            if re.search(rule.pattern, text):\n                issues.append({\n                    \"layer\": \"custom_rule\",\n                    \"rule_name\": rule.name,\n                    \"severity\": rule.severity,\n                    \"suggestion\": rule.suggestion\n                })\n        return issues\n\n    def _generate_summary(self, issues: list[dict], score: float) -> str:\n        \"\"\"生成审核摘要\"\"\"\n        errors = [i for i in issues if i.get(\"severity\") == \"error\"]\n        warnings = [i for i in issues if i.get(\"severity\") == \"warning\"]\n\n        summary = f\"审核完成。评分: {score:.0f}/100。\"\n        if errors:\n            summary += f\"发现 {len(errors)} 个严重问题（必须修复）。\"\n        if warnings:\n            summary += f\"发现 {len(warnings)} 个警告（建议修复）。\"\n        if not issues:\n            summary += \"内容合规，未发现问题。\"\n        return summary",
      "section_ref": "18.6.1",
      "runnable": true,
      "dependencies": []
    },
    {
      "id": "code-12",
      "language": "python",
      "description": "",
      "code": "\"\"\"\n内容创作 Agent - 完整集成版\n\"\"\"\n\nclass ContentCreationAgent:\n    \"\"\"\n    内容创作 Agent 核心入口\n\n    使用示例:\n        agent = ContentCreationAgent(brand_guide=my_brand)\n        article = agent.create_article(\"AI在教育领域的应用\", ContentType.BLOG, [\"AI\", \"教育\"])\n    \"\"\"\n\n    def __init__(self, llm_client=None, brand_guide: Optional[BrandGuide] = None):\n        self.llm_client = llm_client\n        self.brand_guide = brand_guide\n        self.article_gen = ArticleGenerator(llm_client, brand_guide)\n        self.style_ctrl = StyleController(brand_guide) if brand_guide else None\n        self.seo = SEOOptimizer(llm_client)\n        self.auditor = ContentAuditor(brand_guide)\n\n    def create_article(self, topic: str, content_type: ContentType,\n                       keywords: list[str], target_words: int = 2000,\n                       tone: ToneStyle = ToneStyle.PROFESSIONAL,\n                       sections: int = 5) -> dict:\n        \"\"\"\n        完整的文章创作工作流:\n        大纲生成 → 逐节写作 → SEO优化 → 风格检查 → 合规审核\n        \"\"\"\n        result = {\"topic\": topic, \"steps\": []}\n\n        # Step 1: 生成大纲\n        result[\"steps\"].append(\"生成文章大纲\")\n        outline = self.article_gen.generate_outline(\n            topic, content_type, keywords, sections, target_words)\n        result[\"outline\"] = outline\n\n        # Step 2: 逐节写作\n        result[\"steps\"].append(\"逐节撰写内容\")\n        full_text = self.article_gen.write_full_article(outline)\n        result[\"draft\"] = full_text\n\n        # Step 3: SEO 优化\n        result[\"steps\"].append(\"SEO 优化分析\")\n        seo_analysis = self.seo.analyze_keywords(full_text, keywords)\n        meta_tags = self.seo.generate_meta_tags(outline.title, full_text, keywords)\n        result[\"seo\"] = {\"keyword_analysis\": seo_analysis, \"meta_tags\": meta_tags}\n\n        # Step 4: 风格检查\n        if self.style_ctrl:\n            result[\"steps\"].append(\"品牌风格检查\")\n            style_result = self.style_ctrl.check_compliance(full_text)\n            result[\"style\"] = style_result\n\n        # Step 5: 合规审核\n        result[\"steps\"].append(\"内容合规审核\")\n        audit_result = self.auditor.audit(full_text)\n        result[\"audit\"] = {\n            \"passed\": audit_result.passed,\n            \"score\": audit_result.score,\n            \"issues_count\": len(audit_result.issues),\n            \"summary\": audit_result.summary\n        }\n\n        # Step 6: 自动修复风格问题\n        if self.style_ctrl:\n            full_text = self.style_ctrl.auto_fix(full_text)\n\n        result[\"final_content\"] = full_text\n        result[\"word_count\"] = len(full_text)\n\n        return result\n\n    def create_marketing_campaign(self, brief: CampaignBrief) -> dict:\n        \"\"\"创建多渠道营销活动素材\"\"\"\n        generator = MarketingCopyGenerator(self.llm_client)\n        campaign = generator.generate_full_campaign(brief)\n\n        # 对每个渠道的每个版本进行审核\n        for channel, versions in campaign[\"materials\"].items():\n            for version in versions:\n                body = version.get(\"body\", \"\")\n                if body:\n                    audit = self.auditor.audit(body)\n                    version[\"audit\"] = {\n                        \"passed\": audit.passed,\n                        \"score\": audit.score,\n                        \"issue_count\": len(audit.issues)\n                    }\n\n        return campaign\n\n    def translate_and_localize(self, content: str, source: str,\n                                target: str) -> dict:\n        \"\"\"翻译并本地化内容\"\"\"\n        engine = TranslationEngine(self.llm_client)\n        result = engine.translate(content, source, target)\n        return result",
      "section_ref": "18.7.1",
      "runnable": true,
      "dependencies": []
    },
    {
      "id": "code-13",
      "language": "python",
      "description": "",
      "code": "\"\"\"\n端到端使用示例\n\"\"\"\n\nif __name__ == \"__main__\":\n    # 创建品牌指南\n    brand = BrandGuide(\n        name=\"TechFlow\",\n        tone=\"专业但不生硬，用简单语言解释复杂概念\",\n        vocabulary_level=\"mixed\",\n        forbidden_words=[\"颠覆性\", \"革命性\", \"一站式\", \"赋能\"],\n        preferred_words={\"AI\": \"人工智能\", \"app\": \"应用\", \"bug\": \"缺陷\"},\n        sentence_style=\"mixed\",\n        emoji_usage=\"limited\",\n        perspective=\"first_plural\",  # \"我们\"\n        examples=[\n            \"我们相信技术的力量在于让复杂变简单。\",\n            \"在这篇文章中，我们将一起探索...\"\n        ]\n    )\n\n    # 创建 Agent\n    agent = ContentCreationAgent(brand_guide=brand)\n\n    # 示例 1: 创建博客文章\n    print(\"=== 创建博客文章 ===\")\n    result = agent.create_article(\n        topic=\"人工智能如何改变教育行业\",\n        content_type=ContentType.BLOG,\n        keywords=[\"人工智能\", \"教育\", \"在线学习\", \"个性化教学\"],\n        target_words=2000,\n        tone=ToneStyle.PROFESSIONAL,\n        sections=4\n    )\n    print(f\"大纲标题: {result['outline'].title}\")\n    print(f\"字数: {result['word_count']}\")\n    print(f\"审核评分: {result['audit']['score']}/100\")\n    print(f\"审核通过: {'是' if result['audit']['passed'] else '否'}\")\n\n    # 示例 2: 营销活动\n    print(\"\\n=== 创建营销活动 ===\")\n    brief = CampaignBrief(\n        product_name=\"TechFlow 智能学习平台\",\n        product_description=\"基于人工智能的个性化在线学习平台\",\n        target_audience=\"25-40岁的职场人士\",\n        key_benefits=[\"AI个性化推荐\", \"碎片化学习\", \"实时反馈\"],\n        promotion_details=\"新用户注册即享7天免费体验\",\n        cta=\"立即注册，开启智能学习之旅\",\n        channels=[\"wechat\", \"xiaohongshu\", \"email\"]\n    )\n    campaign = agent.create_marketing_campaign(brief)\n    for channel, materials in campaign[\"materials\"].items():\n        print(f\"\\n{channel}: {len(materials)} 个版本\")\n\n    # 示例 3: 合规审核\n    print(\"\\n=== 内容合规审核 ===\")\n    test_text = \"我们提供全网最好的AI教育产品，保证100%提升成绩，效果绝对显著！\"\n    audit = agent.auditor.audit(test_text)\n    print(f\"评分: {audit.score}/100\")\n    print(f\"通过: {audit.passed}\")\n    for issue in audit.issues:\n        print(f\"  [{issue['severity']}] {issue.get('word', issue.get('type', ''))}: \"\n              f\"{issue.get('suggestion', '')}\")",
      "section_ref": "18.7.2",
      "runnable": true,
      "dependencies": []
    },
    {
      "id": "code-14",
      "language": "python",
      "description": "| 反馈循环 | 用户评分 → Prompt 优化 | 持续提升生成质量 |",
      "code": "\"\"\"\n多租户内容管理 - 品牌隔离与内容追踪\n\"\"\"\n\nclass TenantContentManager:\n    \"\"\"租户内容管理器\"\"\"\n\n    def __init__(self):\n        self.tenants: dict[str, dict] = {}\n\n    def register_tenant(self, tenant_id: str, brand_guide: BrandGuide):\n        \"\"\"注册租户并绑定品牌指南\"\"\"\n        self.tenants[tenant_id] = {\n            \"brand_guide\": brand_guide,\n            \"content_history\": [],\n            \"usage_stats\": {\"total_words\": 0, \"total_articles\": 0}\n        }\n\n    def track_content(self, tenant_id: str, content_id: str,\n                      content: str, metadata: dict = None):\n        \"\"\"记录内容产出\"\"\"\n        if tenant_id not in self.tenants:\n            return\n        self.tenants[tenant_id][\"content_history\"].append({\n            \"content_id\": content_id,\n            \"word_count\": len(content),\n            \"timestamp\": time.time(),\n            \"metadata\": metadata or {}\n        })\n        self.tenants[tenant_id][\"usage_stats\"][\"total_words\"] += len(content)\n        self.tenants[tenant_id][\"usage_stats\"][\"total_articles\"] += 1\n\n    def get_usage_report(self, tenant_id: str) -> dict:\n        \"\"\"获取租户使用报告\"\"\"\n        if tenant_id not in self.tenants:\n            return {\"error\": \"租户不存在\"}\n        stats = self.tenants[tenant_id][\"usage_stats\"]\n        history = self.tenants[tenant_id][\"content_history\"]\n        return {\n            \"total_articles\": stats[\"total_articles\"],\n            \"total_words\": stats[\"total_words\"],\n            \"average_words\": (stats[\"total_words\"] / max(stats[\"total_articles\"], 1)),\n            \"recent_articles\": history[-5:] if history else []\n        }",
      "section_ref": "18.8.2",
      "runnable": true,
      "dependencies": []
    }
  ],
  "tables": [
    {
      "headers": [
        "挑战",
        "说明",
        "解决方案"
      ],
      "data": [
        [
          "品牌一致性",
          "输出内容需要符合品牌调性",
          "品牌风格指南 + Few-Shot 示例"
        ],
        [
          "事实准确性",
          "AI 可能产生幻觉",
          "RAG 检索增强 + 事实核查链"
        ],
        [
          "多语言质量",
          "不同语言的表达习惯差异大",
          "本地化知识库 + 母语者审校"
        ],
        [
          "合规风险",
          "广告法、隐私法、平台规则",
          "多层审核管道 + 敏感词库"
        ],
        [
          "内容多样性",
          "避免千篇一律的\"AI味\"",
          "Temperature 控制 + 风格注入"
        ]
      ]
    },
    {
      "headers": [
        "环节",
        "策略",
        "说明"
      ],
      "data": [
        [
          "事实核查",
          "RAG + 知识库检索",
          "对关键声明进行事实验证"
        ],
        [
          "原创性检测",
          "指纹哈希 + 相似度计算",
          "防止内容重复发布"
        ],
        [
          "A/B 测试",
          "多版本生成 + 自动投放",
          "数据驱动的内容优化"
        ],
        [
          "反馈循环",
          "用户评分 → Prompt 优化",
          "持续提升生成质量"
        ]
      ]
    }
  ],
  "key_takeaways": [],
  "common_pitfalls": [],
  "related_chapters": [
    "ch05",
    "ch06",
    "ch29"
  ]
}