简介:《ChatGPT指令集&角色扮演.pdf》面向K12教师、学生及希望提升AI交互效率的初学者,聚焦提示词设计与角色扮演方法,帮助读者理解如何用更清晰的指令从ChatGPT获得可用回答。压缩包为1个PDF文件,约1.57MB,篇幅集中、便于检索,适合作为课堂互动、智能助手和自然语言处理入门学习的轻量参考。已有1303人学习。内容围绕Prompt的定义与作用展开,梳理特定指令、指令模板、代理模式和示例模式四类交互策略,并给出STAR原则等结构化模板与角色扮演清单;同时结合教学提问、历史人物对话等场景说明应用方式,提醒读者校验模型输出的准确性。读者可据此掌握提问框架、模仿示例生成文本、设计情境对话,并把提示词思路迁移到备课、答疑与自主学习之中。
1. 从「随口问」到「照着模板填」:ChatGPT 指令集与角色扮演清单的定位
同一个模型,随口问一句得到的是四平八稳的通用答案,换成带结构、带角色、带样例的问法,输出质量立刻是两回事。这份《ChatGPT 指令集&角色扮演.pdf》讲的正是后者:它把提示词拆成特定指令、指令模板、代理模式、示例模式四类,每一类给出适用场景、写法结构和边界。它不涉及模型训练,也不讲参数调优,只解决一个工程问题——怎么让同一个模型的输出变得可控、可复用、可交付。做 K12 交互产品的人、写智能客服话术的人、需要批量产出结构化文本的人,都能直接从里面挑模板改。
2. 四类模式先选对:特定指令与指令模板的适用边界
提示词这件事最容易翻车的地方不是写得不够花哨,而是模式选错了。拿一个需要固定字段输出的任务去用「随口问」的方式做,跑十次能得到十种格式,后面接解析脚本的人会被拖死;反过来,只是想知道某个概念大概是什么意思,却套一个两百字的三段式模板,纯属给自己加活。这份指令集把模式分成四档,本质上是在回答一个问题:你愿意为「输出稳定性」付多少维护成本。
2.1 特定指令模式:一句话提问的收益与天花板
特定指令是门槛最低的一档:给模型一个问题或一组关键词,模型据此生成答案、解释或推荐。它的判断逻辑是隐式的——你写疑问句它给解释,你写名词它给罗列,你写「帮我起几个名字」它给清单。模型自己在猜你的意图,猜得对不对,全看你这句话写得多具体。
最原始的用法长这样:
请解释一下为什么除以一个分数等于乘以它的倒数。这类输入在 K12 场景里非常常见,老师备课、家长辅导、学生自查都会这么问。它的问题不在于答案错,而在于答案不可预期:可能给三百字,也可能给八百字;可能上来就是代数推导,也可能通篇打比方;可能默认读者是初中生,也可能默认读者是成年人。同一个人问三次能拿到三个版本,换个人问又是另外三个版本。这种方差在一次性查询里无所谓,一旦要写进课件、录进交互脚本、接进产品流程,就没法用了。
把同一句话升级成受控版本,只需要补四类约束:
面向小学六年级学生,用 200 字以内解释「除以一个分数等于乘以它的倒数」。 必须包含一个切蛋糕或分披萨的生活例子。 不要出现字母代数,不要出现「倒数」以外的数学术语。 最后用一句话总结这个规则。改动只有四行,但每一条都对应一个可验收的点:受众决定了词汇难度,字数上限决定了输出长度,必备元素决定了内容骨架,禁止项砍掉了模型最爱的炫技式推导。这类约束在自然语言处理里算不上什么高深技巧,它就是把人跟人交代任务时会说的话补全而已——你让一个实习生写东西,也不会只说「写个分数除法的解释」。
特定指令模式的天花板也在这里:它能收窄输出,但收不窄到「可以直接进程序」。因为它没有字段概念,模型仍然可以自由决定先说什么后说什么。要判断什么时候够用,看三个信号就够了:这个输出是不是只用一次、是不是给人看不给程序看、是不是允许每次不一样。三条都占,就用特定指令,别折腾。
2.2 指令模板模式:context-input-output 三段式怎么搭
指令模板把「交代任务」这件事拆成三段:场景描述(context)、给定输入(input)、期望输出(output)。三段的作用不是装饰,每一段都对应一类失败模式。
context 段定身份和判断标准。模型没有你的业务背景,它不知道这份东西是给教研组看的还是给家长看的,不知道写错了会不会被投诉。这一段就是把这些隐含前提显式写出来。input 段的作用是把素材和指令隔离——这是最容易被忽略的一段,很多人习惯把待处理的文本直接粘在指令中间,结果模型分不清哪句是要求、哪句是要处理的材料,把素材当命令执行了。output 段的作用是把验收标准前置,你在提要求的时候就把「什么算合格」写清楚,而不是等输出完了再打回重写。
原始素材里给了一个很典型的 STAR 结构示例,我用一个虚构的项目复盘场景重写一遍:
# 场景 你是一名项目复盘文档的撰写助手,读者是部门内没有参与该项目的同事。 你的任务是把口语化的项目经过,改写成结构化的复盘摘要。 # 输入 """ 这个项目一开始客户就很不满意,我重新排了组里的人的分工,又搞了个激励规则, 还组织了几次团建,最后带着大家重新交了一版方案,客户当场就签了续约。 """ # 输出要求 按 STAR 四段输出,每段一行,行首标注 S/T/A/R,不加小标题以外的任何解释。 S 段只写背景,不超过 30 字。 T 段写目标与要解决的问题,不超过 40 字。 A 段写动作,按时间顺序,用顿号分隔,不超过 60 字。 R 段写结果,必须包含可验证的事实,不超过 30 字。 全部输出控制在 160 字以内,不要出现第一人称。这段模板里,三段的分工很清楚。场景段告诉模型「写给谁看」,直接决定了用词的口语程度和是否需要解释术语。输入段用三个双引号把素材围起来,模型就不会把「我重新排了组里的人的分工」当成让它去排分工的指令。输出段把 STAR 从「一种分析方法」变成了「一种格式契约」——每段有行首标记、有字数上限、有时间顺序要求、有事实性要求、还有整体字数上限和第一人称禁令。
这里有一个实操中反复验证过的规律:输出段的约束越具体,模型的发挥空间越小,返工率越低。写「请条理清晰地输出」等于没写,因为「条理清晰」在模型那里没有对应的检查项;写「四段、每段一行、行首带字母、每段有字数上限」,模型就有了可以逐条对照执行的清单。血泪经验是,模板里每多一条可量化的约束,后面的人工修改时间大概能省一半。
模板写完之后要做变量化,才能复用。常见做法是把所有会变的部分换成双花括号占位符,代码里做字符串替换:
# 输入 """ {{raw_text}} """ # 输出要求 按 STAR 四段输出,每段一行,行首标注 S/T/A/R。 S 段不超过 {{s_limit}} 字,R 段不超过 {{r_limit}} 字,全文不超过 {{total_limit}} 字。 读者是 {{audience}},不要出现 {{banned_terms}}。这样一份模板可以同时服务多个场景:读者换成「新入职同事」,字数上限放宽;读者换成「客户方对接人」,就要额外禁掉内部术语。占位符的数量别贪多,超过六七个之后维护成本会反超收益,那时候该做的是拆成两份模板,而不是继续加参数。
2.3 两种模式的选型判断表
把这四种模式里的前两种放在一起对比,选型其实很快:
| 维度 | 特定指令 | 指令模板 |
|---|---|---|
| 输入长度 | 一句话,10 到 50 字 | 三段式,100 到 500 字 |
| 输出稳定性 | 低,同问三次可能三种结构 | 高,格式基本可预期 |
| 维护成本 | 几乎为零 | 需要版本管理、需要回归验证 |
| 适合场景 | 查概念、要草稿、探索阶段试方向 | 批量生成、接进产品、交给非技术同事用 |
| 不适合场景 | 需要固定字段、需要下游解析 | 一次性临时问题、需求还没想清楚 |
一个实用的判断顺序是:先用特定指令跑三次,如果三次输出的结构基本一致且能满足需求,就停在特定指令,不要过度设计;如果三次结构差异明显,或者你已经开始手动调整每次的输出格式,那就说明这个任务需要模板了。反过来,如果一份模板三个月没改过、每次都要手动填一堆占位符才能用,那它大概率被设计得过重了,应该砍掉一半约束退回特定指令。
3. 代理模式落地:角色扮演提示词怎么写才不跑偏
代理模式是这份指令集里最容易被低估、也最容易被玩坏的一档。它的形态很简单,就是在提示词里写「你扮演某某」,让模型以特定身份、特定语言风格来生成内容。难点从来不是让模型进入角色,而是让它在十轮二十轮之后还留在角色里。做过 K12 交互产品的人应该都有体会:一个历史人物对话功能,孩子问第一句的时候角色还在,问到第五句就变回了那个四平八稳的通用助手,语气、称呼、知识边界全飘了。
3.1 act as 的三层结构:身份、约束、输出格式
只说「你是一位老师」是不够的。模型对「老师」这个词有大量先验联想,它会把所有跟老师相关的语料揉在一起,最后给你一个平均意义上的、谁都不像的老师。要让角色立住,角色卡至少要有三层。
身份层定义你是谁、你的知识边界在哪。知识边界这一条经常被漏掉,但它是防止角色说错话的第一道闸。模型不知道自己「不该知道」什么,你不划范围,它就会对任何问题都给出自信的回答。约束层定义不能做什么、遇到不确定的情况怎么处理、被问到角色之外的问题怎么回应。输出层定义格式、长度、语气,以及什么时候该反问而不是直接答。
一份能用的角色卡长这样:
# 身份 你叫「小满」,是一位虚构的初中物理科普角色。 设定:刚从师范院校毕业的年轻老师,说话口语化,喜欢拿生活里的物件打比方。 知识范围:初中物理的力学、光学、声学基础概念。 # 约束 只回答知识范围内的概念问题。 遇到范围外的问题,先明确说「这个我不太确定」,再给一个范围内相关的替代问题。 不编造实验数据,不给出具体数值答案,涉及计算时只讲思路。 学生表达挫败情绪时,先回应情绪,再回到知识点。 始终用「你」称呼对方,不用「您」,不自称「老师」。 # 输出格式 第一行:一句话结论,不超过 20 字。 第二行起:不超过三句解释,必须包含一个生活化的比方。 最后一行:一个在家能动手做的小观察,一句话。 全文不超过 150 字。这份角色卡里,身份层只有三行,但它把「虚构」两个字写进去了——这不是多余的,它提醒模型这是一个设定出来的角色,而不是要模仿某个真实存在的具体人。约束层是整份卡的重心,六条里有四条是「不做什么」。输出层三条全部可量化,字数、行数、每行内容都有明确要求。
参数调整上有几个经验值可以参考。全文长度控制在 150 字以内,是因为 K12 场景下孩子的注意力窗口很短,超过两百字基本读不完;每轮必须带一个比方,是因为抽象概念对初中生来说没有挂靠点;最后一行必须给动手观察,是为了把对话从纯文本拉回到现实动作上,这一条对提升交互的完成率很有帮助。这些参数没有绝对正确的值,但每一条都应该能说出「为什么是这个数」。
3.2 角色卡在 K12 交互场景的写法与示例
角色扮演在教育交互里的价值,不在于好玩,而在于它能改变模型的回答姿态。同样一个问题「为什么天是蓝的」,通用助手会给一段包含瑞利散射术语的解释,角色卡约束下的「小满」会先给一句「因为阳光里的蓝光最容易被空气弹开」,再拿水池里的涟漪打比方,最后让孩子拿手电筒照一杯牛奶观察。前者是知识条目,后者是教学动作。
写这类角色卡时,有几个具体的做法值得照搬。第一,把「不确定」的处理方式写死在约束层,不要留给模型自由发挥。教育场景里最怕的不是答不上来,而是编一个听起来很像的答案。第二,把情绪回应写进约束,孩子说「我就是学不会」的时候,模型如果直接开始讲知识点,交互就断了。第三,把角色的人格特征限制在两三条以内,写太多模型记不住,反而每条都执行得很浅。
一个常见的误解是角色卡越长越好。实际测试下来,超过四百字的角色卡,模型对后半部分的遵守率会明显下降,尤其是放到多轮对话的中后期,前面的设定会被逐渐稀释。更好的做法是把角色卡压到三百字以内,只保留最不能妥协的约束,其余靠示例模式补充——给两三条「角色在典型场景下怎么回」的样例,比多写两百字形容词有效得多。
3.3 角色跑偏的四个检查点
角色卡写完不等于能用,得有一套固定的检查动作。我一般会跑这四个点,每一个都能独立暴露一类问题。
角色一致性。拿同一个问题连问十轮,看称呼、语气、比方密度有没有漂移。判定标准很朴素:把第一轮和第十轮的回答并排放,如果看不出是同一个人在说话,就是不合格。修复方向通常是缩短上下文、在每五轮插入一次角色卡重申。
边界遵守。主动问三个越界问题,比如让「小满」解释电磁感应之外的高中内容、让它给一个具体的数值答案、让它扮演另一个角色。合格的表现在于拒答方式是否自然——直接说「这超出我的范围了」是合格的,生硬地复述规则是不合格的,顺着问题答下去是彻底失败。
格式稳定。连续跑二十条,统计有多少条严格满足「一行结论 + 三句解释 + 一行观察」。低于八成,说明格式约束的权重不够,常见做法是把格式要求放到角色卡最末尾,因为模型对靠近输入末尾的指令更敏感。
事实校验。角色说的话必须在设定的知识范围内成立。这一条没法靠提示词根治,只能靠抽检。抽检比例按场景定,面向学生的内容建议全量过一遍,面向成人自查的场景可以降到两成。
4. 示例模式:用少量样本把输出风格钉死
示例模式是四种模式里门槛最高、效果也最直接的一档。做法是给模型几条完整的输入输出样例,让它照着样例的风格和结构去处理新输入。它的原理并不神秘:模型在推理阶段把样例当成上下文的一部分做模式归纳,参数一点没动,不存在任何形式的重训练或在线学习。理解这一点很重要,它决定了你该怎么挑样例——样例的作用是「示范格式」,不是「教会知识」。
4.1 少样本提示的结构:样例、分隔符、格式约束
一份能用的少样本提示,结构上要包含四样东西:任务说明、正例、待处理输入、输出触发词。分隔符是关键,它决定了模型能不能正确切分哪段是样例、哪段是要处理的活。
任务:把知识点改写成小学三年级学生能读懂的科普段落。 ### 示例输入 光合作用 ### 示例输出 植物的叶子像一个小小的厨房。阳光是火,水是从根部送上来的食材,空气里的一种气体是调味料。 这三样凑齐了,叶子就能做出糖,也就是植物自己的饭。 做出来的饭一部分自己吃,一部分存起来,我们吃的粮食,很多就是植物存下来的。 ### 待处理输入 水的三态变化 ### 输出这段提示里有几个细节值得说。示例输出控制在三句话、一百字出头,用两个比喻,没有出现任何专业术语——这是给孩子看的文本的合格线,样例必须自己先达到这条线,模型才知道标准在哪。分隔符用了###加固定标题,比空行更可靠,因为空行在模型眼里和一整块连续文本差不多。最后留一个### 输出作为触发词,等于告诉模型「从这里开始写」,能显著减少它把样例也续写一遍的情况。
样例数量的经验值是两到三条起步。一条样例模型学不到稳定模式,容易把偶然特征当成规律;超过五条,收益基本饱和,token 成本却线性上涨,而且样例之间只要有一点风格不一致,模型学到的就是这几条的平均值,输出会变得模棱两可。真要提升效果,把样例从三条改到三条高质量、口径统一,比从三条加到八条有用得多。
反例也是个好用的工具,但用法有讲究。给出「这样写不行」的样例时,必须同时说明为什么不行,只说「不要这样写」,模型很容易把反例的结构也学过去。常见做法是在反例后面紧跟一行说明,指出具体违反了哪条标准。
4.2 从一条样例到规则游戏的搭建步骤
示例模式的进阶用法是搭规则游戏:你给出几条已经判定过的输入输出对,让模型归纳出判定规则,再对新的输入做判定。原始素材里提到这种模式适合创建规则游戏,但没展开,我按自己的实践补一个可复现的版本。
以作文批改的分档为例。先给三条带档位的样例:
任务:给小学四年级的写景作文片段划分档位,只输出档位和一句理由。 ### 示例 1 输入:秋天的公园里,树叶黄了,有的是红的,风一吹就落下来,像蝴蝶一样。 输出:B 档。有比喻,但景物描写只有视觉一个角度,缺少声音或气味。 ### 示例 2 输入:一进公园就闻到桂花香,风里有凉意。银杏叶铺了一地,踩上去沙沙响。 输出:A 档。调动了嗅觉、触觉、听觉三个角度,有具体细节,没有空泛形容词。 ### 示例 3 输入:秋天很美,我很喜欢秋天。 输出:C 档。只有结论没有描写,缺少具体景物。 ### 示例 4 输入:湖边的芦苇白了头,风一过就齐刷刷地弯腰。远处有野鸭叫,一声长一声短。 输出:A 档。有拟人和听觉细节,画面完整。 ### 待判定 输入:秋天的果园里,苹果红了,葡萄紫了,农民伯伯在摘果子,脸上都是笑。 输出:四条样例覆盖了三个档位,每条的理由都指向具体判定依据:描写角度数量、是否有具体细节、是否有空泛结论。模型在这样的样例下,通常能归纳出「多感官 + 具体细节 = 高档位」这条规则,对新输入给出「B 档,视觉角度单一,缺少其他感官描写」之类的判定。
这套做法有三个可调的参数。样例数量的下限是档位数加一,三个档位至少给四条,保证每个档位都有正例,且有一个档位出现两次以显示边界。理由的粒度要统一,每条都是一句话、都指向可观察的文本特征,不能有的写「写得好」有的写「缺听觉」。待判定输入的难度要跟样例对齐,如果样例都是精挑细选的典型文本,待判定的却是边界模糊的样本,模型很容易判错——这不是模型的问题,是样例没有覆盖边界。
4.3 示例模式的成本收益:什么时候值得上
示例模式不是免费的。一份带四条样例的提示,输入 token 是普通指令模板的三到五倍,在批量调用场景下成本差异很明显;维护成本也高,输出标准一变,所有样例都得跟着改,改完还得重跑验证。所以要判断值不值得上。
值得上的信号有三个:输出格式高度固定且下游要解析,比如要抽字段、要入库;「好」的标准可以被几条样例说清楚,而不是靠一堆形容词描述;调用频次高,多花的 token 能被减少的返工量抵回来。
不值得上的信号同样明确:任务本身开放,比如头脑风暴、创意发散,样例反而会限制模型的发散范围;输出标准还在变,今天这么算好明天那么算好,样例永远跟不上;调用是低频一次性的,花半小时调样例不如直接手动改一遍结果。
| 场景特征 | 建议模式 | 理由 |
|---|---|---|
| 一次性查概念、要草稿 | 特定指令 | 维护成本为零,方差无所谓 |
| 高频批量生成、格式固定 | 指令模板 + 示例模式 | 模板定骨架,样例定风格 |
| 多轮对话、需要人格一致 | 代理模式 | 靠约束层维持角色不漂移 |
| 判定类任务、有明确档位 | 示例模式 | 样例直接示范判定依据 |
| 标准还在探索期 | 特定指令 | 先跑通再固化,别过早抽象 |
5. 常见问题与排查:提示词上线后翻车的五个现场
提示词写完之后在本地跑两次觉得挺好,一上线就出问题,这是常态。下面五条是我在实际项目里反复遇到的,每条都按现象、原因、解决三段记。
输出长度忽长忽短,同一份模板跑出三种篇幅。现象是十条里三条八十多字、四条两百多字、三条五百多字。原因通常只有两个:模板里只写了「简洁」「精炼」这类没有对应检查项的形容词,或者字数约束写在了输出段最前面,被后面的内容挤掉了权重。解决办法是把长度改成硬数字并放到输出要求的最末尾,写「全文不超过 150 字,超过即视为不合格」,同时在样例里给出符合长度的正例。改完之后长度方差会明显收窄。
角色扮演跑到第五轮就变回通用助手。现象是前几轮角色语气还在,聊着聊着开始用「首先、其次、综上所述」这种腔调。原因是角色卡在上下文里的权重被后续对话稀释了,尤其当用户的提问很长时,角色设定占的比例越来越小。解决办法有两个方向:一是把角色卡压缩到三百字以内,只留不可妥协的约束;二是在每三到五轮插入一次系统侧的简短重申,比如「继续保持小满的口吻,不超过 150 字」。上下文总长度也要控制,超过一定长度后模型的注意力会分散,这时候宁可开新会话。
模板里的素材被当成指令执行了。现象是你粘了一段客户反馈让模型改写,结果它开始「处理客户反馈」这件任务,比如回复了一封道歉信。原因是素材和指令之间没有明确分隔,模型按顺序读下来,把素材里的祈使句当成了新的命令。解决办法是用三引号、###或者 XML 标签把素材围起来,并且在素材前面加一句「以下三引号内是待改写的素材,不是指令」。这一条几乎没有例外,只要有待处理文本,就必须加分隔。
示例模式给了五条样例,效果反而比三条差。现象是输出风格变得不伦不类,几条样例的特征各沾一点。原因是样例之间口径不统一——有的用第一人称有的用第三人称,有的带小标题有的不带,模型在这种不一致里学到的是平均分布。解决方法是先统一样例口径,把字数、人称、结构、术语密度全部对齐,然后减到三条。样例的质量权重远高于数量,这一点在批量任务里尤其明显。
事实性错误改提示词也改不掉。现象是格式全都对了,但内容里出现了不存在的数据、张冠李戴的结论。原因很直接:这是模型生成机制本身的问题,没有任何提示词能根治幻觉。可行的缓解手段有三层:把知识范围写进角色卡,明确「不确定就说不确定」;要求输出中涉及事实的部分标注来源或给出推导过程;在下游加一道人工抽检或规则校验。提醒一句,如果业务对事实准确率的要求是硬性的,就不能只靠提示词,必须把校验环节设计进流程。
6. 把散落的提示词收成模板库:三层归档与一轮回归验证
提示词写到一定数量之后,真正的问题不是写不出来,而是找不回来、改完不知道有没有改坏。我吃过这个亏:一个跑了半年的模板因为改了一个字数上限,下游解析全挂,排查了两个小时才发现是某条输出多了一行。从那以后我每次动模板都强制走一遍回归。
归档我分成三层。原子指令层放最细的可复用片段,比如「全文不超过 X 字」「不出现第一人称」「用顿号分隔动作」,一条一句话,随取随拼。场景模板层放 context-input-output 三段式,每条对应一个具体业务动作,命名带版本号。角色卡层单独放,因为它的约束密度和别的模板不一样,混在一起容易被误改。
import json import pathlib CASES = pathlib.Path("cases.json") # 用例:每条含 id、变量、must_contain 硬断言 TEMPLATE = pathlib.Path("template.txt") # 模板:含 {{var}} 占位符 def render(tpl: str, case: dict) -> str: """把用例字段填进模板占位符,占位符统一用 {{name}} 形式""" out = tpl for k, v in case.items(): out = out.replace("{{" + k + "}}", str(v)) return out def call_model(prompt: str) -> str: """替换成你手里的 SDK 或 HTTP 客户端,这里只留接口""" raise NotImplementedError def run() -> None: tpl = TEMPLATE.read_text(encoding="utf-8") cases = json.loads(CASES.read_text(encoding="utf-8")) passed = 0 for c in cases: got = call_model(render(tpl, c)) # 硬断言只查格式和必含元素,语义质量靠人工抽检 ok = all(kw in got for kw in c["must_contain"]) and len(got) <= c["max_len"] passed += ok print(c["id"], "PASS" if ok else "FAIL", len(got)) print(f"通过率 {passed}/{len(cases)}") if __name__ == "__main__": run()这段脚本只做三件事:拼装、调用、断言。must_contain里放的是格式特征,比如行首字母、必备小标题、必须出现的关键词;max_len兜住长度。它查不了语义对不对,所以用例数量我一般定在二十条左右,覆盖典型场景和两三个边界情况,脚本跑完再人工过一遍抽样。改模板前后的通过率放在一起看,掉超过一成就要回滚,别硬扛。希望帮到你。
本文还有配套的精品资源,点击获取