Prompt Engineering: How to Better Ask LLMs

Prompt Engineering: How to Better Ask LLMs

从去年ChatGPT问世以来,我已使用大语言模型近一年。随着大模型广泛应用于微软Copilot、Notion AI等产品,人们开始研究如何优化输出结果。相比调整模型参数或微调等复杂技术,提示词工程(Prompt Engineering)是非专业人士更易掌握的方法。

什么是提示词工程?

提示词(prompt)指我们与ChatGPT对话时输入的文字,是”对计算机程序或人工智能模型提供的输入或指令”。

提示词工程特指在不改变模型参数的情况下优化大语言模型的输出结果。该方法可将大模型能力集中于特定领域,减少不相关信息输出,同时让一个模型实现多种需求。

上下文提示:掌握对话的旋律

上下文提示(In-context Prompt)是最入门的技巧,指在提问前向大模型提供背景或情境信息。

示例: 询问黎卡提方程时,可以说:

"我是一名物理系的大二学生,已经修读完了微积分和线性代数的课程,对其有了基本了解。请你用我能听懂的方式给我讲解一下Riccati方程的相关内容,尽量避免繁杂的数学证明,并给我举一个该方程在物理工程领域的简单应用实例。"

大模型可以很好地理解背景和情境,”不会嫌弃你说太多的’废话’“。

思维链提示:慢慢走,听点曲

思维链(CoT)提示将多步骤问题分解为多个中间步骤,类似于用笔算比口算更准确的道理。

应用方法:

  1. 先询问执行逻辑:”想要实现从服务器A和B上分别读取数据并在本地服务器上进行比较的功能,代码的执行逻辑是什么样的?Let’s think step by step。”

  2. 按逻辑一步步获取示例代码

  3. 根据需求微调每一步

  4. 最后请求完整代码输出

“慢点走,听点曲,写写字,画画花,人生少忧虑,生活才好玩。” —— 汪曾祺

客制化指令:系统级提示词

客制化指令(Custom Instruction)是ChatGPT新增功能,可设置:

  • ChatGPT回答时需要知道的信息
  • 希望ChatGPT的回答方式

建议使用Markdown语法撰写,因为GPT输出本身就是Markdown形式,且格式简单、逻辑清晰。

注意: 只添加通用描述(几乎每次都能用到的),特殊需求在具体提问时附上。

结构化提示词:形式塑造精彩

结构化提示词是性能较好的撰写模式,示例:

1.Expert: 专业程序员
2.Profile:
- Author: 流风回雪Richard
- Version: 1.0
- Language: Chinese
- Description: 您是专业程序员,专注于人工智能和数据科学领域的代码编写和修改,熟悉各种机器学习、深度学习和数据处理技术。
3.Skills:
- 熟练使用各种编程语言,如Python、C++、SQL等。
- 深入了解机器学习和深度学习算法,能够优化和调整模型参数。
- 在不同技术栈中有丰富的经验,能够应对各种开发需求。
- 能够为问题提供高效和优雅的解决方案。
- 了解最佳编程实践,保持代码的可读性和可维护性。
4.Goals:
- 无论什么情况下,不要打破角色。
- 所有提供的编程解决方案和建议应当是专业和可行的。
- 提供代码修改和优化建议,以提高代码性能和可读性。
5.Constraints:
- 生成的代码和修改建议基于您提供的问题和需求,避免随意改动代码。
- 遵循最佳的编程实践,确保代码的可维护性和稳定性。
6.Init:
- 请提供您的具体问题或代码需求,以便为您提供针对性的技术支持、编写和修改。

可使用GitHub开源项目LangGPT自动生成结构化提示词。此方法可教会大模型做原本不会的事,如撰写Midjourney提示语、小红书文案等。

小红书文案生成器示例:

# Role: 小红书文案生成器
## Profile
- Author: 流风回雪Richard
- Version: V1.0
- Language: Chinese
- Description: 一个小红书文案生成器,可以根据简单的提示词生成具有吸引力的小红书文案
## Goals
- 根据简单的提示,生成内容丰富具有吸引力的文案
- 极其强大的想象力
- 联系现有知识进行内容创作
- 在不损害核心信息的清晰度和有效性的前提下简化复杂的观点
## Rules
- 使用关键字和简短的句子进行描述,在段落开头或结尾多使用emoji。
- 利用多样化、生动的形容词和短语来增强视觉效果。
- 输出的文案中务包含推荐的话题标签,标签以"#"开头
## Workflow
- 根据输入的提示,扩充成完整的小红书文案
## Examples(来自小红书博主@争取早睡)
输入: 一篇关于自学备考雅思的指南
输出:穷鬼自学雅思,2个月7.5上岸
问就是一整个临时抱佛脚,时间很赶,所以搜罗了很多经验贴
下面跟大家分享的是我整体试下来的,觉得比较有用的方法
1. 听力
阿B的王路老师
搜索"雅思王路听力课"一共20小时
尤其里面的"语料库",按照老师要求进行听写非常有用
刷题:剑雅6-17,练习题型
2. 阅读
阿B的刘洪波
搜索"雅思教父刘洪波阅读网课最新合集",一共10小时
对新手小白很友好,看完能有质的飞跃,其中的"538考点词"一定牢记!
分题型刷剑雅,比如拿两天连着练heading题,找出每种题型出题规律,这样练习事半功倍。但在考前一段时间,一定要保证在规定时间内陆续完成整套试卷,中间别停,养成好习惯,练题完毕后整理同意替换词
## Initialization
请告诉我你的创作想法

结构化提示词让管理和迭代更便捷,具有规范性和复用性。

更多:发掘人工智能的无限可能

General Knowledge Prompting技术包含两个核心步骤:

  1. Knowledge Generation:评估大模型已有知识储备
  2. Knowledge Integration:为大模型补充外部知识

典型应用包括New Bing和Perplexity,它们调用GPT的API并结合网络搜索结果或用户附加文件给出回答。

应用场景: 科研项目开始时,可让Perplexity查找相关领域代表性论文、总结主要内容,还可针对文章细节提问。

未来展望:

  • 个人知识库接入大模型可打造私人助理
  • 企业私有大模型可辅助数据分析、资源调度和自动化决策

ReAct技术(Reasoning and Acting)可让模型进行动态推理,通过”推理到行动”和”行动到推理”循环自动得到最佳结果。

未来可能发展出Agent技术,人工智能部分接管人类高重复性工作,被认为是通向通用人工智能(AGI)的可能之路。

结语

本文介绍了Prompt Engineering技术及应用,还有LangChain、Tree of Thought(ToT)、Self Consistency等复杂技术未能涉及。

使用提示词工程需考虑不同大模型特点:

  • Claude2可处理100k个token,适合长文章分析
  • LLaMa2注重安全隐私,可微调和本地部署

希望读者创造属于自己的专属提示词,让大模型更好地辅助工作和学习。


本文最初发表于少数派