编辑
2024-11-14
💥AI大模型
00
请注意,本文编写于 217 天前,最后修改于 217 天前,其中某些信息可能已经过时。

目录

基本概念
1. Prompt
2. Temperature
3. System Prompt
使用LLM API
1.百度千帆
2. Prompt Engineering
2.1 Prompt Engineering的意义
2.2 Prompt设计的原则及使用技巧

基本概念

1. Prompt

Prompt最初是NLP(自然语言处理)研究者为下游任务设计出来的一种任务专属的输入模板,类似于一种任务(例如:分类、聚类等)会对应一种Prompt。

我们每一次访问大模型的输入为一个Prompt,而大模型给我们的返回结果则被称为Completion

2. Temperature

LLM生成是具有随机性的,在模型的顶层通过选取不同的预测概率的预测结果来生成最后的结果。

我们一般可以通过控制temperature参数来控制LLM生成结果的随机性与创造性。

Temperature一般取值在0~1之间

  • 当取值较低接近0时,预测的随机性会较低,产生更保守、可预测的文本,不太可能生成意想不到或不寻常的词。
  • 当取值较高接近1时,预测的随机性会较高,所有词被选择的可能性更大,会产生更有创意、多样化的文本,更有可能生成不寻常或者意想不到的词。

3. System Prompt

事实上,它并不在大模型本身训练中得到体现,而是大模型服务方为提升用户体验锁设置的一种策略。

具体来说,在使用ChatGpt API时,你可以设置两种Prompt:

  • 一种是System Prompt,该种Prompt会在整个会话过程中持久地影响模型的回复,且相比于普通Prompt具有更高的重要性;
  • 另一种是UserPrompt,这更偏向于我们平时提到的Prompt,即需要模型做回复的输入。

使用LLM API

1.百度千帆

python
import qianfan, os from dotenv import load_dotenv, find_dotenv # 读取本地/项⽬的环境变量。 # find_dotenv() 寻找并定位 .env ⽂件的路径 # load_dotenv() 读取该 .env ⽂件,并将其中的环境变量加载到当前的运⾏环境中 # 如果你设置的是全局的环境变量,这⾏代码则没有任何作⽤。 _ = load_dotenv(find_dotenv()) def gen_wenxin_messages(prompt): ''' 构造⽂⼼模型请求参数 messages 请求参数: prompt: 对应的⽤户提示词 ''' messages = [{"role": "user", "content": prompt}] return messages def get_completion(prompt, model="ERNIE-Bot", temperature=0.01): ''' 获取⽂⼼模型调⽤结果 请求参数: prompt: 对应的提示词 model: 调⽤的模型,默认为 ERNIE-Bot,也可以按需选择 ERNIE-Bot-4 等其他模型 temperature: 模型输出的温度系数,控制输出的随机程度,取值范围是 0~1.0,且不能 设置为 0。温度系数越低,输出内容越⼀致。 ''' chat_comp = qianfan.ChatCompletion() message = gen_wenxin_messages(prompt) resp = chat_comp.do(messages=message, model=model, temperature = temperature, system="你是⼀名个⼈助理-⼩鲸⻥") return resp["result"] print(get_completion("你好,介绍⼀下你⾃⼰")) """ 参数解释: · messages,即调⽤的 prompt。⽂⼼的 messages 配置与 ChatGPT 有⼀定区别,其不⽀持 max_token 参数,由模型⾃⾏控制最⼤ token 数,messages 中的 content 总⻓度、 functions 和 system 字段总内容不能超过 20480 个字符,且不能超过 5120 tokens,否则模 型就会⾃⾏对前⽂依次遗忘。⽂⼼的 messages 有以下⼏点要求:① ⼀个成员为单轮对话,多个成员 为多轮对话;② 最后⼀个 message 为当前对话,前⾯的 message 为历史对话;③ 成员数⽬必须为 奇数,message 中的 role 必须依次是 user、assistant。注:这⾥介绍的是 ERNIE-Bot 模型 的字符数和 tokens 限制,⽽参数限制因模型⽽异,请在⽂⼼千帆官⽹查看对应模型的参数说明。 · stream,是否使⽤流式传输。 · temperature,温度系数,默认 0.8,⽂⼼的 temperature 参数要求范围为 (0, 1.0],不能 设置为 0。 """

2. Prompt Engineering

2.1 Prompt Engineering的意义

对于具有较强⾃然语⾔理解、⽣成能⼒,能够实现多样化任务处理的⼤语⾔模型(LLM) 来说,⼀个好的 Prompt 设计极⼤地决定了其能⼒的上限与下限。

如何去使⽤ Prompt,以充分发挥 LLM 的性能?

⾸先我们需要知道设计 Prompt 的原则,它们是每⼀个开发者设计 Prompt 所必须知道的基础概念。

本节讨论了设计⾼效 Prompt 的两个关键原则:编写清晰、具体的指令和给予模型充⾜思考时间。掌握这两点,对创建可靠的语⾔模型交互尤为重要。

2.2 Prompt设计的原则及使用技巧

  1. 原则1:编写清晰、具体的指令
  • 使⽤分隔符清晰地表示输⼊的不同部分。在编写 Prompt 时,我们可以使⽤各种标点符号作为“分隔符”,将不同的⽂本部分区分开来。分隔符就像是 Prompt 中的墙,将不同的指令、上下⽂、输⼊隔开,避免意外的混淆。你可以选择⽤ ,""",< >, ,: 等做分隔符,只要能明确起到隔断作⽤即可。
  • 寻求结构化输出。按照某种格式组织的内容,例如 JSON、HTML 等。
  • 要求模型检查是否满足条件。如果任务包含不⼀定能满⾜的假设(条件),我们可以告诉模型先检查这些假设,如果不满⾜,则会指 出并停⽌执⾏后续的完整流程。您还可以考虑可能出现的边缘情况及模型的应对,以避免意外的结果或 错误发⽣。
  • 提高少量示例。"Few-shot" prompting(少样本提示),即在要求模型执⾏实际任务之前,给模型提供⼀两个参考样例,让模型了解我们的要求和期望的输出样式

使⽤分隔符尤其需要注意的是要防⽌提示词注⼊(Prompt Rejection)。什 么是提示词注⼊?

就是⽤户输⼊的⽂本可能包含与你的预设 Prompt 相冲突的内容,如果不加分隔, 这些输⼊就可能“注⼊”并操纵语⾔模型,轻则导致模型产⽣毫⽆关联的不正确的输 出,严重的话可能造成应⽤的安全⻛险。

  1. 原则2:给予模型充足思考时间
  • 指定完成任务所需的步骤
  • 指导模型在下结论之前找出一个自己的解法

注意

在开发与应⽤语⾔模型时,需要注意它们可能⽣成虚假信息的⻛险。尽管模型 经过⼤规模预训练,掌握 了丰富知识,但它实际上并没有完全记住所⻅的信息, 难以准确判断⾃⼰的知识边界,可能做出错误推断。

若让语⾔模型描述⼀个不存在的产品,它可能会⾃⾏构造出似是⽽⾮的细节。这被称为“幻觉” (Hallucination),是语⾔模型的⼀⼤缺陷。

本文作者:Eric

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!