引子
任何时代都会有技术的发展,历史课本里面讲述第一次工业革命,仅仅是一段文字就概括了一个时代的变迁。
在这两年,人工智能的发展,逐渐从历史的阅览者,成为了历史的见证者。
不知后人回看这段人工智能发展的历史时候,会不会将其命名为第x次工业革命。
最近,身边很多人从AI的嘲笑者,变成了AI的忠实粉丝。
过年回家,看见初中辍学的好友,也会用豆包P一下自拍。
父母的搜索引擎也由百度转换为了千问。
人工智能确实在逐步改变人的生活。
聊天框是人和AI对话的窗口,提示词(prompts)是命令,让AI能帮你办事的命令。
但如何才能更好地让AI为你办事,往往很多人都忽略了提示词的使用技巧。
AI Prompts:人工智能提示词基础
人工智能提示词(AI Prompts)是你向人工智能模型(如 OpenAI 的 ChatGPT、Anthropic 的 Claude、Google 的 Gemini)输入的文本,用于创建特定的结果或响应。
你可以出于多种原因使用人工智能提示,例如生成文本、创建图像、分析业务指标或摘要内容。
核心概念
提示词的本质
从技术角度而言,提示词是大语言模型(LLM)的上下文输入窗口。模型通过注意力机制(Attention Mechanism)对提示词进行编码,然后基于概率分布生成后续文本。这意味着:
- 提示词是模型的"思维起点":模型的所有输出都基于对提示词的理解
- 提示词决定了输出边界:好的提示词能够有效约束模型的生成范围
- 提示词承载着任务语义:模型通过提示词理解"要做什么"和"怎么做"
提示词工程(Prompt Engineering)
提示词工程是一门研究和优化如何向大语言模型输入提示词以获得最佳结果的学科。它涉及:
| 维度 | 说明 | 示例 |
|---|---|---|
| 指令设计 | 明确告诉模型要执行的任务 | "请将以下文本翻译成英文" |
| 上下文构建 | 提供背景信息帮助模型理解 | "作为一名资深前端工程师..." |
| 输出约束 | 指定输出的格式、长度、风格 | "以JSON格式输出,包含name和age字段" |
| 示例引导 | 通过示例展示期望的输出模式 | Few-shot Learning |
提示词的理论基础
理解以下概念有助于编写更有效的提示词:
1. 上下文学习(In-Context Learning)
大语言模型无需微调,仅通过提示词中的示例就能学习新任务。这包括:
- Zero-shot:不提供示例,直接让模型完成任务
- Few-shot:提供少量示例,引导模型理解任务模式
- Chain-of-Thought:引导模型展示推理过程,提高复杂任务的准确性
2. 温度参数(Temperature)
简单来说,temperature 的参数值越小,模型就会返回越确定的一个结果。
控制模型输出的随机性:
- 低温度(0.1-0.3):输出更确定、一致,适合代码生成
- 中温度(0.5-0.7):平衡创造性和一致性,适合一般对话
- 高温度(0.8-1.0):输出更多样、创意性强,适合创意写作
3. Token 限制
不同模型有不同的上下文窗口限制,编写提示词时需考虑:
- GPT-4 Turbo:128K tokens
- Claude 3 Opus:200K tokens
- Gemini 1.5 Pro:1M tokens
表达意图
无论你是要求解释还是分析,直接和清晰的语气可以帮助 AI 知道你想要什么。
可以指定格式(分段、摘要)和解释类型(简单、详细、针对特定知识水平)来定制每个响应。
意图表达的三个层次
层次一:模糊意图 → "帮我写个组件"
层次二:具体意图 → "帮我写一个React登录表单组件"
层次三:精确意图 → "使用TypeScript和React Hook Form编写一个登录表单组件,包含邮箱验证、密码强度检测,使用Tailwind CSS样式"
逻辑结构
任务复杂时,将它分解成步骤和阶段可以帮助AI返回最佳结果。
结构化提示词框架
一个完整的提示词通常包含以下要素:
[角色设定] 你是谁,具备什么专业背景
[任务描述] 需要完成什么任务
[上下文信息] 相关的背景资料、代码片段
[输出要求] 格式、长度、风格要求
[约束条件] 必须遵守的规则或限制
[示例参考] 期望输出的样例(可选)
焚诀:提示词心法
提示词使用一种特定的编写方式,以获得你所期待的AI输出,这是语言的艺术,更是与AI沟通的心法。
借用《斗破苍穹》中"焚诀"的概念——一种可以不断进化、吞噬异火从而变强的功法。
提示词的编写技巧同样如此:在实践中不断迭代、吸收新知识、逐步精进。
第一重:具体说明
在日常使用中,AI好像总是理解不了我的意思,回答的内容并不是我所期待的答案。
问题在于为 AI 工具写提示时过于模糊。从要实现的目标的简要概述开始,然后是任何特定的细节或限制。
对比示例
场景:了解一个概念
❌ 模糊提示:
什么是焚诀?
"焚诀"是网络小说《斗破苍穹》(作者:天蚕土豆)中虚构的一种极其特殊且强大的功法。
✅ 具体提示:
我希望你用通俗易懂的语言,解释我的博文中作为一级标题的"焚诀"是什么意思。
背景:这是一篇关于AI提示词编写技巧的技术博客。
你好!很高兴能为你解答。 在你的这篇关于"如何写好AI提示词(Prompts)"的博文中,你将"焚诀"作为一级标题,这其实是一个非常精彩且形象的比喻。 结合你博文的内容和《斗破苍穹》的原意,这里的"焚诀"指的不是小说里的武功,而是"驾驭人工智能的核心心法",也就是高阶的提示词编写技巧。 为了让你更直观地理解,我们可以从以下三个层面来解读这个比喻:
- 持续进化:焚诀可以通过吞噬异火不断进化,正如提示词技巧可以通过实践不断精进
- 核心心法:焚诀是修炼的根本,提示词是与AI沟通的根本
- 掌握难度:焚诀修炼艰难但威力巨大,提示词技巧同样需要刻意练习
具体说明的五个要素
| 要素 | 说明 | 示例 |
|---|---|---|
| Who | 目标受众是谁 | "面向初学者解释..." |
| What | 具体要做什么 | "编写一个防抖函数..." |
| When | 使用场景 | "在用户输入时触发..." |
| Where | 上下文环境 | "在React组件中使用..." |
| How | 期望的方式 | "使用TypeScript,添加详细注释..." |
第二重:角色设定
让AI扮演特定角色,可以显著提升输出的专业性和针对性。
角色设定的威力
❌ 无角色设定:
如何优化React应用性能?
✅ 有角色设定:
你是一位有10年经验的前端架构师,专注于React性能优化。
请从以下角度分析React应用性能优化方案:
1. 组件渲染优化
2. 状态管理优化
3. 打包体积优化
4. 运行时性能监控
每个角度请提供具体的实现方案和代码示例。
常用角色设定模板
你是一位【职位/身份】,拥有【年限】年的【领域】经验。
你的专长包括:【具体技能1】【具体技能2】【具体技能3】。
在回答问题时,请:【具体要求】。
第三重:示例引导
通过提供示例,让AI理解你期望的输出模式,这就是Few-shot Learning的应用。
Zero-shot vs Few-shot
Zero-shot(零样本):
将以下技术术语翻译成中文:
React Hooks
Few-shot(少样本):
将以下技术术语翻译成中文,参考示例:
Virtual DOM → 虚拟DOM
Single Page Application → 单页应用
Tree Shaking → 摇树优化
React Hooks → ?
Few-shot方式让模型理解了翻译的风格和术语习惯,输出更加准确。
代码生成中的示例引导
请按照以下代码风格编写一个日期格式化函数:
// 示例风格
/**
* 防抖函数
* @param fn 需要防抖的函数
* @param delay 延迟时间(毫秒)
* @returns 防抖后的函数
*/
export function debounce<T extends (...args: unknown[]) => unknown>(
fn: T,
delay: number
): (...args: Parameters<T>) => void {
let timer: ReturnType<typeof setTimeout> | null = null
return function (this: unknown, ...args: Parameters<T>) {
if (timer) clearTimeout(timer)
timer = setTimeout(() => fn.apply(this, args), delay)
}
}
请编写:日期格式化函数 formatDate
第四重:思维链(Chain-of-Thought)
对于复杂任务,引导AI展示推理过程,可以显著提高结果的准确性。
思维链的应用
❌ 直接提问:
判断以下代码的时间复杂度:
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
console.log(i, j)
}
}
✅ 思维链引导:
请一步步分析以下代码的时间复杂度,展示你的推理过程:
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
console.log(i, j)
}
}
请按以下格式分析:
1. 外层循环分析
2. 内层循环分析
3. 综合分析
4. 最终结论
思维链提示词模板
请逐步思考以下问题:
[问题描述]
要求:
1. 先分析问题的关键点
2. 列出可能的解决方案
3. 评估每个方案的优缺点
4. 给出最终建议和理由
第五重:迭代优化
焚诀的精髓在于不断进化。提示词同样需要根据输出结果进行迭代优化。
迭代优化流程
初始提示词 → 获得输出 → 分析不足 → 优化提示词 → 再次尝试 → ...
迭代优化示例
第一轮:
写一个React按钮组件
输出:基础按钮,功能简单
第二轮:
写一个React按钮组件,支持以下功能:
- 多种类型(primary、secondary、danger)
- 不同尺寸(small、medium、large)
- 禁用状态
- 加载状态
输出:功能更完善,但样式可能不符合项目规范
第三轮:
使用TypeScript编写一个React按钮组件,要求:
- 使用我们项目的Tailwind CSS配置
- 支持类型:primary(蓝色)、secondary(灰色)、danger(红色)
- 支持尺寸:sm、md、lg
- 支持disabled和loading状态
- 添加完整的类型定义和JSDoc注释
- 参考我们现有的组件风格(见下方示例代码)
前端实战:提示词应用场景
场景一:代码生成与补全
生成工具函数
你是一位专注于代码质量的前端工程师。
请编写一个深拷贝函数,要求:
1. 使用TypeScript编写
2. 支持对象、数组、Date、RegExp、Map、Set等类型
3. 处理循环引用
4. 添加完整的类型定义和JSDoc注释
5. 包含单元测试用例
参考代码风格:
export function shallowClone<T>(obj: T): T {
if (obj === null || typeof obj !== 'object') {
return obj
}
return Array.isArray(obj) ? [...obj] : { ...obj }
}
生成React组件
你是一位React专家,熟悉现代React开发实践。
请编写一个用户头像组件 Avatar,要求:
1. 使用TypeScript和React.forwardRef
2. 支持图片URL、文字头像、默认头像三种模式
3. 支持不同尺寸(xs: 24px, sm: 32px, md: 40px, lg: 48px, xl: 64px)
4. 支持加载状态和错误状态
5. 图片加载失败时显示文字头像或默认头像
6. 使用Tailwind CSS
7. 7. 添加完整的Props类型定义
组件接口:
interface AvatarProps {
src?: string
alt?: string
name?: string // 用于生成文字头像
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'
className?: string
}
场景二:代码审查与优化
代码审查提示词
你是一位资深前端架构师,专注于代码质量和最佳实践。
请审查以下React代码,从以下维度进行分析:
1. **性能问题**:是否存在不必要的重渲染?内存泄漏风险?
2. **代码规范**:是否符合React最佳实践?TypeScript类型是否完善?
3. **安全性**:是否存在XSS风险?敏感信息处理是否得当?
4. **可维护性**:代码结构是否清晰?是否易于扩展?
5. **可访问性**:是否符合WCAG标准?
请按以下格式输出:
- 问题等级(严重/中等/建议)
- 问题描述
- 代码位置
- 修复建议
- 修复后的代码示例
代码:
[粘贴你的代码]
性能优化提示词
你是一位前端性能优化专家。
请分析以下React组件的性能问题,并提供优化方案:
[粘贴组件代码]
分析要点:
1. 组件渲染优化(React.memo、useMemo、useCallback)
2. 状态管理优化(是否需要状态提升或下沉)
3. 列表渲染优化(key的使用、虚拟列表)
4. 副作用优化(依赖数组是否正确)
5. 代码分割建议
请提供优化前后的性能对比分析。
场景三:调试与问题排查
Bug排查提示词
我遇到了一个前端Bug,请帮我分析可能的原因和解决方案。
**环境信息:**
- 框架:React 18.2
- 浏览器:Chrome 120
- 操作系统:macOS Sonoma
**问题描述:**
组件在开发环境正常,生产环境报错"Cannot read property 'map' of undefined"
**相关代码:**
[粘贴代码]
**复现步骤:**
1. 打开页面
2. 点击筛选按钮
3. 切换筛选条件时出现错误
**已尝试的解决方案:**
- 检查数据是否为null
- 添加了可选链操作符
请分析:
1. 可能的根本原因
2. 为什么只在生产环境出现
3. 推荐的修复方案
场景四:技术方案设计
架构设计提示词
你是一位前端架构师,请帮我设计一个前端状态管理方案。
**项目背景:**
- 中大型电商平台前端
- 技术栈:React 18 + TypeScript + Vite
- 团队规模:15人
- 需要支持SSR
**业务场景:**
1. 用户认证状态(全局)
2. 购物车数据(全局,需要持久化)
3. 商品列表(分页、筛选、缓存)
4. 表单状态(局部)
5. 实时消息通知(WebSocket)
**约束条件:**
- 包体积敏感
- 需要支持时间旅行调试
- 需要良好的TypeScript支持
请提供:
1. 技术选型建议及理由
2. 状态分层设计
3. 目录结构建议
4. 核心代码示例
5. 最佳实践指南
场景五:文档与注释生成
API文档生成
请为以下TypeScript函数生成API文档:
[粘贴函数代码]
文档格式要求:
1. 函数概述(一句话描述功能)
2. 参数说明(名称、类型、是否必填、默认值、说明)
3. 返回值说明
4. 使用示例(包含正常用例和边界情况)
5. 注意事项
6. 相关函数链接
输出格式:Markdown
提示词构建方法论
CREATE框架
我总结了一套CREATE框架,帮助系统化构建高质量提示词:
| 字母 | 含义 | 说明 | 示例 |
|---|---|---|---|
| C | Context 上下文 | 提供背景信息 | "这是一个电商项目的购物车组件..." |
| R | Role 角色 | 设定AI角色 | "你是一位React性能优化专家..." |
| E | Explicit 明确 | 明确任务目标 | "请分析组件的重渲染问题..." |
| A | Audience 受众 | 指定目标读者 | "解释需要面向初级开发者..." |
| T | Template 模板 | 提供输出模板 | "请按以下格式输出:问题→原因→方案" |
| E | Examples 示例 | 提供参考示例 | "参考以下代码风格..." |
提示词模板库
通用代码生成模板
## 角色
你是一位专业的【语言/框架】开发者,拥有【年限】年经验。
## 任务
请编写一个【功能描述】。
## 要求
1. 使用【技术栈】
2. 遵循【编码规范】
3. 包含【功能点1】【功能点2】【功能点3】
4. 添加【注释/测试/文档】
## 约束
- 【约束条件1】
- 【约束条件2】
## 参考风格
【示例代码】
问题排查模板
## 环境
- 框架/库:【名称及版本】
- 浏览器:【名称及版本】
- 操作系统:【名称】
## 问题
【问题描述】
## 代码
【相关代码片段】
## 复现步骤
1. 【步骤1】
2. 【步骤2】
## 期望结果
【期望的行为】
## 实际结果
【实际的行为】
## 已尝试
【已尝试的解决方案】
请分析可能的原因并提供解决方案。
代码审查模板
请对以下代码进行专业审查:
【代码】
审查维度:
1. 功能正确性
2. 性能优化
3. 代码规范
4. 安全性
5. 可维护性
6. 可测试性
输出格式:
| 维度 | 评分(1-10) | 问题 | 建议 |
前沿研究与发展趋势
提示词工程前沿方向
1. 自动提示词优化(AutoPrompt)
研究者正在开发自动优化提示词的方法:
- 梯度引导优化:通过模型反馈自动调整提示词
- 进化算法:使用遗传算法进化最优提示词
- 强化学习:通过奖励信号学习最优提示策略
2. 多模态提示词
随着多模态模型的发展,提示词不再局限于文本:
- 图像+文本组合提示
- 语音输入提示
- 视频理解提示
3. 结构化提示词语言
类似编程语言的提示词描述语言正在涌现:
- Prompt Programming:将提示词视为程序
- 提示词模板引擎:变量替换、条件逻辑
- 提示词版本管理:Git式的提示词管理
4. 提示词安全与对抗
提示词安全成为重要研究方向:
- 提示词注入攻击:恶意输入劫持模型行为
- 越狱攻击:绕过模型安全限制
- 防御策略:输入过滤、输出验证
未来发展趋势
短期趋势(1-2年)
- IDE深度集成:提示词成为开发工具的标准功能
- 提示词市场:高质量提示词成为可交易资产
- 领域专用提示词:针对特定行业优化的提示词库
中期趋势(3-5年)
- 自然语言编程:提示词成为主要编程方式
- 提示词标准化:行业标准化的提示词规范
- AI辅助提示词:AI帮助优化提示词
长期趋势(5年+)
- 意图直接理解:AI直接理解人类意图,无需精确提示词
- 个性化提示词模型:针对个人习惯定制的AI助手
- 提示词工程师职业化:成为专业职业方向
结语:焚诀大成
焚诀修炼,始于基础,成于实践,精于迭代。
提示词的编写同样如此。从最初模糊的表达,到精准的指令;从简单的问答,到复杂的任务分解;从单次交互,到迭代优化——这是一条需要持续精进的道路。
记住以下几点:
- 清晰是第一要义:模糊的提示词只能得到模糊的结果
- 结构化思维:将复杂任务拆解为结构化步骤
- 迭代是常态:一次成功的提示词是多次迭代的结果
- 理解模型特性:不同模型需要不同的提示策略
- 实践出真知:多写、多试、多总结
焚诀有云:"异火不灭,焚诀永存。"
愿每一位与AI对话的开发者,都能修炼出属于自己的提示词心法,在人机协作的时代,游刃有余。
参考资料: