$kernelink route --hydrate --safe

页面加载 /
跳到正文
18.md
workspace / posts
~/posts/18.md 阅读中

Agent动态Prompt拼装:把Prompt做成系统组件

TECH DIARY

动态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 · 技术日记

comments.cmd 可写入
guest@kernelink:~/posts/18$ comment --compose
identity.env 访客信息
插入 访客会话 Text + UBB · UTF-8 · LF 0 字符