コンテンツにスキップ

mintbot によるファイルの扱い

Telegram、Web パネル、API のいずれかで mintbot エージェントに写真、文書、ボイスメッセージ、スプレッドシート、スクリーンショット、PDF を送ると、そのファイルはあなたのエージェント専用の VPS に保存され、ほかのどこにも保存されません。望む限りそこに残り、LLM にはそのために用意された作業用コピーが渡されます。

目立たない設計判断ですが、その影響は大きなものです。一般向けの AI チャットと mintbot が大きく異なる点のひとつなので、詳しく説明しておく価値があります。

図:アップロードされたファイルは原本としてエージェントの VPS に保存され、ファイル形式に応じて選ばれたアダプターが LLM 用の作業用コピーを作る
原本は VPS 上でそのまま保たれます。モデルが目にするのは、常にモデル用に作られた作業用コピーだけです。

最初から最後までの流れ

  1. アップロードがエージェントの VPS に届く。 Web パネルにドラッグした PDF は、そのまま VPS に届きます。Telegram で送った写真やファイルは、mintbot のボットが Telegram から取得してすぐに VPS へ渡します。中継するだけで、一元的に保存することはありません。エージェントのローカル API は、ファイル先頭のマジックバイトを調べて実際の形式を判定し(スマートフォンやブラウザーは驚くほど頻繁に誤った形式を付けます)、SHA-256 ハッシュを計算して /var/lib/mintbot-agent/uploads/<shard>/<sha256>.<ext> に書き込みます。ローカルのカタログには、送信元(telegram / panel / api)、アップロードした人の ID、MIME タイプ、元のファイル名を記録した行が追加されます。同じファイルを 2 回送っても、保存されるのは 1 回だけです。

    会話がプロジェクト内で行われている場合、エージェントはそのプロジェクトの uploads/ フォルダーにもコピーを置き、プロジェクトのほかのファイルと並べて作業できるようにします。

  2. 原本には手を加えない。 この時点から、mintbot 内のどの処理も保存済みのファイルを変更しません。LLM 向けにファイルを準備するアダプターが作るのは作業用コピー(縮小した JPEG やデコードしたテキスト)だけです。バイト単位で同一の原本は、あなたが削除するまでディスクに残ります。中央のストレージも、保存期限のタイマーも、エージェント間の漏えいもありません。各エージェントの VPS が知っているのは、自分の所有者のファイルだけです。

  3. モデルにはモデル用のバージョンが渡される。 エージェントがファイルを LLM に見せるとき、小さなディスパッチャーが MIME タイプと拡張子から適切なアダプターを選びます。

    アダプター 対象 モデルが受け取るもの
    画像 JPG, PNG, WebP, GIF, HEIC (iPhone), AVIF, TIFF, BMP 長辺 1568 px に縮小し、JPEG(品質 85)で再エンコードしてリクエストに直接埋め込みます。デコードは VPS に合わせたメモリ上限を持つ短命の別プロセスで行うため、巨大な写真でもエージェントの動作が遅くなることはありません
    PDF 32 MB までの .pdf ネイティブの PDF として埋め込み、Claude がテキストとレイアウトを直接読み取ります。それより大きい PDF はディスクに残し、エージェントが自分でテキストを取り出します(例:pdftotext)
    テキスト .txt, .md, .csv, .json, .yaml, .svg, ソースコード (.py, .js, .ts, .go, .rs, …), ログ, diff UTF-8 としてデコードし(失敗時は latin-1)、500 KB まで埋め込みます。それより長いファイルはそこで切り詰められますが、完全な原本はディスクに残ります
    音声 .mp3, .ogg, .opus, .m4a, .wav, .flac, .aac Telegram やパネルのマイクからのボイスメッセージは、すでに文字起こしされた状態で届きます。音声ファイルはまだ自動では文字起こしされません。エージェントがファイルの場所と指示を受け取り、依頼に応じて文字起こしします
    動画 .mp4, .mov, .webm, .mkv, .avi まだ自動では処理されません。依頼があると、エージェントが ffmpeg をインストールし(必要なディスク容量を先に伝えます)、フレームや音声トラックを自分で取り出します
    Office 文書 .docx, .xlsx, .pptx, 旧形式の .doc / .xls / .ppt, .odt, .ods, .odp まだ自動では処理されません。依頼があると、エージェントが小さな読み込み用ライブラリをインストールしてテキストを取り出します
    不明 その他すべて ファイル名、形式、サイズ、ディスク上の場所に、先頭数バイトの 16 進表記を添えたメモ。モデルがファイルを識別し、必要に応じて自分のツールで開くにはこれで十分です

    各作業用コピーは原本の隣の <sha256>.cache/v<N>.json にキャッシュされるため、次にモデルがそのファイルを必要としたときはすぐに読み込まれます。アダプターが変わると、キャッシュは自動的に作り直されます。

  4. モデルのコンテキストに期限切れになる URL を入れない。 画像や PDF を LLM に送るときは、同じリクエストに直接埋め込みます。後から 404 になる URL も、有効期限付きの署名リンクもありません。モデルが参照先だけを必要とする場合は、内部アドレス https://agent<id>.<domain>/<panel_token>/api/local/uploads/<upload_id>/raw を使います。これはエージェント自身のパネルトークンで保護され、ファイルがディスクにある限り有効です。

一般向け AI チャットより優れている理由

ChatGPT に写真を、Claude.ai に PDF をアップロードすると、ファイルはサービス提供元のストレージに入り、その会話に紐づけられます。いつ消えるかを決めるのは提供元の保存ポリシーです。一定期間が過ぎるとファイルは消えてしまい、それが含まれていた会話がまだ見えていても戻ってきません。別の提供元に乗り換えれば、一からやり直しです。

Telegram ボットによくある落とし穴が、この違いをはっきり示しています。Telegram は写真ごとに永続的な file_id を保持しますが、ボットが受け取るダウンロードリンクの有効性が保証されるのは約 1 時間だけです。そのリンクしか保存していないボットでは、昨日の写真が 404 になります。mintbot はファイルが届いた瞬間にあなたのエージェントのアーカイブへコピーし、古い写真に返信した場合は永続的な file_id を使って取得し直します。それ以降、その写真はあなたのものです。

この設計から、次の 3 つのことが言えます。

  • ファイルは LLM の提供元ではなく、あなたのもの。 来月 Claude から GPT に乗り換えても、ファイルの履歴はそのまま引き継がれます。提供元のストレージではなく、あなたの VPS にあるからです。
  • 後から改めて質問できる。 「3 か月前に分析してもらった契約書を、この新しい草案と比べてくれる?」という依頼も通用します。原本がまだディスクにあるからです。一般向けのチャットでは、古いファイルはたいてい消えています。
  • モデルは常に、いちばん使いやすい形式を受け取る。 画像を扱うモデルには縮小した JPEG、テキストを読むモデルには UTF-8、PDF を読むモデルにはネイティブの PDF が渡されます。スマートフォンから HEIC をアップロードしてもそのまま使えます。画像デコーダーが Pillow の HEIF プラグインを読み込み、マジックバイトの確認によって、アップロードを誤って application/octet-stream とするスマートフォンも見抜きます。

ファイルを管理する場所

エージェントの Web パネルでは、設定 → ファイルマネージャー からファイルマネージャーを開けます。エージェントの VPS 全体を閲覧でき、/var/lib/mintbot-agent/uploads/ にあるアップロードのアーカイブが、会話によって増えていく部分です。そこでは次のことができます。

  • フォルダーを閲覧し、ファイルをダウンロード、名前変更、移動、削除する
  • フォルダーを作成する
  • 新しいファイルをドラッグ&ドロップする(分割してアップロードされ、1 ファイルあたり最大 4 GB)
  • 小さなテキストファイル(最大 1 MB)をブラウザー上で直接編集する

サイズの上限:チャットに添付するファイルは最大 500 MB、Telegram がボットに取得を許可するのは 20 MB までのファイル、ファイルマネージャーは 1 ファイルあたり最大 4 GB です。それ以外に容量の上限となるのはディスクだけです。mintbot はサーバーが動き続けられるよう、常に少し空き容量を残します。ディスクがいっぱいになると、エージェントがそれを知らせ、空き容量を確保できるようファイルマネージャーへの直接リンクを示します。エージェントに古いファイルの削除を頼むこともできます。

ファイルマネージャーでファイルを削除するとディスクから消え、エージェントはそれを LLM に見せられなくなります。原本が「あなたのもの」と言えるのはまさにこのためです。削除する権限を持つのはあなただけなのです。

まとめ

多くの AI チャット製品は、アップロードされたファイルを使い捨ての会話コンテキストとして扱います。mintbot はそれをあなたのデータとして扱います。あなたの VPS に保存され、あなたが所有し、そのときモデルが必要とする形に必要に応じて変換されます。mintbot の興味深い機能の多くは、この土台の上に成り立っています。