简介

提示不仅仅是你在聊天框中输入的问题。它是向LLM告知要做什么、如何做以及以何种格式回应的唯一指令来源。与传统代码不同,编译器遵循确定性规则,LLM对你的提示的解释是概率性的——也就是说输出质量在很大程度上取决于你如何清晰表达意图。

清晰度与特异性

模糊的提示会带来模糊的结果。比如“写点关于Web应用程序的东西”这样的请求会给模型太多自由度,导致输出泛泛而且缺乏聚焦。具体的提示能够约束模型,减少歧义。

python
prompt_vague = "Tell me about web apps"
prompt_specific = "List the top 3 security risks of a Node.js REST API that uses JWT authentication, each with a one-sentence mitigation."

第二个提示之所以有效,是因为它定义了领域(Node.js REST API)、聚焦主题(带JWT的安全风险)、指定数量(前3名),并要求结构化输出(每条为一句话的缓解措施)。消除歧义就等于减少模型的猜测。

结构与角色分配

LLMs对结构化提示反应良好,这些提示分配角色、定义任务并设定约束。一个常见的模式是:Role — Task — Context — Constraints — Output Format。将这些层次按顺序叠放,通常比单一句子更易获得可预测的输出。

javascript
const structuredPrompt = `
Role: You are a senior backend engineer reviewing code.
Task: Review the following Express.js route handler for bugs.
Context: This endpoint handles payment webhooks from Stripe.
Constraints: Focus only on error handling and idempotency. Do not suggest new dependencies.
Output Format: Return a numbered list of issues, each with a code fix.
`;

角色设定使模型具备特定视角。约束筛选掉不需要的建议。输出格式塑造回答的结构,便于你以编程方式解析——这在代理工作流中尤其重要,因为AI的输出将进入下一步。

流程图展示角色-任务-上下文-约束-格式提示词结构作为线性管道输入 LLM

LLMs 如何将指令与代码不同地解读

传统代码按自上而下的顺序执行,遵循严格的语法规则。一个 LLM 将整个提示作为自然语言的一个片段来读取,并预测最可能的后续内容。这意味着:词序很重要,提示中的示例会强烈影响输出风格,将关键指令放在冗长提示的末尾可能因为注意力漂移而“丢失”。

python
# Bad: key instruction buried in the middle of noise
prompt_bad = "You can be creative. Try different tones. Oh and by the way, respond only in valid JSON."
# Good: key instruction placed last where attention is strongest
prompt_good = "You can be creative. Try different tones. Respond only in valid JSON."

差异对人类而言微妙,但对模型而言却很显著。这也是为什么提示工程是一项技能——你需要学会预测模型如何对输入的每个部分进行加权。

实际示例:从随意到生产就绪

设想你正在构建一个 AI 代理,生成用于 React 表单库的表单验证规则。

typescript
const casualPrompt = "Write validation for a login form.";
const productionPrompt = `
Task: Generate Yup validation schemas for a React login form.
Fields: email (required, valid format), password (required, min 8 chars, must contain 1 number).
Output: Return a single JavaScript code block exporting the schema object. No explanations.
`;

随意提示可能返回散乱的段落、示例 HTML,或半成的模式。生产就绪的提示将返回一个完全可解析的代码块,你可以直接输入到你的构建流程中。

常见错误

初学者提示中反复出现三大错误。第一,在一个提示中混合多项无关任务——将它们拆分,否则模型会优先处理其中一项而忽略其他项。第二,省略输出格式——没有输出格式,模型会选择一种格式,你可能无法解析结果。第三,假设模型在长会话中完美记住早期对话上下文——在每个新提示中重新阐明关键约束。

摘要

有效的提示应清晰、具体、结构化。它们分配角色、陈述任务、提供上下文、应用约束、并定义输出格式。理解 LLMs 如何以概率方式解读语言——而非确定性执行——是从传统编程到这一心理转变的关键。在下节课中,我们将把这些基础应用于构建多步代理工作流。

课后练习

课程检查点

巩固所学知识,获取作业反馈。

0/7
01写出像“Tell me about web apps”这样的含糊提示的主要风险是什么?
02在 Role-Task-Context-Constraints-Format 结构中,"Constraints" 部分的用途是什么?
03为什么将关键指令放在较长提示的末尾会提高可靠性?
04下列哪一项是代码与大语言模型在处理指令方面的一个关键差异?
05在登录表单验证示例中,为什么指定“返回一个导出架构对象的单个 JavaScript 代码块。无需解释。”很重要?
06下列哪一个不是本课提到的三个常见初学者错误之一?
07当模型输出将散文与代码混合且程序性解析困难时,推荐的修复是什么?
已回答 · 0/7
课程1:提示工程基础