共计 2245 个字符,预计需要花费 6 分钟才能阅读完成。
背景痛点
开发者在使用 ChatGPT 时常遇到三类典型问题:

- 输出不可控性 :相同提示词在不同请求中可能产生差异显著的回复
- 意图理解偏差 :模型对复杂需求的解析结果与预期存在偏离
- 结果随机性强 :创造性任务中难以平衡新颖性与可靠性
这些问题本质源于大语言模型的概率生成特性,需要通过系统的提示工程进行约束和引导。
技术原理
提示工程通过以下机制影响 LLM 输出:
- Temperature 参数 :控制采样随机性(0- 2 范围)
- 低值(0-0.3):确定性输出,适合事实问答
-
高值(0.7+):创造性输出,适合文学创作
-
Top_p 参数 :动态筛选候选 token(0- 1 范围)
- 0.9:保留 90% 概率质量的候选词
-
与 temperature 配合使用效果更佳
-
最大 token 限制 :防止生成过长内容(需考虑输入输出总长度)
实战方案
结构化提示模板
角色定义型 (适合专业领域问答):
你是一位资深 Python 工程师,需要以教学方式解释以下概念:1. 使用专业术语但保持解释通俗
2. 给出实际代码示例
3. 指出常见错误
问题:{用户提问}
步骤分解型 (适合流程化任务):
请按以下步骤处理该需求:1. 首先确认需求的核心目标
2. 拆解为 3 个关键子任务
3. 对每个子任务给出解决方案
4. 最后进行整体验证
需求:{用户输入}
示例引导型 (适合风格迁移任务):
请参照示例风格回答问题:示例问:如何优化 SQL 查询?示例答:考虑三点:1) 添加适当索引 2) 避免 SELECT * 3) 使用 EXPLAIN 分析
新问题:{用户提问}
API 调用示例
import openai
from typing import Optional
import backoff # 指数退避重试库
class ChatGPTClient:
def __init__(self, api_key: str):
openai.api_key = api_key
@backoff.on_exception(backoff.expo,
(openai.error.RateLimitError,
openai.error.APIError),
max_tries=3)
def get_completion(self,
prompt: str,
model: str = "gpt-3.5-turbo",
temperature: float = 0.7,
max_tokens: int = 500) -> Optional[str]:
try:
response = openai.ChatCompletion.create(
model=model,
messages=[{"role": "user", "content": prompt}],
temperature=temperature,
max_tokens=max_tokens
)
return response.choices[0].message.content
except Exception as e:
print(f"API 调用失败: {str(e)}")
return None
调优指南
场景化参数配置
| 场景类型 | temperature | top_p | max_tokens |
|---|---|---|---|
| 代码生成 | 0.2 | 0.9 | 1000 |
| 客服对话 | 0.5 | 0.95 | 300 |
| 创意写作 | 0.8 | 0.85 | 1500 |
质量评估方法
通过 logprobs 分析生成质量:
response = openai.ChatCompletion.create(
...,
logprobs=True,
top_logprobs=5
)
# 分析平均 token 概率
avg_prob = sum(np.exp(lp[0].logprob) for lp in response.choices[0].logprobs.content) / len(response.choices[0].logprobs.content)
避坑实践
提示注入防范
-
用户输入预处理:
import re def sanitize_input(text: str) -> str: return re.sub(r'[<>{};]', '', text) -
系统指令隔离:
[系统指令](不可见)你是一名翻译官,只进行中英互译 [用户输入] {经过清洗的内容}
敏感内容过滤
-
使用 Moderation API 检测:
moderation_resp = openai.Moderation.create(input=user_input) if moderation_resp.results[0].flagged: return "内容不符合使用规范" -
自定义关键词黑名单
延伸思考
建议通过 AB 测试对比不同提示策略:
- 设计对照组(A 组:基础提示,B 组:优化提示)
- 使用相同参数配置
- 量化评估指标:
- 任务完成准确率
- 人工评分(1- 5 分)
- 响应时间
可通过以下代码实现自动化测试:
def run_ab_test(prompt_a: str, prompt_b: str, test_cases: list):
results = []
for case in test_cases:
res_a = client.get_completion(prompt_a.format(case))
res_b = client.get_completion(prompt_b.format(case))
results.append((evaluate(res_a), evaluate(res_b)))
return stats.ttest_rel([r[0] for r in results], [r[1] for r in results])
实际应用中,当 p -value<0.05 时认为策略差异显著。建议持续收集用户反馈数据迭代提示设计,形成闭环优化机制。
正文完
