标准回答
System Prompt 的职责
在 Agent 系统里,System Prompt 是定义「这个智能体是谁、能做什么、怎么做」的最高优先级指令层,通常承载六类职责:角色与边界(人设、服务范围、不该做什么);能力与工具说明(有哪些工具、参数语义、调用时机);行为与格式规范(语气、步骤、输出结构如 JSON 约定);安全与拒答策略(合规红线、越权请求如何拒绝);少样本示例(用 1~3 个范例锚定期望行为);上下文与记忆约定(如何使用对话历史、长期记忆与检索内容)。
为什么会越来越长
随着场景变多、工具增加、补丁式地不断加规则与例外,System Prompt 容易膨胀。代价有三:token 成本随每次调用线性增加;注意力稀释——关键指令淹没在大段文本里,模型遵循度反而下降;维护困难——规则相互冲突、改一处牵动全局,难以回归测试。
如何处理膨胀
核心思路是上下文工程而非一味堆字。第一,模块化与分层:把不变的静态系统提示与运行时动态注入(用户信息、检索片段、当前子任务)分开管理。第二,按需加载 / 渐进式披露:工具与 Skill 的详细说明外置,平时只暴露简短摘要,命中时再注入完整描述,避免一次性塞满。第三,精简与外置示例:少样本示例改为按任务类型动态选取,而非全部常驻。第四,用 prompt caching 降成本:把稳定前缀缓存,复用时只计增量。第五,定期裁剪与评测:建评测集回归遵循度,删冗余、合并重复规则,用数据驱动取舍。
常见误区
⚠️ 常见踩坑
误区一:把所有规则、工具文档、例外都堆进 System Prompt,以为「写得越全模型越听话」——实际会注意力稀释、成本飙升。误区二:把每次请求都变化的动态内容(检索结果、用户输入)硬写进系统提示,导致 prompt caching 失效、缓存命中率为零。静态与动态必须分层。
追问
追问 1:System Prompt 和动态注入的上下文应该怎么划分边界?
判断标准是「是否随请求变化」。跨会话稳定的内容(角色、工具清单、格式与安全规范)放静态 System Prompt,可被 prompt caching 复用;随用户、会话、子任务变化的内容(用户画像、检索片段、当前目标、对话历史)放动态注入区,拼在静态前缀之后。这样既保证缓存命中,又让单次请求只携带当下必要的信息。
追问 2:工具很多时,工具描述也会让上下文爆炸,怎么办?
用渐进式披露:默认只给模型一份简短的工具名称与一句话用途清单,让它先决定大致用哪个;命中后再把该工具的完整参数 Schema 与用法注入。也可做工具检索(按当前任务向量召回 Top-K 工具)或按角色/场景分组只暴露子集,避免几十个工具的详细描述常驻上下文。
🔗 相似问题
同一考点的不同问法,面试官可能换着问,一起刷更稳
没找到想看的面试题?把你想看的告诉我们 →
延伸学习
按主题分类的相关资源,便于系统复习