> ## Documentation Index
> Fetch the complete documentation index at: https://ophel.app/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 提示词库 — 一键复用提示词与队列自动化

> 保存常用提示词，支持变量模板（默认值、下拉选择），以及提示词队列多步工作流自动化。

export const ShortcutLegend = ({lang = "en"}) => {
  const isZh = lang === "zh";
  return <div className="ophel-shortcut-legend" role="note">
      <div className="ophel-shortcut-legend-title">
        {isZh ? "跨平台按键说明" : "Cross-platform key mapping"}
      </div>
      <div className="ophel-shortcut-legend-body">
        {isZh ? <>
            文档中的快捷键会同时显示 Windows/Linux 与 Mac 写法：
            <code>Ctrl</code> 对应 <code>Command</code>，
            <code>Alt</code> 对应 <code>Option</code>。唯一例外是提示词发送，
            <code>Ctrl+Enter</code> 在 Mac 上也使用 <code>Ctrl+Enter</code>。
          </> : <>
            Shortcuts show both Windows/Linux and Mac keys: <code>Ctrl</code> maps
            to <code>Command</code>, and <code>Alt</code> maps to
            <code>Option</code>. Prompt submit is the only exception:
            <code>Ctrl+Enter</code> remains <code>Ctrl+Enter</code> on Mac.
          </>}
      </div>
    </div>;
};

export const Shortcut = ({combo, mac, sameOnMac = false}) => {
  const keyLabels = {
    arrowup: {
      win: "Up",
      mac: "↑"
    },
    arrowdown: {
      win: "Down",
      mac: "↓"
    },
    arrowleft: {
      win: "Left",
      mac: "←"
    },
    arrowright: {
      win: "Right",
      mac: "→"
    },
    up: {
      win: "Up",
      mac: "↑"
    },
    down: {
      win: "Down",
      mac: "↓"
    },
    left: {
      win: "Left",
      mac: "←"
    },
    right: {
      win: "Right",
      mac: "→"
    },
    esc: {
      win: "Esc",
      mac: "Esc"
    },
    escape: {
      win: "Esc",
      mac: "Esc"
    },
    enter: {
      win: "Enter",
      mac: "Enter"
    },
    shift: {
      win: "Shift",
      mac: "⇧"
    },
    backslash: {
      win: "\\",
      mac: "\\"
    }
  };
  const modifierLabels = {
    ctrl: {
      win: "Ctrl",
      mac: "⌘"
    },
    control: {
      win: "Ctrl",
      mac: "⌘"
    },
    cmd: {
      win: "Ctrl",
      mac: "⌘"
    },
    command: {
      win: "Ctrl",
      mac: "⌘"
    },
    alt: {
      win: "Alt",
      mac: "⌥"
    },
    option: {
      win: "Alt",
      mac: "⌥"
    },
    shift: {
      win: "Shift",
      mac: "⇧"
    }
  };
  const normalizeToken = token => String(token || "").trim();
  const formatKey = (token, platform) => {
    const normalized = normalizeToken(token);
    const key = normalized.toLowerCase();
    const mapped = keyLabels[key];
    if (mapped) return mapped[platform];
    if (normalized.length === 1) return normalized.toUpperCase();
    return normalized;
  };
  const formatCombo = (value, platform) => String(value || "").split("+").map(normalizeToken).filter(Boolean).map(token => {
    const mapped = modifierLabels[token.toLowerCase()];
    return mapped ? mapped[platform] : formatKey(token, platform);
  }).join(platform === "mac" ? "" : "+");
  const windowsLabel = formatCombo(combo, "win");
  const macLabel = sameOnMac ? windowsLabel : mac || formatCombo(combo, "mac");
  const title = windowsLabel === macLabel ? windowsLabel : `Windows/Linux: ${windowsLabel}; Mac: ${macLabel}`;
  return <span className="ophel-shortcut" title={title}>
      <code>{windowsLabel}</code>
      {windowsLabel !== macLabel && <>
          <span className="ophel-shortcut-separator"> / </span>
          <code>{macLabel}</code>
        </>}
    </span>;
};

export const Icon = ({src, alt}) => <img src={typeof window !== "undefined" && typeof src === "string" && src.startsWith("/images/icons/") && (window.location.pathname === "/docs" || window.location.pathname.startsWith("/docs/")) ? `/docs${src}` : src} alt={alt} width="18" height="18" style={{
  display: "inline-block",
  verticalAlign: "-0.2em",
  margin: "0 0.15em"
}} />;

<img src="https://mintcdn.com/urzeye/9I8m8P8gSndxcYtq/images/features/prompt-zh.png?fit=max&auto=format&n=9I8m8P8gSndxcYtq&q=85&s=c17722a8746d80f437ddd3207872d717" alt="提示词库标签页 — 提示词列表与分类" width="1280" height="800" data-path="images/features/prompt-zh.png" />

提示词标签页是你的个人提示词收藏夹，把常用提示词存起来，随时一键插入，告别重复输入。

## 使用提示词

插入提示词有两种方式：

* **单击** — 将提示词插入到 AI 输入框，但不提交。你可以在发送前预览或修改。
* **双击** — 插入并立即提交。若 AI 正在生成且**提示词队列**已开启，Ophel 会把这条提示词加入队列，而不是打断当前回复。此行为可在设置中关闭，改为和单击一致。

如果提示词包含变量，会先弹出对话框让你填入变量值，完成后再插入。

## 创建提示词

点击提示词标签页底部的 <Icon src="/docs/images/icons/prompt.svg" alt="新增提示词图标" /> **+ 新增提示词**按钮，填写：

* **标题** — 显示在列表中的简短名称
* **内容** — 完整的提示词文本，可以在其中嵌入变量
* **分类** — 可选，用于归组（如"写作"、"代码"、"翻译"）
* **置顶** — 可选，使用 <Icon src="/docs/images/icons/pin.svg" alt="置顶图标" /> 置顶图标让此提示词始终显示在列表顶部

保存后，提示词会立即出现在列表中。鼠标悬停在提示词行上，可以使用 <Icon src="/docs/images/icons/pin.svg" alt="置顶图标" /> 置顶、<Icon src="/docs/images/icons/eye.svg" alt="预览图标" /> 预览、<Icon src="/docs/images/icons/copy.svg" alt="复制图标" /> 复制、<Icon src="/docs/images/icons/more-horizontal.svg" alt="更多菜单图标" /> 更多、<Icon src="/docs/images/icons/edit.svg" alt="编辑图标" /> 编辑和 <Icon src="/docs/images/icons/delete.svg" alt="删除图标" /> 删除。

## 变量

变量让你写出可复用的提示词模板，发送前临时填入具体值。语法是**双花括号**：`{{...}}`。

<Tabs>
  <Tab title="基础变量">
    最简单的形式，使用时弹出文本输入框：

    ```text theme={}
    用 {{语言}} 总结以下内容：

    {{文本}}
    ```
  </Tab>

  <Tab title="带默认值的变量">
    变量名后加冒号（`:`）和默认值，弹窗会预填该值，直接按回车即可：

    ```text theme={}
    翻译成 {{目标语言:中文}}：

    {{文本}}
    ```
  </Tab>

  <Tab title="带下拉选项的变量">
    变量名后加冒号，再用竖线（`|`）分隔多个选项，弹窗会显示下拉菜单：

    ```text theme={}
    用 {{语气:正式|轻松|幽默}} 的风格改写以下内容。
    ```

    可以列出任意多个选项：

    ```text theme={}
    审查以下 {{语言:TypeScript|Python|Go|Rust|Java}} 代码
    ```
  </Tab>
</Tabs>

变量的各种子类型可以在同一个提示词中混用。变量名是冒号前的文本，如果没有冒号则是 `{{` 和 `}}` 之间的全部内容。

## 分类

给提示词分配分类来保持库的组织。提示词标签页会出现分类侧边栏——点击分类名称可将列表筛选到该组。在编辑提示词时输入新名称会自动创建分类。

## 置顶

点击任意提示词的 <Icon src="/docs/images/icons/pin.svg" alt="置顶图标" /> 置顶图标可将其浮动到列表顶部。无论当前激活哪个分类筛选，置顶提示词始终出现在未置顶提示词之前。

## 排序和搜索

使用提示词标签页顶部的 <Icon src="/docs/images/icons/search.svg" alt="搜索图标" /> 搜索框实时按标题或内容筛选。置顶提示词始终保持在排序结果顶部。

拖动任意提示词行可重新排序你的库。行内的按钮、输入框、菜单和其他交互控件保持可点击，不会开始拖动。

## 导入与导出

点击提示词标签页工具栏的 <Icon src="/docs/images/icons/import.svg" alt="导入导出菜单图标" /> 导入/导出按钮，选择 <Icon src="/docs/images/icons/export.svg" alt="导出图标" /> **导出**，将整个提示词库保存为 JSON 文件。这对备份或转移到其他设备很有用。

从同一菜单选择 <Icon src="/docs/images/icons/import.svg" alt="导入图标" /> **导入**读取 JSON 文件，选择三种合并选项之一：

| 选项   | 行为                   |
| ---- | -------------------- |
| 添加新项 | 仅导入标题不存在的提示词——跳过重复项  |
| 覆盖   | 导入所有提示词；替换标题相同的现有提示词 |
| 全部替换 | 删除当前库并完全替换为导入的文件     |

## <Icon src="/docs/images/icons/prompt-queue.svg" alt="提示词队列图标" /> 提示词队列

提示词队列让你排列多个提示词并自动逐个发送。Ophel 等待 AI 完成每个回复后再发送下一个——你不必一直盯着点击。这对多步骤工作流、批量任务或结构化访谈序列很有用。

### 启用队列

前往 <Icon src="/docs/images/icons/settings.svg" alt="设置图标" /> **设置 → 功能 → 提示词 → 提示词队列**并开启。AI 输入框附近会出现 <Icon src="/docs/images/icons/prompt-queue.svg" alt="提示词队列图标" /> 队列小部件。随时使用**切换提示词队列**快捷键（默认：<Icon src="/docs/images/icons/keyboard.svg" alt="键盘快捷键图标" /> <Shortcut combo="alt+j" />）显示或隐藏。

### 批量导入

直接在队列输入框中输入并按 **Enter** 添加提示词。队列显示待处理项目的编号列表。

你也可以从提示词库添加已保存的提示词：

| 来源                                                                                                                                                           | 行为                      |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------- |
| <Icon src="/docs/images/icons/more-horizontal.svg" alt="更多菜单图标" /> 提示词更多菜单 → <Icon src="/docs/images/icons/add-to-queue.svg" alt="添加到队列图标" /> **添加到队列**                | 将选中的提示词作为一个队列项添加        |
| <Icon src="/docs/images/icons/more-horizontal.svg" alt="更多菜单图标" /> 提示词更多菜单 → <Icon src="/docs/images/icons/split-lines-to-queue.svg" alt="按行拆分到队列图标" /> **按行拆分并添加到队列** | 按行拆分提示词内容，将每个非空行作为单独项添加 |
| AI 正在生成时双击提示词                                                                                                                                                | 启用提示词队列时自动将提示词加入队列      |

从提示词行菜单添加包含变量的提示词时，会先打开变量对话框。确认变量后，解析后的提示词被添加到队列。

要一次添加多个提示词，点击队列面板中的 <Icon src="/docs/images/icons/import.svg" alt="批量添加图标" /> **批量添加**按钮。对话框有两个来源：

<Tabs>
  <Tab title="提示词库">
    直接从你的库中选择已保存的提示词。选择**每个提示词作为一项**或**按行拆分**。仍需要变量的提示词在此批量选择器中禁用；先从提示词标签页打开它们以填写变量。
  </Tab>

  <Tab title="文本">粘贴文本块并选择拆分模式：</Tab>
</Tabs>

| 拆分模式   | 行为                              |
| ------ | ------------------------------- |
| 按行拆分   | 每行成为一个提示词；忽略空行                  |
| 按分隔符拆分 | 输入自定义分隔符字符串（如 `---`），文本在每次出现时拆分 |

预览显示确认前文本将如何分割。

### 运行队列

<Steps>
  <Step title="添加一个或多个提示词">
    从队列输入、<Icon src="/docs/images/icons/more-horizontal.svg" alt="更多菜单图标" /> 提示词行菜单或 <Icon src="/docs/images/icons/import.svg" alt="批量添加图标" /> 批量添加对话框添加提示词。
  </Step>

  <Step title="Ophel 自动发送提示词">
    如果 AI 空闲，Ophel 立即开始下一个排队的提示词。如果 AI 正在生成，待处理提示词在队列中等待，直到页面空闲。
  </Step>

  <Step title="运行时管理队列">
    你可以编辑待处理项、强制发送单个项、删除单个项，或使用 <Icon src="/docs/images/icons/cleanup.svg" alt="清空队列图标" /> **清空队列**清空队列。
  </Step>
</Steps>

## 链式提示词

链式提示词让你从对话的任何部分选择文本，并触发引用该选择的提示词序列。在页面上选中文本后，会出现轻量级悬浮层，显示内置操作和你创建的任何自定义链。

### 什么是链式提示词？

**链式提示词**是一系列按顺序运行的提示词。链中的每一步都可以使用特殊变量引用选中的文本：

* `{{selection}}` — 选中的原始文本
* `{{quote}}` — 选中文本格式化为 Markdown 引用块

链式提示词适用于多步骤工作流，例如：

* 选择一段内容，总结它，然后提出后续问题
* 选择代码，解释它，再建议改进
* 选择文本，翻译它，然后用不同语气改写

### 创建链式提示词

<Steps>
  <Step title="打开链式提示词视图">
    在提示词标签页顶部，点击 <Icon src="/docs/images/icons/chain.svg" alt="链式提示词图标" /> **链式提示词**切换到链式提示词视图。
  </Step>

  <Step title="点击添加链式提示词">
    点击 <Icon src="/docs/images/icons/prompt.svg" alt="添加链式提示词图标" /> **+ 添加链式提示词**按钮，填写：

    * **名称** — 链式提示词的简短标签
    * **描述** — 链式提示词的功能说明（可选）
    * **图标** — 从 40 多个预设 SVG 图标中选择，或留空
    * **在选择悬浮层显示** — 切换是否在选中文本时显示此链式提示词
  </Step>

  <Step title="添加提示词步骤">
    点击**添加步骤**添加提示词到链式提示词中。每一步可以：

    * 引用提示词库中已有的提示词（推荐）
    * 直接使用内联文本（用于一次性链式提示词）

    步骤按从上到下的顺序运行。拖动步骤可重新排序。
  </Step>

  <Step title="预览变量">
    编辑器会显示链式提示词使用的变量。内置变量如 `{{selection}}` 和 `{{quote}}` 会自动填充。其他变量在运行链式提示词时会提示你输入。
  </Step>

  <Step title="保存">
    点击**保存**将链式提示词添加到你的库中。
  </Step>
</Steps>

### 使用链式提示词

<Tabs>
  <Tab title="从选择悬浮层">
    在对话中选中任意文本。悬浮层会显示 <Icon src="/docs/images/icons/copy.svg" alt="复制图标" /> **复制**、<Icon src="/docs/images/icons/quote.svg" alt="引用图标" /> **引用**以及你启用的链式提示词图标。点击链式提示词图标触发它。如果链式提示词包含变量，会先弹出对话框让你填写。
  </Tab>

  <Tab title="从链式提示词列表">
    在链式提示词视图中点击链式提示词卡片执行它。如果你之前没有选中文本，链式提示词将为 `{{selection}}` 和 `{{quote}}` 使用空值。
  </Tab>
</Tabs>

链式提示词运行时：

1. 所有变量被解析（从选择中自动获取，或提示你输入）
2. 每个步骤按顺序加入提示词队列
3. 队列逐个发送提示词，等待 AI 完成后再发送下一个

<Note>
  链式提示词需要启用**提示词队列**功能。如果在未启用队列的情况下运行多步链式提示词，Ophel 会提示你启用它。
</Note>

### 链式提示词管理

链式提示词在链式提示词视图中显示为卡片。每张卡片显示：

* 链式提示词图标和名称
* 步骤数量
* 是否在选择悬浮层中显示
* 启用/禁用切换

点击链式提示词卡片执行它。悬停在链式提示词卡片上可显示：

| 操作                                                    | 说明                   |
| ----------------------------------------------------- | -------------------- |
| <Icon src="/docs/images/icons/edit.svg" alt="编辑图标" /> 编辑   | 打开链式提示词编辑器修改步骤、图标或设置 |
| <Icon src="/docs/images/icons/copy.svg" alt="复制图标" /> 复制   | 创建链式提示词的副本           |
| <Icon src="/docs/images/icons/delete.svg" alt="删除图标" /> 删除 | 永久删除链式提示词            |

链式提示词会包含在提示词备份和 WebDAV 同步中。

### 内置操作

选择悬浮层中始终提供两个操作：

* **复制** — 将选中的文本复制到剪贴板
* **引用** — 将选中的文本作为引用块插入输入框，让你在发送前添加上下文

还包含一个默认的 **引用回复** 链式提示词，它会插入"根据以下引用的文本回复："后跟引用的选择。

## 相关设置

**设置 → 功能 → 提示词**：

| 设置项                                                               | 说明                                                                     |
| ----------------------------------------------------------------- | ---------------------------------------------------------------------- |
| 双击发送                                                              | 双击提示词时是否直接提交，不经过手动确认                                                   |
| 提交键                                                               | 插入后用于向 AI 提交的按键（**Enter** 或 <Shortcut combo="ctrl+enter" sameOnMac />） |
| <Icon src="/docs/images/icons/prompt-queue.svg" alt="提示词队列图标" /> 提示词队列 | 是否启用提示词队列功能                                                            |
| 选择引用                                                              | 是否启用链式提示词和快捷操作的选择悬浮层                                                   |

## 示例模板

以下是几个展示变量语法的实用提示词模板，可以直接复制到新建提示词中使用。

<AccordionGroup>
  <Accordion title="多语言翻译（下拉选择目标语言）">
    ```text theme={}
    请将以下内容翻译成{{目标语言:中文|英文|日文|法文|西班牙文|德文}}，保留原始格式。

    {{文本}}
    ```
  </Accordion>

  <Accordion title="代码审查（下拉选择语言）">
    ```text theme={}
    请审查以下 {{语言:TypeScript|Python|Go|Rust|Java}} 代码，重点关注：可读性、潜在 Bug 和性能问题。以要点列表形式输出结论。

    {{代码}}
    ```
  </Accordion>

  <Accordion title="文风改写（下拉选择语气）">
    ```text theme={}
    请用{{语气:正式|轻松|简洁|详细|幽默}}的风格改写以下内容，保留核心意思。

    {{文本}}
    ```
  </Accordion>

  <Accordion title="会议纪要整理">
    ```text theme={}
    请将以下会议记录整理为：
    1. 关键决策
    2. 行动项（如有负责人请注明）
    3. 待跟进问题

    会议名称：{{会议名称}}
    日期：{{日期}}

    记录内容：
    {{记录}}
    ```
  </Accordion>
</AccordionGroup>
