关于 prompt-architecture
prompt-architecture 是一项用于构建 Agent 指令的 Agent Skills 技能。它分层处理固定约束、任务细节和输出引导,并支持结构校验与动态示例选择。
主要功能
- 01区分 system、user 和 assistant 层
- 02定义输出架构与约束
- 03支持思维链脚手架
- 04动态选择少样本示例
- 05校验提示词结构
适用场景
- 01降低重复 Agent 任务的结果差异
- 02要求输出 JSON 或指定架构
- 03为 Agent 设置行为约束
- 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)
最佳实践
- 将身份与指令分开——系统提示词的第一段应定义 Agent 是谁;后续部分则定义它要做什么。身份保持不变,指令则会变化。
- 使用 XML 标签划分章节——
<task>、<constraints>、<examples>等标签可创建明确的章节分隔符,便于模型可靠地解析。 - 将约束放在指令之前——模型会更关注系统提示词中较早出现的信息;应将不可协商的规则放在最前面。
- 预置助手轮次——用所需格式的开头 token 预填助手消息(例如,JSON 使用
{,markdown 使用## Analysis),可大幅提升格式遵循度。 - 为提示词进行版本管理和 A/B 测试——将提示词视为代码产物,进行版本控制、自动化评估,并针对不同模型版本开展回归测试。
- 尽量减少各层之间的冗余——如果系统提示词已定义输出格式,用户提示词就不应重复说明;冗余会浪费 token,还可能造成矛盾。
- 根据任务类型调整温度——确定性提取使用 0.0-0.3,分析推理使用 0.5-0.7,创意生成使用 0.8-1.0。
- 使用对抗性输入进行测试——验证提示词架构在用户提供格式错误、相互矛盾或包含注入内容的输入时是否依然有效。
平台兼容性
| 功能 | Claude Code | Cursor | Codex | Gemini 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