在当今的信息时代,人工智能语言模型如 ChatGPT 为我们提供了一个强大的知识库和解决问题的工具。为了更好地使用 ChatGPT,非常有必要学习提示词工程。通过熟练地使用提示词,我们能够让AI更加准确地理解我们想要表达的意思,从而更高效地得到答案。
一、learnprompt.org 给出的一些建议
下面是https://www.learnprompt.org/ 提供的几个建议,我使用 ChatGPT 还提供了针对不同行业的提示词模板,大家可以去学习和参考。
为了充分发挥 ChatGPT 的潜能,并获取到准确的答案,我们需要遵循以下几点建议:
-
提问要明确具体:提出一个明确的、具体的问题,以便获得清晰而简洁的答案。
示例一:不佳 - “地球的构造是什么?”;优化 - “地球的内部结构是如何分层的?”
示例二:不佳 - “谁发明了电话?”;优化 - “电话的发明者是谁?” -
使用正确的语法:尽量用完整的句子表达问题,并使用正确的语法。
示例一:不佳 - “地球大气层哪几层?”;优化 - “地球的大气层分为哪几层?”
示例二:不佳 - “最高山峰在哪?”;优化 - “世界上最高的山峰是哪座?” -
问题简洁明了:避免在一个提示中提出多个问题,尽量让问题简短明了。
示例一:不佳 - “请告诉我关于光合作用的原理和参与的主要生物?”;优化 - “光合作用的基本原理是什么?”
示例二:不佳 - “太阳系的行星有哪些,它们的特点是什么?”;优化 - “太阳系共有哪些行星?” -
提供相关背景信息:如果你的问题涉及特定主题,请提供一些相关背景信息。
示例一:不佳 - “这部电影的评分是多少?”;优化 - “《肖申克的救赎》在豆瓣上的评分是多少?”
示例二:不佳 - “这本书的作者是谁?”;优化 - “《红楼梦》的作者是谁?” -
使用关键词:在提问时,使用相关的关键词可以帮助ChatGPT更快地理解你的问题。
示例一:不佳 - “能源转换的公式?”;优化 - “质能方程是什么?”
示例二:不佳 - “太阳的能量来源?”;优化 - “太阳的能量主要来源于哪种核反应?” -
校对问题:在提交问题之前,请仔细校对,确保问题语法正确、表达清晰。
示例一:不佳 - “为什么著名画家梵高切耳朵?”;优化 - “梵高为什么会割掉自己的耳朵?”
示例二:不佳 - “怎样种多肉?”;优化 - “如何正确种植多肉植物?”
二、ChatGPT 给出的一些建议
-
确保明确性:在设计提示词时,务必确保提示词清晰明确,以便让AI更好地理解用户需求。避免使用模糊、不清晰的措辞,以免产生误导。
-
使用上下文信息:尽量包含与问题相关的上下文信息,这有助于AI更好地理解问题的背景,从而给出更准确的回答。
-
引导性问题:使用引导性问题可以帮助AI更好地聚焦于问题的核心。例如,使用“如何在冬季种植番茄?”而非简单地说“冬季种番茄”。
-
分步提问:有时,一个复杂问题需要分解成几个简单问题(这一步有时候也可以使用 AI 完成)进行回答。将问题分解成多个部分,逐一询问AI,有助于获得更详细、准确的答案。比如先让 ChatGPT 给出提纲,然后提出建议然它修改出满意的提纲,最后让它填充每一个部分。
-
限制答案长度:通过限制答案长度,可以让AI更专注于提供简洁明了的答案。例如,添加“请用一句话回答”或“请用20字以内回答”。
-
使用多个提示:尝试使用不同的提示词来询问同一个问题,以便从多个角度获取答案。这有助于获得更全面、深入的解答。
-
指定答案格式:通过指定答案格式,可以帮助AI生成更符合用户需求的答案。例如,要求AI以列表、概括或步骤等形式进行回答。
-
逐步优化:根据AI的回答效果,持续调整并优化提示词。对于不理想的回答,可以尝试修改提示词,以引导AI生成更好的答案。
三、ChatGPT Prompt Engineering for Developers
参考自:https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers/
3.1 Guidelines 准则
(1)写指令要求清晰和具体,但不等于短。
-
1 用定界符如 “”"、```、—、<>、。它可以防止 prompt 注入,给 LLM 产生混乱的理解。
-
2 用结构化输出:如直接要求它以 HTML 或者 JSON 格式输出。
-
3 要求检查:要求 LLM 先检查是否满足某个条件后,再进行输出,如果条件不满足可以直接告知。
-
4 利用少样本学习,展示一个你期望的例子给 LLM。
(2)给模型一些思考的时间,你给它太简单的描述它回答的可能不是你要的,你给它太难的问题它可能也算不出来。
-
让模型按步骤来解答,第一步你应该怎么答,第二步你应该……最后……。可以设定一些分隔符,并且你在展示你想要的格式的时候,使用这些分隔符,比如你告诉LLM,文本在Text:<>里面……
-
让模型自己推导出过程,而不仅仅是结果,展示一个带有解题过程的例子给LLM,演示中,让LLM负责判断学生做题是否正确,这时候就需要告诉模型学生的解题思路。
避免模型产生幻觉:要告诉模型先查找相关资料,再根据相关资料来回答问题。(但模型产生幻觉很难避免,也是目前模型研究领域努力的方向)
3.2 Iterative 提示工程需要持续迭代(编写Prompt就是一个不断修正表达的过程)
编写Prompt的过程是不断迭代的。
基本步骤:编写Prompt、测试、分析为什么、再编写(澄清你的想法)、再测试……,直到满意为止。
示例中,测试了总结营销文案、用50个单词、3个句子、280个字符、增加目标用户、增加产品参数、增加输出格式要求、来表达等,LLM表现得都不错,不过值得注意的是,它们并不会严格按照这个字数限制来,可能会略长一点。
3.3 Summarizing 总结类的应用(总结、提取信息)
如果你有个电商网站,里面有大量的用户评论,你可以利用“总结”的能力来简化你的工作量。
LLM不仅支持“总结(summarize)”还可以“提取信息(extract)”。
示例中,测试了限制字数、限定主题、关注价格、用提取替换总结,并用一个for循环,以相同的prompt模板来套用不同的内容,以达到批量处理的目的。
3.4 Inferring 推理类应用(情绪判断、主题推断等)
同样是在用户评论中,你如果想看看有多少积极反馈有多少消极反馈,则需要用到“LLM推理”的能力。
示例中,LLM可以推理用户的情绪(sentiment)、识别情绪类型(如:happy, satisfied, grateful, impressed, content)、提取品牌和商品信息并按JSON格式输出、一次执行多个任务(提取用户评论的商品并推理用户的情绪) 、推断主题、基于推断的主题设计一个提醒程序等。
3.5 Transforming 转换类应用(翻译、格式转换、纠错等)
将一种语言转换为另一种语言这类应用可以叫做转换类应用。
示例中,翻译一段文字到另一种语言、识别一段文字是哪种语言、同时翻译成两种以上的语言、指定正式还是非正式的语气、指定语言使用的场合比如商务场合的邮件、除了自然语言翻译还可以是JSON 到 HTML 这样程序语言的翻译、要求 LLM 帮你纠正语法错误。
3.6 Expanding 扩展类应用(拓写)
LLM 擅长于将一个简短的文字写得更长,并补充一些修饰,融入一些特定的语言风格。
示例中,LLM 表现为一个邮件回复助理的角色。让 LLM 写一段回复客户的邮件、要求它使用客户来信中的详细信息(让客户感觉比较真实)、可以调整温度值来让回复不那么死板。
四、其他技巧
4.1 多个提示词要求有冲突怎么办?
-
使用顺序:在提示词中,将优先级较高的要求放在前面。AI通常会尽量遵循顺序,先满足较高优先级的要求。
-
明确指定优先级:在提示词中直接说明哪个要求具有更高的优先级。例如:“请确保回答简洁明了(优先级1),同时尽量详细(优先级2)”。
-
使用强烈词汇:对于优先级较高的要求,可以使用具有强制性的词汇,如“必须”、“务必”等。而对于优先级较低的要求,使用较柔和的词汇,如“尽量”、“可以考虑”等。
-
逐步引导:如果担心在一个提示词中包含多个要求会导致冲突,可以考虑将问题分解为多个子问题,逐个引导AI。首先提出具有较高优先级的要求,然后再根据AI的回答逐步引入其他要求。
更多全面和专业的提示词教程,参见:
《ChatGPT Prompt Engineering for Developers》
提示词建议来自: https://www.learnprompt.org/
对应示例,来自 ChatGPT。