提示词工程(Prompt Engineering)面试和RAG面试风格不太一样------RAG考的是系统链路 ,而提示词工程考的是对模型行为的理解 和精准控制能力。下面按高频考点分模块整理,附代码案例。
一、基础概念篇(开场必问)
Q1:什么是提示词工程?核心价值是什么?
面试官追问:写提示词和做提示词工程有什么区别?
核心答题框架:
提示词工程不是"随便写几句话",而是系统化地设计、优化和测试输入文本,以引导大语言模型生成更准确、相关和高效的输出。
区别在于:
- 写提示词:凭感觉,写完就完事
- 提示词工程:有方法论、有评估、有迭代
加分回答 :> "同样一个模型,换一种提问方式,答案质量天差地别。这不是玄学,而是一套可以被拆解、验证、复用的工程方法。"
Q2:提示词的基本结构包括哪些部分?
核心要素:
| 要素 | 说明 | 示例 |
|---|---|---|
| 角色设定(Role) | 明确模型身份和专业领域 | "你是一位资深数据分析师" |
| 任务描述(Task) | 清晰说明要做什么 | "分析以下销售数据" |
| 上下文(Context) | 提供背景信息 | "这是2024年Q4的销售报表" |
| 约束条件(Constraints) | 明确限制和边界 | "输出不超过200字" |
| 输出格式(Format) | 指定返回格式 | "用Markdown表格输出" |
| 示例(Examples) | Few-shot样例 | 提供1-3个输入输出对 |
代码案例:结构化的Prompt模板
python
def build_prompt(role: str, task: str, context: str, constraints: list, format_spec: str) -> str:
"""构建结构化Prompt"""
prompt = f"""
# 角色设定
你是一位{role}。
# 任务
{task}
# 上下文信息
{context}
# 约束条件
{chr(10).join(['- ' + c for c in constraints])}
# 输出格式
{format_spec}
请严格按照以上要求执行。
"""
return prompt
# 使用示例
prompt = build_prompt(
role="有5年经验的电商运营专家",
task="分析这份销售数据,找出增长机会",
context="这是某品牌2025年Q1的电商销售数据,包含各渠道GMV、转化率、客单价",
constraints=["只分析数据中呈现的趋势", "不臆测未提供的信息", "输出不超过300字"],
format_spec="分三点列出,每点包含:现象+数据支撑+建议"
)
print(prompt)
二、核心方法篇(必考三件套)
Q3:Zero-Shot、Few-Shot、Chain-of-Thought(CoT)的区别?
这是最高频的送分题 ,但要在面试中拿高分,需要说清楚什么时候用哪个。
| 方法 | 定义 | 适用场景 | 示例 |
|---|---|---|---|
| Zero-Shot | 不给示例,直接给指令 | 简单任务,模型已有相关知识 | "把'Hello'翻译成中文" |
| Few-Shot | 给2-5个输入输出示例 | 需要特定格式、边界模糊的任务 | 给3个分类示例后再分类新样本 |
| CoT | 在Few-Shot基础上展示推理步骤 | 数学、逻辑、多步推理任务 | "先算A,再算B,最后得出C" |
代码案例:三种方法的对比
python
# 场景:将用户反馈分类为【投诉】【建议】【咨询】
# 1. Zero-Shot(零样本)
zero_shot_prompt = """
将以下用户反馈分类为:投诉、建议、咨询。
反馈:"你们的APP登录太慢了,每次都要等10秒"
分类:
"""
# 2. Few-Shot(少样本)
few_shot_prompt = """
将以下用户反馈分类为:投诉、建议、咨询。
示例1:
反馈:"你们的客服态度太差了,我要投诉"
分类:投诉
示例2:
反馈:"建议增加夜间模式,晚上用太刺眼了"
分类:建议
示例3:
反馈:"请问你们的会员价格是多少?"
分类:咨询
现在请分类:
反馈:"你们的APP登录太慢了,每次都要等10秒"
分类:
"""
# 3. Chain-of-Thought(思维链)
cot_prompt = """
将以下用户反馈分类为:投诉、建议、咨询,并解释推理过程。
示例:
反馈:"你们的客服态度太差了,我要投诉"
分析:用户明确表达了不满情绪("太差了"),并使用了"投诉"这个词,表达的是对现有服务的不满。
分类:投诉
反馈:"建议增加夜间模式,晚上用太刺眼了"
分析:用户提出了具体的改进方向("增加夜间模式"),没有表达不满,而是提出建设性意见。
分类:建议
现在请分类并给出推理:
反馈:"你们的APP登录太慢了,每次都要等10秒"
分析:
"""
加分回答 :> "Few-Shot不是越多越好,一般2-5个示例 最优。示例太多会浪费token、增加延迟,还可能让模型'过拟合'到示例格式上。CoT的核心价值在于强制模型生成中间推理步骤,这些步骤成为后续token的上下文,大幅降低推理错误。"
Q4:指令微调(Instruction Tuning)如何影响Prompt设计?
核心答题框架:
经过指令微调的模型(如ChatGPT、Claude),对Zero-Shot指令的理解能力大幅增强。这意味着:
- 不需要再堆砌复杂的Few-Shot示例
- Prompt设计更倾向于清晰、明确的自然语言指令
- 但仍然需要结构化设计,因为模型只是"更听话",不是"会读心"
三、设计原则篇(体现方法论)
Q5:设计高效Prompt的核心原则有哪些?
六大原则:
- 清晰明确(Clarity) :指令无歧义,避免"帮我写点东西"这种模糊表述
- 提供上下文(Context) :给足背景信息,减少模型"臆测"
- 设定角色(Role Playing) :角色越具体,输出越精准
- 分解任务(Task Decomposition) :复杂任务拆成多个子步骤
- 指定格式(Output Formatting) :明确JSON、Markdown、表格等格式
- 负面提示(Negative Prompting) :明确告诉模型"不要做什么"
代码案例:优化一个烂Prompt
python
# ❌ 坏Prompt(太模糊)
bad_prompt = "写点关于人工智能的东西。"
# ✅ 好Prompt(结构化+角色+格式)
good_prompt = """
你是一位科技专栏作家,擅长用通俗易懂的语言向普通读者解释复杂技术。
# 任务
写一篇关于人工智能的科普短文。
# 要求
1. 主题:人工智能如何改变日常生活(聚焦在AI助手、推荐算法、智能家居三个领域)
2. 受众:对技术感兴趣但非专业背景的普通读者
3. 风格:轻松、有趣、避免专业术语
4. 长度:300-400字
# 输出格式
- 标题(15字以内)
- 正文(分3个小节,每节配一个小标题)
- 结尾(一句总结性的话)
# 负面约束
- 不要讨论AI伦理、就业替代等争议性话题
- 不要使用"深度学习""神经网络"等术语
- 不要超过400字
"""
加分回答 :> "面试官如果追问'你加哪个词之后效果变化最大',我会说角色设定。把'你是专家'换成'你是5年经验的ToB SaaS产品经理',输出质量会有质的飞跃------因为角色自带了一整套默认规则。"
四、高级技巧篇(拉开差距)
Q6:Temperature参数是什么?怎么调?
核心答题框架:
| 参数值 | 效果 | 适用场景 |
|---|---|---|
| 低(0-0.3) | 输出确定性强、可预测 | 事实问答、代码生成、格式提取 |
| 中(0.5-0.7) | 平衡创造性和确定性 | 一般对话、内容生成 |
| 高(0.8-1.0) | 输出多样、有创造性 | 创意写作、头脑风暴 |
代码案例:
python
import openai
def generate_with_temperature(prompt: str, temp: float) -> str:
"""不同temperature下的生成对比"""
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}],
temperature=temp,
max_tokens=200
)
return response.choices[0].message.content
prompt = "写一句关于春天的诗"
print("Temperature=0.1(确定性):", generate_with_temperature(prompt, 0.1))
print("Temperature=0.9(创造性):", generate_with_temperature(prompt, 0.9))
Q7:如何处理模型输出跑题/幻觉?
核心策略:
- 角色锚定:明确身份和边界
- 约束量化:"只回答X相关的问题""超出范围直接说不知道"
- Few-shot规范:用示例锚定输出格式和风格
- 负面约束:明确"不要出现什么"
- 后处理验证:代码校验输出格式和内容
代码案例:带约束的System Prompt
python
system_prompt = """
# 身份
你是XX餐饮的官方AI客服助手。
# 能力范围
仅能回答和本品牌相关的问题,包括:
- 门店地址和营业时间
- 会员规则和积分查询
- 餐品价格和菜单
- 优惠券使用说明
# 严格约束
1. 如果用户问的是超出以上范围的问题,请直接回复:
"抱歉,这个问题我暂时无法解答,你可以联系人工客服 400-888-8888"
2. 不要编造任何关于品牌、价格、活动的信息
3. 不确定时,引导用户联系人工客服
# 输出风格
- 友好、礼貌
- 用"您"称呼用户
- 每次回答不超过150字
"""
Q8:如何设计System Prompt?
关键要素:
python
system_prompt = """
# 角色定义
- 身份:专业的AI编程导师
- 领域:Python编程、算法基础
- 风格:耐心、引导式教学、不直接给答案
# 能力说明
- 可以解释编程概念
- 可以指出代码中的错误
- 可以提供思路引导
# 行为准则
1. 面向初学者,用通俗语言解释
2. 不直接给出完整代码,先引导思考
3. 不确定时主动承认,不编造
# 输出格式
- 先给思路 → 再给提示 → 最后才给参考答案
- 代码块使用```标注
- 错误信息包含原因+解决方向
"""
加分回答 :> "System Prompt和User Prompt的分工是:System定义'你是谁'和'游戏规则',User提出'具体任务'。好的System Prompt让模型一进场就知道自己该干嘛。"
五、工程实践篇(体现系统思维)
Q9:如何评估Prompt的质量?
三层评估框架:
| 层级 | 评估方式 | 指标 |
|---|---|---|
| 离线评估 | 用测试集跑分 | 准确率、格式合规率、一致性 |
| 人工评估 | 抽样人工打分 | 相关性、完整性、可用性 |
| 线上监控 | 生产环境数据 | 用户反馈、任务完成率、点踩率 |
代码案例:Prompt A/B测试框架
python
import json
from typing import List, Dict
class PromptABTest:
def __init__(self):
self.results = {}
def test_prompts(self, prompts: Dict[str, str], test_cases: List[str]) -> Dict:
"""对多个Prompt版本进行A/B测试"""
scores = {name: [] for name in prompts}
for case in test_cases:
for name, prompt in prompts.items():
full_prompt = f"{prompt}\n\n输入:{case}"
# 调用模型获取结果(此处省略API调用)
# 计算准确率/格式合规率等
score = self._evaluate(full_prompt) # 假设返回0-1分数
scores[name].append(score)
# 计算平均分
return {name: sum(scores[name])/len(scores[name]) for name in scores}
def _evaluate(self, prompt: str) -> float:
# 实际项目中接入评估逻辑
pass
# 使用示例
ab_test = PromptABTest()
prompts = {
"v1_basic": "将以下文本翻译成英文:{text}",
"v2_role": "你是一位专业翻译,将以下中文翻译成地道的英文:{text}",
"v3_fewshot": "示例:'你好'->'Hello',现在翻译:{text}"
}
results = ab_test.test_prompts(prompts, ["今天天气真好", "我要去吃饭"])
print(results) # {'v1_basic': 0.72, 'v2_role': 0.85, 'v3_fewshot': 0.81}
Q10:你和Prompt工程师的区别是什么?
面试官追问:这个岗位是AI应用工程师,不是纯Prompt工程师,你怎么看?
核心答题框架:
| 维度 | Prompt工程师 | AI应用工程师 |
|---|---|---|
| 关注点 | 提示词本身的设计和优化 | 把Prompt融入完整的应用系统 |
| 工作范围 | 写Prompt、调参 | 整合API、设计系统架构、处理工程问题 |
| 输出 | 高质量的Prompt模板 | 可上线的AI功能模块 |
加分回答 :> "我不只是写Prompt,我还关心这个Prompt如何在系统里跑------怎么动态生成、怎么缓存、怎么降级、怎么监控效果。Prompt是我的工具,不是我的全部工作。"
六、面试避坑总结
| 常见扣分点 | 正确做法 |
|---|---|
| 只会说"加角色、给例子、加限制" | 讲清楚为什么加、加在哪、效果怎么验证 |
| 背方法论但不举例 | 每个方法论配一个真实的优化前后对比 |
| 只讲Prompt不讲评估 | 主动提怎么衡量Prompt好不好 |
| 把Prompt当玄学 | 强调可迭代、可验证、可工程化 |
面试官最爱追问的一句话 :"你加了哪个词之后,模型的输出发生了什么具体变化?"------提前准备好一个真实的优化案例 ,讲清楚改动前→改动后→为什么有效。
掌握以上 10个核心问题 + 配套代码 ,足以应对绝大多数提示词工程面试场景。核心心法:Prompt Engineering不是写句子,是给AI写"精准操作说明书"。