关于 Prompting
Prompting 是用于生成、优化和组合提示词的技能,面向需要程序化构建 Agent、工作流或评估提示词的开发者。它以 Handlebars 模板分离结构与数据,并配有标准指南及渲染、验证工具。
主要功能
- 01基于 Handlebars 生成提示词
- 02模板与数据分离
- 03渲染模板
- 04验证模板
- 05提供提示词工程标准
- 06包含评估提示词模板
适用场景
- 01从数据生成 Agent 简报
- 02组合分阶段工作流提示词
- 03构建评估裁判和评分标准
- 04检查提示词模板
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ danielmiessler/ lifeos --skill prompting安装后在 Claude Code 中输入/prompting确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
Standards.mdReferences/WritingGreatSkills.mdTemplates/README.mdTemplates/Data/Agents.yamlVoicePresets.yamlValidationGates.yamlTemplates/Evals/Comparison.hbsReport.hbsJudge.hbsTestCase.hbsRubric.hbsTemplates/Primitives/Briefing.hbsGate.hbsVoice.hbsRoster.hbsStructure.hbsTemplates/Tools/.gitignoreCLAUDE.mdRenderTemplate.tsREADME.mdValidateTemplate.tsindex.tsbun.lockpackage.jsontsconfig.jsonTools/index.tsValidateTemplate.tsRenderTemplate.ts详细介绍
自定义
执行前,请检查以下位置是否存在用户自定义设置:
~/.claude/LIFEOS/USER/CUSTOMIZATIONS/SKILLS/Prompting/
如果此目录存在,请加载并应用其中找到的任何 PREFERENCES.md、配置或资源。这些内容会覆盖默认行为。如果目录不存在,则使用技能默认设置。
🚨 强制要求:语音通知(任何操作前必须执行)
调用此技能时,必须先发送此通知,然后才能进行任何其他操作。
-
发送语音通知:
curl -s -X POST http://localhost:31337/notify \ -H "Content-Type: application/json" \ -d '{"message": "Running the WORKFLOWNAME workflow in the Prompting skill to ACTION"}' \ > /dev/null 2>&1 & -
输出文本通知:
Running the **WorkflowName** workflow in the **Prompting** skill to ACTION...
此操作不可省略。调用技能后,请立即执行此 curl 命令。
Prompting - 元提示与模板系统
功能
以编程方式生成、优化和组合提示词。它是提示工程的标准库——其他技能在需要构建或改进提示词时会调用它。输出始终是供其他用途使用的提示词,而不是最终内容本身。
**适用于:**元提示、模板生成、提示词优化、以编程方式组合提示词、创建动态 Agent、根据数据生成结构化提示词。
问题
提示工程往往需要在每个相关技能中手动复制粘贴并重写,因此相同的模式逐渐分化,最佳实践也只存在于某个人的脑海中。当你想要根据数据组合提示词——创建自定义 Agent、构建评测判定器、生成分阶段工作流时——却没有一种简洁的方式将结构与内容分离。此技能将结构设为代码,将内容设为数据:一个 Handlebars 模板配合不同的数据,就能生成专用 Agent、工作流和评测框架;工程标准则集中在一处,供每个技能引用。
理想状态提示——默认标准
**此库生成或优化的每条提示词都应阐明理想状态,而非操作步骤。**说明完成后的样子(以可测试的结果表达)、约束条件和可用的高质量工具,然后相信模型能找到实现方式。推理编排(“先分析,再考虑,然后决定”)是违反 BPE 的脚手架:它会限制能力强大的模型,并随着模型改进而过时。理想状态提示更加精确,而非更加含糊——具体性体现在结果上。
有四类合理的实现方式可以保留:安全门控、已验证的陷阱、工具契约、输出格式契约。确定性工具(*.ts)不受此限制。判断任何操作步骤的标准是:更聪明的模型是否会认为这条规则没有必要? 会 → 删除;不会 → 属于可保留类别。完整标准:Standards.md § Ideal-State Prompting。
工作原理
三大支柱支撑这项工作:
- 标准 - Anthropic 最佳实践、Claude 4.x 模式、实证研究(优先使用 Markdown 的设计、上下文工程、Fabric 模式系统,以及 1,500 多篇提示词优化学术论文)。完整指南见
Standards.md。 - 模板 - 基于 Handlebars 的程序化提示词生成系统:基元(Briefing、Structure、Gate、Roster、Voice)以及评测模板(Judge、Rubric、TestCase、Comparison、Report)。针对 Agent 的
DynamicAgent.hbs位于 Agents 技能中(Agents/Templates/DynamicAgent.hbs),不在此处。 - 工具 - 模板渲染(
RenderTemplate.ts)、验证以及数据与内容分离。
工作流路由
库技能——没有 Workflows/ 目录。请求会路由到渲染工具和参考文档:
| 触发条件 | 工作流 | 文件 |
|---|---|---|
| 渲染模板 / 根据数据组合提示词 / Handlebars 模板 | RenderTemplate(工具) | Tools/RenderTemplate.ts |
| 验证模板 | ValidateTemplate(工具) | Tools/ValidateTemplate.ts |
| 提示工程标准 / 最佳实践 / 提示词优化 | Standards(参考) | Standards.md |
示例
示例 1:使用 Briefing 模板(编写 Agent 简介)
// Render a structured agent brief from data before launching general-purpose
import { renderTemplate } from '${LIFEOS_SKILL_DIR}/Tools/RenderTemplate.ts';
const prompt = renderTemplate('Primitives/Briefing.hbs', {
briefing: { type: 'research' },
agent: { id: 'EN-1', name: 'Skeptical Thinker', personality: {...} },
task: { description: 'Analyze security architecture', questions: [...] },
output_format: { type: 'markdown' }
});
示例 2:使用结构模板(工作流)
# Data: phased-analysis.yaml
phases:
- name: Discovery
purpose: Identify attack surface
steps:
- action: Map entry points
instructions: List all external interfaces...
- name: Analysis
purpose: Assess vulnerabilities
steps:
- action: Test boundaries
instructions: Probe each entry point...
bun run RenderTemplate.ts \
--template Primitives/Structure.hbs \
--data phased-analysis.yaml
示例 3:根据数据渲染 Agent 简报
// Render a structured agent brief, then launch general-purpose with it
const brief = renderTemplate('Primitives/Briefing.hbs', {
agent: { name: 'Skeptical Security Reviewer', role: 'auth bypass and input validation' },
task: { description: 'Review the auth flow', questions: [...] },
});
// Pass `brief` as the prompt to Agent(subagent_type="general-purpose")
与其他技能集成
Agents 技能
- 使用
Templates/Primitives/Briefing.hbs进行 Agent 上下文交接 - 使用
RenderTemplate.ts组合动态 Agent - 维护 Agent 专用模板:
Agents/Templates/DynamicAgent.hbs
Evals 技能
- 使用评测专用模板:Judge、Rubric、TestCase、Comparison、Report
- 利用
RenderTemplate.ts生成评测提示词 - 评测模板可以存储在
Evals/Templates/中,但使用 Prompting 的引擎
Development 技能
- 参考
Standards.md获取提示词最佳实践 - 使用
Structure.hbs编写工作流模式 - 使用
Gate.hbs编写验证清单
Token 效率
模板系统在整个 LifeOS 中减少了 约 35,000 个 token(减少 65%):
| 区域 | 之前 | 之后 | 节省 |
|---|---|---|---|
| SKILL.md Frontmatter | 20,750 | 8,300 | 60% |
| Agent 简报 | 6,400 | 1,900 | 70% |
| 语音通知 | 6,225 | 725 | 88% |
| 工作流步骤 | 7,500 | 3,000 | 60% |
| 总计 | ~53,000 | ~18,000 | 65% |
最佳实践
1. 分离关注点
- 模板:仅负责结构和格式
- 数据:内容和参数(YAML/JSON)
- 逻辑:渲染和验证(TypeScript)
2. DRY 原则
- 将重复模式提取为局部模板
- 使用预设处理常见配置
- 为定义维护单一事实来源
3. 版本控制
- 将模板和数据保存在不同文件中
- 独立跟踪更改
- 支持对结构进行 A/B 测试
参考资料
主要文档:
Standards.md- 完整的提示词工程指南Templates/README.md- 模板系统概述Tools/RenderTemplate.ts- 实现细节
**官方锚点(偏差检查):**本技能标准所依据的两个权威 Anthropic 来源:
- 提示词工程:https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/overview
- 上下文工程:https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents
在编写或审查 Standards.md 时(不包括常规模板渲染),请获取这两个来源,并标记我们的标准与当前官方指南不一致之处——这些页面会随着每个模型系列的发布而变化,基于旧模型编写的标准会在不知不觉中逐渐过时。仅供参考:报告偏差,切勿自动采用;URL 无法访问时,工作也不得因此受阻。
研究基础:
- Anthropic:《Claude 4.x 最佳实践》(2025 年 11 月)
- Anthropic:《面向 AI Agent 的有效上下文工程》
- Anthropic:《提示词模板与变量》
- Fabric 系统(2024 年 1 月)
- 《提示词报告》- arXiv:2406.06608
- 《提示词画布》- arXiv:2412.05127
相关技能:
- Agents - 动态 Agent 组合
- Evals - LLM-as-Judge 提示词
- Development - 规范驱动的开发模式
**理念:**编写提示词的提示词。结构是代码,内容是数据。元提示可实现动态组合:同一模板搭配不同数据,即可生成专用 Agent、工作流和评估框架。这是 LifeOS 的核心基因——大规模程序化生成提示词。
注意事项
- **元提示生成的是提示词,而非内容。**输出的是供其他地方使用的提示词,而不是最终交付物。
- **模板应与模型无关。**不要编写依赖特定模型特性的提示词。
- **在宣布生成的提示词可用之前,先进行测试。**看起来不错的提示词,实际效果可能很差。
执行日志
完成任何工作流后,追加一条 JSONL 记录:
echo '{"ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","skill":"Prompting","workflow":"WORKFLOW_USED","input":"8_WORD_SUMMARY","status":"ok|error","duration_s":SECONDS}' >> ~/.claude/LIFEOS/MEMORY/SKILLS/execution.jsonl
将 WORKFLOW_USED 替换为已执行的工作流,将 8_WORD_SUMMARY 替换为简短的输入描述,并将 SECONDS 替换为大致的实际耗时。若工作流失败,则记录 status: "error"。