菜鸟AI - 让提示词生成更简单! 全站导航 全站导航
AI工具安装 新手教程 进阶教程 辅助资源 AI提示词 热点资讯 技术资讯 产业资讯 内容生成 模型技术 AI信息库

已有账号?

首页 > AI资讯新闻 > Python内容任务状态机实现指南:从AI初稿到人工审核全流程解析
热点资讯 Python内容

Python内容任务状态机实现指南:从AI初稿到人工审核全流程解析

2026-05-25
阅读 0
热度 0
作者 菜鸟AI编辑部
摘要

摘要

用 Python 实现一个内容任务状态机:从 AI 初稿到人工审核 在内容生产系统里,AI生成初稿只

用 Python 实现一个内容任务状态机:从 AI 初稿到人工审核

在内容生产系统里,AI生成初稿只是第一步。真正考验系统设计的,是如何管理一篇内容从创建、生成、审核、发布到复盘的全过程。如果仅仅把AI当作一个“写文章接口”,后续的混乱可想而知。

用 Python 实现一个内容任务状态机:从 AI 初稿到人工审核

比如,生成了多个版本,却分不清哪一版被审核过;文章还没经过人工确认,就被误认为可以发布;发布后的链接和数据没有回写,导致下次生成时,之前的经验完全无法复用。

所以,在接入AI之前,一个更稳妥的做法是先设计好任务的状态流转机制。下面,我们就用一个最小可运行的Python示例,来演示如何构建这样一个内容任务状态机。

一、状态设计

首先,我们需要定义一篇内容的完整生命周期。一个典型流程可以这样划分:

draft -> ai_generated -> pending_review -> approved -> scheduled -> published -> reviewed

每个状态的含义如下:

draft:任务刚创建,还没有生成内容
ai_generated:AI 已生成初稿
pending_review:等待人工审核
approved:人工审核通过
scheduled:已进入发布排期
published:已发布并记录链接
reviewed:已完成数据复盘

这里有一条至关重要的规则:AI生成完成,绝不等于可以发布。内容必须经过人工审核这一关,才能进入后续的发布流程。

二、定义状态枚举

用Python的Enum来定义任务状态,能让代码更清晰,也避免了到处使用字符串的混乱。

from enum import Enum


class TaskStatus(str, Enum):
    DRAFT = "draft"
    AI_GENERATED = "ai_generated"
    PENDING_REVIEW = "pending_review"
    APPROVED = "approved"
    SCHEDULED = "scheduled"
    PUBLISHED = "published"
    REVIEWED = "reviewed"

三、定义内容任务对象

接下来,用dataclass创建一个简单的内容任务模型。

from dataclasses import dataclass, field
from datetime import datetime
from typing import Optional, List


@dataclass
class ContentTask:
    id: str
    title: str
    topic: str
    platform: str
    status: TaskStatus = TaskStatus.DRAFT

    draft_text: Optional[str] = None
    final_text: Optional[str] = None
    publish_url: Optional[str] = None

    review_passed: bool = False
    review_notes: List[str] = field(default_factory=list)

    created_at: datetime = field(default_factory=datetime.now)
    updated_at: datetime = field(default_factory=datetime.now)

这个模型保留了几个关键字段:

draft_text:AI 生成的初稿
final_text:人工确认后的最终稿
review_passed:是否通过人工审核
publish_url:发布后的链接
review_notes:审核意见

在实际系统中,你还可以根据需要增加作者、审核人、版本号、知识库引用来源等字段。

四、定义合法状态流转

状态不能随意跳转。例如,draft可以进入ai_generated,但绝不能直接跳到published。我们需要定义允许的流转关系。

ALLOWED_TRANSITIONS = {
    TaskStatus.DRAFT: [TaskStatus.AI_GENERATED],
    TaskStatus.AI_GENERATED: [TaskStatus.PENDING_REVIEW],
    TaskStatus.PENDING_REVIEW: [TaskStatus.APPROVED, TaskStatus.AI_GENERATED],
    TaskStatus.APPROVED: [TaskStatus.SCHEDULED],
    TaskStatus.SCHEDULED: [TaskStatus.PUBLISHED],
    TaskStatus.PUBLISHED: [TaskStatus.REVIEWED],
    TaskStatus.REVIEWED: [],
}

其中,pending_review状态的流转规则尤为关键:

TaskStatus.PENDING_REVIEW: [TaskStatus.APPROVED, TaskStatus.AI_GENERATED]

这意味着,审核通过就进入approved;如果审核不通过,则可以退回到ai_generated状态,以便重新生成或修改初稿。

五、实现状态切换函数

有了规则,就可以实现一个通用的状态切换函数来执行检查。

def change_status(task: ContentTask, next_status: TaskStatus) -> ContentTask:
    allowed_next = ALLOWED_TRANSITIONS.get(task.status, [])

    if next_status not in allowed_next:
        raise ValueError(
            f"非法状态流转:{task.status.value} -> {next_status.value}"
        )

    task.status = next_status
    task.updated_at = datetime.now()
    return task

来测试一下:

task = ContentTask(
    id="CNT-001",
    title="用 Python 实现一个内容任务状态机",
    topic="AI 工作流",
    platform="tencent_cloud"
)

change_status(task, TaskStatus.AI_GENERATED)
print(task.status)

输出结果:

TaskStatus.AI_GENERATED

如果试图从draft直接跳到published,系统就会报错:

task = ContentTask(
    id="CNT-002",
    title="错误示例",
    topic="AI 工作流",
    platform="tencent_cloud"
)

change_status(task, TaskStatus.PUBLISHED)
ValueError: 非法状态流转:draft -> published

看,这就是状态机的价值所在——它从根本上杜绝了内容绕过审核直接发布的可能性。

六、模拟 AI 生成初稿

现在,我们来模拟AI生成初稿的步骤。实际项目中,这一步可以替换为调用大模型API。

def generate_draft(task: ContentTask, knowledge_context: str) -> ContentTask:
    if task.status != TaskStatus.DRAFT:
        raise ValueError("只有 draft 状态的任务可以生成初稿")

    task.draft_text = f"""
# {task.title}

本文主题:{task.topic}

参考知识:
{knowledge_context}

这里是 AI 生成的文章初稿,需要人工审核后才能发布。
"""

    change_status(task, TaskStatus.AI_GENERATED)
    return task

调用示例:

task = ContentTask(
    id="CNT-003",
    title="用 Python 实现一个内容任务状态机",
    topic="AI 内容生产工作流",
    platform="tencent_cloud"
)

task = generate_draft(
    task,
    knowledge_context="内容发布前必须经过人工审核,不能直接发布 AI 初稿。"
)

print(task.status)
print(task.draft_text)

生成后,任务状态会从draft变为ai_generated

七、进入人工审核

AI生成完成后,任务必须进入待审核状态,而不是直接发布。

def submit_for_review(task: ContentTask) -> ContentTask:
    if task.status != TaskStatus.AI_GENERATED:
        raise ValueError("只有 AI 已生成初稿的任务才能提交审核")

    change_status(task, TaskStatus.PENDING_REVIEW)
    return task

八、实现人工审核逻辑

审核逻辑分两种情况:通过,或者不通过并退回修改。

def review_task(task: ContentTask, passed: bool, notes: str) -> ContentTask:
    if task.status != TaskStatus.PENDING_REVIEW:
        raise ValueError("只有 pending_review 状态的任务可以审核")

    task.review_notes.append(notes)

    if passed:
        task.review_passed = True
        task.final_text = task.draft_text
        change_status(task, TaskStatus.APPROVED)
    else:
        task.review_passed = False
        change_status(task, TaskStatus.AI_GENERATED)

    return task

审核通过的示例:

task = review_task(
    task,
    passed=True,
    notes="内容事实无明显问题,表达可以发布。"
)

print(task.status)

输出:TaskStatus.APPROVED

审核不通过的示例:

task = review_task(
    task,
    passed=False,
    notes="初稿中存在未经确认的结论,需要重新生成。"
)

这时,任务状态会退回到ai_generated,等待重新处理。

九、排期与发布

只有审核通过的内容,才有资格进入排期。

def schedule_task(task: ContentTask) -> ContentTask:
    if task.status != TaskStatus.APPROVED:
        raise ValueError("只有 approved 状态的任务可以排期")

    change_status(task, TaskStatus.SCHEDULED)
    return task

发布时,必须记录下发布链接。

def publish_task(task: ContentTask, url: str) -> ContentTask:
    if task.status != TaskStatus.SCHEDULED:
        raise ValueError("只有 scheduled 状态的任务可以发布")

    if not url:
        raise ValueError("发布链接不能为空")

    task.publish_url = url
    change_status(task, TaskStatus.PUBLISHED)
    return task

十、发布后复盘

发布并不是流程的终点。发布后的数据表现和问题反馈,应该被记录回任务中,形成闭环。

def review_result(task: ContentTask, summary: str) -> ContentTask:
    if task.status != TaskStatus.PUBLISHED:
        raise ValueError("只有 published 状态的任务可以复盘")

    task.review_notes.append(f"复盘:{summary}")
    change_status(task, TaskStatus.REVIEWED)
    return task

十一、完整运行示例

把上述所有步骤串联起来,就构成了一个完整的任务生命周期演示。

def run_demo():
    task = ContentTask(
        id="CNT-004",
        title="用 Python 实现一个内容任务状态机",
        topic="AI 内容生产工作流",
        platform="tencent_cloud"
    )

    task = generate_draft(
        task,
        knowledge_context="AI 生成内容必须经过人工审核后才能发布。"
    )

    task = submit_for_review(task)

    task = review_task(
        task,
        passed=True,
        notes="审核通过,内容可以进入排期。"
    )

    task = schedule_task(task)

    task = publish_task(
        task,
        url="https://cloud.tencent.com/developer/article/example"
    )

    task = review_result(
        task,
        summary="发布后记录数据,并将审核经验回写到知识库。"
    )

    return task


if __name__ == "__main__":
    result = run_demo()
    print(result)

这个示例虽然简单,但已经覆盖了一个内容生产系统最基本的状态流转逻辑。

十二、后续可以怎么扩展?

在实际项目中,这个基础框架可以从多个方向进行扩展。

1. 增加数据库

ContentTask对象持久化存储到SQLite、MySQL或PostgreSQL中,而不是仅保存在内存里。

2. 增加版本管理

每次AI重新生成或人工修改,都生成一个新的版本号,例如:

v1: AI 初稿
v2: 人工修改稿
v3: 最终发布稿

这样,发布后可以精确追踪具体使用的是哪一版内容。

3. 增加操作日志

记录每一次状态变化:谁在什么时间,把任务从哪个状态改到了哪个状态。这对于多人协作和审核追踪至关重要。

4. 接入知识库检索

在生成初稿前,先根据任务主题从知识库中检索相关资料,再将检索结果作为上下文传给模型。流程可以优化为:任务创建 -> 知识库检索 -> 构造Prompt -> AI生成初稿 -> 人工审核。

5. 接入真实模型 API

目前generate_draft函数只是模拟文本。真实项目中,可以替换为调用大模型API,例如:prompt = 任务信息 + 知识库片段 + 输出要求; model.generate(prompt)。但无论使用哪个模型,都必须牢记:绝不建议让模型输出后直接发布。

十三、总结

一个成熟的AI内容生产系统,其重点不应仅仅放在“能否生成文章”上,更应关注生成之后的内容如何被有效审核、追踪和复盘。

本文通过一个Python实现的最小状态机,完整演示了以下流程:

创建任务
-> AI 生成初稿
-> 提交人工审核
-> 审核通过
-> 排期发布
-> 写入发布链接
-> 发布后复盘

这个流程的核心思想,不是用AI替代人,而是让AI成为可控内容生产链路中的一个环节。

从技术实现上看,状态机确保了内容无法绕过审核;任务对象保留了完整的上下文;审核记录沉淀了宝贵的经验;发布链接和复盘结果为后续的内容优化提供了依据。只有当这些基础结构建立起来之后,AI才能真正成为一个可维护、可追踪的系统组件,而不再是一个临时生成文本的“黑盒”工具。

来源:互联网

免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

同类文章推荐

相关文章推荐

更多