提示词工程(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的核心原则有哪些?
六大原则:
- 清晰明确(Clarity):指令无歧义,避免“帮我写点东西”这种模糊表述
- 提供上下文(Context):给足背景信息,减少模型“臆测”
- 设定角色(Role Playing):角色越具体,输出越精准
- 分解任务(Task Decomposition):复杂任务拆成多个子步骤
- 指定格式(Output Formatting):明确JSON、Markdown、表格等格式
- 负面提示(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:如何处理模型输出跑题/幻觉?
核心策略:
- 角色锚定:明确身份和边界
- 约束量化:“只回答X相关的问题”“超出范围直接说不知道”
- Few-shot规范:用示例锚定输出格式和风格
- 负面约束:明确“不要出现什么”
- 后处理验证:代码校验输出格式和内容
代码案例:带约束的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写“精准操作说明书”。