系统提示工程 — 多模板策略与模型适配
学习目标
- 理解 Browser Use 的多模板文件策略
- 掌握模板选择的五维决策逻辑
- 了解 Browser Use 自研模型的优化提示
前置知识
- 系统提示组装策略 — 分层架构、缓存边界、多模板 vs 拼接
下文假设你已理解系统提示工程的通用原理,直接聚焦 Browser Use 的具体实现。
项目实践
多模板文件
Browser Use 在 browser_use/agent/system_prompts/ 目录中维护 7 套独立的 Markdown 模板:
| 模板文件 | 适用场景 | 特点 |
|---|---|---|
system_prompt.md | 默认:带思维链 | 完整指令,包含 thinking/evaluation/memory/next_goal 格式 |
system_prompt_no_thinking.md | use_thinking=False | 移除 thinking 字段 |
system_prompt_flash.md | 非 Anthropic 的低能力模型 | 精简版,移除冗长解释 |
system_prompt_flash_anthropic.md | Anthropic 模型 + flash | Anthropic 适配版精简 |
system_prompt_anthropic_flash.md | Claude Opus/Haiku 4.5 | 满足 4096+ token 的 Prompt Caching 要求 |
system_prompt_browser_use.md | Browser Use 自研模型 | 简化指令(模型已 fine-tuned) |
system_prompt_browser_use_flash.md | Browser Use 模型 + flash | 极简版 |
system_prompt_browser_use_no_thinking.md | Browser Use 模型 + 无思维链 | 无 thinking 字段 |
模板选择逻辑
SystemPrompt 类的 _load_prompt_template() 方法根据五个维度选择模板:
模板内容结构
默认模板(system_prompt.md)包含以下核心部分:
- 角色定义:“You are an AI agent that can interact with a web browser…”
- 输出格式:JSON schema 描述 thinking/evaluation/memory/next_goal/action
- 动作指令:可用动作的描述(由
max_actions_per_step参数控制) - 最佳实践:如何评估、如何规划、如何处理错误
自定义系统提示
Browser Use 支持两种自定义方式:
override_system_message:完全替换默认提示extend_system_message:在默认提示后追加自定义内容
agent = Agent( task="...", llm=llm, extend_system_message="Always save extracted data to a file before calling done.",)Prompt Caching 优化
所有系统提示都标记为 cache=True:
self.system_message = SystemMessage(content=prompt, cache=True)对于 Anthropic 4.5 模型,使用更长的 system_prompt_anthropic_flash.md 以确保 prompt 超过 4096 token,这是 Claude Opus/Haiku 4.5 的 prompt caching 激活阈值。
问题与规避
模板维护成本
问题:7 套模板需要同步更新(如添加新动作指令时,所有 7 套都要改)。
对策:
- 模板选择是确定性的,可以用单元测试验证每个组合
- 大部分变更只影响 1-2 套模板(如 flash 模式变更不影响正常模式)
- Browser Use 自研模板明显更短,减少维护量
自定义提示与自动模板选择的冲突
问题:用户设置 override_system_message 后,模板选择逻辑被跳过。
对策:
override设计就是完全替换,这是预期行为- 如果需要保留自动优化,使用
extend而非override
设计取舍
模板文件 vs 模板引擎
| 方案 | 优势 | 代价 |
|---|---|---|
| 独立模板文件 | 可独立审查、测试、diff | 组合爆炸(2^N 个文件) |
| 模板引擎(Jinja2) | 灵活组合、无重复 | 渲染后调试困难 |
Browser Use 选择独立文件是因为:
- 模板数量可控(只维护最常用的 7 种组合)
- 每个模板可以独立 diff 和 review
- 不需要运行时渲染的性能开销