核心概念

Prompt Builder 系统

Prompt Builder 系统

概述

Aster 的 Prompt Builder 系统提供了一个模块化、可扩展的方式来构建 Agent 的 System Prompt。它借鉴了 Claude Code 的设计理念,支持动态组合多个 Prompt 模块,提供 14+ 预定义模块和 8 个预设模板。

主要特性

  • 14+ 预定义模块:覆盖各种场景
  • 8 个预设模板:开箱即用的 Agent 配置
  • 动态上下文注入:自动适应运行环境
  • 智能优化:Prompt 压缩和优化
  • 完全可扩展:轻松添加自定义模块

核心概念

PromptModule 接口

type PromptModule interface {
    Name() string                       // 模块名称
    Build(ctx *PromptContext) (string, error)  // 构建模块内容
    Priority() int                      // 优先级(决定注入顺序,0-100)
    Condition(ctx *PromptContext) bool  // 是否应该注入此模块
}

PromptContext

构建上下文,包含构建 Prompt 所需的所有信息:

type PromptContext struct {
    Agent       *Agent                          // Agent 实例
    Template    *types.AgentTemplateDefinition  // 模板定义
    Environment *EnvironmentInfo                // 环境信息
    Sandbox     *SandboxInfo                    // 沙箱信息
    Tools       map[string]tools.Tool           // 可用工具
    Metadata    map[string]interface{}          // 元数据
}

预定义模块

基础模块

1. BasePromptModule (优先级: 0)

  • 功能: 从模板中获取基础 System Prompt
  • 条件: 总是注入

2. CapabilitiesModule (优先级: 5)

  • 功能: 基于可用工具自动生成能力说明
  • 条件: metadata["show_capabilities"] == true
  • 示例输出:
## Your Capabilities

You can:
- Read and analyze files
- Create and modify files
- Execute shell commands
- Search the web for information

3. EnvironmentModule (优先级: 10)

  • 功能: 注入环境信息(工作目录、平台、日期、Git 仓库)
  • 条件: 环境信息可用
  • 示例输出:
## Environment Information

- Working Directory: /Users/user/project
- Platform: darwin
- Date: 2025-11-24
- Git Repository: Yes
- Current Branch: main

工具和任务管理

4. ToolsManualModule (优先级: 20)

  • 功能: 注入工具手册
  • 条件: 工具可用且配置允许
  • 配置选项:
ToolsManual: &types.ToolsManualConfig{
    Mode:    "all",  // "all", "listed", "none"
    Include: []string{"Read", "Write"},
    Exclude: []string{"Bash"},
}

5. TodoReminderModule (优先级: 25)

  • 功能: 注入任务管理提醒
  • 条件: Todo 配置启用且 ReminderOnStart == true

开发和协作

6. CodeReferenceModule (优先级: 30)

  • 功能: 注入代码引用规范
  • 条件: metadata["agent_type"] == "code_assistant""developer"

7. CollaborationModule (优先级: 45)

  • 功能: 注入多 Agent 协作信息
  • 条件: metadata["room_id"] 存在
  • 配置示例:
Metadata: map[string]interface{}{
    "room_id":            "room-123",
    "room_member_count":  3,
    "room_members":       []string{"alice", "bob", "charlie"},
}

8. WorkflowModule (优先级: 50)

  • 功能: 注入工作流上下文
  • 条件: metadata["workflow_id"] 存在

安全和性能

9. SecurityModule (优先级: 35)

  • 功能: 注入安全策略
  • 条件: metadata["enable_security"] == true

10. PerformanceModule (优先级: 40)

  • 功能: 注入性能优化建议
  • 条件: metadata["enable_performance_hints"] == true

其他模块

  • SandboxModule (优先级: 15): 沙箱环境信息
  • CustomInstructionsModule (优先级: 55): 用户自定义指令
  • LimitationsModule (优先级: 60): 限制说明
  • ContextWindowModule (优先级: 65): 上下文窗口管理

预设模板

1. CodeAssistantPreset

用途: 专业代码助手 包含模块: base, capabilities, environment, sandbox, tools_manual, todo_reminder, code_reference 使用场景: 代码编写、审查、调试

2. ResearchAssistantPreset

用途: 研究助手 包含模块: base, capabilities, environment, tools_manual, todo_reminder 使用场景: 信息收集、文献研究、数据分析

3. DataAnalystPreset

用途: 数据分析师 包含模块: base, capabilities, environment, sandbox, tools_manual, todo_reminder, performance 使用场景: 数据分析、可视化、统计分析

4. DevOpsEngineerPreset

用途: DevOps 工程师 包含模块: base, capabilities, environment, sandbox, tools_manual, todo_reminder, security 使用场景: 基础设施管理、CI/CD 配置

5. SecurityAuditorPreset

用途: 安全审计员 包含模块: base, capabilities, environment, tools_manual, todo_reminder, security, code_reference 使用场景: 安全审计、漏洞扫描、合规检查

其他预设

  • TechnicalWriterPreset: 技术文档编写
  • ProjectManagerPreset: 项目管理
  • GeneralAssistantPreset: 通用助手

使用示例

基础使用

// 使用预设模板
deps := createDependencies()
RegisterAllPresets(deps.TemplateRegistry)

agent, err := agent.Create(ctx, &types.AgentConfig{
    TemplateID: "code-assistant",
}, deps)

// 获取构建后的 System Prompt
systemPrompt := agent.GetSystemPrompt()

自定义配置

agent, err := agent.Create(ctx, &types.AgentConfig{
    TemplateID: "code-assistant",
    Metadata: map[string]interface{}{
        "agent_type":                "code_assistant",
        "show_capabilities":         true,
        "show_limitations":          true,
        "enable_security":           true,
        "enable_performance_hints":  true,
        "custom_instructions":       "Always write tests first.",
    },
}, deps)

Room 协作场景

agent, err := agent.Create(ctx, &types.AgentConfig{
    TemplateID: "code-assistant",
    Metadata: map[string]interface{}{
        "room_id":            "room-123",
        "room_member_count":  3,
        "room_members":       []string{"alice", "bob", "charlie"},
    },
}, deps)

工具手册配置

deps.TemplateRegistry.Register(&types.AgentTemplateDefinition{
    ID:           "selective-tools",
    SystemPrompt: "You are a selective assistant.",
    Tools:        []interface{}{"Read", "Write", "Bash"},
    Runtime: &types.AgentTemplateRuntime{
        ToolsManual: &types.ToolsManualConfig{
            Mode:    "listed",
            Include: []string{"Read", "Write"},  // 只包含这两个
        },
    },
})

自定义模块

创建自定义 Prompt 模块:

type CustomModule struct{}

func (m *CustomModule) Name() string { return "custom" }
func (m *CustomModule) Priority() int { return 35 }
func (m *CustomModule) Condition(ctx *PromptContext) bool {
    return ctx.Metadata["enable_custom"] == true
}
func (m *CustomModule) Build(ctx *PromptContext) (string, error) {
    return "## Custom Section\n\nYour custom content here.", nil
}

buildSystemPrompt 方法中添加:

builder.AddModule(&CustomModule{})

高级功能

Prompt 优化

optimizer := &PromptOptimizer{
    MaxLength:        10000,  // 最大字符数
    RemoveDuplicates: true,   // 移除重复空行
    CompactFormat:    true,   // 紧凑格式
}

optimized := optimizer.Optimize(systemPrompt)

Prompt 分析

stats := AnalyzePrompt(systemPrompt)
fmt.Println(FormatStats(stats))
// 输出: Prompt Stats: 2652 chars, 87 lines, 12 sections, ~663 tokens

Prompt 压缩

compressor := &PromptCompressor{
    TargetLength:     5000,
    PreserveSections: []string{"Tools Manual", "Security"},
}

compressed := compressor.Compress(systemPrompt)

最佳实践

1. 选择合适的预设

根据 Agent 的主要用途选择预设模板:

  • 代码相关 → CodeAssistantPreset
  • 研究分析 → ResearchAssistantPreset
  • 数据处理 → DataAnalystPreset
  • 运维部署 → DevOpsEngineerPreset

2. 合理使用 Metadata

通过 Metadata 控制模块注入:

Metadata: map[string]interface{}{
    "agent_type":                "code_assistant",  // 触发 CodeReferenceModule
    "show_capabilities":         true,              // 触发 CapabilitiesModule
    "enable_security":           true,              // 触发 SecurityModule
    "enable_performance_hints":  true,              // 触发 PerformanceModule
}

3. 控制 Prompt 长度

对于上下文窗口有限的模型:

Context: &types.ContextManagerOptions{
    MaxTokens: 100000,  // 触发 ContextWindowModule
}

4. 使用工具手册配置

减少不必要的工具说明:

ToolsManual: &types.ToolsManualConfig{
    Mode:    "listed",
    Include: []string{"Read", "Write"},  // 只包含必要的工具
}

5. 添加自定义指令

针对特定任务添加额外指导:

Metadata: map[string]interface{}{
    "custom_instructions": "Always follow TDD. Write tests first.",
}

性能优化

Token 使用优化

  1. 选择性注入模块
    • 只启用必要的模块
    • 使用 Metadata 控制
  2. 工具手册优化
    • 使用 Mode: "listed" 只包含必要工具
    • 使用 Exclude 排除不需要的工具
  3. Prompt 压缩
    • 使用 PromptOptimizer 移除冗余
    • 使用 PromptCompressor 智能压缩

监控 Prompt 大小

stats := AnalyzePrompt(systemPrompt)
log.Printf("Prompt size: %d chars, ~%d tokens",
    stats.TotalLength,
    stats.EstimatedTokens)

if stats.EstimatedTokens > 5000 {
    log.Println("Warning: Prompt is large, consider optimization")
}

与 Claude Code 的对比

特性Claude CodeAster Prompt Builder
构建方式模块化拼凑模块化拼凑
动态注入支持支持
条件模块支持支持
优先级控制隐式显式(Priority 方法)
自定义模块不支持支持
配置驱动部分支持完全支持
预设模板8 个预设

参考