想象这样一个场景:你走进一家餐厅,不会只说“给我来道菜”就完事。你会告诉服务员“不要香菜、少油、微辣、用本地的新鲜食材”——你描述的细节越多,厨师端上来的菜越接近你心里想的那一盘。现在,把“餐厅”换成“AI“,把”服务员“换成”你手里的提示词(Prompt)”,你就能立刻明白提示工程是什么。 在 AI 辅助前端开发的今天,工具已经能帮你写代码、修 Bug、搭页面。但同一个工具,在不同人手里效果天差地别:有人用一句话就让它交出可运行的组件,有人洋洋洒洒写了一大段,AI 却答非所问。差别在哪里?就在你“点单”的方式上。这份“点单”由三味关键调料构成——上下文(你给了厨师多少背景信息)、角色(你让厨师以什么身份做菜)、约束(你划定了哪些红线)。掌握了这三者的配比,你就掌握了与 AI 高效协作的核心技能。

岗位关联

提示工程是 AI 时代的一项“元技能”:它不依赖某个具体模型,却能让你在任何 AI 工具上获得数倍于常人的产出质量,是前端工程师提升研发效率最直接的杠杆。

目录
  1. 可视化演示
  2. 为什么要优化
  3. 上下文管理
  4. 角色设定
  5. 约束指定
  6. 提示模板
  7. 迭代调优
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

演示提示工程三大优化维度(上下文增强、角色设定、约束控制)的协同机制,上下文窗口管理策略,以及提示迭代调优的反馈循环流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

提示工程三维度协同 上下文增强:提供领域知识、示例和背景信息 角色设定:指定AI扮演专家角色引导输出风格 约束控制:限制输出格式、长度和范围 Prompt=Context+Role+Constraint 三维度协同决定生成质量

为什么要优化

你见过这样的场景吗?有人在群里甩一句“帮我写个页面”,然后 AI 展开一段天马行空的代码,既不是他要的技术栈,也没有按他的设计稿来。他抱怨“AI 真笨”,可问题不在 AI,而在那句“帮我写个页面”——这不就像你走进一家高档餐厅,只说了一句“来道菜”?厨师再厉害,也无法从这四个字里读出你想要的“少油、微辣、不要香菜、配米饭”。

提示工程优化的本质,就是把你脑子里的完整意图,翻译成 AI 能理解的语言。AI 不是读心术大师,它是一个非常擅长接话的“大厨”:你给它的信息越完整,它做出来的菜越接近你的期待。很多人以为提示词是“魔法咒语”,背几句口诀就能通行天下,但真正的优化,是围绕上下文(给多少背景)、角色(让谁来干)、约束(划哪些红线)这三个维度做系统设计。

为了让你直观感受差异,我们引入一个简化评分模型:提示完整度由三部分加权求和得到。这个模型虽然有拍脑袋的成分,但它很好地解释了为什么“要素齐全”的提示词往往质量更高——它把三个维度量化成了可对比的数字。

明白了“为什么要优化”,接下来的问题就是:三个维度分别怎么操作?我们从最基础的上下文开始。

S=wc⋅C+wr⋅R+wk⋅K\displaystyle S = w_c \cdot C + w_r \cdot R + w_k \cdot K
这个公式表示:提示质量分 S 等于“上下文完整度 C”、“角色明确度 R”、“约束清晰度 K”三个分数的加权和,权重分别为 w_c、w_r、w_k。在实际使用中,你可以把它当作一张自查表:上下文给了吗?角色定了吗?约束说清了吗?
  1. 质量分 S提示词最终的效果得分,0 到 1 之间,越高越好,相当于“大厨端出的菜与你想吃的菜的重合度”。
    S\displaystyle S
  2. 上下文项 w_c×C为上下文维度分配的权重 w_c 乘以它的完整度 C。上下文越丰富,C 越接近 1。
    wc⋅C\displaystyle w_c \cdot C
  3. 角色项 w_r×R角色设定越明确,R 越高。权重 w_r 代表你有多看重“AI 以什么身份回答”这件事。
    wr⋅R\displaystyle w_r \cdot R
  4. 约束项 w_k×K约束条件越清晰,K 越高。权重 w_k 代表你有多在意输出的边界与格式。
    wk⋅K\displaystyle w_k \cdot K

上下文管理

想象你请一位大厨来家里做年夜饭。你是只递给他一根胡萝卜(然后期待一桌宴席),还是先把冰箱里的食材、灶台的火力、家人的口味偏好都告诉他?后者就是“上下文”。在 AI 代码生成中,上下文就是你在提问时附带的背景信息——需求描述、项目目录结构、相关代码片段、错误日志、依赖清单、技术栈说明。AI 能参考的信息越多,它的“烹饪”就越有依据。

但厨房台面是有限的——AI 一次能处理的“食材”总量由上下文窗口决定,以 Token 为单位计量。Token 可以粗略理解为“AI 眼中的字词碎片”,一个中文汉字大约对应 1 到 2 个 Token。你塞进去的上下文越多,留给“做菜动作”(生成代码)的空间就越少。这就引出了一个关键约束公式:

实际的前端开发中,上下文管理有一些可复用的操作:把“完整错误堆栈 + 出现问题的组件代码 + 预期行为”一起贴给 AI,比只贴一句“这个报错怎么回事”有用得多;粘贴代码时,只保留与问题相关的函数和依赖,而不是整个文件;如果项目用了 Vue 3 + TypeScript + Vite,明确写出来,别让 AI 去猜。上下文不是越多越好,而是相关的越多越好,无关的越多越糟——就像你把冰箱里发了霉的食材也递给大厨,他不但用不上,还得先绕着走。

回到比喻:上下文管理,就是你替大厨把台面收拾得井井有条——食材分类放好,调料摆在顺手的位置,灶台火力调对。台面有限,放什么、不放在什么,直接决定这顿饭的上限。

Ttotal=Tcontext+Tinstruction+Toutput\displaystyle T_{total} = T_{context} + T_{instruction} + T_{output}
这个公式表示:一次 AI 请求的 Token 总预算 T_total,被分成三份——“上下文 T_context”(背景与代码)、“指令 T_instruction”(你要它干什么)、“输出 T_output”(AI 生成的答案)。设计提示词,就是在做这道分配题。
  1. 总预算 T_total模型单次能处理的最大 Token 数,像炉灶的最大火力。
    Ttotal\displaystyle T_{total}
  2. 上下文部分 T_context你粘贴的需求描述、报错信息、代码片段所占用的 Token。给得越多,AI 越懂背景,但会挤压其他部分。
    Tcontext\displaystyle T_{context}
  3. 指令部分 T_instruction真正传达“做什么、怎么做”的话,这部分要精简,像点菜时那句核心的“清蒸,不要放姜”。
    Tinstruction\displaystyle T_{instruction}
  4. 输出部分 T_outputAI 生成答案的预留空间。上下文塞太满,输出被压缩,AI 只能给出“缩水版”代码。
    Toutput\displaystyle T_{output}

角色设定

同样是“来道菜”,你向“川菜馆老板”点单,和向“米其林甜品主厨”点单,收到的菜完全不同。角色设定,就是给 AI 一个“站位”:你要它像谁一样思考、用什么风格回答。在提示词里加上“你是一位资深前端工程师”或“你是一位代码评审专家”,AI 的输出会立刻带上相应的“职业习惯”——前者会主动考虑浏览器兼容性,后者会专门挑代码里的坏味道。

在结构化提示中,角色通常分为两层:系统角色(System Role)和用户角色(User Role)。系统角色是“总厨指令”,在对话一开始就设定,决定 AI 整体的身份和立场;用户角色是“点单人”,代表你当前这条消息的目标。很多 AI 应用框架(如 OpenAI 的 API)专门提供了 system 字段,就是这个用途。用自然语言表达,就是在提示词开头写:“你是一位熟悉 React 生态的前端架构师,请以下列要求输出代码。”

角色设定之所以有效,是因为大语言模型在训练时见过海量的“专家文风”数据:当你指定身份,模型就会在参数空间里“切换”到与该身份高度相关的分布上。这就像你在导航软件里选择“货车模式”——同样一条路,给出的路线截然不同,因为它切换了约束条件。对前端场景而言,常见的有效人设包括:“资深前端架构师”(注重工程结构)、“性能优化专家”(关心加载速度)、“无障碍设计顾问”(关注 A11Y 规范)、“代码评审官”(专挑 Bug 和坏味道)。

但要注意,角色设定不能替代上下文和约束。你说“你是大厨”,却没有告诉他做什么菜、有什么忌口,他也只能给出一道“厨师长推荐”。角色是风格开关,不是内容来源——内容来源是你给的上下文,边界是你给的约束。三者协同,才是一张完整的“点单”。

约束指定

回想你拿到外卖时的失望时刻:备注写了“不要香菜”,结果打开盖子,香菜绿油油地躺在最上面。问题出在两点——要么你没写这条备注,要么写了但商家没当回事。在提示词里,“不要香菜”就是一条否定式约束。它划出一条红线:这类事,别做。

约束的威力常被低估。很多人以为提示词就是“提需求”,但 AI 生成代码时最危险的不是“不会做”,而是“自由发挥”——它可能自作主张用了一个你项目中根本不存在的依赖,可能把 CSS 写成内联样式,可能忽略了错误处理。约束就是用来收敛这种“自由”的。常见的约束类型包括:否定式指令(“不要使用任何第三方 UI 库”)、格式要求(“返回一个可以直接运行的 .vue 单文件组件”)、范围边界(“只需要实现 handleSubmit 函数,不涉及其他模块”)、以及质量标准(“所有函数都要写 JSDoc 注释”)。

约束的密度也需要适度。约束太少,AI 输出发散;约束太多,AI 可能畏手畏脚,甚至自相矛盾。实践中有一种有效的量化思路:为最终结果制定可评分指标。例如,你可以这样定义输出质量分:

写约束时还有个小技巧:把“不要”放在“要”后面。先告诉 AI 你要什么,再划红线。比如:“实现一个表单校验函数,要求:使用原生 JS,不用任何第三方库;不修改 HTML 结构;返回 boolean。”这样 AI 先有了目标锚点,再去读禁忌,比一上来连续五个“不要”更容易记住并遵守——就像点单时说“我要清蒸鲈鱼,不要放姜,不要放料酒”比一口气喊五个“不要”更清晰。

约束是提示词里的安全护栏。护栏不是用来限制大厨发挥的,而是确保他发挥的方向始终在你能接受的范围内。

Q=α⋅A+β⋅B+γ⋅C\displaystyle Q = \alpha \cdot A + \beta \cdot B + \gamma \cdot C
这个公式表示:代码质量分 Q 由“可用性得分 A”(能否直接运行)、“规范性得分 B”(是否遵守项目规范)、“一致性得分 C”(是否符合你的约束清单)三部分加权求和。用这个框架去评估 AI 的输出,你会发现约束写得越明确,B 和 C 的分数越高。
  1. 质量分 QAI 生成代码的综合质量评分,用于横向对比不同提示词的效果。
    Q\displaystyle Q
  2. 可用性 A 与权重 α代码能跑通的程度,对应“菜能不能吃”——不能运行的代码,一切免谈。
    α⋅A\displaystyle \alpha \cdot A
  3. 规范性 B 与权重 β代码与项目现有风格的契合度,对应“菜摆盘是否符合餐厅风格”。
    β⋅B\displaystyle \beta \cdot B
  4. 一致性 C 与权重 γ代码对约束清单的遵守程度,对应“是否完全没放你忌口的香菜”。
    γ⋅C\displaystyle \gamma \cdot C

提示模板

以上所有技巧,如果每次使用都从头写一遍,效率太低。所以实战中,我们会把它沉淀为提示模板——一张可复用的“点单卡”。这张卡里,上下文、角色、约束各就各位,你只需要往固定位置替换变量。就像连锁餐厅的厨房:每种菜品都有标准作业卡,不管哪家分店、哪班厨师,照着卡做,出品必然稳定。

一个适用于前端 React 场景的四段式模板可以长这样:

注意这个模板的四个隐知识:第一,角色先行,让 AI 从人设进入状态;第二,背景只放与任务直接相关的信息,不把整个项目的 package.json 塞进去;第三,任务里包含正面要求 + 负面约束(“不要修改其他已有字段”);第四,输出要求划死边界(只输出一个文件,且不解释)。这就是“上下文、角色、约束”三者在模板中的落位。

模板设计还有两个进阶技巧。一是少样本示例(Few-shot Examples)——在提示词里附上一个“输入→输出”的范例,让 AI 照猫画虎。例如:给出一段“用户名输入框”的实现代码作为范例,再让它写“手机号输入框”。AI 会从范例中推断你的代码风格、命名习惯、注释密度,这比单纯说“风格保持一致”有效十倍。二是变量占位符——把模板中可变的部分用 {{变量名}} 标注,你需要哪个功能,就复制模板、替换占位符。

模板是提示工程的“固定资产”。一次精心设计,无数次复用;每换一个项目,只需要更新“背景”和“约束”这两个变量,角色与结构保持不变。它让提示工程从“每次随机发挥”变成“工业化标准作业”。

text15 行
# 角色你是一位资深 React 前端工程师,擅长编写可维护的组件代码。 # 背景(上下文)项目使用 React 18 + TypeScript + Vite,组件库为 antd 5.x。现有代码结构:src/components/forms/UserForm.tsx,其中包含表单基础布局。 # 任务基于上述背景,为 UserForm 增加"手机号"字段,要求:- 使用 antd 的 Form 和 Input 组件- 手机号格式校验:11 位,以 1 开头- 不修改其他已有字段的逻辑 # 输出要求只输出 UserForm.tsx 的完整代码,不要解释,不要输出其他文件。

迭代调优

没有人能一次写出完美的提示词——就像没人能第一次下厨就做出满分宴席。但大多数人低估了迭代的力量:他们试了一次提示词,AI 回答不理想,立刻得出结论“AI 不行”,然后放弃了。而提示工程的本质,是一项工程方法:测量、调整、再测量,直到达到期望。

迭代的第一步是评估。对照上文的 Q 评分框架,给 AI 的输出打分:能不能运行?符不符合项目风格?有没有违反约束?把分数和 AI 的实际输出记录下来——建议直接保存在一个本地 prompt-log.md 文件里,按日期、任务、提示词版本、输出摘要、得分、反思六列记录。有了日志,你就有了实验数据,而不是靠感觉。

第二步是小步快跑。每次只改一个变量:这次只增加一条约束,下次只调整角色设定,再下次只补充一段上下文。不要同时改两个变量——否则你无法判断是哪个改动带来了效果提升。这就像炒菜时每次只调整一种调料,才能准确知道咸了还是淡了是哪种调料导致的。

第三步是对比实验。针对同一个任务,写两个版本的提示词(A 版:无角色;B 版:有角色),分别运行,对比输出质量。这个方法在学术界叫消融实验(Ablation Study),在提示工程中同样适用。你会发现,不同类型的任务对三个维度的敏感度不同:样式微调类任务,约束比角色更重要;复杂组件开发任务,上下文比约束更关键;代码评审类任务,角色设定往往带来显著提升。

迭代要建立“反馈回路”:AI 的输出 → 你的评估 → 下一版提示词 → 新的输出。这个回路跑得越快,你的提示工程能力提升越快。它和个人成长的关系很简单——你的初版提示词决定了 AI 的下限,而你的迭代速度决定了整个协作的上限。

最后,把最成功的模板归档到你的个人模板库。三个月后你会发现,你不再需要“思考”如何写提示词,因为 80% 的日常任务都有现成的模板可套。剩下的 20%,正是你迭代能力的体现,也是你作为工程师,与 AI 协作的核心竞争力所在。

AI 应用场景

场景一:从零生成一个可运行的前端页面

阶段:提示词设计(上下文 + 角色 + 约束)

解决的问题:传统方式是从空白文件开始手写组件,至少需要半小时搭建骨架;而直接问 AI“写个页面”又容易得到偏离需求的结果。通过结构化提示词,让 AI 一次生成贴近项目规范的核心代码。

具体案例:一位前端工程师用 V0 生成一个“用户管理表格页”。他给出的提示词是:“你是一位精通 React + antd 的前端工程师。项目使用 Ant Design Pro 框架。请生成一个用户列表页面,包含:搜索栏(按姓名、邮箱)、数据表格(含分页)、新增用户按钮。约束:使用 ProTable 组件,不引入额外依赖,代码放在一个文件中。”AI 生成的页面可以直接接入项目路由,稍作修改即可上线。

场景二:让 AI 修复线上 Bug

阶段:上下文管理(错误信息 + 相关代码 + 期望行为)

解决的问题:线上 Bug 的定位通常占开发时间的 60% 以上。传统调试靠断点与日志排查,AI 辅助下,将错误堆栈、关键代码、期望行为一次性交给 AI,可大幅缩小排查范围。

具体案例:一个 Vue 项目出现“列表渲染时偶发白屏”。工程师将完整错误堆栈、List 组件关键代码、以及“期望列表正常渲染,不影响其他功能”的约束一起发给 Devin,AI 很快定位到是响应式对象中嵌套数组的更新未触发视图刷新,并给出修复方案。

场景三:用角色扮演做代码评审

阶段:角色设定(专家人设 + 评审清单)

解决的问题:人工评审时容易受个人盲区影响,漏掉性能、安全或可访问性问题。让 AI 扮演“严格的代码评审官”,可以当作第二双眼睛。

具体案例:团队用 Copilot 的聊天模式对 PR 进行评审,提示词为:“你是一位代码评审专家,请 review 以下代码。重点检查:内存泄漏(事件监听是否清理)、安全问题(是否有 XSS 风险)、可维护性(命名与函数长度)。输出格式:每个问题标注严重程度,给出修改建议。”AI 在几秒内列出了 7 个潜在问题,其中两个是人工评审遗漏的。

Python 演示

python45 行
"""prompt_optimizer.py一个简化的提示词配置健康检查工具,模拟"上下文/角色/约束"三维度评分。""" class PromptConfig:    def __init__(self, name, context_score, role_score, constraint_score):        self.name = name        self.context_score = max(0.0, min(1.0, context_score))        self.role_score = max(0.0, min(1.0, role_score))        self.constraint_score = max(0.0, min(1.0, constraint_score))     def total_score(self):        # 权重:上下文 0.4,角色 0.3,约束 0.3        return (0.4 * self.context_score +                0.3 * self.role_score +                0.3 * self.constraint_score)     def suggest(self):        tips = []        if self.context_score < 0.6:            tips.append("补充背景:粘贴错误堆栈、相关代码片段、技术栈说明")        if self.role_score < 0.6:            tips.append("增加角色:例如'你是一位资深 React 前端工程师'")        if self.constraint_score < 0.6:            tips.append("添加约束:明确不要做什么、输出格式是什么")        result = "优化建议:" + ";".join(tips) if tips else "配置完善,直接使用"        return result  def main():    # 模拟三份实际提示词配置    configs = [        PromptConfig("模糊点单", 0.20, 0.30, 0.20),        PromptConfig("只定角色", 0.40, 0.90, 0.30),        PromptConfig("完整配置", 0.90, 0.85, 0.95),    ]    for cfg in configs:        print("=" * 40)        print("配置:%s | 评分:%.2f" % (cfg.name, cfg.total_score()))        print(cfg.suggest())  if __name__ == "__main__":    main()
目的:这是提示词配置的“体检仪”——输入三个维度的主观评分,自动计算加权总分并给出优化建议,帮助你养成结构化设计提示词的习惯。
  1. class PromptConfig:定义一个提示词配置类,让每个配置像一张“点单卡”一样可比较。
  2. self.context_score = max(0.0, min(1.0, context_score))将分数限制在 0~1 区间,防止越界,相当于把食材“夹到台面上”。
  3. return (0.4 * self.context_score + 0.3 * self.role_score + 0.3 * self.constraint_score)加权求和,体现“上下文是地基、角色与约束是支柱”的排序。
  4. if self.context_score < 0.6:用阈值判断该维度是否及格,低于 0.6 就给出针对性建议。
  5. tips.append("补充背景:粘贴错误堆栈、相关代码片段、技术栈说明")把优化建议积累到列表中,最后统一输出,方便参考。
  6. print("配置:%s | 评分:%.2f" % (cfg.name, cfg.total_score()))用格式化字符串打印每份配置的得分,便于横向对比。
  7. if __name__ == "__main__": main()标准入口,让脚本既能被导入也能直接运行。

常见误区

误区“我把需求写了一大段,把所有背景都塞进去,AI 怎么还是答非所问?我不理解,信息越多不是越清楚吗?”

正解提示词的效果与长度无关,与信息密度和相关性有关。上下文里混入大量与任务无关的内容,反而会引入噪音,占用 Token 预算,甚至误导 AI 从无关信息里“找线索”。正确做法是围绕问题,只给相关的代码、报错、技术栈,并用简短语句组织。就像你把整个冰箱都递给大厨,他只会觉得无处下手;你把三样新鲜食材收拾好递给他,他立刻知道该做什么菜。

为何常见:新手容易把“详细”等同于“冗余”,以为写得越多 AI 越理解自己。实际上,大模型的注意力机制会被无关信息分散,这在上下文窗口增大后尤为明显。

误区“'你是资深工程师'这种话就是心理安慰吧?AI 又不真的懂,有没有角色设定应该差不了多少。”

正解角色设定会显著影响输出分布。当模型被告知“你是一位前端架构师”时,它在训练数据中与该身份相关的参数模式被强化,输出的代码更可能包含工程化考量(如性能、可维护性);而“你是一位刚入行的实习生”则会得到更基础、更啰嗦的解法。这不是心理安慰,而是实打实的概率偏移。

为何常见:人类习惯了“身份只是称谓”的社交礼仪,容易低估身份标签对 AI 这一“数据分布机器”的引导作用。但对 LLM 而言,“你是谁”直接决定“你怎么回答”。

误区“只要我把'不要用 X、不要写 Y、不要做 Z'全部列出来,AI 肯定会规规矩矩的。”

正解约束过密会导致两个问题:一是相互矛盾(如“用函数式编程”与“保持代码风格与现有 class 组件一致”冲突),二是压缩上下文空间,让 AI 陷入“规则记忆负担”而忽略核心任务。约束要“少而关键”——优先保证否定项对任务有实质影响,正面指令优先于负面指令。就像点菜时,告诉大厨“清蒸,少盐”比说十个“不要”有用得多。

为何常见:受“法无禁止即可为”的人类认知影响,人们倾向于用堆砌禁令来限制 AI。但 AI 是概率模型,规则抵触越多,生成的“自由度”越小,反而容易产生僵硬、非最优的输出。

误区“我已经用了最标准的模板了,为什么效果还是不好?大概这个 AI 工具本身能力不行吧。”

正解提示工程本质是一个实验过程。即便模板结构正确,角色、上下文、约束的“数值配比”也需要针对具体任务调优。一次效果不佳,应该尝试改动单一维度并对比结果,而不是直接断定工具不行。把每次迭代记录下来,你会逐渐建立“什么任务吃上下文、什么任务吃角色”的直觉。这与做菜一样——大厨的菜谱也是反复试出来的。

为何常见:人们习惯把 AI 看作“人”,指望第一句话就被理解。但 AI 更像个“有超强天赋但需要指令清晰的新人”,它不读心,只知道基于你给的输入做预测。迭代,是你的输入逐步逼近真实意图的过程。

误区“AI 看不懂我的项目,是不是因为信息不够?我把整个项目的文件都贴给它,肯定能给出更准确的答案。”

正解直接把整个项目塞给 AI,会很快耗尽上下文窗口(Token 预算),导致输出质量严重下降。正确的做法是“按需裁剪”:只贴与任务相关的文件片段、关键函数、配置文件的核心部分。此外,注意把“背景信息”和“指令”分节隔开,避免 AI 混淆。就像大厨不需要整间超市,只需要你今晚要用的那几样菜。

为何常见:人们对“模型上下文窗口越来越大”的宣传印象深刻,误以为窗口大 = 随便塞。但窗口是上限,不是建议值。Token 总量固定,“输入越长 = 输出越短”的物理规律始终存在。

面试题

Q1. 下列哪个维度在提示词中主要负责“告诉 AI 要做什么、有什么限制”?

单选题 · easy

  • A.角色设定
  • B.上下文管理
  • C.约束指定← 正确答案
  • D.输出格式

答案:C。约束指定直接划定了 AI 的行为边界,如“不要做什么、按照什么格式输出”。“角色”决定以什么身份回答,“上下文”提供背景信息,但真正限制 AI“不能越界”的是约束。

Q2. 在 Token 预算公式 T_total = T_context + T_instruction + T_output 中,如果上下文塞得过满,会导致?

单选题 · easy

  • A.模型推理速度变快
  • B.输出空间被压缩,回答质量下降← 正确答案
  • C.上下文窗口自动扩容
  • D.角色设定不再生效

答案:B。总预算固定,T_context 占用过多,T_output 就被压缩,AI 只能给出更简短、信息量不足的回答。这与“台面被食材占满,大厨没地方切菜”同理。

Q3. 在提示词中设置“你是一位资深前端架构师”的角色,其本质作用是?

单选题 · mid

  • A.让模型加载一个独立的推理引擎
  • B.让模型输出偏向该身份的语料分布← 正确答案
  • C.让模型忽略上下文信息
  • D.让模型具备更强的数学计算能力

答案:B。角色设定的作用是概率偏移——模型在训练中见过海量“架构师文风”的代码与回答,指定角色后输出分布向该风格靠拢。它不会改变模型的基础能力,更不会加载额外引擎。就像导航切换“货车模式”,只是换了一套路线规划偏好。

Q4. 关于否定式约束(如“不要使用 TypeScript”),下列说法正确的是?

单选题 · mid

  • A.否定式约束越多越好
  • B.正面指令应优先于负面指令← 正确答案
  • C.否定式约束可以完全替代上下文
  • D.约束与格式要求无关

答案:B。经验法则是“先给目标,再划红线”。正向指令让 AI 知道去哪里,负面约束只是告诉它哪里不能去。如果正面目标缺失,AI 只能在“不要做什么”的真空里瞎猜。

Q5. 四段式提示模板包含以下哪些部分?

单选题 · easy

  • A.角色、背景、任务、输出要求← 正确答案
  • B.角色、代码、测试、部署
  • C.上下文、损失函数、优化器、数据集
  • D.系统提示、温度参数、top_p、频率惩罚

答案:A。标准四段式模板是“角色 → 背景(上下文)→ 任务(含约束)→ 输出要求”。B、C、D 分别混入了工程部署、机器学习训练、采样参数等无关概念。

Q6. 提示工程的迭代调优中,为什么要“每次只改变一个变量”?

单选题 · hard

  • A.减少 API 调用费用
  • B.便于确认效果变化由哪个因素导致← 正确答案
  • C.防止模型触发安全过滤
  • D.缩短提示词的平均长度

答案:B。同时改动多个变量时,无法归因“哪个改动带来了效果提升”,迭代就退化为玄学调参。控制变量是实验方法的核心,也是“小步快跑”策略的依据。

Q7. 下列哪些做法属于上下文管理的正确操作?

多选题 · mid

  • A.贴上完整错误堆栈与相关组件代码← 正确答案
  • B.把整个项目源码全部粘贴
  • C.标注技术栈(Vue 3 + TS + Vite)← 正确答案
  • D.贴无关的历史对话记录

答案:AC。有效上下文的关键是“与任务直接相关”。错误堆栈、相关代码、技术栈标注都是高价值背景;整项目源码会耗尽 Token 预算,无关对话记录则是纯噪音。

Q8. 代码质量评分公式 Q = α·A + β·B + γ·C 中,C(一致性)主要衡量什么?

单选题 · mid

  • A.代码能否直接运行
  • B.代码与项目现有风格的契合度
  • C.代码对约束清单的遵守程度← 正确答案
  • D.代码的注释数量

答案:C。C 衡量的是“AI 有没有乖乖遵守你列的约束”——你没说“不要用第三方库”,AI 自然可能乱加依赖,C 分就低。可用性是 A,规范性是 B。

Q9. 下列哪种任务,对“角色设定”的敏感度通常最高?

单选题 · hard

  • A.字符串拼接的纯函数生成
  • B.代码评审与重构建议← 正确答案
  • C.CSS 颜色值微调
  • D.正则表达式编写

答案:B。评审与重构类任务对“判断标准”依赖极强,角色设定能明显改变评审的严苛程度与关注点。而纯函数、颜色值、正则这类任务,输出更多由输入直接决定,角色的影响较小。

Q10. 提示模板中引入少样本示例(Few-shot)的用途包括?

多选题 · hard

  • A.让模型模仿示例中的代码风格← 正确答案
  • B.代替上下文提供背景信息
  • C.暗示输出格式与详细程度← 正确答案
  • D.提高模型的数学运算能力

答案:AC。少样本示例的作用是“风格对齐”——展示你想要的命名习惯、注释密度、结构组织,也暗示输出格式。它不是上下文替代品,因为示例不包含任务所需的背景数据;更不会改变模型的基础能力。