系列文章导览

导言

笔者由于工作原因需求运用LLM来完成一些网络安全相关的使命,可是笔者在调研后发现,现在解说LLM的技术文章普遍集中于单个小点,而鲜有体系化解说LLM运用的文章,因此,笔者准备从LLM运用者的视点动身,即不考虑LLM的练习与全参数微调等,仅仅是调用一个已练习好的LLM的api,系统化的解说LLM的各种运用技巧——即提示工程。

之前现已说完了提示工程的一些根底知识,包含根本的提示结构和两种不同的提示,接下来说的就是怎么规划一个提示(prompt)以及规划时能够注意的技巧

迭代式规划

规划提示是一个迭代进程,需求许多试验才干取得最佳成果

在写提示的时分,能够从简略的提示开端,依据模型的输出和预期成果之间的距离,逐渐添加更多元素和上下文。假如想让大模型处理一个大型使命,能够测验将使命分解成更简略的子使命,运用提示让模型逐个的解决子使命。然后防止给规划提示进程添加太多复杂性。

指令要满足明晰

当处理简略使命的时分,能够运用命令式的句子与较为明晰的词汇,以奉告模型你想要实现的方针。例如“分类”、“总结”、“翻译”、“排序”等。

最有用的prompt需求许多试验才干找到。测验运用不同的指令,合作不同的要害词、上下文来找最适合使命的prompt。一般,上下文与你所测验执行的使命越详细和相关,效果越好。

在写prompt的时分,指令应当放置于prompt的最初。而且运用一些明晰的分隔符,如“###”,来分隔指令和上下文。

举个比如:

### 指令
使命:情感剖析
### 上下文
- 示例1:这段文字真是太棒了,我十分喜爱! - 活跃
- 示例2:我不太喜爱这个,感觉很一般。 - 消极
- 示例3:这本书的内容很客观,供给了许多事实信息。 - 中性
### 输入数据
1. 我真的对这个产品感到绝望,它没有到达我的期望。
2. 这是我看过的最好的电影之一,强烈引荐给我们!
3. 陈述详细介绍了商场的现状,很中立。
### 输出指示
- 对于每个输入文本,模型应输出一个情感标签,标明文本是活跃的、消极的仍是中性的。

详细与简洁

在规划prompt时,要十分详细。提示越描述性和详细,成果就越好。尽或许详细、描述性和详细地阐明期望的上下文、成果、长度、格局、风格等:

  1. 明晰上下文:供给满足的布景信息,使模型能够了解使命的布景。例如,假如正在寻求关于特定职业的趋势剖析,保证提及该职业。
  2. 定义期望的成果:详细描述期望模型供给的信息类型。例如,假如需求一个摘要,指定是需求一段简略的摘要仍是一个详细的执行摘要。
  3. 指定长度和格局:假如对输出的长度有特定的要求,比方推文长度约束或段落形式,明晰指出。相同,假如你需求列表、表格或其他特定格局,也要指明。
  4. 设定风格:假如对输出的风格有特定要求,比方正式、幽默或非正式,保证在提示中指出。这有助于模型生成契合期望的口气和风格的文本。
  5. 防止含糊性:尽量防止运用含糊或多义的语言。明晰指出需求,防止运用“或许”、“或许”或“假如适用”等词语。
  6. 指导性指令:运用明晰的动词来指导模型的行为,如“总结”、“比较”、“解说”等,这些动词能够明晰指示模型应采纳的举动。

在规划提示时,你还应该考虑提示的长度,现有的模型对于能处理的上下文信息的长度是有约束的,比方gpt系列是128k token。因此在prompt中包含太多不必要的细节反而或许让模型失掉之前生成的可用信息。细节应该是与使命高度相关的。而prompt中所需求包含的细节性描述就是需求许多试验的东西。

相同举个比如:

### 指令
使命:提取要害信息并生成简略的文本摘要

### 上下文
- 示例1:输入:「该公司在2024年第一季度的净利润增加了15%,首要得益于其云核算服务的微弱需求。」 - 摘要:「2024年第一季度,公司净利润增加15%,云核算服务需求旺盛。」
- 示例2:输入:「最新研讨显示,全球海平面在曩昔十年内上升了约5毫米,这一趋势与气候变化有关。」 - 摘要:「研讨:曩昔十年全球海平面上升5毫米,与气候变化相关。」

### 输入数据
输入:「科学家们发现了一种新的资料,能够在室温下超导电,这一发现或许会彻底改变动力传输和电子设备。」

### 输出指示
- 模型应为每个输入文本供给一个简洁的摘要,杰出首要信息和要害数据,摘要长度不超越30个词。

在这个比如中,指令十分详细,明晰指出了使命是提取要害信息并生成文本摘要。上下文中的示例十分描述性和详细,供给了输入文本和期望的摘要输出,这有助于模型了解怎么从输入中提取要害信息并形成简略的摘要。输入数据和输出指示也很明晰,指导模型对给定的文本进行操作,并指出输出的长度约束。

防止不精确的句子

在写prompt时分,应当极力防止含糊的句子,这儿直接举个比如:

解说提示工程的概念。坚持解说简略,只用几句话,不要太描述性。

上面的提示没有清楚的指明应该运用多少句话以及应该运用什么风格等信息。更好的提示应当是十分详细、简洁且切中关键的。例如:

用2-3句话向高中生解说提示工程的概念。

这种提示明晰地指出了所需的解说长度、预期的受众(高中生),以及解说的意图(让高中生了解)。这样的提示更容易被模型了解,而且更有或许产生契合预期的精确和有用的输出。

只说应该做的

当规划提示时,应该专心于指导模型应该做什么,而不是不应该做什么。这样做能够协助模型更详细地了解使命要求,并供给更精确的输出。以下是一个相似的中文示例,针对一个游览引荐谈天机器人:

不良示例的提示:

提示:
以下是一个向用户引荐游览意图地的谈天机器人。请不要问询用户的预算。不要问询用户的游览偏好。
用户:请依据我的爱好引荐一个游览意图地。
机器人:
输出:
好的,我能够依据你的爱好来引荐游览意图地。你更喜爱自然风光仍是城市探险?你有没有特别的游览偏好?

改善后的提示:

提示:
以下是一个向用户引荐游览意图地的谈天机器人。该机器人担任依据当时热门游览景点进行引荐。它应该不问询用户的个人预算,也不问询用户的游览偏好。假如机器人没有引荐的意图地,应回答“抱愧,今日没有找到合适的游览意图地引荐给您。”
用户:请依据我的爱好引荐一个游览意图地。
机器人:
输出:
抱愧,我无法获取您的详细爱好信息。不过,这儿是现在全球热门游览景点的列表:[游览景点列表]。期望您能从中找到喜爱的意图地!

在这个改善后的示例中,谈天机器人被明晰指示依据当时热门游览景点进行引荐,而不是问询用户的个人偏好或预算,这防止了不必要的问询,并直接供给了用户所需的信息。假如机器人无法供给引荐,它也会礼貌地奉告用户。这样的提示更加详细和专心,有助于生成更好的用户体验。

(针对于代码生成使命)给出开始句子

在生成代码时分,运用“引导词”来引导模型朝特定形式发展。举个比如:
如下是一个没有运用引导词的较差prompt:

# 编写一个简略的Python函数,该函数 
# 1. 让我输入以厘米为单位的长度 
# 2. 将厘米转换为千米

在下面的改善的prompt示例中,添加“import”暗示模型应该开端用Python编写。(相同地,“SELECT”是开端SQL句子的好提示词。)

# 编写一个简略的Python函数,该函数 
# 1. 让我输入以厘米为单位的长度 
# 2. 将厘米转换为千米
import