首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >AI 生成专业文章:从提示词工程到可运行代码

AI 生成专业文章:从提示词工程到可运行代码

原创
作者头像
用户12502927
发布2026-09-15 14:44:18
发布2026-09-15 14:44:18
390
举报

摘要:专业文章生成不应等同于“让模型一次性写一篇长文”。更可靠的方法是采用“需求定义—提纲生成—分节扩写—审校润色”的流水线,并用代码把提示词、模型调用、结构化输出和人工复核连接起来。本文给出一套可运行的 Python 实现,并讨论质量控制、合规与落地要点。

1. 为什么直接让 AI 写长文通常不够专业

直接输入“帮我写一篇关于大模型知识管理的专业文章”,模型往往会出现以下问题:

  1. 结构松散:标题之间缺乏逻辑递进,章节权重失衡。
  2. 事实幻觉:编造数据、文献、案例或政策条款。
  3. 风格漂移:前半部分像白皮书,后半部分像营销文案。
  4. 不可控:难以指定字数、读者、术语和输出格式。
  5. 难以复用:每次生成质量依赖运气,无法沉淀为生产流程。

专业写作的关键不是“一次生成”,而是把写作拆成可验证的步骤。推荐四阶段流水线:

  • 需求定义:主题、读者、字数、语气、必须包含的要点。
  • 提纲生成:先让模型输出 JSON 提纲,便于程序校验。
  • 分节扩写:逐节写作,控制上下文和长度。
  • 审校润色:事实风险检查、逻辑优化、术语统一、人工终审。

2. 提示词设计原则

一个可用的专业写作提示词应包含六类信息:

要素

说明

角色

资深行业研究员、技术编辑、审校专家

任务

生成提纲、撰写章节、润色全文

上下文

主题、读者、字数、行业背景

约束

不编造数据、不虚构文献、标明需核实内容

格式

Markdown、JSON、三级标题、代码块

示例

给出期望的输出结构,降低格式错误

例如,提纲阶段要求模型只输出 JSON:

代码语言:javascript
复制
{
  "title": "文章标题",
  "abstract": "摘要",
  "sections": [
    {"heading": "一级标题", "points": ["要点1", "要点2"]}
  ]
}

程序解析 JSON 后,再逐节调用模型。这样比一次性生成全文更稳定,也更容易定位问题。

3. 完整 Python 代码

以下代码使用 OpenAI 兼容 API,也可接入 Ollama、vLLM、DeepSeek、通义千问等兼容接口。请先安装:

代码语言:javascript
复制
pip install -U openai

代码文件:article_generator.py

代码语言:javascript
复制
import os
import json
import datetime
from openai import OpenAI

# ========== 配置 ==========
API_KEY = os.getenv("OPENAI_API_KEY")
BASE_URL = os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1")
MODEL = os.getenv("OPENAI_MODEL", "gpt-4o-mini")

if not API_KEY:
    raise SystemExit(
        "请先设置环境变量 OPENAI_API_KEY。\n"
        "如使用 Ollama,可设为:export OPENAI_API_KEY=ollama"
    )

client = OpenAI(api_key=API_KEY, base_url=BASE_URL)


def chat(messages, temperature=0.6, max_tokens=4000):
    """统一模型调用入口。"""
    resp = client.chat.completions.create(
        model=MODEL,
        messages=messages,
        temperature=temperature,
        max_tokens=max_tokens,
    )
    return resp.choices[0].message.content.strip()


def extract_json(text):
    """从模型输出中提取 JSON,增强鲁棒性。"""
    start = text.find("{")
    end = text.rfind("}")
    if start == -1 or end == -1:
        raise ValueError(f"未找到 JSON:{text[:300]}")
    return json.loads(text[start:end + 1])


def build_outline(topic, audience, length, requirements):
    """第一阶段:生成结构化提纲。"""
    system = (
        "你是一位资深行业研究员和编辑,擅长将复杂主题拆解为逻辑严密的专业文章提纲。"
        "你只输出 JSON,不输出解释。"
    )
    user = f"""请为以下文章生成提纲。
主题:{topic}
目标读者:{audience}
预计字数:{length}
额外要求:{requirements}

返回 JSON,格式如下:
{{
  "title": "文章标题",
  "abstract": "200字以内摘要",
  "sections": [
    {{"heading": "一级标题", "points": ["要点1", "要点2", "要点3"]}}
  ]
}}
"""
    raw = chat(
        [
            {"role": "system", "content": system},
            {"role": "user", "content": user},
        ],
        temperature=0.3,
    )
    return extract_json(raw)


def write_section(article_title, heading, points, audience, tone):
    """第二阶段:逐节扩写。"""
    system = (
        "你是一位专业作者,写作严谨、结构清晰、避免空话。"
        "不得编造具体数据、文献或政策条款;无法确认时写“示例”或“需核实”。"
    )
    user = f"""请撰写文章《{article_title}》中的一节。
本节标题:{heading}
必须覆盖的要点:{points}
目标读者:{audience}
语气风格:{tone}

要求:
1. 使用 Markdown 格式;
2. 600-1000 字;
3. 至少包含一个可操作建议、流程或代码示例;
4. 不要重复文章标题;
5. 不要虚构参考文献。
"""
    return chat(
        [
            {"role": "system", "content": system},
            {"role": "user", "content": user},
        ],
        temperature=0.7,
    )


def polish_article(draft):
    """第三阶段:审校与润色。"""
    system = (
        "你是一位资深编辑,负责事实风险检查、逻辑优化与语言润色。"
        "保留 Markdown 结构。"
    )
    user = f"""请审校以下文章:
1. 删除重复和空泛表述;
2. 标出需要人工核实的事实性陈述;
3. 统一术语和语气;
4. 保持原意,不添加虚构引用。

文章:
{draft}
"""
    return chat(
        [
            {"role": "system", "content": system},
            {"role": "user", "content": user},
        ],
        temperature=0.2,
    )


def generate_article(
    topic,
    audience="专业人士",
    length=2000,
    tone="严谨、客观、可操作",
    requirements="无",
):
    """端到端生成文章。"""
    outline = build_outline(topic, audience, length, requirements)

    parts = [
        f"# {outline['title']}\n",
        f"> 摘要:{outline['abstract']}\n",
    ]

    for sec in outline["sections"]:
        heading = sec["heading"]
        points = ";".join(sec.get("points", []))
        parts.append(f"## {heading}\n")
        parts.append(
            write_section(
                article_title=outline["title"],
                heading=heading,
                points=points,
                audience=audience,
                tone=tone,
            )
        )

    draft = "\n\n".join(parts)
    final = polish_article(draft)
    return final


if __name__ == "__main__":
    article = generate_article(
        topic="企业如何构建大模型驱动的知识管理系统",
        audience="企业 CTO、IT 负责人与知识管理从业者",
        length=2000,
        requirements="包含架构、实施步骤、代码片段、风险与合规",
    )

    filename = f"article_{datetime.datetime.now():%Y%m%d_%H%M%S}.md"
    with open(filename, "w", encoding="utf-8") as f:
        f.write(article)

    print(article)
    print(f"\n已保存:{filename}")

4. 运行方法

使用云端 OpenAI 兼容接口

代码语言:javascript
复制
export OPENAI_API_KEY="你的密钥"
export OPENAI_BASE_URL="https://api.openai.com/v1"
export OPENAI_MODEL="gpt-4o-mini"
python article_generator.py

使用本地 Ollama

代码语言:javascript
复制
export OPENAI_API_KEY=ollama
export OPENAI_BASE_URL=http://localhost:11434/v1
export OPENAI_MODEL=qwen2.5:7b
python article_generator.py

如果接口报 max_tokens 参数错误,可将代码中的 max_tokens 改为 max_completion_tokens,具体以模型服务商文档为准。

5. 质量控制与合规

代码能提升效率,但不能替代责任。正式发布前应执行:

  1. 事实核查:所有数据、政策、引用必须由人工确认。
  2. 版权检查:避免直接复制受版权保护的段落。
  3. 隐私保护:不要向第三方模型输入客户数据、密钥、个人信息。
  4. 偏见审查:检查模型是否包含刻板印象或歧视性表达。
  5. 人工终审:由领域专家确认专业判断和结论。
  6. 版本记录:保存提示词、模型版本、参数和生成时间,便于追溯。

6. 结论

AI 生成专业文章的最佳实践,不是追求“一键出稿”,而是构建可复用的写作流水线:结构化提纲、分节生成、自动审校、人工终审。本文给出的代码可以直接运行,也可以替换模型、提示词和输出模板,接入企业内部知识库、CMS 或文档系统。真正决定文章质量的,仍然是清晰的写作目标、可靠的知识来源和严格的人工把关。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 摘要:专业文章生成不应等同于“让模型一次性写一篇长文”。更可靠的方法是采用“需求定义—提纲生成—分节扩写—审校润色”的流水线,并用代码把提示词、模型调用、结构化输出和人工复核连接起来。本文给出一套可运行的 Python 实现,并讨论质量控制、合规与落地要点。
    • 1. 为什么直接让 AI 写长文通常不够专业
    • 2. 提示词设计原则
    • 3. 完整 Python 代码
    • 4. 运行方法
      • 使用云端 OpenAI 兼容接口
      • 使用本地 Ollama
    • 5. 质量控制与合规
    • 6. 结论
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档