Skip to content

提示词入门和基础应用

什么是提示词

提示工程(Prompt Engineering)是一门较新的学科,关注提示词开发和优化,帮助用户将大语言模型(Large Language Model, LLM)用于各场景和研究领域。 掌握了提示工程相关技能将有助于用户更好地了解大型语言模型的能力和局限性。

研究人员可利用提示工程来提升大语言模型处理复杂任务场景的能力,如问答和算术推理能力。开发人员可通过提示工程设计、研发强大的工程技术,实现和大语言模型或其他生态工具的高效接轨。

提示工程不仅仅是关于设计和研发提示词。它包含了与大语言模型交互和研发的各种技能和技术。提示工程在实现和大语言模型交互、对接,以及理解大语言模型能力方面都起着重要作用。用户可以通过提示工程来提高大语言模型的安全性,也可以赋能大语言模型,比如借助专业领域知识和外部工具来增强大语言模型能力。

基于对大语言模型的浓厚兴趣,我们编写了这份全新的提示工程指南,介绍了大语言模型相关的论文研究、学习指南、模型、讲座、参考资料、大语言模型能力以及与其他与提示工程相关的工具。

提示词工程(Prompt Engineering)指的是设计和优化用于引导AI模型生成特定输出的输入文本。这些输入文本被称为“提示词”或“提示”。简单来说,就是给AI模型一个明确的指令或问题,让它更好地理解你想要的答案或结果。

例如,如果你想让AI写一篇关于环境保护的文章,你可以提供这样的提示词:“写一篇关于为什么环境保护很重要的文章。” 通过优化这些提示词,可以提高AI模型生成的内容的质量和相关性。

例子

编写提示词的原则

https://juejin.cn/post/7250710949140824121

什么是Input中的AI需要熟悉的上下文?

公司的产品是火星牌扫地机器人,他搭载了超清摄像头和雷达,能够避开所有障碍物,还能上下楼!产品介绍图片地址:https://img2.baidu.com/it/u=338574523,2379803693&fm=253&fmt=auto&app=138&f=JPEG?w=608&h=398

扫地机器人有两种颜色,白色和黑色

售卖价格:10000元

基于上下文的提问:上下文

模型设置

模型设置

使用提示词时,您会通过 API 或直接与大语言模型进行交互。你可以通过配置一些参数以获得不同的提示结果。调整这些设置对于提高响应的可靠性非常重要,你可能需要进行一些实验才能找出适合您的用例的正确设置。以下是使用不同LLM提供程序时会遇到的常见设置:

Temperature:简单来说,temperature 的参数值越小,模型就会返回越确定的一个结果。如果调高该参数值,大语言模型可能会返回更随机的结果,也就是说这可能会带来更多样化或更具创造性的产出。我们目前也在增加其他可能 token 的权重。在实际应用方面,对于质量保障(QA)等任务,我们可以设置更低的 temperature 值,以促使模型基于事实返回更真实和简洁的结果。 对于诗歌生成或其他创造性任务,你可以适当调高 temperature 参数值。

Top_p:同样,使用 top_p(与 temperature 一起称为核采样的技术),可以用来控制模型返回结果的真实性。如果你需要准确和事实的答案,就把参数值调低。如果你想要更多样化的答案,就把参数值调高一些。 一般建议是改变 TemperatureTop_p 其中一个参数就行,不用两个都调整。

Max Length:您可以通过调整 max length 来控制大模型生成的 token 数。指定 Max Length 有助于防止大模型生成冗长或不相关的响应并控制成本。

Stop Sequencesstop sequence 是一个字符串,可以阻止模型生成 token,指定 stop sequences 是控制大模型响应长度和结构的另一种方法。例如,您可以通过添加 11 作为 stop sequence 来告诉模型生成不超过 10 个项的列表。

response = openai.Completion.create(
  engine="text-davinci-003",
  prompt="今天天气怎么样?",
  max_tokens=50,
  stop=["\n", ".", "?", "!"]
)

大语言模型本来的输出:今天的天气非常好!但是要注意防晒。
大语言模型最终的输出:今天的天气非常好!

基础应用

文本概括

自然语言生成的标准任务之一是文本概括。文本概括可能涉及到不同的风格和领域。事实上,语言模型最前景的应用场景之一就是能够快速概括出易于理解的文章大意和相关概念。 我们可以使用提示词尝试一个简单的概括任务。

假设我想了解抗生素的相关信息,我可以给出这样的提示:

提示:

解释抗生素

这是一种用于问答的显式提示格式,这里我用它告诉模型应该有一个进一步的预期。

输出:

抗生素是一种用于治疗细菌感染的药物。 它们通过杀死细菌或防止细菌繁殖来工作,使人体免疫系统能够对抗感染。 抗生素通常以口服方式服用,以药丸,胶囊或液体溶液的形式,有时以静脉注射的方式给药。 它们对病毒感染无效,不合适的使用可能导致抗生素耐药。

假设现在我们想要进一步概括信息,口语化一点,我们可以告诉模型要求它用一句话进行概括:

提示:

一句话概括上面的内容

输出:

抗生素是用于治疗细菌感染的药物,通过杀死或抑制细菌来帮助免疫系统对抗感染,但对病毒无效,滥用可能导致耐药性。

信息提取

语言模型通过训练不仅可以用于执行自然语言生成相关任务,还可以用于执行文本分类和其他一系列自然语言处理 (NLP) 任务。

使用以下示例提示词从指定段落中提取信息:

提示:

研究论文中的作者贡献声明和致谢应清楚具体地说明作者在准备手稿和分析时是否以及在多大程度上使用了 `ChatGPT` 等人工智能技术。他们还应该指出使用了哪些法学硕士。这将提醒编辑和审稿人更仔细地审查稿件,以发现潜在的偏见、不准确和不当的来源来源。同样,科学期刊应该对法学硕士的使用保持透明,例如在选择提交的手稿时。
指出上段文本中提到的大语言模型。

输出:

段落中提到大型语言模型是`ChatGPT`。

现在应该很明显,您可以通过简单地指示语言模型去执行不同的任务。 AI 研发人员也利用这种能力来构建强大的产品和体验。

问答

提高模型响应精确度的最佳方法之一是改进提示词的格式。 如前所述,提示词可以通过指令、上下文、输入和输出指示以改进响应结果。 虽然这些要素不是必需的,但如果您的指示越明确,响应的结果就会越好。 以下示例可以说明结构化提示词的重要性。

提示:

根据下面的上下文回答问题。保持答案简短。如果不确定答案,请回答“不确定答案”。
上下文:`Teplizumab` 的根源可以追溯到新泽西州一家名为 `Ortho Pharmaceutical` 的制药公司。在那里,科学家们生成了该抗体的早期版本,称为 `OKT3`。该分子最初源自`小香猪`,能够与 `T` 细胞表面结合并限制其细胞杀伤潜力。 1986 年,它被批准用于帮助预防肾移植后的器官排斥,使其成为第一个允许人类使用的治疗性抗体。
问:`OKT3` 最初来源于什么?

输出:

小香猪

文本分类

提示:

将文本分类为中性、负面或正面。

文本:我认为食物还行。
情感:

输出:

中性

会话

通过提示工程,您可以实现的挑战之一是指导LLM系统的行为、意图和身份。这在构建像客户服务聊天机器人这样的对话系统时尤其有用。

例如,让我们创建一个对问题能够生成更多技术和科学响应的对话系统。请注意,我们通过指示明确地告诉它如何行为。这有时被称为角色提示。

提示:

现在你是我的科学助理,你的口吻是技术性和科学性的。
告诉我黑洞是如何产生的?

输出:

黑洞是由于大质量恒星燃烧殆尽后核心坍缩,或早期宇宙中的高密度区域坍缩所形成的天体。

我们的AI研究助手听起来太过技术了,是吧?好了,让我们改变AI角色提供更容易理解的答案。

提示:

现在你是我的科学助理,你的回答应该易于甚至小学生也能理解。
告诉我黑洞是如何产生的?

输出:

黑洞是当一颗非常大的恒星耗尽了它的燃料后,它的中心部分会坍塌,形成一个引力极强的区域,连光都无法逃脱。

代码生成

LLM在代码生成方面非常有效。通义灵码Github Copilot是一个很好的例子。您可以通过聪明的提示执行大量的代码生成任务。让我们来看几个例子。

首先,用JavaScript写一段拼接两个字符串的方法。

提示:

用JavaScript写一段拼接两个字符串的方法

输出:

javascript
function concatenateStrings(string1, string2) {
    return string1 + string2;
}

// 测试这个方法
let str1 = "Hello, ";
let str2 = "world!";
let result = concatenateStrings(str1, str2);

console.log(result); // 输出: Hello, world!

这个方法名为concatenateStrings,接受两个参数string1和string2,并返回它们拼接后的结果。示例中,我们将"Hello, ""world!"拼接在一起,最终输出结果是"Hello, world!"

让我们再看一个生成SQL语句的例子:

提示:

表departments,列=[DepartmentId,DepartmentName]
表students,列=[DepartmentId,StudentId,StudentName]
创建一个MySQL查询以获取计算机科学系中的所有学生

输出:

SELECT StudentId,StudentName 
FROM students 
WHERE DepartmentId IN (SELECT DepartmentId FROM departments WHERE DepartmentName = '计算机科学');