Interpreter 是 [[Obsidian Web Clipper 简介|Web Clipper]] 的一项功能,允许你使用自然语言与网页进行交互。Interpreter 帮助你捕获和修改想要保存到 Obsidian 的数据。例如:
- 提取特定的文本片段。
- 总结或解释信息。
- 将文本从一种格式转换为另一种格式。
- 将文本翻译为不同的语言。
Interpreter 利用语言模型来处理网页上的信息,并使用[[变量|变量]]返回结果,你可以将这些变量添加到你的 [[Obsidian Web Clipper/模板|Web Clipper 模板]]中。
![[web-clipper-interpreter-demo.mp4#interface]]
## 提示词示例
提示词使用[[变量|变量]]语法 `{{"your prompt"}}`。你可以将此语法与任何自然语言查询一起使用,例如:
- `{{"a summary of the page"}}` 提取页面摘要。
- `{{"a three bullet point summary, translated to French"}}` 提取关于页面的要点,并翻译为法语。
- `{{"un resumé de la page en trois points"}}` 使用法语提示词提取三个要点。
提示词的输出可以使用[[过滤器|筛选器]]进一步处理。筛选器在从模型接收到提示词响应后进行处理。例如:`{{"a summary of the page"|blockquote}}` 会将响应转换为引用块。
## 开始使用
Interpreter 几乎可以与任何语言模型提供商配合使用,包括在你的设备上私密运行的选项。要设置 Interpreter:
1. 前往 Web Clipper 设置中的 **Interpreter** 部分。
2. 开启 **Enable Interpreter**。
3. 配置你的提供商和模型,参见下方的[[解析网页#模型|模型]]部分。
4. 将[[变量|提示变量]]添加到你的[[Obsidian Web Clipper/模板|模板]]中。
5. 如果你的模板包含提示变量,当你[[剪藏网页|剪藏页面]]时,Interpreter 部分将可见。点击**解释**来处理提示变量。
## 工作原理
当 Interpreter 已启用*且*你的模板包含[[变量#提示变量|提示变量]]时,扩展窗口中会在 **Add to Obsidian** 按钮上方显示一个新的 Interpreter 部分。此部分允许你选择模型并为当前页面运行 Interpreter。
当你点击**解释** 时,Interpreter 会将页面上下文连同模板中的*所有*提示词一起通过一个请求发送到你选择的模型。根据你选择的模型提供商,这可以是外部调用,也可以在你的设备本地进行。模型根据页面上下文评估你的提示词,并返回其响应。然后 Interpreter 用响应数据替换提示变量。
整个过程可能需要几毫秒到超过 30 秒的时间,具体取决于你使用的模型和处理的数据量。
## 上下文
*上下文*一词指的是 Interpreter 用于处理提示词的页面数据。上下文越小,Interpreter 运行越快。
默认情况下,Interpreter 使用整个页面的 HTML 作为其上下文,但这可能会使提示词变得比必要时更慢且更昂贵。
你可以在 Interpreter **高级设置**中覆盖默认上下文,并为每个[[Obsidian Web Clipper/模板|模板]]定义上下文。
要定义更有针对性的上下文,可以使用[[变量#选择器变量|选择器变量]](或其他变量类型)来解释页面的某个部分。例如,你可以在模板的 Interpreter 上下文中使用以下选择器变量:
```
{{selectorHtml:#main}}
```
这将仅在网页的 `#main` 元素上运行 Interpreter(如果存在的话)。像 `remove_html`、`strip_tags` 和 `strip_attr` 这样的 [[过滤器#HTML 处理|HTML 处理筛选器]]可以进一步减少上下文长度并加快处理速度。
## 模型
> [!warning] 隐私
> 使用第三方模型提供商即表示你同意其条款和隐私政策。Interpreter 请求会直接发送到你选择的提供商。Obsidian 不会收集或存储你的任何请求数据。
### 预设提供商
Interpreter 包含几个预设提供商。要使用这些提供商,你需要一个 API 密钥,可以通过登录提供商的账户获取。你还需要决定使用哪个模型。
| 提供商 | API 密钥 | 模型 |
| ------------------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------ |
| Anthropic | [API 密钥](https://console.anthropic.com/settings/keys) | [模型](https://docs.anthropic.com/en/docs/about-claude/models) |
| Azure OpenAI | [API 密钥](https://oai.azure.com/portal/) | [模型](https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/models) |
| DeepSeek | [API 密钥](https://platform.deepseek.com/api_keys) | [模型](https://api-docs.deepseek.com/quick_start/pricing) |
| Google Gemini | [API 密钥](https://aistudio.google.com/apikey) | [模型](https://ai.google.dev/gemini-api/docs/models/gemini) |
| Hugging Face | [API 密钥](https://huggingface.co/settings/tokens) | [模型](https://huggingface.co/models?pipeline_tag=text-generation&sort=trending) |
| Meta | [API 密钥](https://llama.developer.meta.com) | [模型](https://llama.developer.meta.com/docs/models) |
| Ollama | 无需 | [模型](https://ollama.com/search) |
| OpenAI | [API 密钥](https://platform.openai.com/api-keys) | [模型](https://platform.openai.com/docs/models) |
| OpenRouter | [API 密钥](https://openrouter.ai/settings/keys) | [模型](https://openrouter.ai/models) |
| Perplexity | [API 密钥](https://www.perplexity.ai/settings/api) | [模型](https://docs.perplexity.ai/guides/model-cards) |
| xAI Grok | [API 密钥](https://console.x.ai/team/default/api-keys) | [模型](https://docs.x.ai/docs/models) |
### 选择模型
通常我们建议在 Web Clipper 中使用小型模型,因为它们更快,并且对于此任务的表现相当准确。小型模型的示例包括 **Anthropic 的 Claude Haiku**、**Google Gemini Flash**、具有 3B 或 8B 参数的 **Llama**,或 **OpenAI 的 Mini** 系列模型。
### 自定义提供商和模型
要添加自定义提供商和/或模型,请前往 Web Clipper **[[设置]]** → **Interpreter**:
- **Add provider** 配置预设和自定义提供商。
- **Add model** 配置预设和自定义模型。
添加自定义提供商时,我们建议你使用其聊天补全端点作为 **Base URL** — 通常以 `/chat/completions` 结尾。
### 本地模型
Interpreter 可以使用本地模型,提供更好的隐私保护和离线兼容性。运行本地模型有多种选择。其中最容易配置的之一是 Ollama。
#### Ollama
[Ollama](https://ollama.com/) 允许你在设备上本地且私密地运行语言模型。
下载并安装 Ollama 后,在 Interpreter 设置中使用 **Add provider** 添加 Ollama。Ollama 不需要 API 密钥。然后从[模型列表](https://ollama.com/search)中选择一个模型。例如,如果你想使用 [Llama 3.2](https://ollama.com/library/llama3.2),点击 **Add model**,然后:
- **Provider:** Ollama
- **Display name:** Llama 3.2,此值可自定义。
- **Model ID:** `llama3.2`,必须与 Ollama 中的模型 ID 完全匹配。
**启动 Ollama 服务器**
要允许浏览器扩展与 Ollama 交互,你必须在运行服务器时[给予明确指示](https://github.com/ollama/ollama/issues/2308),否则你会看到 `403` 错误。
关闭 Ollama 应用,然后在终端中运行以下命令。如果你不使用 Chrome 或 Firefox,请将协议更改为你浏览器的扩展协议。
```
OLLAMA_ORIGINS=moz-extension://*,chrome-extension://*,safari-web-extension://* ollama serve
```
然后按照正常方式使用 Ollama 运行你的模型,例如:
```
ollama run llama3.2
```
**上下文长度**
Ollama 的上下文窗口默认为 2048 个 token。这是消息和响应的最大 token 数。当剪藏较长的网页时,你很容易超过此限制。Ollama 会静默失败并返回不相关的结果。一些解决方案:
- 增加 Ollama 的 `num_ctx` 参数。请注意,更长的上下文需要更多内存。
- 在模板中使用[[#上下文]]字段来提供页面中更有针对性的部分,或使用[[过滤器|筛选器]]裁剪上下文,例如 `{{content|slice:0,1000}}`。