1.2 提示词工程 面试题

提示词工程(Prompt Engineering)面试和RAG面试风格不太一样——RAG考的是系统链路,而提示词工程考的是对模型行为的理解精准控制能力。下面按高频考点分模块整理,附代码案例。


一、基础概念篇(开场必问)

Q1:什么是提示词工程?核心价值是什么?

面试官追问:写提示词和做提示词工程有什么区别?

核心答题框架

提示词工程不是“随便写几句话”,而是系统化地设计、优化和测试输入文本,以引导大语言模型生成更准确、相关和高效的输出。

区别在于:

  • 写提示词:凭感觉,写完就完事
  • 提示词工程:有方法论、有评估、有迭代

加分回答:> “同样一个模型,换一种提问方式,答案质量天差地别。这不是玄学,而是一套可以被拆解、验证、复用的工程方法。”


Q2:提示词的基本结构包括哪些部分?

核心要素

要素说明示例
角色设定(Role)明确模型身份和专业领域“你是一位资深数据分析师”
任务描述(Task)清晰说明要做什么“分析以下销售数据”
上下文(Context)提供背景信息“这是2024年Q4的销售报表”
约束条件(Constraints)明确限制和边界“输出不超过200字”
输出格式(Format)指定返回格式“用Markdown表格输出”
示例(Examples)Few-shot样例提供1-3个输入输出对

代码案例:结构化的Prompt模板

defbuild_prompt(role:str,task:str,context:str,constraints:list,format_spec:str)->str:"""构建结构化Prompt"""prompt=f""" # 角色设定 你是一位{role}。 # 任务{task}# 上下文信息{context}# 约束条件{chr(10).join(['- '+cforcinconstraints])}# 输出格式{format_spec}请严格按照以上要求执行。 """returnprompt# 使用示例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”

代码案例:三种方法的对比

# 场景:将用户反馈分类为【投诉】【建议】【咨询】# 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

# ❌ 坏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)输出多样、有创造性创意写作、头脑风暴

代码案例

importopenaidefgenerate_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)returnresponse.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

system_prompt=""" # 身份 你是XX餐饮的官方AI客服助手。 # 能力范围 仅能回答和本品牌相关的问题,包括: - 门店地址和营业时间 - 会员规则和积分查询 - 餐品价格和菜单 - 优惠券使用说明 # 严格约束 1. 如果用户问的是超出以上范围的问题,请直接回复: "抱歉,这个问题我暂时无法解答,你可以联系人工客服 400-888-8888" 2. 不要编造任何关于品牌、价格、活动的信息 3. 不确定时,引导用户联系人工客服 # 输出风格 - 友好、礼貌 - 用"您"称呼用户 - 每次回答不超过150字 """

Q8:如何设计System Prompt?

关键要素

system_prompt=""" # 角色定义 - 身份:专业的AI编程导师 - 领域:Python编程、算法基础 - 风格:耐心、引导式教学、不直接给答案 # 能力说明 - 可以解释编程概念 - 可以指出代码中的错误 - 可以提供思路引导 # 行为准则 1. 面向初学者,用通俗语言解释 2. 不直接给出完整代码,先引导思考 3. 不确定时主动承认,不编造 # 输出格式 - 先给思路 → 再给提示 → 最后才给参考答案 - 代码块使用```标注 - 错误信息包含原因+解决方向 """

加分回答:> “System Prompt和User Prompt的分工是:System定义‘你是谁’和‘游戏规则’,User提出‘具体任务’。好的System Prompt让模型一进场就知道自己该干嘛。”


五、工程实践篇(体现系统思维)

Q9:如何评估Prompt的质量?

三层评估框架

层级评估方式指标
离线评估用测试集跑分准确率、格式合规率、一致性
人工评估抽样人工打分相关性、完整性、可用性
线上监控生产环境数据用户反馈、任务完成率、点踩率

代码案例:Prompt A/B测试框架

importjsonfromtypingimportList,DictclassPromptABTest:def__init__(self):self.results={}deftest_prompts(self,prompts:Dict[str,str],test_cases:List[str])->Dict:"""对多个Prompt版本进行A/B测试"""scores={name:[]fornameinprompts}forcaseintest_cases:forname,promptinprompts.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])fornameinscores}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写“精准操作说明书”