mcpField
P
prompt-architecture

prompt-architecture

github.com/itallstartedwithaideaAgent 工作流4477 次安装28 周前更新
代码仓库

关于 prompt-architecture

prompt-architecture 是一项用于构建 Agent 指令的 Agent Skills 技能。它分层处理固定约束、任务细节和输出引导,并支持结构校验与动态示例选择。

主要功能

  1. 01区分 system、user 和 assistant 层
  2. 02定义输出架构与约束
  3. 03支持思维链脚手架
  4. 04动态选择少样本示例
  5. 05校验提示词结构

适用场景

  1. 01降低重复 Agent 任务的结果差异
  2. 02要求输出 JSON 或指定架构
  3. 03为 Agent 设置行为约束
  4. 04构建用于部署的系统提示词

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/itallstartedwithaidea/agent-skills --skill prompt-architecture

安装后在 Claude Code 中输入/prompt-architecture确认已加载。

详细介绍

提示词架构

Agent Skills™ 的一部分,由 googleadsagent.ai™ 提供

描述

提示词架构是对 Agent 指令进行结构工程设计。随意编写提示词会产生脆弱、不一致的结果,而架构化的提示词设计能够创建确定性、高性能的 Agent 行为,使其经得起对抗性条件的考验,并可扩展至数千次调用。这项技能提炼了 googleadsagent.ai™ 平台开发的提示词工程方法;在该平台中,Buddy™ 通过精心分层的提示词结构处理复杂的 Google Ads 分析。

其基本原则是:提示词不是字符串,而是程序。架构良好的提示词具有清晰的执行模型:系统级不变量确立 Agent 的身份和约束,用户级指令定义当前任务,助手级预置则塑造输出格式和推理路径。每一层都有不同的用途,在组合之前必须分别进行设计。

高级提示词架构包含约束传播、输出架构强制、思维链脚手架,以及动态少样本示例选择。这些技术可以消除“提示词抽奖”问题,即相同输入在不同运行中产生质量悬殊的输出。

适用场景

  • Agent 对相同输入的输出在不同调用中不一致
  • 需要确定性的格式(JSON、结构化报告、特定架构)
  • 复杂的多步推理需要明确的思维链脚手架
  • Agent 必须遵守严格的行为约束(安全性、语气、范围)
  • 需要通过少样本示例建立特定领域的模式
  • 正在设计用于大规模生产部署的系统提示词

工作原理

graph TD
    A[System Layer] --> B[Identity & Constraints]
    A --> C[Output Schema Definition]
    A --> D[Tool Definitions]
    B --> E[Prompt Assembly]
    C --> E
    D --> E
    F[User Layer] --> G[Task Specification]
    F --> H[Dynamic Few-Shot Examples]
    G --> E
    H --> E
    I[Assistant Layer] --> J[Reasoning Primer]
    I --> K[Format Enforcement]
    J --> E
    K --> E
    E --> L[Validation Gate]
    L -->|Pass| M[Agent Execution]
    L -->|Fail| N[Prompt Revision]
    N --> E

三层架构确保职责分离。系统层定义 Agent 是谁以及它能做什么——这一层在不同调用之间很少变化。用户层承载特定任务的内容以及任何动态选择的示例。助手层提供一个“起跑助力”,为模型的生成路径预先设定方向。验证关卡会在执行前根据结构规则检查组装好的提示词,发现格式错误或相互冲突的指令。

实现

三层提示词构建器:

interface PromptLayer {
  role: "system" | "user" | "assistant";
  sections: PromptSection[];
}

interface PromptSection {
  name: string;
  content: string;
  priority: number;
  tokenBudget: number;
}

function assemblePrompt(layers: PromptLayer[], maxTokens: number): Message[] {
  const messages: Message[] = [];
  for (const layer of layers) {
    const sections = layer.sections
      .sort((a, b) => b.priority - a.priority)
      .reduce((acc, section) => {
        const currentTokens = countTokens(acc.map(s => s.content).join("\n"));
        if (currentTokens + section.tokenBudget <= maxTokens * 0.4) {
          acc.push(section);
        }
        return acc;
      }, [] as PromptSection[]);

    messages.push({
      role: layer.role,
      content: sections.map(s => s.content).join("\n\n"),
    });
  }
  return messages;
}

受约束输出强制:

SCHEMA_ENFORCEMENT_PROMPT = """
You MUST respond with valid JSON matching this exact schema:
{schema}

Rules:
- Every field is required unless marked optional
- String fields must not exceed {max_length} characters
- Numeric fields must be within specified ranges
- Do not include fields not in the schema
- Do not wrap the JSON in markdown code blocks

Begin your response with the opening brace {{.
"""

def build_constrained_prompt(schema: dict, task: str) -> list[dict]:
    return [
        {"role": "system", "content": SCHEMA_ENFORCEMENT_PROMPT.format(
            schema=json.dumps(schema, indent=2),
            max_length=500
        )},
        {"role": "user", "content": task},
        {"role": "assistant", "content": "{"}  # Prime the generation
    ]

动态少样本选择:

class FewShotSelector:
    def __init__(self, examples: list[dict], embedder):
        self.examples = examples
        self.embedder = embedder
        self.embeddings = [embedder.encode(ex["input"]) for ex in examples]

    def select(self, query: str, k: int = 3) -> list[dict]:
        query_emb = self.embedder.encode(query)
        similarities = [
            cosine_similarity(query_emb, emb) for emb in self.embeddings
        ]
        top_indices = sorted(
            range(len(similarities)),
            key=lambda i: similarities[i],
            reverse=True
        )[:k]
        return [self.examples[i] for i in top_indices]

    def format_examples(self, examples: list[dict]) -> str:
        parts = []
        for ex in examples:
            parts.append(f"Input: {ex['input']}\nOutput: {ex['output']}")
        return "\n\n---\n\n".join(parts)

最佳实践

  1. 将身份与指令分开——系统提示词的第一段应定义 Agent 是谁;后续部分则定义它要做什么。身份保持不变,指令则会变化。
  2. 使用 XML 标签划分章节——<task>、<constraints>、<examples> 等标签可创建明确的章节分隔符,便于模型可靠地解析。
  3. 将约束放在指令之前——模型会更关注系统提示词中较早出现的信息;应将不可协商的规则放在最前面。
  4. 预置助手轮次——用所需格式的开头 token 预填助手消息(例如,JSON 使用 {,markdown 使用 ## Analysis),可大幅提升格式遵循度。
  5. 为提示词进行版本管理和 A/B 测试——将提示词视为代码产物,进行版本控制、自动化评估,并针对不同模型版本开展回归测试。
  6. 尽量减少各层之间的冗余——如果系统提示词已定义输出格式,用户提示词就不应重复说明;冗余会浪费 token,还可能造成矛盾。
  7. 根据任务类型调整温度——确定性提取使用 0.0-0.3,分析推理使用 0.5-0.7,创意生成使用 0.8-1.0。
  8. 使用对抗性输入进行测试——验证提示词架构在用户提供格式错误、相互矛盾或包含注入内容的输入时是否依然有效。

平台兼容性

功能Claude CodeCursorCodexGemini CLI
系统提示词分层✅ 完整支持✅ 规则 + 技能✅ 指令✅ 系统提示词
助手预填充✅ 原生支持⚠️ 有限支持❌ 不支持⚠️ 有限支持
少样本注入✅ 完整支持✅ 完整支持✅ 完整支持✅ 完整支持
XML 区段标签✅ 首选✅ 支持✅ 支持✅ 支持
温度控制✅ API 参数⚠️ 模型默认值✅ API 参数✅ API 参数

Mythos Preview 参考

Anthropic 的 Mythos Preview 文章表明,只要运行框架得当,简短的单段任务提示词就能驱动长时间、复杂的自主工作:他们启动一个包含项目的隔离容器,使用 Mythos Preview 调用 Claude Code,提供大约一段话的指令(例如让模型查找安全问题),然后让 Agent 自行运行——读取代码、进行实验并迭代,无需人类逐步引导。

当你希望实现高度自主性,又不想在提示词中过度规定每次工具调用时,这种模式很有参考价值。将这段话视为目标和约束;执行细节则交由运行时(工具、环境、验证)处理。来源:Mythos Preview。

相关技能

  • 认知脚手架 - 注意力区域布局,决定提示词各层如何获得模型的最大关注
  • 上下文工程 - Token 预算管理,用于限制提示词各层的大小并触发压缩
  • Anthropic 工具精通 - 工具定义设计,在提示词架构的系统层中运行
  • 验证循环 - 输出验证,用于强制执行提示词架构中定义的架构约束

关键词

prompt-architecture, system-prompt, few-shot, chain-of-thought, constrained-generation, output-format, prompt-layering, instruction-hierarchy, temperature-tuning, agent-skills


© 2026 googleadsagent.ai™ | Agent Skills™ | MIT License

评论

支持 Markdown