Prompt Engineering 实战:写出真正有效的 AI 提示词
同样的 AI 模型,不同的提示词可以产生天壤之别的结果。Prompt Engineering 不是玄学,而是有迹可循的工程学。
一、为什么需要 Prompt Engineering?
差的 Prompt:
用户:"帮我写一段代码"
AI:不知道写什么语言、什么功能、什么风格...
好的 Prompt:
用户:"你是一个资深 Go 后端工程师。帮我用 Go + Gin + GORM 写一个用户注册接口,
要求:参数校验、密码加密存储、返回 JWT Token,代码要有注释。"
AI:输出完整、可运行、符合生产标准的代码二、核心技巧
2.1 角色设定(Role Prompting)
# 通用模板
你是一个[角色],你具备[专业技能],你的目标是[目标]。
# 实例
你是一位拥有 15 年经验的 Go 后端架构师,精通微服务、分布式系统和性能优化。
请用严格的生产级标准审查以下代码,找出潜在的性能问题和安全漏洞。
你是一位专注于 SEO 的技术博客作者,文章风格:技术准确但通俗易懂,
善用代码示例和对比表格。请用 Markdown 格式写一篇关于...的文章。2.2 思维链(Chain of Thought)
不直接要答案,让 AI 一步步推理:
# 普通问法
"这段代码有什么问题?"
# 思维链写法
"分析这段代码,请按以下步骤:
1. 首先读懂代码的整体功能
2. 逐行检查可能的 bug 和安全问题
3. 分析性能瓶颈
4. 最后给出具体的修复建议和重构后的代码
代码如下:
[代码内容]"2.3 少样本学习(Few-Shot Learning)
给 AI 提供示例,让它学习你期望的格式:
我需要将 API 错误码映射为中文提示。格式如下:
输入:404
输出:{"code": 404, "message": "资源不存在,请检查 URL 是否正确", "action": "检查请求路径"}
输入:401
输出:{"code": 401, "message": "身份认证失败,请重新登录", "action": "清除 Cookie 并重新登录"}
输入:500
输出:{"code": 500, "message": "服务器内部错误,请稍后重试", "action": "联系技术支持并提供请求 ID"}
现在请处理:
输入:429
输出:2.4 结构化输出
明确指定输出格式,方便程序处理:
请分析以下 Go 代码的质量,输出 JSON 格式:
{
"score": 0-100的评分,
"issues": [
{"type": "bug|security|performance|style", "line": 行号, "description": "问题描述", "fix": "修复建议"}
],
"summary": "总体评价"
}
代码:
[代码内容]2.5 约束条件
写一篇 Go 协程的技术文章,要求:
- 字数:1500-2000字
- 风格:技术博客,有代码示例
- 包含:概念解释、代码示例、常见错误、最佳实践
- 不包含:过于基础的 Hello World 内容
- 格式:使用 Markdown,包含二级标题
- 受众:有一年 Go 经验的开发者三、高级技巧
3.1 ReAct 模式(思考-行动循环)
你是一个数据库优化专家。分析用户提出的 SQL 查询慢的问题时,请按照:
Thought(分析原因)→ Action(提出方案)→ Observation(预期效果)
的格式来回答。
问题:查询 1000 万条用户订单,每次都要 5 秒以上。
查询语句:SELECT * FROM orders WHERE user_id = 123 AND status = 'paid' ORDER BY created_at DESC LIMIT 203.2 迭代优化
# 第一步:生成初稿
写一个 Go 中间件处理接口限流
# 第二步:针对性改进
上面的代码很好,但请改进以下方面:
1. 支持按 IP + 接口路径组合限流
2. 限流时返回剩余等待时间
3. 添加 Redis 后端支持分布式限流
# 第三步:代码审查
现在作为一个安全专家,审查上面的代码,找出可能的安全漏洞3.3 防止幻觉
# 技术问题的防幻觉 Prompt
回答以下技术问题时,请遵守规则:
1. 如果你不确定,明确说"我不确定",不要猜测
2. 涉及版本特定特性时,说明对应的版本号
3. 代码必须是可以实际运行的,不要用伪代码代替
4. 引用官方文档时,提供文档链接(如果你知道的话)
问题:Go 1.24 中的 weak 包如何使用?四、实战 Prompt 模板库
代码生成
你是一个[语言]专家。
需求:[功能描述]
约束:
- 语言/框架版本:[版本]
- 性能要求:[要求]
- 错误处理:必须处理所有可能的错误
- 代码风格:[规范]
输出:完整可运行的代码,包含注释代码审查
你是一个资深工程师,请对以下代码进行全面 Code Review:
重点关注:
□ 正确性:逻辑是否正确,有无 bug
□ 安全性:有无 SQL 注入、XSS、权限问题
□ 性能:有无 N+1 查询、不必要的内存分配
□ 可读性:命名是否清晰,代码是否易懂
□ 可维护性:是否方便扩展和测试
代码语言:[语言]
代码:
```[代码]```
输出格式:
1. 总体评分(1-10)
2. 按严重程度列出问题(严重/警告/建议)
3. 改进后的代码技术文章写作
你是一位技术博主,专注于[领域],文章风格[风格特点]。
请写一篇关于「[主题]」的技术文章:
目标读者:[读者画像]
文章目标:读完后能[具体收获]
字数要求:[字数]
结构建议:
1. 引言:为什么这个主题重要
2. 核心概念解释
3. 实战示例(含代码)
4. 常见错误和避坑指南
5. 总结和最佳实践
格式:Markdown,代码块要指定语言SQL/数据分析
你是一个数据分析师。基于以下表结构,回答问题:
表结构:
users: id, name, email, created_at, country
orders: id, user_id, amount, status, created_at
products: id, name, category, price
问题:[分析需求]
要求:
- 输出标准 SQL(兼容 MySQL 8.0)
- 考虑查询性能,提示是否需要索引
- 对复杂逻辑添加注释五、System Prompt vs User Prompt
python
# OpenAI API 使用示例
import openai
client = openai.OpenAI(api_key="your-key")
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{
"role": "system",
# System Prompt:定义 AI 的身份和行为准则(持久生效)
"content": """你是 PFinalClub 技术博客的智能助手。
你的职责:
1. 回答技术问题(Go、PHP、Python、DevOps)
2. 代码审查和优化建议
3. 技术选型建议
行为准则:
- 回答简洁准确,不废话
- 不确定时说不确定,不编造
- 代码示例使用最新稳定版本
- 中文回答,技术术语保留英文"""
},
{
"role": "user",
# User Prompt:具体的用户请求
"content": "Go 语言中 channel 和 mutex 分别适合什么场景?"
}
],
temperature=0.3, # 技术问题用较低的温度,更准确
max_tokens=2000
)
print(response.choices[0].message.content)六、评估 Prompt 质量
| 维度 | 好的 Prompt | 差的 Prompt |
|---|---|---|
| 角色 | 明确角色和专业背景 | 无角色 |
| 任务 | 具体明确 | 模糊宽泛 |
| 约束 | 有格式/长度/风格要求 | 无约束 |
| 上下文 | 提供必要背景 | 无背景 |
| 示例 | 有输入/输出示例 | 无示例 |
| 验证 | 可以验证结果是否正确 | 无法验证 |
总结
Prompt Engineering 的核心是明确表达你的期望。掌握这些技巧后:
- 角色设定:给 AI 一个专家身份
- 思维链:让 AI 一步步推理
- 结构化输出:指定格式方便处理
- 约束条件:限定范围避免跑偏
- 迭代优化:多轮对话逐步完善
最终,好的 Prompt 是对话设计,而不仅仅是一个句子。
作者:PFinal南丞 | 更新时间:2026-04-21

