🤖 第五章 应用实战:知乎图文创作和发布助手
📄 一句话概括

这个智能体不是【会写文章的 AI】,而是一份把【对标结果】变成【初稿】、并且知道【自己哪里写得不像人】的设定。本节的核心只有一句话:人味不是靠【藏】出来的,是靠【补】出来的——因为平台看的是一组可以数的量,而数摆出来之后,你就知道该往哪儿补。

📝 本节和前面几节的关系

5.3.1 产出的是一张任务卡(角度+字数+要补的缺口),本节把它变成初稿,然后交给 5.2 的第三格【补人味】。注意顺序:【补人味】是人在初稿上做的一步,不是机器自动完成的——本节的智能体做的是把初稿写到【只差人味】的程度,并主动把自己缺的那几项报出来。

一、先看它由哪四块组成

与 1.2.1(扣子)、4.3.1(文心)一样,一个智能体拆开就是四块。但知乎这一侧的第四块变了:

块 内容 本章的特殊之处
① 人设 你是谁、面向谁、用什么语气 要写一个具体的人(有职业、有偏好、有立场),不是【一位内容创作者】
② 知识 平台规则、格式要求、你收集的素材 要装进知乎的规则:三路形态、标题 2~80 字符、声明六档、话题 1~5 个
③ 工作流 从任务卡到初稿的步骤 开头要先读对标结论,再定角度,再写
④ 检查 写完自己过一遍 本章新加一层:人味六项自检(本节的 Demo)

第四块为什么是本章独有的? 因为在知乎,【内容合格】和【内容好看】是两件事,但【内容合格】和【内容真的存在】是同一件事——5.1.1 现状三讲过:判定看的是文本特征,而文本特征是从生成方式里长出来的。所以自查必须自查到【特征】这一层,不能只查错别字和格式。

二、提示词里必须写死的三件事

这三件事,前三章的智能体也写,但知乎这一侧的分寸不一样。

第一件:输入是【任务卡】,不是【话题】

✗ 差的写法:帮我写一篇关于家庭收纳的回答。
✓ 好的写法:按下面这张任务卡写一篇知乎回答。
           【问题链接】https://www.zhihu.com/question/123456
           【切入角度】成本预算(对标显示:此角度未被覆盖)
           【目标字数】1200~1600
           【要补的缺口】给出三档预算下的不同配置
           【形态】回答(不是文章,不是想法)
           【必须包含】至少 3 处具体的数字(尺寸/价格/时长)

区别在于:差的写法把【选什么角度】这个判断留给了模型,而模型一定会选最安全的那个角度(也就是对标里已经挤了 3 篇的那个角度)。好的写法把判断留在了人这边(5.3.1 做完了),模型只负责把它写出来。

📝 这也解释了为什么【先对标后写】的收益不在字数上

如果让模型自己选角度,它会写出一篇【很正确】的回答——观点四平八稳、结构完整、措辞得体,然后淹没在那 3 篇里。 对标的产出不是【素材】,是【约束】。 你把它写进提示词,模型的选择空间就被收窄到【那个没人碰的角度】——这才是它最值钱的地方。

第二件:输出必须是【结构化的】

不要让它交一篇文章,让它交一份【带字段的结果】——因为下游的 RPA(5.4.1)要解析它:

{
  "form": "回答",
  "qurl": "https://www.zhihu.com/question/123456",
  "title": "",
  "body": "……(正文)",
  "topics": ["收纳", "家居"],
  "ai_assisted": true,
  "detail_points": ["门后二十厘米", "鞋凳三十五厘米撞脚", "预算分三档"],
  "needs_human": ["亲历细节只写了 2 条,建议再补 1 条"]
}

注意最后两个字段:detail_points(我写了哪些具体细节)与 needs_human(我哪儿还不够)。 让模型自己报出【我需要人补什么】——这是本节最实用的一个技巧。 它比人从头检查一遍快得多,而且它比人更清楚自己缺什么。

第三件:把【禁忌】写清楚,尤其是这几条

禁忌 为什么
不许编造亲历 这是红线里的红线(虚构包装经历)——宁可留空,让人补
不许引用查不到出处的数据 5.1.1 现状四那条纪律:只认带机构名和日期的口径
不许用【首先/其次/综上所述】这类路标词 这正是 AI 最典型的指纹(下面 Demo 的第一名)
不许每段都是【结论+解释】两句话 结构过分工整,是判据之一
不许承诺效果、不许绝对化表述 与 2.3.1 那条【用个人体验代替客观断言】同源

这五条里,前两条是【不许编】,后三条是【不许太整齐】。 前者保护真实性,后者保护人味——它们看起来是两件事,其实是同一件事:不许用【生成的速度】去冒充【亲历的时间】。

三、人味对抗:不是藏,是补

这个小节是本节的核心。先说清楚一个常见误解。

误解 实际
人味 = 把 AI 的话改得像人说的 人味 = 文本里真的有那些只有人才有的东西
手段是【改写】 手段是【添加】
目标是【不被看出来】 目标是实质上有区别

为什么【藏】这条路走不通? 因为判据是一组统计特征——句式、词汇分布、情感起伏、结构整齐度。这些特征是从生成过程里长出来的:

换句话说:特征不是衣服,是骨骼。 你换一件衣服(改几个词),骨骼没变。

所以正确的动作是【往里加真实的东西】——而这些恰好是模型加不进去的:

补什么 为什么模型加不了
具体数字 它不知道你家门后多宽、你花了多少钱
明确的立场 它只能给【两边都对】的答案(5.1.1 讲过:AI 擅长生产挑不出毛病的答案)
例外与犹豫 它倾向于给出确定结论;而真人会说【看情况】
第一人称的动作 它没有【买错过、退过货、踩过坑】的经验
长短不齐的节奏 它是按概率逐句生成的,节奏天然均匀

所以本节的做法是:把这五项变成可以数的量,摆在面前,一项一项补。

📝 顺手回答一个可能的质疑:【刻意打散句长,是不是一种伪装?】

不是。 因为真人写东西天然就是长短不齐的——一句话想清楚就短,说不清就长。打散句长只是恢复到自然状态。 但顺序不能反:先有真实内容,再让节奏自然。 如果内容是空的,光把句子拆短也没用——因为平台看的是一组特征,不是单一项。 六项里五项是靠【补内容】过的,只有句长那一项是靠【改节奏】过的,而改节奏只有在内容够的时候才有意义(把一段空话拆成两句,还是空话)。

四、动手 Demo:人味特征自检器

它做一件事:把上面五件事(加上节奏)变成六个数,摆在面前。 输入是初稿,输出是一份体检单。

# 检查项 判据
1 句长起伏 全篇句长的标准差 ≥ 8(低于 8 → 句子长度太整齐)
2 连接词密度 每百字【首先/其次/再次/最后/综上…】≤ 1.0 次
3 具体细节 数字+单位的出现 ≥ 3 处
4 个人立场 【我觉得/我建议/说实话…】≥ 2 处
5 犹豫与例外 【可能/看情况/不一定/就算了…】≥ 1 处
6 自身经历 第一人称的具体动作(我家/我买/我试/我退…)≥ 2 处
# -*- coding: utf-8 -*-
"""5.3.2 Demo:人味特征自检器 —— 不去猜【平台怎么判】,只看【文本特征偏哪边】(纯标准库)"""
import re
import statistics

DRAFTS = {
    "D1【机器味重】": """家庭收纳是一项需要系统规划的工作。合理的收纳能够显著提升居住体验。
首先,我们需要明确收纳的基本原则。分类是收纳的基础。合理的分类能够让物品各归其位。
其次,我们要选择适合的收纳工具。收纳盒是常见的选择。不同尺寸的收纳盒适用于不同场景。
再次,我们需要建立长期的维护习惯。定期整理是保持整洁的关键。良好的习惯能够带来持久的效果。
综上所述,家庭收纳需要从原则、工具、习惯三个方面系统推进。只有这样,才能真正实现整洁有序的居住环境。""",

    "D2【人味足】": """我家玄关只有一米二宽,门后到墙只有二十厘米。
之前那里堆着七八双鞋、三四个没拆的快递箱,出门前找钥匙要翻三分钟。后来我干脆全清掉,只留三样。
说实话,我一开始买了个三十五厘米宽的鞋凳,结果开门撞脚,退了;换成一米二里勉强塞得下的窄边款才合适。
这个坑我建议你先量尺寸再下单,别信那种【进门随手一放】的效果图。
至于要不要买一体式鞋柜,我觉得看情况:如果你家门后有一米五以上,一体式确实更利落;只有二十厘米就算了,根本塞不进去。
现在我出门基本上十秒能走人。""",
}

# ---- 判据 ----
CONNECT = ["首先", "其次", "再次", "最后", "综上所述", "总而言之", "总的来说", "由此可见"]
STANCE = ["我觉得", "我认为", "我建议", "我不建议", "说实话", "坦白说", "我个人", "我劝", "我的经验是"]
HESITATE = ["可能", "大概", "不一定", "看情况", "因人而异", "说不准", "未必", "再说吧", "就算了"]
# 第一人称的具体动作:排除【我们】,允许中间夹少量字(我一开始买了个)
SELFACT = [r"我家", r"我(?!们)[^,。;:!?\n]{0,6}?(?:买|试|换|退|装|用|踩|花|攒|量|清|扔|留|做|选|测|查|问)"]
DETAIL = [r"[\d一二三四五六七八九十百千万两半几]+\s*(?:厘米|毫米|米|寸|公分|平|元|块|天|分钟|小时|秒|个月|年|双|个|张|件)"]

def sentences(t):
    parts = re.split(r"[。!?!?\n]", t)
    return [p.strip() for p in parts if len(p.strip()) > 1]

def para_first2(t):
    out = []
    for p in t.split("\n"):
        p = p.strip()
        if p and not p.startswith("#"):
            out.append(p[:2])
    return out

def report(name, text):
    body = re.sub(r"\s+", "", text)
    n = len(body)
    ss = [len(s) for s in sentences(text)]
    mean = statistics.mean(ss)
    sd = statistics.pstdev(ss)
    connect = sum(text.count(w) for w in CONNECT)
    stance = sum(text.count(w) for w in STANCE)
    hes = sum(text.count(w) for w in HESITATE)
    selfact = sum(len(re.findall(p, text)) for p in SELFACT)
    detail = sum(len(re.findall(p, text)) for p in DETAIL)
    starts = para_first2(text)
    dup = len(starts) - len(set(starts))

    items = [
        ("句长起伏", "标准差 %.1f(均长 %.1f)" % (sd, mean), sd >= 8,
         "句子长度太整齐 —— 把长句拆短、或往长句里塞一个短句"),
        ("连接词密度", "每百字 %.2f 次(共 %d 次)" % (connect * 100.0 / n, connect), connect * 100.0 / n <= 1.0,
         "首先/其次/综上这类路标词太密 —— 删掉一半,用实质内容衔接"),
        ("具体细节", "%d 处(数字+单位)" % detail, detail >= 3,
         "几乎没有具体数字 —— 补上真实尺寸/价格/时长/数量"),
        ("个人立场", "%d 处" % stance, stance >= 2,
         "没有明确的【我觉得】—— 补一句只有你能说的话"),
        ("犹豫与例外", "%d 处" % hes, hes >= 1,
         "一路都太确定 —— 补一个例外情况或【看情况】"),
        ("自身经历", "%d 处(我家/我买/我试…)" % selfact, selfact >= 2,
         "没有第一人称的具体动作 —— 补一件你真做过的事"),
    ]

    print("=" * 72)
    print("【%s】  正文 %d 字 / %d 句 / %d 段" % (name, n, len(ss), len(starts)))
    print("=" * 72)
    seg = "  段落开头重复 %d 处" % dup
    print(seg)
    score = 0
    for label, val, ok, tip in items:
        score += 1 if ok else 0
        print("  [%s] %-10s %s" % ("✔" if ok else "✘", label, val))
        if not ok:
            print("         → %s" % tip)
    print("  ------------------------------------------------------------")
    print("  人味项通过 %d/6" % score)
    return score

scores = {}
for name, text in DRAFTS.items():
    scores[name] = report(name, text)
    print()

print("=" * 72)
print("对比与结论")
print("=" * 72)
for name, s in scores.items():
    bar = "█" * s + "·" * (6 - s)
    print("  %-16s %s  %d/6" % (name, bar, s))
print()
d1, d2 = list(scores.values())
print("  两稿的字数差不多,可读性也都没问题;差别全在【特征】上。")
print("  人味不是形容词,是这几个可以数的量:句长标准差、路标词密度、")
print("  具体数字、明确立场、例外情况、第一人称动作。")
print("  结论:别去猜平台怎么判 —— 先把这六个数摆出来,自己就知道该改哪儿。")

实际运行输出(真跑,不是示意):

========================================================================
【D1【机器味重】】  正文 211 字 / 13 句 / 5 段
========================================================================
  段落开头重复 0 处
  [✘] 句长起伏       标准差 4.7(均长 15.2)
         → 句子长度太整齐 —— 把长句拆短、或往长句里塞一个短句
  [✘] 连接词密度      每百字 1.90 次(共 4 次)
         → 首先/其次/综上这类路标词太密 —— 删掉一半,用实质内容衔接
  [✘] 具体细节       1 处(数字+单位)
         → 几乎没有具体数字 —— 补上真实尺寸/价格/时长/数量
  [✘] 个人立场       0 处
         → 没有明确的【我觉得】—— 补一句只有你能说的话
  [✘] 犹豫与例外      0 处
         → 一路都太确定 —— 补一个例外情况或【看情况】
  [✘] 自身经历       0 处(我家/我买/我试…)
         → 没有第一人称的具体动作 —— 补一件你真做过的事
  ------------------------------------------------------------
  人味项通过 0/6

========================================================================
【D2【人味足】】  正文 223 字 / 7 句 / 6 段
========================================================================
  段落开头重复 0 处
  [✔] 句长起伏       标准差 15.8(均长 30.9)
  [✔] 连接词密度      每百字 0.00 次(共 0 次)
  [✔] 具体细节       10 处(数字+单位)
  [✔] 个人立场       3 处
  [✔] 犹豫与例外      2 处
  [✔] 自身经历       4 处(我家/我买/我试…)
  ------------------------------------------------------------
  人味项通过 6/6

========================================================================
对比与结论
========================================================================
  D1【机器味重】         ······  0/6
  D2【人味足】          ██████  6/6

  两稿的字数差不多,可读性也都没问题;差别全在【特征】上。
  人味不是形容词,是这几个可以数的量:句长标准差、路标词密度、
  具体数字、明确立场、例外情况、第一人称动作。
  结论:别去猜平台怎么判 —— 先把这六个数摆出来,自己就知道该改哪儿。

读结果,五个值得注意的地方:

  1. 两稿的字数几乎一样(211 vs 223),可读性也都没问题,分数却是 0/6 和 6/6。 这是本节最有力的一条结论:人和机器写的差别,不在【通不通顺】,在【特征偏哪边】。 换句话说——读完觉得【写得挺好啊】的稿子,可能就是 0 分那份。这也解释了 5.1.1 里那句反直觉的话:太标准、太正确、太挑不出毛病,反而是危险信号。

  2. D1 里最刺眼的是【连接词密度】:每百字 1.90 次——首先/其次/再次/综上所述,四个路标词,211 字里出现了 4 次。 这是教科书式的结构,也是 AI 最典型的指纹:因为这类词在语料里就是【组织段落】的通用工具,模型用它来保证逻辑连贯——而真人写东西,通常是靠内容本身衔接的(D2 里 0 次)。

  3. 句长标准差差了 3 倍以上(4.7 vs 15.8)。 D1 的句子几乎都在 13~16 字之间——因为它是一句一句按概率生成的,每句都落在最可能的长度附近;D2 里有 55 字的长句(那个【看情况】的例外说明),也有短促的收尾。这个数字测量的是【节奏】,而节奏是最难伪装的东西。

  4. 六项里,只有【句长起伏】是靠【改】过的,其余五项都是靠【补】。 这个区别很实际:补内容只要你有素材就行(补 3 处数字、补 1 句立场、补 1 个例外);而改节奏要动句子的结构。 这正好解释了 5.2 那个闸门位置的设计——【补人味】必须放在排版之前。因为动句子结构这件事,一旦排好版、填进编辑器,成本会暴涨;而在初稿阶段,改一句话后面的东西全自动跟着变。

  5. 脚本最后那句结论,是本节要你带走的一句话:别去猜平台怎么判——平台的具体阈值没有公开,猜也猜不准;但这六个数是你自己能摆出来的。 把可以数的量控制好,比猜测一个不公开的规则靠谱得多。

⚠️ 这个脚本的两条边界,必须说清楚

① 它是【体检表】,不是【医生】。 它只报【哪一项偏了】,怎么补要人来决定——而且补的内容必须是真实的(编造亲历是红线)。 ② 六项全过 ≠ 一定能过平台的审核。 平台的判据没有公开,这个脚本是【让人味变得可操作】,不是【破解算法】。 抱着【凑满六项就能骗过系统】的心态用它,方向就错了——因为它是用来【提醒你加真东西】的,不是用来【刷指标】的。

五、⚠️ 2026 现状:智能体搭在哪个平台

教材这一节没有指定平台,这反倒是个好机会——可以把前三章的三种平台横向比一比。

平台 出现在 2026 状态 本章适不适合
扣子(Coze) 1.2 2.0 / 3.0 持续迭代,有技能商店、多人协作 适合,国内访问顺畅
文心智能体平台 4.3.1 已全量接入 DeepSeek 系列模型免费调用 适合
OpenAI 自定义 GPTs 1.3 正在退役:个人账号已不能新建与发布,2026-10-26 关闭新建入口,12-11 停止服务 不适合新建(详见 1.3 与 3.3)

三条判断:

  1. 平台的选择不是本章的重点。 本节讲的四块结构(人设/知识/工作流/检查)在哪个平台上都成立——换平台要改的是操作按钮,不是这套骨架;
  2. 但【检查】这一块,各平台的能力不一样。 有的平台能在对话里加【工作流节点】做格式校验,有的只能靠你在提示词里写死要求。本章的六项自检,最稳的做法是【不依赖平台】——写成脚本在本地跑(就是上面这个 Demo)。理由和 4.4.3 选墨滴一样:把工具擅长的交给工具,把流程需要的写成代码;而【可移植】恰好是流程需要的东西;
  3. 如果你的目的是长期使用,就避开正在退役的平台。 1.3 那一节已经把时间和影响范围写清楚了,这一条属于【知道就行,不用纠结】的级别——因为本课教的是【设定的方法】,不是【某个平台的按钮位置】。

30 秒实验

把 Demo 里 DRAFTS 的 D2 复制一份,把里面所有的数字删掉(一米二、二十厘米、七八双、三分钟、三十五厘米、十秒……),再跑一次。

会发生什么:

结论:在六项里,【具体数字】是性价比最高的一项——它最容易补(不用编故事,量一下、记一下就有),而且它是【编不出来的】(模型没有你家门后的尺寸)。所以如果时间只够补一项,补数字。

顺着这个思路想一层:为什么【数字】这么重要?因为数字是【经验留下的痕迹】——你量过,所以你记得;你没量过,所以你说不出来。 平台判低质时看的【缺乏事实依据】,看的正是这个。

常见误区

  1. 【人味就是把 AI 的稿子改写一下,让它读起来像人】——错,方向错了。 改写(换词、调语序)不改变统计特征——句式、句长分布、词汇均匀度、路标词密度这些是从生成过程里长出来的。正确的手段是【添加】:往里加具体数字、明确立场、例外情况、第一人称动作。 一句话:人味是补出来的,不是藏出来的。
  2. 【让模型自己选角度更省事】——错,那正好掉进红海。 模型一定会选最安全的那个角度——也就是对标里已经挤了好几篇的那个(5.3.1 的 Demo 里是【原理科普】3 篇)。视角的选择必须由人做完,写进任务卡。 对标的产出不是素材,是约束。
  3. 【六项全过就能过审】——错,别把它当破解工具。 平台的判据没有公开,这个脚本是把【人味】变成可操作的动作,不是【算法对抗】。 抱着刷指标的心态用它,结果会是【六项都凑满了,内容还是空的】——而平台看的是一组特征加上内容本身。
  4. 【刻意打散句长是一种伪装】——不是,但要讲顺序。 真人写东西天然长短不齐(一句话想清楚就短),打散句长只是恢复自然状态。但顺序不能反:先有真实内容,再让节奏自然。 把一段空话拆成两句,还是空话。
  5. 【补人味可以放到最后,排版完再一起改】——错,那时候成本就上去了。 六项里五项是【补内容】(随时能补),但【句长起伏】那一项要【动句子结构】——在初稿阶段改一句话,下游全自动跟着变;等排好版、填进编辑器再改,你得重来一遍。 这正是 5.2 把【补人味】放在【Agent 出稿之后、RPA 接手之前】的理由。
自测三问(点开对答案) 1. **为什么说【人味不是藏出来的,是补出来的】?** 因为**平台的判据是一组统计特征**(句式、词汇分布、情感起伏、结构整齐度),**而这些特征是从生成过程里长出来的**:模型句长均匀是因为它按概率逐句生成、每句都落在最可能的长度附近;它爱用【首先/其次/综上】是因为那是语料里最常见的结构路标;它没有具体数字是因为它没有你家门后的尺寸。 **特征不是衣服,是骨骼**——换几个词(换衣服)改不了骨骼。**所以正确的手段是【添加】:具体数字、明确立场、例外与犹豫、第一人称动作、长短不齐的节奏。** 五项靠补内容,一项靠改节奏。 2. **Demo 里 `D1` 和 `D2` 的字数差不多,为什么分数是 0/6 和 6/6?这个结果说明什么?** 说明**人和机器写的差别不在【通不通顺】,在【特征偏哪边】**。 `D1` 读起来是通顺的、甚至更【规范】(结构完整、措辞得体)——但它**句长标准差只有 4.7(句子几乎一样长)、路标词每百字 1.9 次、零个具体数字、零个立场、零个第一人称动作**。 这也解释了 5.1.1 里那句反直觉的话:**太标准、太正确、太挑不出毛病,反而是危险信号。** 所以**读完觉得【写得挺好啊】的稿子,可能就是 0 分那份。** 3. **六项里,哪一项【只能改、不能补】?这个区别对流程设计有什么直接影响?** **句长起伏**——其余五项(具体细节/个人立场/犹豫与例外/自身经历/连接词密度)都是**加内容或删词**,随时能做;**只有句长起伏要动句子的结构。** 直接影响就是 **5.2 那张流程图里闸门一的位置**:**【补人味】必须放在 Agent 出稿之后、RPA 接手之前。** 因为在初稿阶段改一句话,下游全自动跟着变;**等排好版、填进编辑器再动句子结构,你得重来一遍。**

相关笔记