共计 2141 个字符,预计需要花费 6 分钟才能阅读完成。
为什么需要自定义指令?
在开发基于 ChatGPT 的应用时,我们常遇到两个典型问题:

- 客服机器人场景 :当用户询问 ” 如何退款 ” 时,AI 可能直接生成退款政策全文,而不是优先提供简洁的操作步骤
- 内容生成场景 :请求生成营销文案时,AI 可能忽略品牌调性要求,输出风格不符的内容
这些问题本质上都是由于缺乏对 AI 输出的精准控制。与人类员工需要明确工作指引一样,AI 也需要清晰的操作指令才能稳定输出符合预期的结果。
直接提示词 vs 结构化指令
直接提示词示例
写一篇关于夏季防晒的科普文章
– 优点:简单快捷
– 缺点:
– 输出长度和风格不可控
– 无法确保覆盖关键知识点
– 难以维护(修改需求时需要重写整个提示)
结构化指令示例
## 指令
角色:护肤科普作家
要求:1. 面向 18-30 岁女性读者
2. 包含 SPF 值选择建议
3. 禁用医学术语
4. 输出 3 段,每段不超过 50 字
– 优点:
– 响应稳定性高
– 可模块化维护
– 便于团队协作
– 缺点:设计成本较高
三种核心指令设计模式
1. 角色定义式
适用场景 :需要固定输出风格的场景(如品牌客服、专业顾问)
你是一名资深咖啡师,需要用亲切但专业的口吻回答问题。知识范围:- 意式咖啡制作
- 豆子产地特性
- 设备保养常识
禁止行为:- 猜测不确定的答案
- 推荐非咖啡饮品
常见问题 :
– 角色特征被后续对话覆盖 → 在每次请求中重复关键角色定义
– 知识范围不足 → 配合向量数据库提供参考资料
2. 步骤分解式
适用场景 :流程化任务(如商品推荐、故障排查)
按以下步骤回答用户问题:1. 确认用户预算范围 [必选]
2. 询问使用场景(办公 / 游戏 / 设计)[必选]
3. 推荐不超过 3 款产品
4. 说明每个推荐理由
常见问题 :
– 用户跳过关键步骤 → 设置强制验证逻辑
– 步骤顺序混乱 → 为步骤添加编号依赖
3. 约束枚举式
适用场景 :合规敏感场景(如法律咨询、医疗建议)
输出必须满足:- 不包含具体剂量建议
- 标注 "非专业医疗建议" 免责声明
- 引用资料需注明来源
- 使用中文简体
禁用内容:- 疾病治愈承诺
- 偏方推荐
常见问题 :
– 约束冲突导致无输出 → 设置约束优先级
– 规避性表述 → 结合正则表达式过滤
Python 完整实现示例
import openai
import logging
from tenacity import retry, stop_after_attempt, wait_exponential
logging.basicConfig(filename='ai_interaction.log', level=logging.INFO)
# 指令模板
ROLE_INSTRUCTION = """
你是一名专业的 IT 支持工程师,用中文回答技术问题。回答要求:1. 先确认具体故障现象
2. 分步骤给出排查建议
3. 最后提供官方文档链接
禁用行为:- 猜测非技术原因
- 推荐非官方工具
"""
@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=10))
async def get_ai_response(prompt):
try:
response = await openai.ChatCompletion.acreate(
model="gpt-3.5-turbo",
messages=[{"role": "system", "content": ROLE_INSTRUCTION},
{"role": "user", "content": prompt}
],
temperature=0.5, # 控制输出随机性
max_tokens=500
)
logging.info(f"Successful response for: {prompt}")
return response.choices[0].message.content
except Exception as e:
logging.error(f"Error processing'{prompt}': {str(e)}")
raise
生产环境建议
指令版本管理
- 使用 Git 管理指令变更
- 为每个版本添加语义化标签(如 v1.0.0- 客服流程)
- 通过 AB 测试验证新指令效果
敏感词过滤
from ahocorasick import Automaton
filter_words = ['诈骗', '违禁品', '政治敏感词'] # 示例
automaton = Automaton()
for idx, word in enumerate(filter_words):
automaton.add_word(word, (idx, word))
automaton.make_automaton()
def contains_sensitive(text):
for end_index, (insert_order, original_value) in automaton.iter(text):
return True
return False
性能监控指标
- 响应时间百分位(P99 < 3s)
- 指令命中率(有效响应 / 总请求)
- 人工接管率(需要人工干预的会话比例)
开放思考题
- 如何设计指令组合策略来处理多意图复杂请求?
- 在多轮对话中如何保持指令上下文一致性?
- 当指令约束与用户显式要求冲突时,应当优先遵循哪个?
通过结构化指令设计,我们能够像编写程序一样精确控制 AI 行为。这种 ” 用指令编程 ” 的范式,正在成为 AI 应用开发的新标准实践。
正文完
