Prompt 工程入门:问法决定质量
介绍 prompt 工程的核心原理,强调提问方式对 AI 输出的决定性影响,适合初学者。
介绍 prompt 工程的核心原理,强调提问方式对 AI 输出的决定性影响,适合初学者。
在这篇文章中,我将解释关于提示工程的一些重要要点,以及了解这些要点如何能在日常与 AI 打交道中大大帮助你,无论是在学习、研究、工作、vibeconding,还是其他方面。
首先,让我们回顾一下,LLM 究竟是什么?
知识基础对于学习任何东西都是必要的,对于 LLM 也不例外。通过分析模式、与朋友交流、观察,我发现绝大多数日常使用 LLM 的人——无论是工作、学习,还是从事技术工作的人,尤其是刚入门技术领域的人——都不清楚 LLM 如何运作,也不知道如何向 ChatGPT 之类的 AI 正确提问和解决疑惑。
考虑到这一点,以及我对这个主题的深入学习,我想分享这些知识。正如巴西诗人科拉·科拉莱纳(Cora Coralina)曾说过的:"将自己知道的东西传递给他人,并从教学中学习的人是幸福的",我将推出一系列文章来解释这个主题,这只是第一篇……
LLM 可以从多种方式定义。其中一种是:"它们是使用深度学习算法来处理和学习自然语言的机器学习模型",这是它的结构定义。我最喜欢的定义是:"在其本质上,LLM 由两个文件组成:一个包含学习到的知识(参数)的权重,另一个包含运行这些学习数据所需的代码"。作为一个视觉型的人,我能更好地想象它是如何工作的。
所以 ChatGPT、Claude 以及许多其他 AI 正是这样,目前它们有能力执行多种活动,比如编写代码、翻译文本、回答各种各样的问题,而且根据你写出更强大提示词的能力,它甚至可以创建产品架构、帮助你解决复杂的 bug、给你想法,甚至创建一个革命性的 SaaS(哈哈)。
关键是 LLM "理解"和"创造"的能力已经达到了一个相当先进的水平,而你只有通过正确地提问,才能够达到第 -17 层的优质答案!
注:第 -17 层指的是在 Minecraft 游戏中能找到黄金矿石的层级 ;)。
如何正确提问?为什么这很重要?让我们继续。
向 LLM 提出正确的问题是如此重要,以至于技术领域有一个专门的领域来研究这个问题:提示工程,定义为"规划、创建和测试提示词以在 LLM 中生成更好回答的经验科学"。知道如何提出正确的问题会将你提升到另一个水平,你能够获得最好的答案,这会给你带来很多好处,其中最主要的是生产力的提升。
但最终,如何正确提问?
LLM 很强大,但它猜不到你的意图。为了在你的问题中获得最好的结果,你需要专注于创建清晰的提示词、具有明确的细节,并在提供背景信息上保持丰富。这一切都涉及:
"可能性空间"
当你写一个非常模糊、含混的提示词时,模型会看到多条统计上有效的路径。这就像它站在一个十字路口,有 50 条道路,所有的路标都说"也许走这里",它会选择一条,但不一定是你需要的那条:最快、无堵车的路(真正正确的答案)。
"Create an API."
LLM "看到"的:多条路径,REST API?GraphQL?用什么语言?用于什么领域?需要认证吗?需要数据库吗?模型会选择训练数据中统计上最常见的路径(可能是一个通用的 Node.js REST API,使用 Express),这可能与你需要的完全无关。
不含歧义的提示词:
"Create a microservice in Node.js with Express and TypeScript to process payments via
Stripe. Endpoints: create payment, confirm webhook and check status. The payload has:
orderId(UUID), amount(number), currency(enum: BRL, USD) and customerId(string).
Use zod for validation, Prisma with PostgreSQL to persist transactions and winston
for logs. Return appropriate status codes such (201, 200, 400, 422, 500). Handle network
failures with automatic retry (max. 3 attempts)."
LLM "看到"的:几乎唯一的路径。每个细节都像一个限制条件,消除歧义:"Node.js with Express and TypeScript" 一次性定义了运行时、框架和语言。"通过 Stripe 处理支付"限制了 SDK 和领域。"3 个明确的端点 + 带有类型的 payload" 消除了对路由和 schema 的猜测。"Zod、Prisma、PostgreSQL、Winston" 锁定了技术栈,模型不会建议替代方案。"具体的状态码 + 最多重试 3 次的 retry 策略"定义了 HTTP 状态和有明确限制的策略。概率分布变得集中,模型实际上在生成的每个 token 时"几乎只有一个选项"。
LLM 有一个上下文窗口(context window),一次性能处理的 token(单词片段)的数量。这包括你的提示词和生成的响应。在这个窗口内,存在一个重要现象:并非所有 token 在处理时都获得相同的"注意力"。
自注意力机制(Transformer 架构的核心,不是一个立方体 haha,也是神经网络的架构,如果 LLM 是编程语言的话,这将是它的框架)定义了一切的结构,计算提示词中所有 token 之间的关系。存在的无关 token 越多,模型就需要在有用和无用信息之间"分散注意力"越多。
"Teach me Docker."
内部发生的情况:模型需要在数百个子主题之间决定:安装、基本概念、Dockerfile、docker-compose、volumes、编排,注意力分散,结果是对所有内容的肤浅概览。
"Explain the concept of multi-stage build in Docker for a full backend developer who already
uses Docker daily but has never optimized image sizes. Show a practical example with a
JavaScript application, comparing the Dockerfile without and with multi-stage build,
including the final size of each image."
内部发生的情况:注意力机制集中在一个非常特定的区域,即"Docker"、"multi-stage build"、"镜像优化"和"JavaScript"的交集。注意力权重被强烈地指向这些方向。
"应用程序状态"
LLM 本质上是无状态的,它在请求之间没有记忆。每个提示词都从零开始处理,它唯一拥有的"状态"是你在提示词中放入的内容。这意味着你不提供的任何背景信息对模型而言根本不存在。
在内部,背景信息像注意力机制中的一个权重系统那样工作。当你添加信息时,它们创建"锚点",影响所有后续 token 的概率分布,就像每一个背景信息片段都是一个磁铁,将答案拉向特定的方向。
"Review my code."
LLM 做的:在不知道编程语言、框架、开发者水平、代码目标、团队标准或预期的审查类型的情况下,它会做一些通用的评论:"添加错误处理"、"使用更具描述性的名称"、"考虑添加测试"。
"Review this Node.js endpoint with Express that handles file uploads to S3.
The team uses ESLint + Prettier, so ignore style. The team pattern is async/await with
try/catch and custom errors. Endpoint in production, receives 200 uploads/min.
Focus on: memory leaks, error handling and correct S3 SDK usage."
LLM 做的:提示词中的每条信息都像一个过滤器,消除噪音并集中审查:"Node.js with Express + upload to S3" 激活了关于流、缓冲区、multipart 和 AWS SDK 的特定知识。"ESLint + Prettier, ignore style" 消除了 linter 已经解决的可能的评论。"async/await with custom errors" 让模型跳过团队已经应用的建议,专注于它们的使用方式。"Production, 200 uploads/min" 改变了每个问题的权重,一个在 dev 中可以接受的未释放缓冲区在负载下变成了一个关键事件。"Focus on: memory leaks, errors, S3 SDK" 将审查限制在 3 个轴上,忽略数十个其他主题。
基于这一点,了解你正在使用的模型的局限性也会帮助你理解在问题和推断中你能走多远,所以选择你最好的 AI,训练它,提出你的问题,测试,尝试!;)
记住:LLM 不"思考",它计算概率!
就这样,我试图总结我认为有趣的每个要点,并在这第一阶段进行解释,但关于 LLM 提示工程还有很多要讨论的内容,比如更经典的提示工程技术(零样本提示、角色提示),更高级的技术(思维链 (CoT)、提示链),还有很多层次,我将尽力在接下来的文章中逐一分解。这只是我在几年后重新回到文章写作的第一篇。我希望亲爱的读者已经理解并学到了一些东西。感谢你阅读到这里。;)
我的 LinkedIn 我的 GitHub
有些评论可能仅对已登录的访问者可见。登录查看所有评论。
要了解更多信息,你可以考虑屏蔽此人和/或举报滥用行为。