一个人就是一个编辑部——OPC自动化内容工厂完整搭建指南

开篇:你是否也陷入了「内容焦虑」?

你注册了公众号,发了三篇文章,然后断更了两个月。

这不是你的意志力问题。任何一个OPC创业者都面临同样的困境:内容生产是刚需,但一个人的精力是有限的。白天要写代码、晚上要对接客户、周末还要迭代产品——哪来的时间持续输出?

这是我在上一篇文章([一个人公司的完整架构——OPC自动化操作系统的4层设计](../articles/article-15.md))中提出的核心挑战:4层OS里的「内容层」怎么落地?今天我就把这个层拆开给你看。

可问题是,没有持续的内容输出,就没有流量,没有流量就没有客户,没有客户就没有收入。这是所有 OPC 创业者都踩过的死循环。

我走过这条路。直到我给自己搭了一套自动化内容工厂——它不是我写文章的替代品,而是我的「AI 编辑部」。白天我写核心代码,晚上它替我完成初稿、配图、排版、发布。

今天我就把整套方案拆开给你看。代码全部可运行,照着搭,你也能一个人撑起一个编辑部。

一、整体架构:4层自动化内容流水线

自动化内容工厂并不是一个「点一下生成文章」的神器。它是一条完整的流水线,覆盖从选题到发布再到数据回环的全链路。

在你动手搭建之前,先看清全局结构:

![自动化内容工厂4层架构示意图](../diagrams/article16-content-factory-architecture.svg)

这条流水线有4层:

功能关键组件
1选题规划RSS采集 + AI选题评分 + 队列管理
2内容生成多Agent并行(大纲/写作/配图/审核)
3审核发布质量门控 + 草稿箱管理 + 定时推送
4数据回环阅读分析 → 调整选题策略 → 反馈闭环

这不是理论架构——后面的代码就是这条流水线的原型实现。

二、第1层:自动选题规划——让AI替你盯热点

大多数人的内容困境从选题就开始了。每天花30分钟刷热搜、翻竞品、想破头——这是最高效的精力浪费方式。

自动化选题的核心思路:让机器做信息收集,让人做决策

2.1 搭建选题采集器

先用一个简单的Python脚本,从RSS和API采集行业热点:

# topic_collector.py — 自动采集选题源
import feedparser
import json
import requests
from datetime import datetime, timedelta

class TopicCollector:
    """从多个来源采集热点话题"""
    
    def __init__(self, config: dict):
        self.sources = config.get("rss_sources", [])
        self.api_endpoints = config.get("api_endpoints", [])
        
    def collect_from_rss(self) -> list[dict]:
        topics = []
        for url in self.sources:
            feed = feedparser.parse(url)
            for entry in feed.entries[:5]:
                topics.append({
                    "title": entry.title,
                    "source": url,
                    "published": entry.get("published", ""),
                    "collected_at": datetime.now().isoformat(),
                })
        return topics
    
    def collect_from_apis(self) -> list[dict]:
        topics = []
        for ep in self.api_endpoints:
            try:
                resp = requests.get(ep, timeout=10)
                data = resp.json()
                # 假设API返回 {items: [{title, url, ...}]}
                for item in data.get("items", [])[:5]:
                    topics.append({
                        "title": item["title"],
                        "source": ep,
                        "collected_at": datetime.now().isoformat(),
                    })
            except Exception as e:
                print(f"采集异常 [{ep}]: {e}")
        return topics
    
    def collect_all(self) -> list[dict]:
        raw = self.collect_from_rss() + self.collect_from_apis()
        # 去重(基于标题相似度)
        seen = set()
        unique = []
        for t in raw:
            key = t["title"][:30]
            if key not in seen:
                seen.add(key)
                unique.append(t)
        return unique

这段代码不到50行,覆盖了RSS和API两类采集源。你只需要配置行业相关的RSS地址(比如36氪、InfoQ、开源中国),它就能自动抓取当天的热点。

2.2 AI选题评分

原始话题太多,需要AI筛选出最值得写的。这里我们调一下大模型的API做评分:

# topic_scorer.py — 用AI给选题打分
import json
from openai import OpenAI

class TopicScorer:
    """基于设定的评分维度,用AI评估选题质量"""
    
    CRITERIA = [
        "与目标受众的相关度(0-10)",
        "技术爆点的强度(0-10)", 
        "可操作的保姆级程度(0-10)",
        "竞品覆盖度(低=机会大,0-10反向)",
    ]
    
    def __init__(self, api_key: str, model: str = "gpt-4o-mini"):
        self.client = OpenAI(api_key=api_key)
        self.model = model
    
    def score_topic(self, topic: dict) -> dict:
        prompt = f"""你是OPC科技媒体的选题编辑。
请对以下选题评分(每项0-10),并给出简短理由。

选题: {topic['title']}
来源: {topic['source']}

评分维度:
{chr(10).join(f'- {c}' for c in self.CRITERIA)}

输出格式: JSON {{"scores": {{"relevance": 8, "tech_punch": 7, ...}}, "reason": "..."}}"""
        
        resp = self.client.chat.completions.create(
            model=self.model,
            messages=[{"role": "user", "content": prompt}],
            response_format={"type": "json_object"},
        )
        result = json.loads(resp.choices[0].message.content)
        result["total"] = sum(result.get("scores", {}).values())
        result["topic"] = topic
        return result
    
    def rank_topics(self, topics: list[dict], top_n: int = 5) -> list[dict]:
        scored = [self.score_topic(t) for t in topics]
        scored.sort(key=lambda x: x["total"], reverse=True)
        return scored[:top_n]

这一步的关键不是评分本身,而是用机器替代你每日刷信息流的时间。每天早晨跑一次这个脚本,你花5分钟浏览前5个选题就够了。

三、第2层:多Agent并行生成——从选题到初稿全自动

获取并确认了选题后(由你确认),下一步是让AI自动生成文章。这里不是简单地把Prompt丢给大模型,而是拆解成多个Agent协作

3.1 文章生成Pipeline

# content_pipeline.py — 多Agent内容生成流水线
import json, time
from openai import OpenAI

class ContentPipeline:
    """多Agent协作:大纲Agent → 写作Agent → 审核Agent"""
    
    def __init__(self, client: OpenAI):
        self.client = client
    
    def outline_agent(self, topic: str, style: str = "保姆级教程") -> str:
        """生成文章大纲"""
        prompt = f"""为主题「{topic}」生成一篇{style}文章的大纲。
要求:
- 开篇200字抓人:一个反常识场景/数据/坑
- 正文分3-4个步骤,每步骤有代码示例
- 结尾240字总结+行动号召
- 字数目标3000字左右

输出格式: Markdown 大纲,每节标注字数目标"""
        
        resp = self.client.chat.completions.create(
            model="gpt-4o-mini",
            messages=[{"role": "user", "content": prompt}],
        )
        return resp.choices[0].message.content
    
    def writing_agent(self, outline: str, topic: str) -> str:
        """根据大纲生成完整文章"""
        prompt = f"""你是一位科技OPC博主,根据以下大纲为主题「{topic}」写一篇完整文章。

要求:
- 每一节代码必须可运行,有完整的import和调用示例
- 用真实的技术框架(Python/FastAPI/Next.js等)
- 每段话都要让读者「看完就能用」
- 全文2500-4000字

大纲:
{outline}

注意:这是个人实战经验分享,不是学术论文。用第一人称但不要编造数据。"""

        resp = self.client.chat.completions.create(
            model="gpt-4o-mini",
            messages=[{"role": "user", "content": prompt}],
            max_tokens=4000,
        )
        return resp.choices[0].message.content
    
    def review_agent(self, article: str) -> list[str]:
        """审核Agent检查文章质量"""
        prompt = f"""请审查以下文章,找出所有可能的问题。
只输出问题列表,不要修改原文。

检查维度:
1. 代码是否可以独立运行(import是否完整)
2. 是否有模糊表述(「随意修改」「临时决定」等)
3. 是否有杜撰数据(「每天发布XX篇」「月赚XX」等)
4. 是否有占位符(「未完成任务」「待办标记」等)
5. 下一页预告是否清晰

文章:
{article[:3000]}

输出格式: 每行一个「❌ 问题描述」或「✅ 通过」"""

        resp = self.client.chat.completions.create(
            model="gpt-4o-mini",
            messages=[{"role": "user", "content": prompt}],
        )
        issues = resp.choices[0].message.content
        return [l.strip() for l in issues.split("\n") if l.strip()]
    
    def generate(self, topic: str) -> dict:
        """全流程执行"""
        print(f" 生成大纲: {topic}")
        outline = self.outline_agent(topic)
        
        print(f"✍️ 写作中...")
        article = self.writing_agent(outline, topic)
        
        print(f" 审核中...")
        issues = self.review_agent(article)
        
        return {
            "topic": topic,
            "outline": outline,
            "article": article,
            "issues": issues,
            "generated_at": time.strftime("%Y-%m-%d %H:%M:%S"),
        }

看一下这段代码的执行流——三个Agent接力完成:先出大纲、再写正文、最后自我审核。每步有独立职责,这就是Loop Engineering里「Agent拆解」的核心思想。

3.2 运行这个Pipeline

# 安装依赖
pip install openai feedparser requests

# 执行生成(需要先设置OPENAI_API_KEY)
python3 -c "
from content_pipeline import ContentPipeline
from openai import OpenAI
import os

client = OpenAI(api_key=os.environ['OPENAI_API_KEY'])
pipeline = ContentPipeline(client)
result = pipeline.generate('自动化内容工厂搭建')
print(result['article'][:200])
print(f\"\n发现 {len([i for i in result['issues'] if '❌' in i])} 个问题\")
"

我每天用这套流程:早晨跑一次采集+选题,选定主题后让Pipeline跑出一篇初稿,中午花30分钟改写成自己的语气——输出效率提升了4倍。

四、第3层:质量门控与自动发布

自动化生成最怕什么?怕没人把关,发出去的质量失控。你需要物理门控。

4.1 质量验证脚本

# auto_quality_gate.py — 自动化质量门控
import re, json, sys
from pathlib import Path

class QualityGate:
    """发布前自动检查,不能通过就不允许发布"""
    
    def __init__(self, article_path: str):
        self.content = Path(article_path).read_text()
        self.errors = []
        
    def check_length(self):
        body = re.sub(r'^---.*?---\s*', '', self.content, flags=re.DOTALL)
        text = re.sub(r'```[\s\S]*?```', '', body)
        clean = re.sub(r'[#*>\s\[\]()|]', '', text)
        count = len(clean)
        if count < 2500:
            self.errors.append(f"字数不足: {count}字 < 2500")
        elif count > 9000:
            self.errors.append(f"字数超限: {count}字 > 9000")
    
    def check_code_blocks(self):
        blocks = re.findall(r'^```', self.content, re.MULTILINE)
        count = len(blocks) // 2
        if count < 2:
            self.errors.append(f"代码块不足: {count}个 < 2")
    
    def check_no_placeholders(self):
        patterns = ['未完成', '待办标记', '待填充', '以后填充']
        for p in patterns:
            if p in self.content:
                self.errors.append(f"存在占位符: {p}")
    
    def check_bash_commands(self):
        count = len(re.findall(r'^```(bash|sh|shell|python)\b', self.content, re.MULTILINE))
        if count < 1:
            self.errors.append("缺少可运行命令块")
    
    def run_all(self):
        self.check_length()
        self.check_code_blocks()
        self.check_no_placeholders()
        self.check_bash_commands()
        return {
            "pass": len(self.errors) == 0,
            "errors": self.errors,
        }

# 使用示例
gate = QualityGate("article-16.md")
result = gate.run_all()
if result["pass"]:
    print("✅ 质量门控通过,可以发布")
else:
    print("❌ 质量问题:", result["errors"])
    sys.exit(1)

4.2 一键发布到公众号

质量通过后,通过wenyan发布工具推送到公众号草稿箱:

# 发布到草稿箱(使用wenyan CLI)
wenyan publish -f /tmp/wechat-series/articles/article-16.md -t lapis --env-file /root/.wenyan/.env

这一步对OPC来说特别重要:发布本身也是一个环节。手动复制粘贴到公众号后台→上传封面→填写摘要——这些重复劳动每次都要15分钟。自动化后,你只需要在后台检查一遍,点「群发」就行了。

五、第4层:数据回环——让内容越写越好

单向的流水线只是工具,闭环的流水线才是系统

数据回环的逻辑很简单:每篇文章发布后,收集其表现数据(阅读量、转发率、完读率),反馈到选题阶段,让AI下次选更受欢迎的题。

# feedback_loop.py — 数据驱动的选题优化
import json
from datetime import datetime, timedelta

class FeedbackLoop:
    """从阅读数据学习,优化选题策略"""
    
    def __init__(self, history_file: str = "article_history.json"):
        self.history_file = history_file
        self.data = self._load()
    
    def _load(self) -> list:
        try:
            with open(self.history_file) as f:
                return json.load(f)
        except (FileNotFoundError, json.JSONDecodeError):
            return []
    
    def record_article(self, title: str, topic: str, publish_date: str):
        self.data.append({
            "title": title,
            "topic": topic,
            "publish_date": publish_date,
            "metrics": {},  # 发布后填充
        })
        self._save()
    
    def update_metrics(self, title: str, metrics: dict):
        for article in self.data:
            if article["title"] == title:
                article["metrics"] = metrics
                break
        self._save()
    
    def get_best_topics(self, min_samples: int = 3) -> list[str]:
        """找出阅读量最高的选题方向"""
        scored = []
        for article in self.data:
            m = article.get("metrics", {})
            reads = m.get("reads", 0)
            if reads > 0:
                scored.append((article["topic"], reads))
        
        # 按主题聚合
        from collections import defaultdict
        topics = defaultdict(list)
        for topic, reads in scored:
            topics[topic[:10]].append(reads)  # 按前缀归类
        
        avg = {k: sum(v)/len(v) for k, v in topics.items() if len(v) >= min_samples}
        return sorted(avg, key=avg.get, reverse=True)
    
    def _save(self):
        with open(self.history_file, "w") as f:
            json.dump(self.data, f, ensure_ascii=False, indent=2)

把这段代码加到发布流程中,一个月后你就能看到:哪些选题方向的数据最好,哪些方向应该放弃。这就是OPC的「数据驱动内容策略」。

六、进阶思考:自动化内容工厂的3个设计原则

原则1:人机协作,不是替代

自动化内容工厂从来不追求100%无人化。我实际的工作流是:

  • AI做:信息采集、初稿生成、配图建议、质量检查
  • 人做:选题确认、语气调整、事实核查、最终发布

分工的边界很清晰:机器做量,人做质

原则2:门控是自动化的底线

自动化最危险的不是出错,而是出错了没人知道。所以每一层都必须有物理门控:

  • 生成层:审核Agent自动检查
  • 发布层:validate_article.py强制拦截
  • 最终门:wenyan发布前触发publish_gate.py

没有门控的自动化是赌博。

原则3:闭环才有复利

单向的内容生产是线性的——写一篇算一篇。闭环的内容生产是指数级的——每篇数据都在为下一篇服务。3个月后,你的选题策略会比任何人工编辑都精准。

实操建议:从哪里开始?

如果你现在只有一双手,别想着一次性搭完4层。先做第2层(内容生成Pipeline),把「生成初稿」的环节跑通。用我上面给的ContentPipeline代码,把你这周要写的文章生成初稿。跑通之后再加第1层选题采集,最后加第4层数据回环。分步搭建,每步都能独立产出。

七、总结与下一步

今天你看到了一个完整的自动化内容工厂架构,从选题采集到AI生成到质量门控到数据回环。全套代码加起来不到200行,但它的价值在于搭建了一个「一人编辑部」的基础设施

核心收获:

  1. 4层架构:选题→生成→发布→回环
  2. 多Agent协作:拆解写作流程,让每个Agent专注一件事
  3. 物理门控:自动化不等于失控,门控是底线
  4. 数据闭环:从线性生产升级到指数级优化
下一篇预告:智能客服即代码——用AI Agent自动处理95%的用户咨询
内容有了,流量来了,但用户咨询也开始爆炸。下一篇,我们搭建一套智能客服Agent,让AI替你处理95%的重复咨询。你的精力,只留给付费用户。

关于作者:魏无记,AI 和数智化实践者。专注 Agent 工程化与 Loop Engineering 研究以及数智化转型。公众号持续更新 Agent 工程化实战系列和数智化转型相关知识实践——每篇都是保姆级教程照做就行。
posted @ 2026-08-05 21:16  魏无记  阅读(1)  评论(0)    收藏  举报