跳转到主要内容

5.1.2. Prompt 技巧

接下来我们来看看目前 ChatGPT 使用上的一些常见的技巧,如果你想在看具体技巧前就理解这些技巧的原理,可以先阅读后面的内容,读完所有进阶知识后你会对这些技巧有更深的理解。

技巧一:角色扮演

有的时候,我们想要让 ChatGPT 在一个更聚焦的语境下回答问题,那么这就是一个使用「角色扮演」技巧的好时候。 例如,如果我们直接问 ChatGPT:人活着的意义是什么? 它会告诉我们:
但当我们加入了「角色扮演」后提出问题:请扮演一个哲学老师,告诉我,人活着的意义是什么? 它说:
可以看到,ChatGPT 的答案会更多地从「哲学老师」的角色出发来回答我们的问题。 「扮演某个角色」这个句子也是我们更便捷地给到 ChatGPT 背景信息元素(元素部分内容详见 5.1.1 以及,我们在网上看到的那些 ChatGPT 模仿某个名人的产品或者对话,有的也是使用了这个技巧:请扮演 Steve Jobs(另一种方法是使用 LangChain 等工具,详见 5.2)

技巧二:增加示例

有的时候,我们难以用语言清晰地表达我们的指令,或者希望更快更准确地 Prompt,这时候可能就是「增加示例」的好时机。 例如,我们想要提取某一段话里的所有地名并以特定格式输出:
ChatGPT 输出:
但如果我们不想要「省」、「市」这样的字眼,也不想要同一行内出现多个市,那么加入一个例子可以方便很多:
并不需要额外的格式说明,ChatGPT 很好地完成了我们的任务:
值得注意的是,如果你不是在使用 Playground 而是直接使用对话框,请注意 ChatGPT 会有上下文记忆,如果需要重试当前任务,请编辑原先的 Prompt 再次运行,而不是再给它发一条新的。
这里有点像你在跟一个朋友阐述一个概念,抽象的解释可能并不能很好地传达你的意思,那么你只需要给他举一个例子,他也许就能很快理解。 技巧二的具体原理请见 5.1.3 Zero/Few-shot-prompting

技巧三:明确格式

如果我们更关注格式,也可以直接在文本中明确格式,ChatGPT 使用的是 MarkDown 格式。(如果有不熟悉的读者可以参考本文末的 MarkDown 相关教程链接) 例如:

技巧四:使用分割符号

如果我们的输入中包含了较多的元素和文本,我们可以将指令放在提示的开头,用##或""来分隔指令和上下文:

技巧五:Let’s think step by step

当我们需要 ChatGPT 进行相对较复杂的推理任务时,就是使用这个技巧的时候。 这里应用了 Zero-shot chain-of-thought Prompting,详情请见5.1.4 Chain-of-Thought Prompting 经过作者的测试,即使我们使用的是中文,也可以直接在文末加上这句Let's think step by step,ChatGPT 的表现明显会更好。 例如
可以让 ChatGPT 正确地推理并得出正确答案,而:
不行。 更多阅读: Best practices for prompt engineering with OpenAI API Markdown指南中文版