1.2 提示词工程 面试题

提示词工程(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的核心原则有哪些?

六大原则

  1. 清晰明确(Clarity) :指令无歧义,避免"帮我写点东西"这种模糊表述
  2. 提供上下文(Context) :给足背景信息,减少模型"臆测"
  3. 设定角色(Role Playing) :角色越具体,输出越精准
  4. 分解任务(Task Decomposition) :复杂任务拆成多个子步骤
  5. 指定格式(Output Formatting) :明确JSON、Markdown、表格等格式
  6. 负面提示(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:如何处理模型输出跑题/幻觉?

核心策略

  1. 角色锚定:明确身份和边界
  2. 约束量化:"只回答X相关的问题""超出范围直接说不知道"
  3. Few-shot规范:用示例锚定输出格式和风格
  4. 负面约束:明确"不要出现什么"
  5. 后处理验证:代码校验输出格式和内容

代码案例:带约束的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写"精准操作说明书"