首页
/ IDENTITY and PURPOSE

IDENTITY and PURPOSE

2026-09-05 11:50:28作者:丁柯新Fawn

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.gofilepath.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)的执行流程为:

  1. 创建临时目录(前缀 fabric-patterns-,用完即删,代码注释中还特别提到该设计是为了避免空目录泄漏,对应 issue #2190);
  2. 通过 githelper.FetchFilesFromRepo 从上游仓库拉取 data/patterns 文件夹;
  3. 若拉取结果为空,触发 tryPathMigration() 自动把旧的 patterns 路径迁移为新的 data/patterns 路径(internal/tools/patterns_loader.go);
  4. movePatterns() 将新模式拷入本地配置目录,且 PersistPatterns()保留本地已存在但上游没有的自定义模式目录,只覆盖/更新同名模式;
  5. 最后写入 unique_patterns.txt(所有模式名的字母序列表),并创建空文件 loaded 作为"已加载"标记——internal/tools/patterns_loader.goIsConfigured() 正是靠检查这个标记文件是否存在来判断模式是否就绪。

对使用者的实际意义: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.
登录后查看全文
热门项目推荐
相关项目推荐