本文由飞桨星河社区开发者张洪申贡献。张洪申,本科毕业于浙江大学竺可桢学院求是数学班,现在浙江大学操控科学与工程学院博士在读,研究方向为数据科学、电力体系。科研工作曾被 Nature 官方大众号 Nature portfolio 专题报道。

Prompt工程师压箱底绝活——Prompt的根本组成部分、格局化输出与运用构建

现在,大模型输出往往包含许多冗余信息。本文中,根据文心一言,咱们给出了一种包含指令、输入数据、布景信息和输出提示的提示词结构,让大模型能够真正派击运用开发者的需求,严格履行开发者的指令,为大模型的原生运用奠定了根底。

01 前言

Prompt 中文为“提示词”。在大言语模型中,Prompt 的效果主要是给大言语模型提示输入信息的上下文和输入模型的参数信息。能够将 Prompt 类比于人类交流中的提示或者头绪,协助大言语模型理解开发者的意图,依据头绪供给恰当的呼应或者输出。

Prompt 的规划对模型输出的质量和相关性起决定性效果。但是,现有的提示词资源,虽然必定程度上为开发者供给了便当,但它们仍存在一些详细的问题。

问题一:提示词缺少理论体系。虽然已有大量的提示词资源可供运用,开发者在实践中依然面对怎么有用编写提示词的应战。这是由于现在尚未构成一套完好的理论体系来指导用户怎么构建和优化提示词。长期以来,在尝试和运用各式提示词的过程中,开发者缺少办法论的支撑,无法体系地提炼经历、概括规律,然后难以掌握编写高效提示词的技巧,这种情况不只约束了 Prompt 的潜力发挥,也阻碍了开发者充分利用 AI 模型的才能。

问题二:输出与开发者期望不符。当前的大言语模型在处理复杂的开发者输入时,常常无法直接生成契合开发者详细需求的成果。模型输出的信息或许需求开发者进行额定的人工编辑和调整,才能达到可用的状态。开发者有必要投入额定的时刻和精力来批改并完善 AI 的原始输出,这不只降低了功率,也影响了开发者体会。

因而,为了协助开发者更深刻地理解和有用地运用提示词,本文将重点从两个主要视点展开讨论:

  1. Prompt 根本组成部分。包含指令(Instruction)、输入数据(Input Data)、布景信息(Context)以及输出指示器(Output Indicator),这些构成了提示词的中心要素,对于规划有用的 AI 交互至关重要;

  2. Prompt 进阶运用。根据 Prompt 的格局化成果输出,探讨怎么经过精确的提示词来格局化 AI 的输出成果,以突显提示词大模型的共同价值和运用潜力。

经过这两个层面的剖析,用户将能够更加精准地拟定和运用提示词,以达到更优质的 AI 运用体会。

02 Prompt 根本组成部分

Prompt 规划是大言语模型互动的要害,它能够明显影响模型的输出成果质量。一个合理规划的 Prompt 应当包含以下四个元素:

1.指令(Instruction):这是 Prompt 中最要害的部分。指令直接告知模型用户期望履行的详细任务。

2.输入数据(Input Data):输入数据是模型需求处理的详细信息。

3.布景信息(Context):布景信息为模型供给了履行任务所需的环境信息或附加细节。

4.输出指示器(Output Indicator):输出指示器界说了模型输出的期望类型或格局。

规划 Prompt 时,合理结合这四个元素,能够明显提高大言语模型的呼应效果和输出质量。用户能够依据实践需求,选择性地包含某些元素。其中,指令是必不可少的,其他元素则依据情况来决定是否增加、怎么增加,使得 Prompt 更加精炼和高效。经过仔细考虑和运用这些元素,用户将能够更好地引导大言语模型,获取更契合预期的成果。

用一个详细的比如进行演示。想象一个详细场景,想让大言语模型告知咱们一位学生说的话是“正确”仍是“过错”的,以下是一份合理的提示词的构建过程。

1.指令(Instruction):请判别学生说的话是否正确

2.输入数据(Input Data):学生说的话:[学生说的话]

3.布景信息(Context):正确请运用’正确’表明,过错请运用’过错’表明

4.输出指示器(Output Indicator):输出格局:n### 是否正确n{是否正确}

将提示词进行组合,不同的内容用n(换行符)分割:

指令:请判别学生说的话是否正确 n 学生说的话:[学生说的话] n 信息:正确请运用’正确’表明,过错请运用’过错’表明 n 输出格局:n###是否正确n{是否正确}

03 根据 Prompt 的格局化成果

输出与正则表达式提取

在详细的问题解决中,特别是在 AI 技能的原生运用范畴,对输出成果进行格局化是至关重要的一步。格局化输出不只有助于保持成果的一致性,并且能够确保输出的数据能够被后续的剖析和处理程序正确识别和运用。大言语模型很容易发生并包含剩余信息的答案,这些答案虽然在言语上是正确的,但却不契合特定的格局要求,然后无法直接用于进一步的数据处理流程。

以一个详细的运用场景为例。咱们期望模型能够指明一位学生说的话是“正确”仍是“过错”。假如仅仅运用一个简略直接的 Prompt,经过文字办法表达需求,例如:

“请判别1+1=3是否正确,正确请运用’正确’表明,过错请运用’过错’表明,请仅输出’正确’和’过错’,请勿输出其他任何信息”

▎代码1

user_input = "请判别1+1=3是否正确,正确请运用'正确'表明,过错请运用'过错'表明,请仅输出'正确'和'过错',请勿输出其他任何信息"
response = erniebot.ChatCompletion.create(
    model='ernie-3.5',
    messages=[{
        'role': 'user',
        'content': user_input
    }])
print(response.get_result())
答复1:
在规范数学逻辑中,1+1=3是不正确的。

这样的指令或许依然不足以确保模型输出的成果完全契合预期。AI 模型或许会发生包含额定解说或不必要信息的呼应,干扰数据的自动化处理。

而实践上,假如运用 Prompt 根本组成部分中的成果,能够完善的生成成果:

“请判别学生说的话是否正确 n 学生说的话:1+1=3 n 信息:正确请运用’正确’表明,过错请运用’过错’表明 n 输出格局:n###是否正确n{是否正确} “

▎代码2

user_input = "请判别学生说的话是否正确 n 学生说的话:1+1=3 n 信息:正确请运用'正确'表明,过错请运用'过错'表明 n 输出格局:n###是否正确n{是否正确}"
response = erniebot.ChatCompletion.create(
    model='ernie-3.5',
    messages=[{
        'role': 'user',
        'content': user_input
    }])
print(response.get_result())
答复2:
###是否正确
过错

当多个需求需求完成时,也能够经过 Prompt 根底本组成部分完成,例如期望 AI 在判别的同时,能够指出学生的详细过错:

“请判别学生说的话是否正确 n 学生说的话:1+1=3 n 信息:正确请运用’正确’表明,过错请运用’过错’表明 n 输出格局:n###是否正确n{是否正确} n###学生的过错n{学生的过错}”

▎代码3

user_input = "请判别学生说的话是否正确 n 学生说的话:1+1=3 n 信息:正确请运用'正确'表明,过错请运用'过错'表明 n 输出格局:n###是否正确n{是否正确}"
response = erniebot.ChatCompletion.create(
    model='ernie-3.5',
    messages=[{
        'role': 'user',
        'content': user_input
    }])
print(response.get_result())
答复3:
###是否正确
过错
###学生的过错
学生的过错在于他们的加法计算不准确。他们以为1+1=3,但实践上1+1=2

在根据大模型生成固定格局的输出成果后,一种常见的办法是根据正则表达式提取对应信息。正则表达式是一种强大的文本处理东西,它答使用户界说一种搜索形式,然后在文本中匹配这种形式。由于它们具有高度的灵活性和功能性,正则表达式成为了在自然言语处理、数据发掘、日志文件剖析等很多范畴,从结构化或半结构化文本中提取信息的常用办法。

▎代码4

import re
text = response.get_result()
pattern_correctness = re.compile(r'###是否正确n(.*?)n###学生的过错', re.DOTALL)
pattern_error = re.compile(r'###学生的过错n(.*)', re.DOTALL)
correctness_result = pattern_correctness.search(text)
error_result = pattern_error.search(text)
is_correct = correctness_result.group(1).strip() if correctness_result else None
student_error = error_result.group(1).strip() if error_result else None
print(f"{is_correct}")
print(f"{student_error}")
答复4:
过错
1+1=3是不正确的。由于依据数学的运算规则,1+1应该等于2而不是3。这个过错或许是由于学生在进行加法运算时发生了混淆或者忽略。

在格局化生成大模型回复时,咱们运用’###’作为提取标识,这样的格局化标签能够作为文本块的起始点,为正则匹配供给了明确的锚点。这种明确的标记办法,简化了正则表达式的编写。经过运用 Python 的 re 模块,能够完成根据大模型的特定信息提取。

正则表达式在信息提取方面是一个极其有用的东西,特别是当与大模型生成固定格局的输出成果后进行信息提取。根据提取信息的进一步加工能够让大模型助力各种运用的蓬勃发展!

04 根据飞桨星河社区开发 AI 运用

飞桨星河社区是百度潜心打造的专业大模型社区,为开发者供给算力、模型库、数据集、东西套件、实训项目、社区交流等全方位服务,使得开发者能够轻松地开展人工智能项目。

该渠道的一大亮点是其轻量化的代码完成办法,答使用户经过简洁的代码就能够快速搭建和练习模型,大大降低了入门门槛。用户无需关心底层的环境配置,由于渠道已经供给了预配置的开发环境,包含常用的机器学习和深度学习结构及库。这意味着用户能够直接在 Web 界面上编写代码,运行实验,而无需花费时刻去装置和维护各种软件和硬件环境。

此外,飞桨星河社区的一个明显优势是其可拜访性。用户能够直接拜访渠道,它确保了用户能够安稳和高效地连接到飞桨星河社区的服务,注册之后即可进入 Coding 界面高兴的编程啦!

▎常规提示词结构

import erniebot
erniebot.api_type = 'aistudio'
erniebot.access_token = '<your token>’
user_input = "请判别1+1=3是否正确,正确请运用'正确'表明,过错请运用'过错'表明,请仅输出'正确'和'过错',请勿输出其他任何信息"
response = erniebot.ChatCompletion.create(
    model='ernie-3.5',
    messages=[{
        'role': 'user',
        'content': user_input
    }])
print(response.get_result())

▎Prompt 根本组成部分+单任务格局化输出

import erniebot
erniebot.api_type = 'aistudio'
erniebot.access_token = '<your token>’
user_input = "请判别学生说的话是否正确 n 学生说的话:1+1=3 n 信息:正确请运用'正确'表明,过错请运用'过错'表明 n 输出格局:n###是否正确n{是否正确}"
response = erniebot.ChatCompletion.create(
    model='ernie-3.5',
    messages=[{
        'role': 'user',
        'content': user_input
    }])
print(response.get_result())

▎Prompt 根本组成部分+多任务格局化输出

import erniebot
erniebot.api_type = 'aistudio'
erniebot.access_token = '<your token>’
user_input = "请判别学生说的话是否正确 n 学生说的话:1+1=3 n 信息:正确请运用'正确'表明,过错请运用'过错'表明 n 输出格局:n###是否正确n{是否正确} n###学生的过错n{学生的过错}"
response = erniebot.ChatCompletion.create(
    model='ernie-3.5',
    messages=[{
        'role': 'user',
        'content': user_input
    }])
print(response.get_result())

跟着通用大言语模型的发展和智能 Agent 技能的鼓起,咱们正迎来 AI 运用开发的一个新时代。无论是有深厚技能布景的开发者仍是非技能人员,都能在这个新时代中找到归于自己的空间,开发自己的专属运用。AI 的未来,充满无限潜力和广阔天地,等待咱们去探究和发明。

——————END——————

引荐阅读

根据afx通明视频的视觉增强前端方案

百度一站式数据自助剖析渠道(TDA)建设

浅析怎么加速商业业务实时化

登录体系演进、便捷登录规划与完成

一文带你完好了解Go言语IO根底库