IDENTITY and PURPOSE
You are an expert at interpreting the heart and spirit of a question and answering in an insightful manner.
-
Deeply understand what's being asked.
-
Create a full mental model of the input and the question on a virtual whiteboard in your mind.
-
Answer the question in 3-5 Markdown bullets of 10 words each.
-
Only output Markdown bullets.
-
Do not output warnings or notes—just the requested sections.
INPUT:
该提示词采用 Fabric 社区通用的"分段式"组织方式,四个区块各司其职:
### 2.1 IDENTITY and PURPOSE(身份与目的)
第一行 `You are an expert at interpreting the heart and spirit of a question...` 定义了模型的角色:**一个善于捕捉问题"核心与精神"的专家**。这里的措辞刻意避开了具体的学科领域(如"法律专家""编程专家"),使该模式成为一个通用型问答入口——无论输入是技术、商业还是生活类问题,都先要求模型理解"问题真正在问什么",而非字面意思。
### 2.2 STEPS(执行步骤)
STEPS 区块把隐式推理过程显式化为三步:
1. **Deeply understand what's being asked.** —— 先理解问题本身;
2. **Create a full mental model of the input and the question on a virtual whiteboard in your mind.** —— 在"虚拟白板"上为输入和问题建立完整的心理模型。这一步是典型的"思维脚手架"(mental scaffolding)写法,引导模型在回答前完成一次结构化理解;
3. **Answer the question in 3-5 Markdown bullets of 10 words each.** —— 输出强约束:3~5 条 Markdown 列表、**每条 10 个词**。
第三步是这段提示词最"硬核"的参数:它同时锁定了**数量**(3-5 条)与**长度**(10 words each)。这种双维度约束把开放式问答收敛为固定形状的输出,非常适合管道化下游处理(如嵌入知识库、生成卡片、作为其他模式的输入)。
### 2.3 OUTPUT INSTRUCTIONS(输出约束)
```markdown
- Only output Markdown bullets.
- Do not output warnings or notes—just the requested sections.
两条硬性约束:只输出 Markdown 列表;禁止输出任何警告、说明或前缀文本(如"好的,以下是回答:")。这是为了让输出可被程序直接消费——没有寒暄、没有元注释,输出即结果本身。
2.4 INPUT 占位符
文件结尾:
# INPUT:
INPUT:
INPUT: 行是 Fabric 约定俗成的用户输入锚点。当用户通过命令行传入输入(如 fabric -p ai -i "什么是幂等性?")时,Fabric 会把输入内容附加到模板渲染后的提示词末尾,模型在 INPUT: 标记之后看到真实问题。这也解释了为什么该模式不需要 user.md:所有指令都在 system 提示词内,用户输入只需原样拼接即可。
三、源码视角:Fabric 如何加载并执行 ai/system.md
3.1 模式的存储约定:system.md 是固定文件名
Fabric 的文件系统存储层在 internal/plugins/db/fsdb/db.go 中定义了模式的目录结构:
db.Patterns = &PatternsEntity{
StorageEntity: &StorageEntity{Label: "Patterns", Dir: db.FilePath("patterns"), ItemIsDir: true},
SystemPatternFile: "system.md",
UniquePatternsFilePath: db.FilePath("unique_patterns.txt"),
CustomPatternsDir: "", // Will be set after loading .env file
}
关键事实:ItemIsDir: true 说明每个模式就是一个目录(如 ai/),而 SystemPatternFile: "system.md" 硬编码了系统提示词的文件名。读取时按 模式目录 + /system.md 拼接路径(见 internal/plugins/db/fsdb/patterns.go 中 filepath.Join(o.Dir, name, o.SystemPatternFile) 的拼接逻辑)。因此你新建任何自定义模式时,都必须遵守"目录名即模式名、system.md 即提示词"这一约定。
3.2 模式从哪里来:Git 仓库下载 + 本地目录缓存
internal/tools/patterns_loader.go 定义了两个关键常量:
const DefaultPatternsGitRepoUrl = "https://github.com/danielmiessler/fabric.git"
const DefaultPatternsGitRepoFolder = "data/patterns"
PatternsLoader.PopulateDB()(internal/tools/patterns_loader.go)的执行流程为:
- 创建临时目录(前缀
fabric-patterns-,用完即删,代码注释中还特别提到该设计是为了避免空目录泄漏,对应 issue #2190); - 通过
githelper.FetchFilesFromRepo从上游仓库拉取data/patterns文件夹; - 若拉取结果为空,触发
tryPathMigration()自动把旧的patterns路径迁移为新的data/patterns路径(internal/tools/patterns_loader.go); movePatterns()将新模式拷入本地配置目录,且PersistPatterns()会保留本地已存在但上游没有的自定义模式目录,只覆盖/更新同名模式;- 最后写入
unique_patterns.txt(所有模式名的字母序列表),并创建空文件loaded作为"已加载"标记——internal/tools/patterns_loader.go 中IsConfigured()正是靠检查这个标记文件是否存在来判断模式是否就绪。
对使用者的实际意义:fabric -U(--updatepatterns)执行的就是这条链路,ai 模式会随官方仓库更新;而你在本地模式目录中新建的自定义模式(哪怕目录名冲突规则不同)在更新后会被保留。
3.3 变量替换与输入注入的模板机制
Fabric 的模板引擎位于 internal/plugins/template/template.go,支持 {{input}}、{{ext:...}} 等语法。值得注意的是,该引擎对 {{input}} 采用哨兵 token 机制:在变量保护阶段先把 {{input}} 替换为内部哨兵 __FABRIC_INPUT_SENTINEL_TOKEN__,扩展执行时再还原为真实输入。测试文件 internal/plugins/template/template_sentinel_test.go 专门验证了"扩展参数中的哨兵 token 会被真实输入替换、且不会泄漏到最终输出"这一行为。
ai 模式没有使用 {{input}} 语法,而是依赖末尾的 INPUT: 锚点加输入拼接,这是两种互补的输入注入方式:
| 方式 | 适用场景 | 代表模式 |
|---|---|---|
INPUT: 锚点 + 尾部拼接 |
提示词整体是 system 指令,输入原样追加 | data/patterns/ai/system.md |
{{input}} 变量 + 哨兵替换 |
输入需要嵌入提示词中间,或经扩展函数加工 | 含 user.md 的模式(如 data/patterns/explain_code/) |
对比可以看出来:ai/ 目录下只有 system.md 没有 user.md,而像 explain_code/、summarize/ 这类模式同时提供 system.md 和 user.md 模板,输入通过 {{input}} 精确落在提示词中指定位置。选择哪种方式取决于你是否需要控制输入在提示词中的位置——ai 模式把输入放在最末尾,配合"先建模、再作答"的 STEPS 设计,让模型先消化指令、最后才看到问题。
四、实战:运行与调试 ai 模式
Fabric 的命令行用法(摘自 README.md 的 Usage 段落)中,与运行 ai 模式直接相关的参数有:
# 基本用法:向 ai 模式提问(-i 传入输入,-p 选择模式)
fabric -p ai -i "What is the essence of compound interest?"
# 查看该模式的原始提示词(不发送请求,直接打印)
fabric --readpattern=ai
# 只打印将要发送给模型的内容,不真正调用(调试提示词必备)
fabric -p ai -i "你的问题" --dry-run
# 指定模型与温度
fabric -p ai -m <model> -t 0.7 -i "你的问题"
-p, --pattern=:从可用模式中选择,这里填ai(模式名即 data/patterns/ai/ 的目录名);--readpattern=:把指定模式的文件内容打印到终端,适合快速核对提示词是否被上游更新过;--dry-run:打印最终拼装出的提示词而不发送,是验证"你的输入 + system 提示词"组合的最佳调试手段;-t, --temperature=:默认 0.7。ai模式追求"简洁洞见",若希望输出更稳定可复现,可配合-e, --seed固定随机种子;-o, --output=:把结果写入文件,便于后续管道处理其 Markdown 列表输出。
预期输出形如(符合 3-5 条、每条约 10 词的约束):
- Money earns interest, then interest earns more interest.
- Time magnifies small early contributions into large sums.
- Delaying compounding reduces final outcomes significantly.
- Reinvesting returns accelerates wealth growth exponentially.
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0623
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00