前言
Prompt工程是与大语言模型(LLM)交互的核心技能。一个好的Prompt可以让AI准确理解你的意图,输出高质量、结构化的结果。无论你是开发者、产品经理还是内容创作者,掌握Prompt工程都能大幅提升工作效率。
一、Prompt设计原则
1.1 清晰具体
模糊的指令会导致模糊的回答。好的Prompt应该明确说明你想要什么、不想要什么。
# 差的Prompt - 太模糊
帮我写一篇文章
# 好的Prompt - 清晰具体
请写一篇1500字的技术博客文章,主题是"Docker容器化部署最佳实践"。
要求:
1. 面向有一定Linux基础的中级开发者
2. 包含至少5个实战技巧,每个技巧附带代码示例
3. 使用中文,语气专业但易懂
4. 结构:引言(100字) + 正文(5个小节) + 总结(100字)
5. 不要使用过时的Docker版本(如1.x)
1.2 结构化指令
使用Markdown格式组织Prompt,让AI更容易理解你的需求层次:
## 角色
你是一个资深的DevOps工程师,精通Docker、Kubernetes和CI/CD。
## 任务
为以下项目编写部署文档:
- 项目类型:Python FastAPI应用
- 部署环境:Ubuntu 22.04 + Docker + Nginx
- 目标读者:初级运维工程师
## 输出格式
### 1. 环境准备
列出所有需要安装的软件和配置
### 2. Docker配置
提供完整的Dockerfile和docker-compose.yml
### 3. Nginx配置
提供反向代理和SSL配置
### 4. 部署步骤
给出可直接执行的部署命令
### 5. 常见问题
列出5个常见问题及解决方案
## 约束
- 所有命令必须在Ubuntu 22.04上测试过
- 使用最新的稳定版本
- 代码示例必须完整可运行
- 不要省略任何步骤
1.3 提供上下文
给AI足够的背景信息,让它做出更准确的回答:
## 项目背景
我正在开发一个电商网站的后端API,使用Python FastAPI + PostgreSQL。
目前遇到了数据库查询慢的问题,尤其是商品列表接口,当商品数量超过10万时响应时间超过3秒。
## 当前代码
```python
@app.get("/products")
async def get_products(category_id: int, skip: int = 0, limit: int = 20):
query = select(Product).where(Product.category_id == category_id)
result = await db.execute(query.offset(skip).limit(limit))
return result.scalars().all()
```
## 已尝试的方案
1. 添加了category_id索引 - 效果不明显
2. 使用selectinload预加载关联 - 有改善但仍慢
## 请帮我
1. 分析查询慢的可能原因
2. 给出具体的优化方案(附代码)
3. 说明每个方案的适用场景
二、角色设定技巧
通过角色设定让AI进入特定专业领域,输出更专业的回答:
2.1 技术专家角色
## 角色:资深Linux运维工程师
你是一位有10年经验的Linux运维工程师,专注于:
- 服务器性能优化和故障排查
- Docker/Kubernetes容器化部署
- 自动化运维(Ansible/Terraform)
- 网络安全加固
## 回答风格
1. 先诊断问题根因,再给解决方案
2. 始终考虑生产环境的安全性
3. 提供可直接复制执行的命令
4. 说明每个操作的风险和注意事项
5. 给出验证命令,确认操作是否成功
2.2 教学角色
## 角色:耐心的编程导师
你是一位擅长教学的编程导师,面向零基础学员。
教学方法:
1. 先用生活中的类比解释概念
2. 再给出简单的代码示例
3. 逐步增加复杂度
4. 每个知识点后给出练习题
5. 用鼓励的语气,降低学习焦虑
三、Few-shot学习
通过提供示例让AI学习你的回答风格和格式要求:
## 问答格式示例
用户:如何查看Linux内存使用情况?
回答:
**命令:** `free -h`
**输出解读:**
| 字段 | 含义 |
|------|------|
| total | 物理内存总量 |
| used | 已使用内存 |
| free | 完全空闲内存 |
| available | 可用内存(含缓存) |
**常用组合:**
- `top` 或 `htop`:实时监控内存使用
- `vmstat 1`:每秒刷新内存状态
- `cat /proc/meminfo`:详细内存信息
---
用户:如何查看磁盘使用率?
回答:
**命令:** `df -h`
**输出解读:**
| 字段 | 含义 |
|------|------|
| Filesystem | 文件系统 |
| Size | 总容量 |
| Used | 已使用 |
| Avail | 可用空间 |
| Use% | 使用率 |
**深入查看:**
- `du -sh /path/*`:查看目录大小
- `ncdu /`:交互式磁盘分析
四、Chain-of-Thought推理
让AI展示思考过程,提高复杂问题的回答质量:
请一步一步思考以下问题,展示你的推理过程:
问题:我的Nginx返回502 Bad Gateway,如何排查?
请按以下步骤分析:
1. 首先解释502错误的含义
2. 列出所有可能的原因(至少5个)
3. 针对每个原因给出具体的排查命令
4. 给出完整的排查流程图
5. 如果所有方法都无效,建议下一步行动
五、高级技巧
5.1 自我一致性(Self-Consistency)
让AI用多种方法解决同一问题,然后选择最佳方案:
对于以下优化问题,请用3种不同的方法分析:
场景:MySQL查询慢,表有500万行数据
请分别用以下方法分析:
1. 从索引优化角度
2. 从查询重写角度
3. 从架构设计角度
然后比较三种方案的优劣,选择最适合生产环境的方案。
5.2 思维树(Tree of Thought)
展开决策树,帮助AI进行复杂决策:
对于以下决策问题,请展开思维树分析:
场景:选择Web服务器(Nginx vs Apache vs Caddy)
层级1:根据需求场景选择
├─ 高并发API → Nginx
├─ 传统PHP网站 → Apache
├─ 简单静态站 + 自动HTTPS → Caddy
└─ 需要Lua扩展 → OpenResty
层级2:以Nginx为例进一步选择
├─ 需要商业支持 → Nginx Plus
├─ 开源方案 → Nginx OSS
├─ 需要WAF功能 → Nginx + ModSecurity
└─ 需要微服务网关 → Kong (基于Nginx)
5.3 角色扮演对抗
让AI同时扮演攻击者和防御者,全面分析安全问题:
请分别扮演攻击者和安全工程师,分析以下API的安全性:
API代码:
```python
@app.post("/login")
async def login(username: str, password: str):
user = db.query(User).filter(User.name == username).first()
if user and user.password == password:
return {"token": create_token(user.id)}
return {"error": "用户名或密码错误"}
```
攻击者视角:找出所有可利用的漏洞
安全工程师视角:给出完整的加固方案
六、各场景Prompt模板
6.1 代码审查
请审查以下代码的安全性、性能和可维护性:
```python
{你的代码}
```
审查维度:
1. 安全性:SQL注入、XSS、认证绕过等
2. 性能:N+1查询、内存泄漏、算法复杂度
3. 可维护性:代码结构、命名规范、注释完整度
4. 最佳实践:是否遵循语言/框架的最佳实践
请按严重程度排序,给出具体的修改建议和代码示例。
6.2 API文档生成
根据以下API代码,生成完整的API文档:
```python
{你的代码}
```
文档格式:
- 接口名称和描述
- 请求方法和URL
- 请求参数(Query/Body/Header)
- 响应格式(成功和失败)
- 错误码说明
- 调用示例(curl命令)
- 注意事项
6.3 Bug修复
以下是报错信息和相关代码,请帮我修复:
错误信息:
```
{粘贴完整错误日志}
```
相关代码:
```python
{粘贴相关代码}
```
请:
1. 分析错误原因
2. 给出修复方案(附完整代码)
3. 说明为什么会出这个错
4. 建议如何避免类似问题
总结
Prompt工程是AI应用的核心技能。掌握清晰表达、角色设定、Few-shot学习、思维链等技巧,可以显著提升AI输出质量。记住:好的Prompt = 清晰的目标 + 充分的上下文 + 明确的约束。
如果需要Prompt工程培训或AI应用开发服务,欢迎联系17老师。
关于17老师:AI应用 · 数字化管理 · 全栈开发 · 网络安全全栈专家。联系邮箱:j.d88888888@qq.com,微信:AFIST17