2023 年可谓是 AI 元年,随着 GPT 的发布,人工智能正在影响着人们的生活。甚至有些人会焦虑是否自己将会被取代而失业。据 36 氪,如何看待 AI 代替人类工作?李彦宏表示,不管有多少工作被替代,这只是整个图景的一部分,另外一部分是,存在我们现在甚至无法想象的更多新机会。做一个大胆预测,十年以后,全世界有50%工作会是提示词工程(prompt engineering),不会写提示词(prompt)的人会被淘汰。
有些同学请教同事,在一些技术群里提问时,提出的问题都是模糊的,人都很难理解,更别说人工智能了。
比如“我想实现用户在某个网页提交时获取用户提交的信息,怎么实现?”某个网页是哪个网页?是你开发的还是别人开发的?获取信息的目的是什么?
比如“帮我给某个 Dao 类写一个缓存”,然后期待它能够写完美的实现自己的想法,然后大失所望,说人工智能也不咋地啊。大哥,你这描述人都听不懂啊。某个 Dao 是哪个 Dao?是不是可以给举个例子,比如有一个 StudentDao,其中包括增删改查方法。写一个缓存是指啥?使用什么编程语言,使用哪个缓存框架?是内存缓存还是分布式缓存?是不是可以限定清楚是 Java 语言,使用 Guava框架。
Prompt 是指对模型提出的问题进行描述和约束的文本片段,可以包括问题的主题、范围和关键词等信息。
好的 Prompt 应该具备以下几个特点:清晰具体:好的 Prompt 应该简单明了,避免使用复杂或模糊的语言。Prompt 应该越具体越好,避免过于广泛或开放式的问题。例如,如果我们想让 ChatGPT 回答策略模式的使用场景,我们可以使用 “请描述下策略模式的使用场景” 而不是 “请描述下策略模式”。
重点明确:好的 Prompt 应该有明确的目的,避免过于广泛或开放式的问题。Prompt 应该能够让 ChatGPT 理解问题的背景和范围,从而更好地回答问题。 有可能,提供可选项或问题列表供 AI 选择回答。对于有多个可能回答的 prompts,提供可选项或问题列表可以帮助 AI 选择最恰当的回答方式。但不要提供太多可选项,以免导致 AI 无法决定。 例如,我们可以使用 “请列举出可以提高代码拓展性的设计模式” 而不是 “请告诉我几个设计模式”。
充分详尽:好的 Prompt 应该包含足够的信息,以便 ChatGPT 能够理解问题的背景和范围。例如,如果我们想让 ChatGPT 回答关于狗的健康问题,我们可以使用 “请描述下策略模式的使用场景,并给出 Java 语言的示例代码” 而不是 “告诉我一些策略模式的信息”。
与任务相关:好的 Prompt 应该与任务相关,能够引导 ChatGPT 完成特定的任务。例如,如果我们想要 ChatGPT 回答某个特定的问题,我们可以将问题直接作为 Prompt,以确保 ChatGPT 能够理解任务要求。
语言上下文:好的 Prompt 应该包含一些语言上下文和限制条件,必要的背景信息和前提条件,以帮助 ChatGPT 更好地理解问题。例如,我们在上面的聊天中要求 ChatGPT 给我们准备一篇描写包装器模式的文章大纲,我们可以使用 “请根据上面的大纲帮我写一个草稿”,这样 ChatGPT 更容易理解问题。
多样性:好的 Prompt 应该具备一定的多样性,不仅可以满足不同的需求和场景,还可以帮助 ChatGPT 更好地理解和生成不同类型的回答。例如,我们可以使用不同类型的 Prompt,例如填空式、选择题或开放式问题,以获得更丰富和多样化的回答。
你可以根据 AI 的表现来调整和改进你给出的 prompts。找出哪些 prompts 使 AI 回答成功, 哪些则需要改进。适当调整 prompts 可以促进更好的互动体验。
另外,有时候不要期待一次提问就一定可以得到想要的答案,可以分步骤提问。比如想写一篇文章,可以先提问让 AI 给你写出一个大纲;如果大纲不符合你的要求,你可以再次提问让它修改大纲;大纲修改好之后,再让 AI 给你写出草稿;如果草稿不满意可以再描述自己的想法让它再次修改。
现在很多大语言模型的语料中文占比较少,使用中文提问时有些模型会优先匹配中文的内容,很容易得不到想要的答案。当使用中文得不到满意的答案,可以尝试将问题翻译成英文再去提问,或许会有意外收获。
大家可以将常用的提示词定义成模板(参考 ChatGPT Sidebar 浏览器插件),下次快速使用。
有时候哪怕提示词准确,某个大语言模型也未必能够得到满意的答案。大家除了尝试调整提示词之外,还可以考虑换几个不同的语言模型。通常结合不同的语言模型更能够得到更全面的答案。
Phind 网页快开的搜索结构:
New Bing 网页快开的搜索结构:
网上还有很多相对专业的提示词教程,大家可以参考学习。
四种基础模式:特定指令(By specific):在这种模式下,我们给模型提供一些特定信息,例如问题或关键词,模型需要生成与这些信息相关的文本。这种模式通常用于生成答案、解释或推荐等。特定信息可以是单个问题或多个关键词,具体取决于任务的要求。
指令模板(Instruction Template):在这种模式下,我们给模型提供一些明确的指令,模型需要根据这些指令生成文本。这种模式通常用于生成类似于技术说明书、操作手册等需要明确指令的文本。指令可以是单个句子或多个段落,具体取决于任务的要求。
代理模式(By proxy):在这种模式下,可以充当了一个代理,代表某个实体(例如人、角色、机器人等)进行操作或交互。代理模式的核心思想是引入一个中介对象来控制对实际对象的访问,从而实现一定程度上的隔离和保护。诸如于在 ChatGPT 中,”act as xxx” 可以让 ChatGPT 充当一个代理,扮演某个角色或实体的身份,以此来处理与该角色或实体相关的任务或请求。
示例模式(By demonstration):在这种模式下,我们给模型提供一些示例文本,模型需要生成与示例文本类似的文本。这种模式通常用于生成类似于给定示例的文本,例如自动生成电子邮件、产品描述、新闻报道等。示例文本可以是单个句子或多个段落,具体取决于任务的要求。
该教程,还介绍了这些模式结合适用的混合模式。
该网站给出全面的提示词学习教程,包括一些基础概念、基础应用和一些进阶用法等。
如思维链提示过程:
未来有更好的提示词教程会补充到这里。
很多人提出的问题连人都难以理解,却希望人工智能能够完全和自己“心有灵犀” ,自己描述不清楚还埋怨 AI 不够智能。