インタープリターは、[[Obsidian Web Clipperの紹介|Web Clipper]]の機能で、自然言語を使ってウェブページとやり取りできます。インタープリターは、Obsidianに保存したいデータをキャプチャしたり修正したりするのに役立ちます。例えば:
- 特定のテキスト断片を抽出する。
- 情報を要約または説明する。
- テキストをある形式から別の形式に変換する。
- テキストを別の言語に翻訳する。
インタープリターは言語モデルを活用してウェブページ上の情報を処理し、[[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"}}` でフランス語のプロンプトを使って3つの箇条書きを抽出する。
プロンプトの出力は[[フィルター]]を使ってさらに加工できます。フィルターはモデルからプロンプトの応答を受信した後に処理されます。例えば、`{{"a summary of the page"|blockquote}}` とすると、応答が引用ブロックに変換されます。
## はじめに
インタープリターは、デバイス上でプライベートに実行するオプションを含め、ほぼすべての言語モデルプロバイダーで動作します。インタープリターをセットアップするには:
1. Web Clipper設定の**インタープリター**セクションに移動します。
2. **インタープリターを有効化**をオンに切り替えます。
3. プロバイダーとモデルを設定します。下記の[[ウェブページの解釈#モデル|モデル]]セクションを参照してください。
4. [[テンプレート|プロンプト変数]]を[[Obsidian Web Clipper/テンプレート|テンプレート]]に追加します。
5. テンプレートにプロンプト変数が含まれている場合、[[ウェブページのクリップ|ページをクリップ]]するときにインタープリターセクションが表示されます。**解釈**をクリックしてプロンプト変数を処理します。
## 仕組み
インタープリターが有効で、*かつ*テンプレートに[[変数#プロンプト変数|プロンプト変数]]が含まれている場合、拡張機能ウィンドウの**Obsidianに追加**ボタンの上に新しいインタープリターセクションが表示されます。このセクションでは、モデルを選択し、現在のページに対してインタープリターを実行できます。
**解釈**をクリックすると、インタープリターはページコンテキストを選択したモデルに送信し、テンプレート内の*すべての*プロンプトを1つのリクエストで送ります。選択したモデルプロバイダーによって、これは外部呼び出しになるか、デバイス内でローカルに処理されます。モデルはページコンテキストに対してプロンプトを評価し、応答を返します。その後、インタープリターはプロンプト変数を応答データに置き換えます。
プロセス全体は、使用するモデルと処理するデータ量に応じて、ミリ秒から30秒以上かかることがあります。
## コンテキスト
*コンテキスト*とは、インタープリターがプロンプトを処理するために使用するページデータのことです。コンテキストが小さいほど、インタープリターの実行が速くなります。
デフォルトでは、インタープリターはページのHTML全体をコンテキストとして使用しますが、これによりプロンプトが必要以上に遅くなり、コストがかかる場合があります。
インタープリターの**詳細設定**でデフォルトのコンテキストをオーバーライドし、[[Obsidian Web Clipper/テンプレート|テンプレート]]ごとにコンテキストを定義できます。
より対象を絞ったコンテキストを定義するには、[[変数#セレクタ変数|セレクタ変数]](または他の変数タイプ)を使用して、ページの特定のセクションを解釈します。例えば、テンプレートのインタープリターコンテキストに次のセレクタ変数を使用できます:
```
{{selectorHtml:#main}}
```
これにより、ウェブページの`#main`要素が存在する場合、その要素に対してのみインタープリターが実行されます。`remove_html`、`strip_tags`、`strip_attr`などの[[フィルター#HTML処理|HTML処理フィルター]]は、コンテキストの長さをさらに削減して処理を高速化するのに役立ちます。
## モデル
> [!warning] プライバシー
> サードパーティのモデルプロバイダーを使用することで、そのプロバイダーの利用規約とプライバシーポリシーに同意することになります。インタープリターのリクエストは、選択したプロバイダーに直接送信されます。Obsidianはリクエストに関するデータを収集または保存しません。
### プリセットプロバイダー
インタープリターにはいくつかのプリセットプロバイダーが含まれています。これらのプロバイダーを使用するには、プロバイダーのアカウントにログインして取得できる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 **[[設定]]** → **インタープリター**に移動します:
- **+ プロバイダーを追加**でプリセットおよびカスタムプロバイダーを設定します。
- **+ モデルを追加**でプリセットおよびカスタムモデルを設定します。
カスタムプロバイダーを追加する際は、**Base URL**にチャット補完エンドポイントを使用することをお勧めします。通常は`/chat/completions`で終わります。
### ローカルモデル
インタープリターはローカルモデルを使用でき、より高いプライバシーとオフライン互換性を提供します。ローカルモデルを実行するためのいくつかのオプションがあります。最も簡単に設定できるものの1つがOllamaです。
#### Ollama
[Ollama](https://ollama.com/)を使用すると、デバイス上でローカルかつプライベートに言語モデルを実行できます。
Ollamaをダウンロードしてインストールしたら、インタープリター設定の**+ プロバイダーを追加**を使ってOllamaを追加します。OllamaにはAPIキーは不要です。次に、[モデルリスト](https://ollama.com/search)からモデルを選択します。例えば、[Llama 3.2](https://ollama.com/library/llama3.2)を使用したい場合は、**+ モデルを追加**をクリックして以下のように設定します:
- **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トークンです。これはメッセージと応答の最大トークン数です。長いウェブページをクリップする際、この制限を簡単に超えてしまうことがあります。Ollamaはサイレントに失敗し、無関係な結果を返します。いくつかの対策があります:
- Ollamaの`num_ctx`パラメータを増やす。長いコンテキストはより多くのメモリを必要とすることに注意してください。
- テンプレートの[[#コンテキスト]]フィールドを使用して、ページのより対象を絞ったセクションを提供するか、[[フィルター|フィルター]]を使ってコンテキストをトリミングします。例:`{{content|slice:0,1000}}`。