ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

ChatGPT中文调教指南:角色、约束与协议三件套实战

ChatGPT中文调教指南:角色、约束与协议三件套实战

简介:这份《ChatGPT中文调教指南》面向希望系统掌握提示词技巧的中文用户,无论是初次接触大模型的普通使用者,还是想提升日常效率的职场人与开发者,都能从中找到可复用的实战思路。资源以PDF文档形式呈现,压缩包内共1个文件,体积约694KB,轻量易读,便于随时查阅。内容围绕中文环境下的有趣应用示例展开,涵盖学术论文写作、创意小说、翻译润色、数据分析、技术文档、简历求职信、广告文案、SEO优化等丰富场景,并给出角色扮演式提示模板,如充当Linux终端、英语翻译与改进者、面试官、文字冒险游戏等,帮助读者理解如何通过精准指令调教ChatGPT输出所需结果。目前已有700余人学习下载,适合作为提示词入门与进阶的参考素材,帮助读者快速上手并拓展大模型在写作、编程与日常办公中的实际用法。

1. 一份把 ChatGPT 当“可编程角色”的中文提示词合集

很多人第一次用 ChatGPT 写东西,得到的都是四平八稳的“正确的废话”,于是得出一个结论:这玩意儿也就那样。但同一时间,另一些人却能让它稳定输出 Markdown 表格、扮演面试官逐题追问、当 Linux 终端只回代码块、甚至用固定格式生成正则表达式。差距不在模型,而在提示词的结构。这份《ChatGPT 中文调教指南》就是一份把“角色设定 + 输出约束 + 交互协议”写死的中文提示词合集,覆盖学术写作、翻译、编程辅助、角色扮演、表格生成、数据分析等几十个场景。它适合两类人:一是刚上手、不知道怎么把需求说清楚的新手;二是想把提示词沉淀成模板、嵌进自己工作流的从业者。下面我按“它到底怎么组织 → 怎么抄着用 → 哪里会翻车”的顺序拆一遍。

2. 提示词的骨架:角色、约束、协议三件套

2.1 为什么“你是一个XX”不是玄学

指南里几乎每条提示词都以“我想让你充当……”或“我要你扮演……”开头,这不是仪式感,而是有实际作用的。大模型在生成时会对上下文里的每个 token 做条件概率计算,当提示词里出现一个明确的角色锚点,后续输出的词汇分布会被收窄到该角色的典型语域里。比如“充当英英词典”这条,它要求输出“中文翻译 + 英文释义 + 一个例句”,并且“保持简洁,不需要任何其他反馈”。如果你只说“帮我解释 Hello”,模型可能给你一段百科式的介绍;加上角色和格式约束后,它才会输出词典条目式的紧凑结构。

这里的关键是:角色负责收窄语域,约束负责收窄格式,两者缺一不可。只给角色不给格式,输出会飘;只给格式不给角色,语气会干。指南里那些看起来“啰嗦”的提示词,其实是在同时锁死这两个维度。

2.2 输出约束的四种常见写法

翻完整份指南,输出约束基本可以归为四类,我按约束强度从弱到强排一下:

约束类型典型写法适用场景
内容范围约束“只回复推荐的项目,不要写解释”购物建议、评论生成
格式约束“以 markdown 表格形式回复”表格生成、棋盘状态
交互节奏约束“不要一次写出所有问题,等我回答”面试官、辩论教练
协议级约束“只在一个唯一的代码块内回复,不要写解释”终端模拟、SQL 终端

协议级约束是最强的,因为它同时规定了“输出容器”和“禁止内容”。指南里“充当 Linux 终端”那条就是典型:它要求模型只在一个代码块里回复终端输出,不写解释,除非用户指示否则不主动输入命令。这种写法把模型的自由度压到最低,换来的是可预测性最高。

2.3 交互协议:多轮对话怎么不跑偏

单轮提示词好写,难的是多轮。指南里“担任面试官”这条给了一个可抄的模板:

我想让你担任Android开发工程师面试官。 我将成为候选人,您将向我询问Android开发工程师职位的面试问题。 我希望你只作为面试官回答。不要一次写出所有的问题。 我希望你只对我进行采访。问我问题,等待我的回答。 不要写解释。像面试官一样一个一个问我,等我回答。 我的第一句话是“面试官你好”

这段的逻辑说明:第一句定角色,第二句定双方身份,第三句定交互节奏(一次一问),第四句定禁止项(不写解释),第五句给启动信号。参数上,你可以把“Android开发工程师”替换成任何岗位,把“面试官”替换成“技术评审”“论文导师”等。注意“等我回答”这四个字不能省,省了模型就会一口气把十个问题全列出来,多轮就变成单轮了。

提示:多轮提示词里,凡是涉及“等待”“逐条”“一次一个”的约束,都要写得非常直白,模型对隐含的节奏要求不敏感。

3. 高频场景实战:表格、翻译、终端模拟怎么落地

3.1 表格生成:把“10行”和“只回表格”写死

指南里“做表格”这条提示词很短,但约束很密:

请你充当表格生成器。 您只会回复我一个包含10行的表格。 我会告诉你在单元格中写入什么,你只会以markdown表格形式回复结果, 而不是其他任何内容。 请注意,您的回答应该是简明扼要的,不需要附带任何额外的解释。 你只会回复 markdown 表的作为结果。 首先,回复我十二生肖表。

逻辑说明:这里有三层约束——“10行”限定了规模,“markdown表格”限定了格式,“不是其他任何内容”排除了前置说明和后置总结。参数上,“10行”可以改成任意数字,但建议不要超过 20,否则模型容易在中间行开始偷懒或合并单元格。实测中,如果不写“不需要附带任何额外的解释”,模型大概率会在表格前加一句“好的,以下是十二生肖表”,这在需要直接复制进文档的场景里就是噪音。

3.2 翻译类提示词:区分“英翻中”和“英英词典”

指南里翻译相关的有三条,用途完全不同,别混用:

  • “充当英语翻译和改进者”:输入任意语言,输出更优美精炼的英语,只回更正和改进的部分。
  • “充当英翻中”:把任何语言翻成中文,要求不带翻译腔,自然流畅地道。
  • “充当英英词典(附中文解释)”:把英文单词转成“中文翻译 + 英文释义 + 例句”的完整解释。

这三条的约束差异很大。第一条只回“改进后的部分”,适合润色;第二条要求“不带翻译腔”,适合本地化;第三条要求“检查所有信息是否准确”,适合查词。如果你拿“英翻中”的提示词去查单词,得到的会是一整段翻译而不是词典条目。选型时先想清楚你要的是“改写”“翻译”还是“释义”,再挑对应模板。

3.3 终端与 SQL 模拟:协议级约束的典型用法

“充当 Linux 终端”和“充当 SQL 终端”这两条是指南里约束最狠的,也是最适合拿来做自动化测试的。以 SQL 终端为例:

我希望您在示例数据库前充当 SQL 终端。 该数据库包含名为“Products”、“Users”、“Orders”和“Suppliers”的表。 我将输入查询,您将回复终端显示的内容。 我希望您在单个代码块中使用查询结果表进行回复,仅此而已。 不要写解释。除非我指示您这样做,否则不要键入命令。 当我需要用英语告诉你一些事情时,我会用大括号{like this}。 我的第一个命令是“SELECT TOP 10 * FROM Products ORDER BY Id DESC”

逻辑说明:第一句定角色和数据库结构,第二句定输入输出关系,第三句定输出容器(单个代码块),第四句定禁止项(不写解释、不主动输命令),第五句定“元指令”的转义方式(大括号)。参数上,表结构可以替换成你自己的 schema,但要注意:模型并不会真的连数据库,它只是根据表名和字段名“演”一个结果。所以字段名要写清楚,否则它可能编出不存在的列。

注意:终端模拟类提示词适合做交互演示和格式测试,不要用它来验证真实 SQL 的执行结果,模型返回的是模拟数据。

4. 避坑与排查:五条血泪经验

4.1 现象:模型一口气把多轮对话全答完了

原因:提示词里没有写“等我回答”或“一次一个”,模型默认按单轮任务处理,直接把所有问题或步骤列出来。

解决:在交互节奏约束里显式加“不要一次写出所有的问题”“等我回答”“一个一个问我”。如果已经跑偏,重新开一个会话,把约束补上再启动。

4.2 现象:表格行数对不上,说好10行只给了7行

原因:行数约束不够硬,或者表格内容触发了模型的“精简”倾向。当单元格内容较长时,模型会主动合并或省略行来节省输出。

解决:把行数写在最前面,并加一句“必须严格包含10行,每行都要有内容”。如果还是不稳,改成“先输出表头,然后逐行输出,每行前标注行号”。

4.3 现象:翻译提示词输出了一堆解释

原因:用了“英英词典”类模板去翻译句子,或者模板里没有写“不要写解释”。词典类模板默认会附带释义和例句,和纯翻译的预期冲突。

解决:翻译用“充当英翻中”,查词用“英英词典”,润色用“英语翻译和改进者”。三条不要混用,混用就会得到混合输出。

4.4 现象:终端模拟里模型开始写解释

原因:协议级约束被后续对话稀释了。多轮之后,模型会逐渐“忘记”最初的“不要写解释”约束,尤其是在你输入了自然语言问题之后。

解决:每隔几轮重申一次约束,或者把约束写成固定前缀,每次输入命令时带上。更稳的做法是开新会话,把完整协议重新贴一遍。

4.5 现象:角色扮演越跑越偏,语气完全不对

原因:角色锚点太弱,或者后续对话里出现了与角色冲突的内容。比如让模型扮演“唐三藏”,但你问了一个现代技术问题,它就会在角色和知识之间摇摆。

解决:在提示词里加一句“必须以XX的语气和知识范围为基础”,把知识范围也锁死。如果角色需要长期维持,把角色设定写成一段固定文本,每轮对话都带上。

5. 进阶:把提示词模板化成可复用资产

指南里的提示词是散的,真正要用起来,得把它们变成可复用的模板。我一般的做法是建一个 Markdown 文件,每条模板按“场景名 + 提示词正文 + 可替换参数”三段式存。比如面试官那条,参数就是“岗位名称”;表格生成器那条,参数就是“行数”和“表名”。这样下次用的时候只改变量,不改结构。

再进一步,可以把高频模板做成命令行工具的参数。比如用 Python 写一个小脚本,把模板存在字典里,运行时传入场景名和参数,自动拼出完整提示词并复制到剪贴板:

# prompt_templates.py # 把指南里的提示词模板化,按场景名索引 TEMPLATES = { "interviewer": ( "我想让你担任{role}面试官。我将成为候选人," "您将向我询问{role}职位的面试问题。" "我希望你只作为面试官回答。不要一次写出所有的问题。" "我希望你只对我进行采访。问我问题,等待我的回答。" "不要写解释。像面试官一样一个一个问我,等我回答。" "我的第一句话是“面试官你好”" ), "table_gen": ( "请你充当表格生成器。您只会回复我一个包含{rows}行的表格。" "我会告诉你在单元格中写入什么,你只会以markdown表格形式回复结果," "而不是其他任何内容。请注意,您的回答应该是简明扼要的," "不需要附带任何额外的解释。你只会回复 markdown 表的作为结果。" "首先,回复我{table_name}。" ), } def build_prompt(scene, **kwargs): # 按场景名取模板,用参数填充占位符 template = TEMPLATES.get(scene) if not template: raise ValueError(f"未知场景: {scene}") return template.format(**kwargs) if __name__ == "__main__": # 示例:生成一个面试官提示词 print(build_prompt("interviewer", role="Android开发工程师")) # 示例:生成一个12行的表格提示词 print(build_prompt("table_gen", rows=12, table_name="十二生肖表"))

逻辑说明:TEMPLATES字典把场景名映射到模板字符串,build_prompt负责填充参数。参数上,role替换岗位,rows控制行数,table_name指定表名。这个脚本的价值在于:你不再需要每次手动改提示词里的变量,也不会因为漏改某个词导致约束失效。

验证方法也很简单:跑一遍build_prompt,把输出贴到对话里,看模型是否按预期返回。如果返回格式不对,先检查模板里的约束句有没有被参数替换破坏,再检查参数值是否合理(比如行数是不是写成了字符串)。

从那以后我每次整理提示词,都强制走一遍“模板化 → 参数化 → 跑一遍验证”的流程,不再直接复制粘贴散装提示词。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进