简介
提示不仅仅是你在聊天框中输入的问题。它是一条单一的指令来源,告诉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的输出会进入下一步。
LLMs 如何解读指令与代码的差异
传统代码是自上而下执行,遵循严格的语法规则。一个 LLM 将你的整个提示作为一段自然语言的文本来读取,并预测最有可能的后续文本。这意味着:词序很重要,提示中的示例会严重影响输出风格,将关键指令放在冗长提示的末尾可能会因为注意力漂移而“丢失”。
python
prompt_bad = "You can be creative. Try different tones. Oh and by the way, respond only in valid JSON."
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 如何以概率而非确定性地解读语言,是从传统编程转变的关键心态。下一课我们将把这些基础应用于构建多步代理工作流。
课程检查点