共计 2293 个字符,预计需要花费 6 分钟才能阅读完成。
背景与痛点
最近在项目里尝试用 AI 生成代码时,发现几个头疼的问题:明明给了需求描述,生成的代码却跑不起来;多轮对话后 AI 突然 ’ 失忆 ’ 忘记之前的需求;甚至有时会自作主张引入不安全代码。这些问题本质上都指向同一个核心:提示词设计缺乏工程化思维。

通过两个月密集实践,我总结出这些典型痛点:
- 上下文丢失:当需求涉及多个步骤时,AI 常在第 3 轮回复后 ’ 忘记 ’ 初始约束条件
- 逻辑断层:生成的代码段各自正确,但组合起来业务流程无法闭环
- 过度发散:没有明确边界时,AI 容易添加非必要的复杂实现
- 安全漏洞:可能建议使用已弃用的 API 或存在注入风险的字符串拼接方式
设计原则
好的提示词应该像给资深开发写需求文档。这三个原则让我少走 80% 弯路:
清晰性
- 反例:” 写个登录功能 ”
- 正例:” 用 Python Flask 实现 JWT 登录,要求:1. 密码加盐哈希 2. 错误次数限制 3. 返回标准 JSON 格式 ”
上下文连贯
通过这三层结构保持对话记忆:
1. 系统角色:” 你是有 10 年经验的 Go 后端专家 ”
2. 会话历史:以注释形式保留前 3 轮关键决策
3. 当前请求:明确变更部分与不变约束
约束控制
用类似正则的语法限定输出范围:
请生成满足以下要求的 Dockerfile:# 必须包含: FROM python:3.9-slim
# 禁止包含: EXPOSE 22
实现方案
分层架构示例
# 系统指令层(初始化时设置)system_prompt = """
你正在协助开发电商系统,需要:1. 优先考虑代码安全性
2. 保持与现有 MySQL 8.0 兼容
3. 所有输出必须包含中文注释
"""
# 上下文管理层(每次对话更新)context = {'已实现': ['用户注册模块', 'JWT 验证中间件'],
'待解决': '订单超时取消逻辑'
}
# 用户输入层(本次具体请求)user_query = """
基于已实现的 JWT 中间件,编写满足以下条件的函数:1. 30 分钟未支付自动取消订单
2. 需要记录取消日志到 order_operate 表
3. 使用 asyncio 实现
"""
上下文保持方案
用 OpenAI API 实现多轮对话记忆:
import openai
# 初始化对话历史
dialog_history = [{"role": "system", "content": system_prompt}
]
def chat_with_context(user_input):
# 添加用户输入到历史
dialog_history.append({"role": "user", "content": user_input})
# 调用 API 时带上全部历史
response = openai.ChatCompletion.create(
model="gpt-4",
messages=dialog_history,
temperature=0.7
)
# 将 AI 回复加入历史
ai_reply = response.choices[0].message.content
dialog_history.append({"role": "assistant", "content": ai_reply})
# 防止历史过长,保留最近 5 轮
if len(dialog_history) > 6: # system + 5 轮
dialog_history = [dialog_history[0]] + dialog_history[-5:]
return ai_reply
场景化模板
代码生成模板
【角色】你正在开发 {系统模块} 的{具体功能}【技术栈】使用 {语言 / 框架} + {数据库} 实现【需求细节】1. 必须包含{关键点 1}
2. 需要处理{边界情况}
3. 输出格式要求:{示例格式}【约束】- 禁止使用{不安全方法}
- 必须兼容{环境要求}
错误修复模板
遇到 {错误类型} 错误:{错误日志片段}
相关代码上下文:{代码片段}
请:1. 分析根本原因
2. 给出两种解决方案
3. 标注每种方案的优缺点
优化技巧
Few-shot 示例法
在提示词中直接嵌入 2 - 3 个正确示例,效果提升显著:
请按以下格式生成 API 响应:示例 1:成功时返回:
{
"code": 200,
"data": {"user_id": 123}
}
示例 2:失败时返回:
{
"code": 400,
"error": "Invalid parameters"
}
现在请为登录接口生成响应...
超参数调优
- Temperature:
- 0.2-0.5:用于生成需要确定性的代码结构
- 0.7-1.0:需要创意解决方案时使用
- Max tokens:设为预期代码长度的 1.5 倍
- Stop sequences:设置
"```"防止多余解释
避坑指南
- 过度依赖生成代码
- 现象:直接复制 AI 生成的算法实现
-
改进:核心算法必须通过单元测试覆盖所有边界条件
-
缺乏版本对比
- 现象:直接覆盖现有代码
-
改进:用
git diff对比 AI 生成代码与原有实现差异 -
忽略技术债
- 现象:接受快速但不规范的解决方案
- 改进:为每个 AI 生成模块添加
// TODO-AI标记以便后续复查
安全考量
- 版权问题
- 在提示词中明确要求:” 所有代码必须为原创实现 ”
-
使用代码相似度检测工具扫描
-
敏感信息
- 禁止在提示词中包含 API 密钥等真实凭证
-
用占位符代替:
"请使用 <API_KEY> 代替实际密钥" -
依赖安全
- 要求 AI 列出所有新增依赖
- 用
npm audit或safety check进行扫描
动手实践
挑战任务:优化以下低效提示词
写个函数计算平均数
优化方向建议:
1. 添加输入输出类型说明
2. 增加异常处理要求
3. 指定性能约束
4. 给出函数签名示例
经过三个月实践,这套方法使我的 AI 生成代码可用率从 35% 提升到 82%。最关键的心得是:要把 AI 当成刚入职的 junior 开发者 – 需求越明确,结果越靠谱。现在每次写提示词的时间比原来长 3 倍,但调试时间缩短了 90%,这买卖划算。
正文完
