背景与痛点:为什么写提示词比写代码还累?
过去半年项目里,我至少把 30% 的编码时间花在了“写提示词”上:让 ChatGPT 补接口文档、生成单测脚本、甚至写发版邮件。经验告诉我,提示词一旦含糊,后续返工比改祖传 SQL 还痛苦。常见效率黑洞有三处:
- 指令太泛——“帮我写个登录模块”——结果拿到 200 行无关代码,删删改改又半小时。
- 缺少示例——不给输入/输出格式,模型自由发挥,回回都要人工对齐。
- 结构混乱——把五件事写进一段,模型抓不到重点,生成内容前后矛盾。
一句话总结:提示词设计成本 < 调试成本时,ChatGPT 才真正提效;否则就是高级版“随机代码生成器”。
指令设计原则:把“模糊需求”翻译成“机器可执行工单”
我给自己定了三条硬规则,百试百灵:
单一任务原子化:一条提示只做一件事,复杂流程拆成多轮。
反例:“写后端接口并生成前端表单还要写单元测试”。
正例:第一轮“生成 RESTful 接口模板”,第二轮“基于上述接口生成 Jest 单测”。输入/输出格式显性化:用 JSON Schema、Markdown 模板或伪代码把“长什么样”说清。
例:输出格式(严格遵循): ```json { "code": "<code string>", "test": "<test string>", "doc": "<markdown string>" }角色-上下文-步骤三层结构(R-C-S):
- Role:给模型一个身份,“你是一名资深 Python 代码审查员”。
- Context:交代业务背景,“代码运行在使用 Python 3.11 的 AWS Lambda”。
- Steps:按序号列出子任务,“1. 找出并发隐患 2. 给出修复 diff 3. 提供性能基准脚本”。
把这三层写成固定骨架,每次换业务变量即可,提示词复用率能拉到 70% 以上。
范例大全:覆盖 5 大高频场景的可复制模板
以下模板均经生产验证,直接改占位符即可落地。
1. 代码生成(Go)
Prompt
你是一名遵循 Clean Architecture 的资深 Go 工程师。 根据下面需求生成完整代码,要求: 1. 表驱动路由,使用 Gin 2. handler 注入 service 接口,方便 mock 测试 3. 返回 JSON 统一包装:{"code":0,"msg":"ok","data":...} 需求:{{ .Description }} 输出格式(仅代码,无解释): ```go // main.go ... // handler/handler.go ... // service/service.go ...### 2. 单元测试生成(Python) **Prompt**为下列函数生成 pytest 用例,要求:
- 使用 parametrize 覆盖正常/异常/边界
- mock 外部 Redis 调用
- 提供 100% 分支覆盖
函数代码:
{{ .Code }}输出格式:
import pytest from unittest.mock import Mock ...### 3. 文档撰写(API) **Prompt**将以下 OpenAPI 3.0 YAML 转写成 Markdown,要求:
- 按资源分组,二级标题
- 每个接口包含:方法+路径、功能描述、请求/响应示例、错误码表
- 使用表格陈列参数,必填项加 **
YAML:
{{ .OpenAPIYAML }}
### 4. SQL 调优 **Prompt**你是一名 PostgreSQL DBA,版本 14。
对下面慢查询给出:
- 执行计划分析(使用 EXPLAIN ANALYZE)
- 索引优化建议,附 CREATE INDEX 语句
- 改写后的 SQL(保持语义不变)
慢查询:
{{ .SlowSQL }}
表结构:
{{ .DDL }}
### 5. 日志清洗脚本 **Prompt**写一段 awk 脚本,完成以下清洗规则:
- 过滤 level=ERROR 且耗时>500ms 的日志行
- 输出 CSV:time,api,latency
- 支持管道调用:cat app.log | ./filter.awk
日志样例:
2024-05-20T10:01:23 level=ERROR api=/order latency=623
输出(仅代码,无注释):
...## 优化技巧:让模型一次就“写到心坎里” 1. **Few-shot 冷启动**:在提示尾部塞 1~2 组“输入→理想输出”示例,**比任何文字描述都管用**。 例:生成 Commit Message 时,附两条 Angular 规范样本,模型立刻学会 `type(scope): subject` 格式。 2. **反向约束**:先告诉模型“哪些绝对不能做”,再提需求。 例:“禁止在生成的代码里出现明文 AK/SK;禁止把密码硬编码进变量”。 3. **温度(temperature)与核采样(top_p)分层设置**: - 代码/SQL 场景:temperature=0.1~0.2,确定性优先; - 创意文案:temperature=0.7~0.8,多样性优先。 通过 API 参数而非提示词控制,**减少提示长度还能提速**。 4. **后置校验器**:让模型产出先过一遍“lint 脚本”,失败自动重试。 例:生成 Python 后执行 `python -m py_compile tmp.py`,SyntaxError 立即重拉,**平均节省 1.5 次人工拷贝粘贴**。 ## 避坑指南:90% 的人都踩过的 4 个坑 1. **过度“创意”**:把业务规则写得太开放,模型自由发挥导致“看起来对,跑起来错”。 解决:把可变与不可变拆分开,**不可变部分用伪代码写死**。 2. **中英文混写**:同一提示里风格切换,模型容易把变量名拼错。 解决:统一技术术语语言,**代码级注释全英文,业务描述可中文**。 3. **长提示不排序**:>2k token 时,关键约束被“淹没”在中间。 解决:把核心限制重复放在**开头+结尾**,中间按步骤展开。 4. **忽略 token 计费**:交互链里塞了 4k token 历史,**每调用一次等于多调一次模型钱**。 解决:只给“上一轮结果摘要”,或把静态规则拆到 System 消息,**实测可省 35% 费用**。 ## 实战建议:把提示词工程化地搬进 CI/CD 1. **提示即代码**:把模板抽成 `prompts/v1/codegen.tmpl`,用 go-template/jinja2 管理变量,**Git 版本追踪**; 改提示=改代码,走 Merge Request,**可 review 可回滚**。 2. **自动化回归**:在 CI 中建一条“提示金测试”——给定 20 组固化输入,**生成结果 diff 不能超 5%**,否则 Pipeline 失败。 防止模型升级或温度误调导致**大面积输出漂移**。 3. **A/B 提示实验**:同一任务写 A、B 两版提示,**通过 feature flag 按 9:1 放量**,对比下游指标(编译通过率/单测覆盖率)。 四周跑下来,**提示迭代从“拍脑袋”变数据驱动**。 4. **敏感词+静态扫描双保险**:生成内容先过公司正则黑名单,再过 ChatGPT Moderation API,**双通道失败直接返回 4xx**,避免合规风险。 5. **缓存层**:对确定性任务(如 DDL→ORM 代码)用提示+输入哈希做 key,**Redis 缓存 24h**,**缓存命中率 60% 以上**,大幅降本。 ## 结语:把“写提示”变成可度量、可复用的工程能力 提示词不是玄学,而是**面向自然语言的接口设计**。把“清晰、具体、结构化”当成编译器要求,把“Few-shot、温度、后置校验”当成性能调优手段,就能让 ChatGPT 从“玩具”升级为**生产力倍增器**。 如果你也想系统跑通上述流程,推荐试试[从0打造个人豆包实时通话AI](https://t.csdnimg.cn/aeqm)动手实验——里面把 ASR→LLM→TTS 整条链路拆成可插拔模块,**提示模板与代码一并开源**,正好借项目练手,把本文方法论落地到真实场景。期待你的 PR。 [](https://t.csdnimg.cn/JrRf) ---