跳到主要内容

Prompt 提示词

Prompt(提示词)是与 AI 沟通的关键,好的 Prompt 可以让 AI 产出更好的结果。本文将详细介绍 Prompt 的概念、设计原则、编写技巧、优化方法、常见误区以及高级技巧。

通过掌握 Prompt 设计技巧,您可以大幅提升与 OpenCode 等 AI 工具的交互效果,获得更满意的结果。

什么是 Prompt

Prompt 是提供给 LLM 的输入文本,用于引导模型生成特定的输出。

Prompt 的作用

  • 明确意图:告诉模型你想要什么
  • 提供上下文:给模型相关的背景信息
  • 引导输出:影响模型输出的风格和内容
  • 控制行为:约束模型的行为和输出格式

Prompt 的组成

角色设定(可选)
+ 上下文信息
+ 任务描述
+ 输出格式要求
+ 约束条件

示例:

你是一个资深的前端工程师,精通 React 和 TypeScript。

我现在正在开发一个用户管理模块,使用 React + TypeScript。

请帮我创建一个用户列表组件,要求支持分页和搜索功能。

代码需要包含完整的 TypeScript 类型定义,并使用 Tailwind CSS 样式。

Prompt 设计原则

1. 清晰明确

原则:避免模糊的描述

不清晰:

帮我优化一下代码

清晰:

请帮我优化这个 React 组件的性能,目标是减少不必要的重新渲染,提升列表渲染速度。这是当前的组件代码:

2. 提供上下文

原则:提供相关的背景信息

缺少上下文:

如何实现登录功能?

有上下文:

我正在开发一个电商网站,技术栈是 Next.js + Prisma + PostgreSQL。数据库中已有 User 表,包含 id、email、passwordHash、createdAt 字段。请问如何实现安全的用户登录功能?需要包括密码验证和 JWT 生成。

3. 明确输出格式

原则:说明期望的输出格式

不明确:

解释一下 TypeScript 的泛型

明确:

请解释 TypeScript 的泛型,按照以下格式输出:

1. 定义
2. 语法说明
3. 代码示例(至少3个)
4. 使用场景
5. 注意事项
6. 与其他特性的对比

4. 提供示例

原则:通过示例说明需求

无示例:

帮我写一个验证邮箱格式的函数

有示例:

帮我写一个验证邮箱格式的 JavaScript 函数。

期望的行为:
- 输入 "user@example.com" → 返回 true
- 输入 "user" → 返回 false
- 输入 "user@" → 返回 false
- 输入 "user@example" → 返回 false

要求使用正则表达式实现。

5. 逐步引导

原则:对于复杂任务,分步骤

一次性要求太多:

帮我创建一个完整的博客系统,包括用户认证、文章管理、评论功能、标签系统、搜索功能...

分步骤:

第 1 步:请帮我设计博客系统的数据库模型,包括用户、文章、评论、标签表。

第 2 步:基于这个模型,创建用户认证相关的 API。

第 3 步:然后创建文章管理的 CRUD API。

常见 Prompt 模式

模式 1:角色扮演

你是一个[角色],具有[能力/特点]。

请帮我[任务]。

示例:

你是一个有 10 年经验的 React 架构师,精通性能优化和最佳实践。

请帮我审查这个组件的代码,指出潜在的性能问题并提供优化建议。

模式 2:少样本学习(Few-Shot)

[示例 1]
输入:[输入]
输出:[期望输出]

[示例 2]
输入:[输入]
输出:[期望输出]

现在请处理:
输入:[新输入]
输出:

示例:

示例 1:
输入:convert temperature from Celsius to Fahrenheit: 0
输出:32

示例 2:
输入:convert temperature from Celsius to Fahrenheit: 100
输出:212

现在请处理:
输入:convert temperature from Celsius to Fahrenheit: 25
输出:

模式 3:思维链(Chain-of-Thought)

请按照以下步骤思考和回答:

1. 理解问题
2. 分析关键信息
3. 逐步推理
4. 得出结论
5. 验证结果

问题:[你的问题]

示例:

请按照以下步骤思考和回答:

1. 理解问题
2. 分析关键信息
3. 逐步推理
4. 得出结论
5. 验证结果

问题:一个班有 30 个学生,其中 20 个男生,10 个女生。如果随机选择 3 个学生,至少有一个女生的概率是多少?

模式 4:约束条件

请[任务],要求:

1. [约束 1]
2. [约束 2]
3. [约束 3]

不要:
- [禁止 1]
- [禁止 2]

示例:

请帮我写一个 Python 脚本处理 CSV 文件,要求:

1. 使用 csv 模块
2. 处理大文件时使用生成器
3. 添加异常处理
4. 添加进度显示

不要:
- 使用 pandas
- 一次性读取整个文件到内存

模式 5:迭代优化

请帮我[任务]。

如果你有任何不清楚的地方,或者需要更多信息,请直接问我。

后续迭代:

这是第 2 版代码,基于你之前的反馈进行了优化。请继续[任务]。

高级技巧

1. 使用分隔符

用特殊符号分隔不同部分:

=== 任务描述 ===
帮我创建...

=== 上下文 ===
项目使用...

=== 约束条件 ===
必须满足...

=== 期望输出 ===
先说明思路,然后提供代码

2. 结构化指令

使用结构化语言:

请按照以下 JSON 格式返回结果:

{
"summary": "简短总结",
"steps": [
"步骤 1",
"步骤 2"
],
"code": "完整代码",
"notes": ["注意 1", "注意 2"]
}

3. 引导性提问

对于不确定的部分,让模型提问:

在开始之前,如果你对需求有任何疑问,请先提出来,我会补充说明。

4. 反向约束

明确说明不要做什么:

请生成这段代码的单元测试,但不要使用 pytest,使用 unittest。

针对 OpenCode 的 Prompt 技巧

1. 代码生成

你是一个资深的前端工程师。

技术栈:React 18 + TypeScript + Tailwind CSS

需求:创建一个用户资料卡片组件

具体要求:
1. 包含头像(圆形)、用户名、简介
2. 点击头像查看大图
3. 点击用户名跳转到用户详情页
4. 使用 TypeScript 定义 Props 类型
5. 响应式设计(移动端友好)

请按照以下格式输出:
1. 组件设计思路
2. 完整的 TypeScript 代码
3. 样式说明
4. 使用示例

2. 代码审查

你是一个资深代码审查专家。

请审查以下代码,重点关注:
1. 代码规范和风格
2. 潜在的性能问题
3. 安全性问题
4. 可维护性
5. 最佳实践

代码:
```typescript
// 你的代码

请以以下格式输出审查结果:

{
"overall_score": "分数",
"issues": [
{
"type": "问题类型",
"severity": "严重程度",
"description": "问题描述",
"line": "行号",
"suggestion": "改进建议"
}
],
"summary": "总结"
}

### 3. 调试

我遇到了一个错误,请帮我诊断和解决。

错误信息:

完整的错误堆栈

相关代码:

相关的代码片段

环境信息:

  • Node.js 版本:v18.16.0
  • 操作系统:macOS 14.0
  • 包管理器:npm

请按照以下步骤分析:

  1. 分析错误原因
  2. 提供可能的解决方案(至少 2 种)
  3. 说明如何预防类似错误

### 4. 学习解释

请用通俗易懂的语言解释 [复杂概念]。

要求:

  1. 使用生活化的比喻
  2. 分步骤说明原理
  3. 提供实际应用场景
  4. 与其他相关概念对比

目标读者:刚入门 [相关技术] 的开发者


## Prompt 优化

### 1. 迭代优化

如果第一次效果不理想,继续优化:

第 1 版:你的 Prompt 观察效果,发现问题 第 2 版:根据反馈优化 ... 第 N 版:达到满意效果


### 2. A/B 测试

对比不同的 Prompt 效果:

版本 A:... 版本 B:...

对比标准:

  • 输出质量
  • 准确性
  • 完整性
  • 符合预期程度

### 3. 收集模板

建立自己的 Prompt 模板库:

代码生成模板

你是一个[角色],精通[技术]。 技术栈:[技术列表] 需求:[具体需求] 输出格式:[格式]

代码审查模板

请审查以下代码,关注[审查重点]...


### 4. 参考最佳实践

学习优秀的 Prompt:

- 查看 OpenCode 官方文档中的示例
- 学习其他人的 Prompt
- 参考社区讨论

## 常见问题

### Q1: 为什么我的 Prompt 效果不好?

**A:** 常见原因和解决方法:

- **不清晰**:明确需求和约束
- **缺少上下文**:提供相关信息
- **太复杂**:分步骤或使用示例
- **缺少示例**:通过示例说明

### Q2: 如何控制输出长度?

**A:** 控制长度的方法:

- **明确要求**:"简要回答,不超过 100 字"
- **分段输出**:"分 3 部分输出"
- **使用结构化格式**:JSON 格式更容易控制
- **设置 max_tokens**:在 API 调用时限制

### Q3: 如何减少模型的幻觉?

**A:** 减少幻觉的方法:

- **提供准确上下文**:给模型正确的参考信息
- **要求验证**:"不确定时请说明"
- **使用 RAG**:从可靠来源检索信息
- **明确约束**:"不要编造信息"

### Q4: Prompt 应该多长?

**A:** 长度建议:

- **简单任务**:50-100 词
- **中等任务**:200-500 词
- **复杂任务**:500-1000 词

关键是包含必要的信息,避免冗余。

## 最佳实践

### 1. 模块化设计

将复杂 Prompt 分解为模块:

模块 1:角色设定

你是一个...

模块 2:上下文

项目背景...

模块 3:任务

具体需求...

模块 4:输出要求

按照格式...


### 2. 持续优化

将 Prompt 作为可优化的资源:

- 记录有效的 Prompt
- 分析失败的原因
- 持续改进模板

### 3. 测试验证

验证 Prompt 效果:

- 在不同场景测试
- 与其他 Prompt 对比
- 收集反馈意见

### 4. 文档化

文档化 Prompt:

- 说明设计意图
- 记录适用场景
- 标注使用限制

## 下一步

掌握 Prompt 后,您可以:

1. **学习 RAG**:查看 [RAG](./rag)
2. **学习函数调用**:查看 [Function Calling](./function-calling)
3. **学习 Agent**:查看 [Agent](./agent)
4. **学习最佳实践**:查看 [最佳实践](../04-best-practices/prompt-tips)

---

**🎉 现在你已经掌握了 Prompt 设计技巧!**

开始优化你的 Prompt 吧!🚀