Files
zhuangang/topics/ai/prompt-engineering/interview.md
T

68 lines
4.2 KiB
Markdown

---
id: ai.prompt-engineering.interview
title: 提示词与上下文工程面试题
type: interview
domain: ai
stack: [prompt-engineering]
tags: [提示词, 结构化输出, 提示词注入, 面试]
level: intermediate
related: [ai.prompt-engineering.prompt-structured-output, ai.prompt-engineering.context-injection]
week: [5, 13, 16]
---
# 提示词与上下文工程面试题
## 基础
### 【基础】你写提示词的方法是什么?
**参考答案**:结构化:角色背景、任务和成功标准、规则约束(含资料不足时怎么办)、用标签隔离的输入数据、少量示例、明确的输出格式。写得具体、说明原因;用评测集比较不同版本,而不是凭感觉。
**追问**:提示词很长会有什么问题?→ 成本和延迟增加,规则之间可能冲突,中间部分容易被忽略;把不常用的规范改为按需加载(Skills / 检索)。
### 【基础】Few-shot 示例怎么选?
**参考答案**:覆盖典型情况和边界情况(例如一个应回答、一个应拒答),格式和最终要求一致,内容多样,避免模型照抄示例;示例数量一般 1~5 个,用评测确定。
**追问**:示例和评测集能用同一批数据吗?→ 不能,否则评测分数虚高。
### 【基础】怎么让模型稳定输出 JSON?
**参考答案**:优先用原生结构化输出 / 严格模式或工具调用参数;Schema 中使用枚举和描述;输出后用 pydantic 校验,失败时把错误反馈给模型重试一次,仍失败就降级。
**追问**:JSON 模式和结构化输出有什么区别?→ JSON 模式只保证是合法 JSON;结构化输出按 Schema 约束字段和类型。
## 进阶
### 【进阶】什么是提示词注入?怎么防护?
**参考答案**:输入文本改变了模型的行为。分直接注入和间接注入(来自文档、网页、工具返回)。防护分层:外部内容隔离和转义、检测、提示词声明、**工具层权限和确认**、输出校验、监控和安全评测。核心是假设会被注入成功,限制损失。
**追问**:为什么不能只靠提示词防护?→ 模型无法可靠区分指令和数据,换种说法就可能绕过;只有代码层面的权限控制是确定性的。
### 【进阶】上下文工程和提示词工程有什么区别?
**参考答案**:提示词工程关注指令怎么写;上下文工程关注每次调用时上下文窗口里放什么、怎么组织:检索结果、工具定义、历史、记忆、任务状态,通过选择、压缩、隔离、外部化来控制质量和成本。
**追问**:对话很长时怎么处理?→ 保留最近几轮 + 早期内容摘要(明确要保留的事实),重要信息写入状态或记忆,按需读取。
### 【进阶】提示词怎么做版本管理和迭代?
**参考答案**:放进 Git,带版本号,改动走评审;每次改动跑评测集和质量门禁;调用日志记录提示词版本;灰度发布;保留回滚能力。
**追问**:业务人员想自己改提示词怎么办?→ 提供带评测的后台:修改后自动跑评测集,通过后再发布,并保留版本历史。
## 场景题
### 【场景题】RAG 助手检索到的文档里有“忽略指令”的内容,怎么办?
**参考答案**:文档内容用标签隔离并转义;注入检测命中时告警并标记文档;输出校验(链接白名单、引用校验、敏感信息检查);助手的工具权限按当前用户;排查文档来源,修复数据。详见[邮件助手场景](scenarios/injection-defense.md)。
**追问**:怎么证明防护有效?→ 建立注入样例评测集(多语言、混淆、藏在格式里),每次改动跑,危险行为数必须为零。
### 【场景题】同一个提示词,换了模型之后效果变差,怎么处理?
**参考答案**:在评测集上对比,找出变差的用例类型;针对新模型调整提示词(有的模型对格式要求、示例更敏感);必要时为不同模型维护不同的提示词版本;上线前通过质量门禁。
**追问**:怎么减少对某个模型的依赖?→ 用结构化输出和代码校验兜底,而不是依赖模型对提示词的细微理解;评测集覆盖关键行为。