快速工程已成为开发人员使用大型语言模型构建应用程序的一项基本技能。随着法学硕士更深入地融入软件产品,有效的即时设计直接影响输出质量、可靠性和成本。本文提供了实用的、以开发人员为中心的指南,以促进在生产中发挥作用的工程技术。
提示结构基础知识
结构良好的提示遵循一致的架构:系统消息(行为和角色)、上下文(背景信息)、任务描述(模型应该做什么)、示例(少量演示)、输入(实际数据)和输出格式(预期响应结构)。
SYSTEM: You are a code review assistant with expertise in TypeScript.
CONTEXT: The codebase uses React with Zustand for state management.
TASK: Review the following pull request for performance issues.
EXAMPLES:
Input: [example diff]
Output: [issue, severity, suggestion]
INPUT: [PR diff here]
OUTPUT FORMAT: List each issue with severity (high/medium/low) and a fix suggestion.
清晰度和特异性至关重要。详细的指令为模型提供了更多的“思考标记”,从而产生更高质量的结果。
少样本学习
Few-shot 提示在提示中提供输入输出示例来指导模型的行为:
Classify customer feedback:
Positive: "Love this product, works perfectly!" → positive
Negative: "Completely broken, waste of money." → negative
Neutral: "It arrived on Tuesday as expected." → neutral
"The interface is intuitive but the loading time is slow." → ?
最佳实践包括提供 3-5 个涵盖边缘情况的不同示例,将最相似的示例放在最后(新近度偏差),以及将示例与实际输入清楚地分开。
思维链推理
思维链 (CoT) 提示鼓励在得出最终答案之前进行逐步推理。该技术显着提高了涉及数学、逻辑或多步骤分析的复杂任务的准确性:
Problem: A train travels at 60 km/h for 2 hours, then at 80 km/h for 1.5 hours. What is the total distance traveled?
Let's solve step by step:
1. Distance = speed × time
2. First segment: 60 × 2 = 120 km
3. Second segment: 80 × 1.5 = 120 km
4. Total distance: 120 + 120 = 240 km
Answer: 240 km
变体包括零样本 CoT(“让我们一步一步思考”)、带有编号步骤的结构化 CoT、思想树(并行探索多个推理路径)和自洽(多个 CoT 运行并进行多数投票)。
温度和 Top-P 调节
采样参数控制模型的创造性和确定性:
| 任务 | 温度 | 顶P |
|---|---|---|
| 代码生成 | 0.1 - 0.3 | 0.1 - 0.3 |
| 分类 | 0.0 - 0.2 | 0.1 - 0.2 |
| 创意写作 | 0.7 - 0.9 | 0.7 - 0.9 0.8 - 0.9 |
| 翻译 | 0.2 - 0.4 | 0.2 - 0.4 0.3 - 0.5 |
| 数据提取 | 0.0 - 0.1 | 0.0 - 0.1 0.1 - 0.2 |
较低的温度 (0.1-0.3) 会产生适合编码和分类的确定性事实输出。较高的温度 (0.7-1.0) 可以促进写作和头脑风暴的创意生成。一次调整一个参数 - 使用温度来提高整体创造力,使用 Top-P 来提高词汇多样性。
系统消息
系统消息定义整个对话的模型行为。有效的系统消息是角色定义(“你是一名高级软件工程师”)、约束设置(“始终以有效的 JSON 进行响应”)、面向流程(“回答之前分析问题”)和边界定义(“如果不确定,说‘我不知道’”):
SYSTEM: You are a senior software engineer conducting code reviews.
Always respond in valid JSON with the schema: { "issues": [{ "severity": "high"|"medium"|"low", "description": "...", "suggestion": "..." }] }
If no issues are found, return { "issues": [] }.
函数调用
函数调用使模型能够请求结构化输出或触发外部工具。定义具有清晰描述和参数模式的函数:
{
"name": "search_documentation",
"description": "Search internal documentation for a given topic",
"parameters": {
"type": "object",
"properties": {
"query": { "type": "string", "description": "Search query" },
"max_results": { "type": "integer", "default": 5 }
},
"required": ["query"]
}
}
最佳实践包括编写清晰的函数描述、验证服务器端参数、优雅地处理函数故障以及为复杂的工作流程链接多个函数调用。
代币优化
成本和延迟与令牌数量直接相关。通过压缩提示(删除冗余短语)、截断输入以适合上下文窗口、将 max_tokens 设置为最小可行响应长度、将多个任务批处理到单个提示、缓存重复的系统消息以及为更简单的任务选择较小的模型来进行优化。
生产模式
生产部署需要具有指数退避的重试逻辑以实现速率限制、响应验证以验证 JSON 结构和内容、流式传输以获得更好的用户体验、提示和响应日志记录以实现可观察性、提示变体的 A/B 测试、内容安全的护栏以及用于跟踪提示更改和代码的版本控制。
async function withRetry(fn, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try { return await fn(); }
catch (err) {
if (i === maxRetries - 1) throw err;
await new Promise(r => setTimeout(r, 1000 * 2 ** i));
}
}
}
结论
快速工程是一门系统学科,而不是一门艺术。结构化提示设计、适当的参数调整和生产最佳实践使开发人员能够构建可靠、经济高效的 LLM 支持的功能。该领域发展迅速,但基本原理——清晰的说明、适当的背景、正确的例子和严格的评估——保持不变。

