简介

提示不仅仅是你在聊天框中输入的问题。它是一条单一的指令来源,告诉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的输出会进入下一步。

展示 Role-Task-Context-Constraints-Format 提示结构的流程图,作为一个线性管道输入到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,或半成型的模式定义。生产就绪的提示将只返回一个可解析的代码块,你可以直接将其进入构建流程。

常见错误

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

要点摘要

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

课程检查点

1. 撰写模糊提示(如“Tell me about web apps”)的主要风险是什么?

2. 在 Role-Task-Context-Constraints-Format 结构中,"Constraints" 部分的作用是什么?

3. 为什么把关键指令放在冗长提示的末尾会提高可靠性?

4. 以下哪项是代码与大型语言模型处理指令方式的关键差异?

5. 在登录表单校验示例中,为什么指定“返回一个只导出模式对象的单个 JavaScript 代码块。不要解释。”很重要?

6. 下列哪一个不是本课提到的三种常见初学者错误之一?

7. 当模型输出将散文与代码混合且难以程序化解析时,推荐的修复是什么?