动态Prompt拼装:Agent系统设计核心
2026年7月28日 · 把Prompt做成系统组件 · IT中华技术日记
IT中华 本文整理七牛开发者关于动态 Prompt 拼装的核心观点:当 LLM 进入 Agent 执行循环,固定 Prompt 已无法覆盖整段任务,Prompt 应从写死的文字变成按当前状态实时构造的系统组件。
从固定文本到动态组件
以修 Bug 为例,Agent 三轮调用的上下文完全不同:
| 轮次 | 模型需要看到的信息 |
|---|---|
| 第一轮 | 用户目标、项目背景、当前代码结构 → 定位问题 |
| 第二轮 | 相关文件实现 + 错误日志 → 缩小范围 |
| 第三轮 | 测试结果 + 失败原因 → 调整方向 |
Prompt 里的四类信息
- 稳定信息:身份、规则、安全限制、输出格式(贯穿整个任务,基本不变)
- 任务信息:用户目标,生命周期与单次任务绑定
- 状态信息:随执行刷新(如"已修改 auth.py,测试失败")
- 外部信息:按需加载的文件内容、搜索结果、工具返回,用完可移出
上下文膨胀与信息关注偏移
Agent 运行在持续循环里,每轮产生新信息。若 Prompt 不变,会同时面临两个问题:
- 上下文膨胀:历史记录堆积,真正该关注的当前状态被稀释
- 信息关注偏移:每个阶段所需上下文不同,写死的 Prompt 无法跟随任务重心移动
动态拼装让每次调用只带这一步真正需要的信息。
与 Agent Harness 的关系
Agent Harness 拆分为:上下文窗口管理、Prompt 架构、工具集成、编排、状态管理、错误处理。动态 Prompt 拼装属于Prompt 架构,与上下文窗口管理紧密协作:
- 上下文窗口管理:负责"预算怎么分"(保留/压缩/丢弃)
- 动态 Prompt 拼装:负责"怎么组装"(把选中信息按结构拼成输入)
工程实现:模块化 + Prefix Cache
常见做法是将 Prompt 拆为可管理模块,运行时按任务组合:
prompt/
├── system.md
├── role.md
├── rules.md
├── tools.md
├── memory.md
└── task_template.md
final_prompt = render(
system = system_prompt,
rules = rules,
goal = current_task,
context = retrieved_files,
history = short_memory,
tools = available_tools,
)
成本细节:推理服务多支持 Prefix Cache,相同前缀可复用计算结果。把稳定的 System Prompt/规则/工具描述固定放最前,变化的状态和工具返回排后面,前缀稳定命中缓存,省延迟和费用。
信息筛选的取舍
上下文越长,Token 成本越高、推理越慢、关键信息越易被淹没。好的动态 Prompt 每一步都在做减法——及时移除用不上的信息,只保留当前目标、当前状态和决策所需上下文。这和人工作时整理桌面很像。
IT中华 小结:真正稳定的 Agent 不靠一条精巧的超级 Prompt,而是靠背后的状态管理、上下文筛选、工具反馈和信息组合,让模型每次行动时只看到最相关内容。
关于IT中华
IT中华(www.itzh.vip)持续关注 AI Agent 工程实践。本文转载改写自博客园七牛开发者技术文章。关注IT中华,深入 Agent 系统设计。
IT中华 · www.itzh.vip · 技术日记