すべてのページ
このページの内容

画像、メディア、数式

OAR の返信はテキストだけではありません。エージェントはスクリーンショットを見せたり、作成したクリップを再生したりできます。数式は組版されて表示され、コードブロックには Copy(コピー)ボタンがあり、スクリーンショットに書き込みをしてから送り返すこともできます。このページでは、それぞれについて説明します。

会話を描画するページは、Markdown、数式、コードのハイライト用のライブラリを自前で持っていません。ブラウザーがそれらを cdn.jsdelivr.net(Markdown と KaTeX)と cdnjs.cloudflare.com(highlight.js)から読み込むため、ブラウザーからこれらのホストに接続できる必要があります。接続できないと、返信はプレーンテキストで表示され、数式はソースのまま残り、コードブロックはハイライトされません。

エージェントの返信に含まれるメディア 0.9.2 で追加 #

エージェントは、リレーのマシン上にあるファイルの絶対パスをターゲットにした Markdown 画像を書くことで、返信に画像、動画、音声ファイルを入れられます。

![the failing page](/home/dev/projects/shop/shots/checkout.png)
![demo clip](C:\Users\dev\Videos\demo.mp4)

何もアップロードする必要はなく、エージェントに追加のツールも要りません。ブラウザーが要求したときに、リレーがファイルを読み込みます。

ファイルの種類 表示される内容
画像 メッセージの幅に合わせて縮小された画像がインラインで表示されます。
mp4、webm、m4v、mov 操作ボタン付きの動画プレーヤーです。
mp3、m4a、ogg、opus、wav、flac 操作ボタン付きの音声プレーヤーです。

画像とプレーヤーのどちらが表示されるかは、ファイル名の拡張子で決まります。エージェントが説明として書いた内容では決まりません。説明はプレーヤーのツールチップになります。

画像をクリックするとビューアーで開き、会話内の他のメディアをスワイプして切り替えられます。プレーヤーは独自の操作ボタンを持ちます。パスはリレーのマシンでの書き方で書きます。Linux と macOS では /home/…、Windows では C:\… です。

表示できるもの #

  • 自分だけに表示されます。 リレーは、アクセストークンを持つリクエストにだけファイルを返します。リレーにサインインしたブラウザーのリクエストはトークンを持っています。読み取り専用の共有リンクにはトークンがないため、メディアは表示されず、画像をクリックしても何も起きません。
  • フォルダー。 Linux と macOS には、許可されたフォルダーの一覧がありません。リレーを実行しているユーザーが読めるファイルであれば、ワークスペースの内外を問わず、どの絶対パスでも返されます。.. のセグメントは解決されます。Windows では、ファイルは、リレーが 📁 Browse files(ファイルを参照)に一覧表示するドライブのいずれかにある必要があります。返信がエージェントのためにファイルを読み取ることはできませんが、ブラウザーにファイルを要求させることはできます。そのため、リレーのユーザーが読めるものは何でも画面に表示される可能性があります。
  • ファイルがない、またはフォルダーの場合。 リレーはリクエストを拒否し、画像やプレーヤーは読み込まれません。
  • 安全な種類。 HTML と XML のファイルは、リレーのページ内で実行されないようにプレーンテキストとして返されます。SVG 画像は表示されますが、スクリプトは実行できません。
  • サイズ。 OAR はサイズの上限を設けていません。動画と音声は分割してストリーミングされるため、プレーヤーで再生位置を移動できます。
  • 生の HTML は使えません。 エージェントが返信に書いた HTML は、ページではなくテキストとして表示されます。

コピーは作られません。ディスク上のファイルが変わると、次に読み込んだときに新しい版が表示されます。

プロバイダー別 #

エージェントはこの方法を知っている必要があります。OAR は、エージェントに渡す指示の中でプロバイダーごとに一度これを伝えます。違いはそれだけで、表示される内容は同じです。

プロバイダー メディアの埋め込みを指示
GitHub Copilot、SDK エンジン はい
GitHub Copilot、拡張機能エンジン いいえ
OpenAI(自分のキー)、SDK エンジン はい
OpenAI(自分のキー)、拡張機能エンジン いいえ
Claude はい
DeepSeek 0.9.17 で追加 はい
Claude Cloud いいえ
Cursor はい
Grok はい

OpenAI Image のチャットにはエージェントがいないため、伝える相手がいません。

プロバイダーごとのその他の違いはプロバイダーの概要を、これがツールではなく指示である理由はツールではないものを参照してください。

送信する画像 #

添付した画像は、メッセージ内にサムネイルとして表示されます。クリックするとビューアーが開きます。画像の添付方法、アップロード前の縮小、各プロバイダーへの渡し方は入力欄のページにあります。

画像への注釈 0.9.2 で追加 #

蛍光ペンを使って、スクリーンショットの指したい部分を示せます。

  • 送信前。 入力欄の画像をクリックします。書き込みができる画像には 🖍️ バッジが付いています。GIF と SVG の画像には書き込みできません。
  • ビューアーから。 メッセージまたは 📁 Browse files から画像を開き、🖍️ Annotate(注釈)をクリックします。GIF と SVG では、また共有ビューでは、このボタンはありません。

ページの上に Annotate image(画像に注釈を付ける)というタイトルのエディターが開き、画像が表示されます。ボタンはアイコンだけで、以下の名前はそのアクセシブルラベルです。

操作 動作
4 つの色 黄(既定)、赤、緑、青。
3 つの太さ 細、中(既定)、太。太さは画像の長辺に対する割合なので、スマートフォンのスクリーンショットでも大きなキャプチャでも、書き込みは同じように見えます。
↩️ Undo(元に戻す) 最後のストロークまたは最後のクリアを取り消します。
🗑️ Clear all(すべてクリア) すべてのストロークを消します。Undo で元に戻せます。
✅ Accept(確定) 保存します。何か描くまでは無効です。
✖ 保存せずに閉じます。何か描いている場合は Discard annotations?(注釈を破棄しますか?)と確認します。Escape キーでも同じです。

ストロークは半透明なので、書き込みの下の文字も読めます。タップすると点が付きます。

タッチ。 1 本の指で描きます。2 本目の指を置くとピンチズームに切り替わり、描きかけのストロークは破棄されます。ダブルタップで拡大し、もう一度ダブルタップすると画像全体が収まる表示に戻ります。マウス。 左ドラッグで描き、ホイールでズームし、右ボタンまたは中ボタンのドラッグで表示を移動します。ダブルクリックでズームします。

保存 #

Accept を押すと、ストロークが画像の元のサイズの PNG に統合され、screenshot-annotated.png のような名前(元の名前の後に -annotated.png)が付きます。元の画像は変更されません。このコピーはその後、他の添付ファイルと同じ手順をたどるため、大きなものはアップロード前に縮小されます。

  • 入力欄から始めた場合、注釈付きのコピーがその添付ファイルと置き換わり、アップロードされます。
  • ビューアーから始めた場合、注釈付きのコピーは次のメッセージ用の新しい添付ファイルとして入力欄に追加され、アップロードされます。すでに送信したメッセージはそのままです。入力欄がいっぱいの場合はエディターが開いたままになるので、空きを作ってからもう一度確定できます。

画像を開けないときや保存できないときは、Could not open the annotation editor(注釈エディターを開けませんでした)または Could not save annotations(注釈を保存できませんでした)という短い通知が表示され、エディターはそのままの状態で残ります。

生成された画像 #

OpenAI Image のチャットでは、返信はモデルが生成した画像です。詳しくは OpenAI と OpenAI Image を参照してください。

数式 #

数学と化学の式は、返信でも思考でも KaTeX で組版されます。化学式には KaTeX の mhchem 拡張の \ce{…} を使います。この拡張は、ページが KaTeX と一緒に読み込みます。

書き方 結果
$E = mc^2$ または \(E = mc^2\) 文の行内に置かれるインライン数式です。
$$\int_0^1 x\,dx$$ または \[ … \] 独立した行に中央揃えで置かれるディスプレイ数式です。
$\ce{2H2 + O2 -> 2H2O}$ 化学反応式です。

ディスプレイ数式は複数行にまたがってもかまいません。行に単独で置いた $$ または \[ で始まり、対応する $$ または \] で終わります。その間の行は 1 つの数式としてつながります。行に単独で置いた [ で始まり、行に単独で置いた ] で閉じたものは、その間の行が \frac、\sum、\ce などの TeX コマンドを使っている場合に限り、ディスプレイ数式として扱われます。

普通の丸かっこで囲んだ数式も、明らかに TeX である場合は組版されます。つまり、240 文字以内で、Web アドレスではなく、\frac のようなコマンドや x^2、x_{n} のような上付き・下付きを含む場合です。

ドル記号と価格 #

1 つの $ が数式を始めるのは、次のすべてを満たす場合だけです。

  • 直後の文字が空白ではない。
  • 次の $ で閉じられ、その直前の文字が空白ではない。
  • 閉じる $ の後に数字が続かない。ただし、間のテキストが TeX らしく見える場合(\ ^ _ { } = のいずれかを含む場合)は数字が続いてもよいため、$x^2$3 は数式になります。

そのため、it cost $5 and $9 や $4.20, the earlier one $3.80 はプレーンテキストのままで、$x^2$ は数式になります。バックスラッシュの後の $ は普通のドル記号です。コードスパンやコードブロック内のドル記号が数式として扱われることはありません。

無効な入力 #

KaTeX が読めない数式があっても返信は壊れません。数式の代わりに、ソースのテキストがエラーの色で表示されます。

コードブロック #

言語名付きのフェンスブロックはハイライトされます。言語名がない場合は、ハイライト機能が言語を推測します。どのブロックにも右上に Copy ボタンがあります。コードだけをコピーし、ラベルが一瞬 ✓ Copied(コピーしました)または Copy failed(コピーに失敗しました)に変わります。長い行は折り返されず、ブロックが横にスクロールします。

  • Web アドレスへのリンクは新しいタブで開きます。開いたページから OAR に働きかけることはできません。
  • 返信内にプレーンテキストで(コードスパンやリンクではなく)書かれたファイル名やパスのうち、src/app.js のように既知のファイルの種類の拡張子を持つものは、新しいタブではなくアプリのビューアーでファイルを開くリンクになります。
  • 残るのは http、https、mailto のリンクと OAR 内のアドレスだけです。それ以外の種類は削除されます。

その他の Markdown #

返信では標準の Markdown が使えます。見出し、太字と斜体、取り消し線、引用、箇条書きと番号付きリスト、表、水平線、インラインコードです。表はメッセージの幅いっぱいに広がります。返信内の HTML はテキストとして表示されます。