首页 › LLM大语言模型 › 大模型技术工程 › 提示词工程精通指南 › 第二章:提示词工程实战(10个高效的Prompt技巧)

第二章:提示词工程实战(10个高效的Prompt技巧)

​

⚙️

提示词工程(Prompt Engineering)是与大语言模型(LLM)高效交互的核心技能。随着ChatGPT、Claude、GPT-4等AI模型的普及,掌握提示词设计已成为开发者、产品经理和内容创作者的必备能力。本文将系统讲解提示词工程的核心原理、主流技术和实战最佳实践。​

​

核心要点​

•

提示词工程:通过设计优化的输入文本,引导LLM生成高质量、准确的输出​

•

Zero-shot:无需示例,直接描述任务让模型完成​

•

Few-shot:提供少量示例,帮助模型理解任务模式​

•

Chain-of-Thought:引导模型逐步推理,提升复杂问题解决能力​

•

ReAct:结合推理与行动,实现工具调用和多步骤任务​

•

结构化提示词:使用角色、任务、格式、约束等元素构建高效提示词​

​

飞书文档 - 图片

​

​

​

什么是提示词工程​

提示词工程是设计和优化输入文本(Prompt)的过程,目的是引导大语言模型生成期望的输出。它不仅仅是"问问题",而是一门结合语言学、认知科学和AI技术的实践艺术。​

为什么提示词工程重要​

​

#nSLFkvaRrxkB text { white-space: pre; }#nSLFkvaRrxkB .fb0 { stroke: var(--N900-FG, 0.15); }#nSLFkvaRrxkB .fb0 {stroke: rgba(31,35,41, 0.15)}#nSLFkvaRrxkB .fx0 { stroke-miterlimit: 10; }#nSLFkvaRrxkB .fx0 {stroke-miterlimit: 10}#nSLFkvaRrxkB .fa1 { fill: rgb(187, 191, 196); }#nSLFkvaRrxkB .fa1 {fill: rgb(187, 191, 196)}#nSLFkvaRrxkB .fx1 { font: 400 12px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#nSLFkvaRrxkB .fx1 {font-style: normal}#nSLFkvaRrxkB .fx2 { text-anchor: middle; }#nSLFkvaRrxkB .fx2 {text-anchor: middle}#nSLFkvaRrxkB .fx3 { dominant-baseline: central; }#nSLFkvaRrxkB .fx3 {dominant-baseline: central}#nSLFkvaRrxkB .fx4 { stroke: none; }#nSLFkvaRrxkB .fx4 {stroke: none}#nSLFkvaRrxkB .fc0 { fill: var(--text-caption); }#nSLFkvaRrxkB .fc0 {fill: #646a73}#nSLFkvaRrxkB .fa2 { fill: var(--text-link-disabled); }#nSLFkvaRrxkB .fa2 {fill: rgb(187, 191, 196)}#nSLFkvaRrxkB .fa3 { fill: rgb(31, 35, 41); }#nSLFkvaRrxkB .fa3 {fill: rgb(31, 35, 41)}#nSLFkvaRrxkB .fx5 { font: 400 16px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#nSLFkvaRrxkB .fx5 {font-style: normal}#nSLFkvaRrxkB .fx6 { text-anchor: start; }#nSLFkvaRrxkB .fx6 {text-anchor: start}#nSLFkvaRrxkB .fx7 { dominant-baseline: alphabetic; }#nSLFkvaRrxkB .fx7 {dominant-baseline: alphabetic}#nSLFkvaRrxkB .fc1 { fill: rgb(255, 255, 255); }#nSLFkvaRrxkB .fc1 {fill: rgb(255, 255, 255)}#nSLFkvaRrxkB .fx8 { font: 700 16px MonospacedNumber, LarkHackSafariFont, LarkEmojiFont, LarkChineseQuote, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Tahoma, "PingFang SC", "Microsoft Yahei", Arial, "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; }#nSLFkvaRrxkB .fx8 {font-style: normal}#nSLFkvaRrxkB .fc2 { fill: rgb(51, 51, 51); }#nSLFkvaRrxkB .fc2 {fill: rgb(51, 51, 51)}#nSLFkvaRrxkB .fb1 { fill: var(--N900-FG, 0.15); }#nSLFkvaRrxkB .fb1 {fill: rgba(31,35,41, 0.15)}#nSLFkvaRrxkB .fb2 { fill: rgb(225, 228, 232); }#nSLFkvaRrxkB .fb2 {fill: rgb(225, 228, 232)}#nSLFkvaRrxkB .fa4 { fill: var(--bg-body); }#nSLFkvaRrxkB .fa4 {fill: #fff}ABC12345维度差的提示词好的提示词准确性效率成本可控性模糊、偏离主题需要多次迭代Token消耗高输出格式不稳定精准、切中要点一次获得满意结果优化Token使用格式一致可预测

​

提示词的基本组成​

​

代码块​

Plain Text

​

​

​

主流提示词技术详解​

Zero-shot Prompting​

Zero-shot是最基础的提示词技术,直接描述任务,不提供任何示例。适用于简单、明确的任务。​

示例:​

​

代码块​

Plain Text

将以下英文翻译成中文:​

"The quick brown fox jumps over the lazy dog."​

​

适用场景:​

•

简单的分类任务​

•

直接的翻译需求​

•

基础的文本生成​

优点: 简洁高效,Token消耗低 缺点: 复杂任务效果不稳定​

Few-shot Prompting​

Few-shot通过提供少量示例(通常2-5个),帮助模型理解任务模式和期望的输出格式。​

示例:​

​

代码块​

Plain Text

请根据示例进行情感分类:​

​

示例1:​

文本:"这家餐厅的服务太棒了!"​

情感:正面​

​

示例2:​

文本:"等了一个小时才上菜,体验很差。"​

情感:负面​

​

示例3:​

文本:"价格还行,味道一般。"​

情感:中性​

​

现在请分类:​

​

Few-shot最佳实践:​

Chain-of-Thought (CoT)​

思维链提示词引导模型展示推理过程,显著提升数学、逻辑和复杂问题的解决能力。​

基础CoT示例:​

​

代码块​

Plain Text

问题:一个书店有3个书架,每个书架有4层,每层可以放25本书。​

书店目前已经放了210本书,还能再放多少本?​

​

让我们一步步思考:​

1. 首先计算总容量:3个书架 × 4层 × 25本 = 300本​

2. 然后计算剩余空间:300本 - 210本 = 90本​

​

答案:还能再放90本书。​

​

Zero-shot CoT(魔法提示词):​

只需在问题后添加"让我们一步步思考"(Let's think step by step),即可激活模型的推理能力:​

​

代码块​

Plain Text

问题:如果一辆车以60km/h的速度行驶,需要多长时间才能行驶150公里?​

​

让我们一步步思考:​

​

ReAct框架​

ReAct(Reasoning + Acting)结合推理和行动,让模型能够使用工具、搜索信息并执行多步骤任务。​

ReAct模式:​

​

代码块​

Plain Text

问题:北京今天的天气如何?适合户外运动吗?​

​

​

Self-Consistency​

自洽性方法通过多次采样并选择最一致的答案,提高输出的可靠性。​

​

代码块​

Python

responses = []​

for i in range(5):​

response = llm.generate(prompt, temperature=0.7)​

​

​

​

提示词结构化设计​

CRISPE框架​

​

表格加载中...

​

完整示例:​

​

代码块​

Plain Text

## 角色​

你是一位有10年经验的全栈工程师,担任代码审查专家。​

​

## 背景​

我们的项目使用React 18 + Node.js 20技术栈,遵循Airbnb代码规范。​

​

## 任务​

请审查以下Pull Request代码,识别潜在问题。​

​

## 要求​

- 以专业但友好的语气​

- 按严重程度(高/中/低)分类问题​

- 提供具体的修改建议​

​

## 代码​

```javascript​

// 待审查的代码​

​

​

​

输出格式​

🔴 高优先级问题​

🔘 中优先级问题​

🔵 低优先级建议​

​

代码块​

Plain Text

​

### 负面提示词技巧​

​

明确告诉模型"不要做什么",可以有效避免常见错误:​

​

请撰写一篇关于机器学习的技术博客。​

要求:​

•

面向初学者​

•

包含实际代码示例​

•

长度约1000字​

请不要:​

•

使用过于专业的术语而不解释​

•

只讲理论不给实例​

•

使用过时的库版本​

​

代码块​

Plain Text

​

## 场景优化策略​

​

### 代码生成场景​

​

任务​

实现一个Python函数,用于验证邮箱地址格式。​

技术要求​

•

Python 3.10+​

•

使用正则表达式​

•

包含类型注解​

•

添加docstring​

测试用例​

•

有效: "user@example.com", "test.name@domain.co.uk"​

•

无效: "invalid", "@nodomain.com", "spaces in@email.com"​

输出​

只输出代码,不需要解释。​

​

代码块​

Plain Text

​

### 数据分析场景​

​

角色​

你是一位数据分析师。​

数据​

​

​

任务​

分析销售趋势​

计算用户平均贡献值​

预测下月销售额​

输出格式​

使用Markdown表格和要点列表。​

​

代码块​

Plain Text

​

### 文案创作场景​

​

产品​

智能手表 - FitPro X1​

目标受众​

25-35岁,注重健康的都市白领​

任务​

撰写一条朋友圈推广文案​

要求​

•

突出健康监测功能​

•

语气轻松活泼​

•

包含行动号召​

•

长度:50-80字​

•

可以使用emoji​

禁止​

•

夸大宣传​

•

使用"最好"、"第一"等绝对词汇​

​

代码块​

Plain Text

​

## 实战代码示例​

​

### Python调用OpenAI API​

​

```python​

from openai import OpenAI​

​

client = OpenAI()​

​

def structured_prompt(role, task, context, format_spec):​

"""构建结构化提示词"""​

prompt = f"""## 角色​

{role}​

​

## 任务​

{task}​

​

Few-shot模板生成器​

​

代码块​

Python

def create_few_shot_prompt(task_description, examples, query):​

"""创建Few-shot提示词"""​

prompt = f"{task_description}\n\n"for i, (input_text, output_text) in enumerate(examples, 1):​

​

​

​

常见问题解答​

提示词越长越好吗?​

不一定。提示词应该足够详细以明确任务,但过长会增加Token成本和处理时间。关键是精准而非冗长。建议先用简洁提示词测试,根据输出质量逐步优化。​

​

如何处理模型"幻觉"问题?​

几种有效策略:​

•

要求模型引用来源​

•

使用"如果不确定,请说明"的约束​

•

提供参考资料作为上下文​

•

使用Self-Consistency多次验证​

​

Few-shot示例应该放在提示词的什么位置?​

研究表明,将最相关的示例放在最后(靠近实际问题)效果最好。这是因为LLM对最近的上下文有更强的注意力。​

​

不同模型需要不同的提示词吗?​

是的,不同模型有不同的特性:​

•

GPT-4:理解能力强,可使用复杂提示词​

•

Claude:擅长长文本,适合详细指令​

•

开源模型:可能需要更明确、简单的指令​

​

如何评估提示词的效果?​

建立评估体系:​

•

准确性:输出是否正确​

•

相关性:是否切题​

•

格式:是否符合要求​

•

一致性:多次运行结果是否稳定​

​

​

总结与资源​

提示词工程是一门需要不断实践和迭代的技能。掌握核心技术后,关键是在实际场景中持续优化。​

​

​

关键技术回顾​

​

​

最佳实践清单​

✅ 明确定义角色和任务​

✅ 提供足够的上下文信息​

✅ 指定期望的输出格式​

✅ 使用负面提示词避免常见错误​

✅ 复杂任务使用思维链​

✅ 持续测试和迭代优化​

​