文章介绍了提示工程,强调通过清晰指令、上下文、约束和格式构建强效提示,并分享了少样本、思维链、角色和工具增强四种开发者应知的提示模式。
作者:Jessica Wachtel
当我第一次开始编写提示时,我曾不切实际地认为,既然大型语言模型“无所不知”,它们就总能输出完美的结果。带着这种期望,我早期构建的提示给模型留下了广泛的潜在输出空间。我开始怀疑我使用的AI是否与那些觉得它很棒的人使用的AI是同一个。
我对人工智能有很多看法,但就我对其输出的挫败感而言,问题出在我身上。如果你在大型语言模型输出方面也正在为自己制造麻烦,不要害怕,帮助来了。
什么是提示?
你对大型语言模型提出的任何要求。更技术性地说,它是你发送给模型的任何输入。这可以是一个词,也可以是详细的系统消息,以及介于两者之间的任何内容。
在提示工程的语境中,提示是一种经过设计、旨在引发可靠输出的输入。
提示工程到底意味着什么?
当我过去思考提示工程时,我以为是告诉模型我的想法,期望它能将模糊的输入转化为我项目的最终版本。那不是提示工程。
例如,同样的提示“画一只猫”,每次使用都会给出不同的结果。但如果你实际想要一张戴着红色领结、微笑着的黑猫图片,那就具体地提出这个要求。你仍然不会每次都得到完全相同的结果,但你得到的结果会更接近你的预期,并且你和模型很可能会在此基础上进行迭代,而不是一次又一次地从头开始。
是的,这是一个愚蠢的例子,也是一个显而易见的用户提示,但它如此清晰地说明了一个设计不佳的提示。如果你想要一张戴着红色领结的黑猫的画,你就会直接这样要求。但当主题稍微更具挑战性时,比如“设计一个处理用户认证的系统”,这个要求可能就不那么清晰了。该网站有多少用户?它是一个微服务架构吗?你想要OAuth、JWT还是基于会话的认证?
总而言之,精心设计一个好的提示将减少差异性并提高可靠性。
大型语言模型如何处理提示
大型语言模型不是神奇的读心者。我们认为人类的思考或推理,对于大型语言模型而言则是另外一回事。大型语言模型遵循训练期间学到的统计模式,它们非常擅长将输出与你的输入提示进行模式匹配。如果你能帮助它们找到你想要的模式,效果会更好。
大型语言模型在遵循指令时遵循一个层级结构:
- 系统指令权重最高
- 开发者指令次之
- 用户输入最后
如何构建更好的提示
如果你需要特定的东西,比如你想构建一个内部工具,让你的团队能够使用普通英语查询数据库,那么在开始编写提示之前花时间研究。了解这个工具实际需要做什么。首先问自己这些棘手的问题:它是否需要处理多表连接?是否应该在运行查询之前验证它们?谁有访问权限?如何处理不返回任何内容的查询?你在开始之前对想要什么越清楚,告诉模型重做的时间就越少。
你不必是专家。大型语言模型可以帮助你进行研究。但在构建网站之前,请务必做好研究,并了解你希望大型语言模型构建什么。
强效提示的指令中包含以下内容:
清晰的指令:清楚自己想要什么并明确提出。“构建一个待办事项应用”给模型留下了太多的自由度。“构建一个待办事项应用,其中任务在我勾选后从屏幕上清除,并带有一个日历,以便我每天分配任务”可以细化输出。
上下文:向模型提供完成任务所需的必要信息。不必要的上下文会增加噪音,但太少则会导致通用输出。如果你正在为工程师构建一个后端工具,请告诉模型:“用户是一名从事分布式系统的高级后端工程师。”这一句话就能改变语气、词汇和假定知识。
约束:如果没有约束,模型会自行填补空白。这会扩大可能的输出范围。强有力的约束能使输出可能性与你的期望保持一致。
输出格式:如果你正在编写代码,这一点很重要。如果你不指定格式,就无法可靠地解析输出。即使模型在90%的时间内返回看起来合理的内容,剩下的10%也将在最糟糕的时候破坏你的管道。请指定你期望的结构:
Return output as JSON:
{
"summary": string[],
"key_terms": string[]
}
每位开发者都应该知道的提示模式
我们不需要每次从大型语言模型那里获取一些东西时都重新发明轮子。
少样本提示为模型提供一个小型数据集。该数据集包含你正在寻找的输出、结构、语气和风格等方面的精确内容。如果你发现自己正在编写关于输出期望的冗长细节,你可能希望将其替换为少样本提示。
Input: API latency increased due to network congestion
Output: ["latency issue", "network bottleneck"]
Input: Database queries timing out
Output: ["query performance", "db timeout"]
思维链提示在你确定自己需要什么时非常有用。这些提示要求模型在回答之前逐步推理。是的,这可以提高需要判断力的任务的质量。另一个好处是它允许你与大型语言模型作为思考伙伴一起工作。
角色提示在你为特定受众构建内容时可以改进模型的输出。你为初学者构建的东西会与为专家构建的不同。通过包含“你是一名主要处理Snowflake数据并专注于产品分析的数据分析师”来设置领域上下文。这将影响词汇、假定知识和可能的权衡。
工具增强提示通过让模型访问你的工具,将其变成真实信息的来源。工具增强提示将帮助你获得特定问题的答案,例如“上次构建的部署管道返回了什么?”,只要你也提供一个查询你系统的函数,例如 get_ci_build_status(pipeline_id: str) -> BuildResult 以供调用。
专业提示
因为学习如何做某事会使它看起来比实际操作更容易。
- 评估也很重要。除非你进行衡量,否则你不会知道一个提示是否有效。
- 验证。验证输入。验证输出。制定一个当模型返回意外内容时的处理计划。
结论
总结这篇文章最好的方式是看看一个好的提示和一个模糊的提示之间的区别。
模糊提示:
Explain this error.
好提示:
You are a senior backend engineer debugging a distributed system.
Given the following error log, identify the root cause.
Constraints:
- Focus on system-level causes only
- Do not suggest fixes, only diagnose
- Be specific about which service or component is likely failing
Return JSON:
{
"root_cause": string,
"affected_component": string,
"confidence": "high" | "medium" | "low"
}