生成AIで大きなデータを扱おうとすると、意外なところで困る。
たとえば私の場合、NextcloudにFXのTickデータを保存している。
CSVは1ファイル数GBから数十GB。全部合わせれば100GBを超える。
これをChatGPTに読ませて、EAのバックテストや市場データの研究に使いたい。
ChatGPT Workのようにブラウザや外部サービスを直接扱える仕組みを使えば、かなり便利になってきた。
ただ、巨大ファイルを調べるたびに高機能なエージェント環境を使う必要があるのだろうか。
「普通のWebページとしてデータを公開しておけば、通常の生成AIから必要な部分だけ読めるのでは?」
ということで、少し変わった実験を始めた。
136GBのデータを全部AIへ渡す必要はない
まず考え方を変えた。
巨大なCSVを生成AIに渡すと聞くと、普通はこう考える。
NextcloudからCSVをダウンロード
↓
生成AIへアップロード
↓
全部解析
でも、バックテストや時系列データ解析では、最初からファイル全体が必要とは限らない。
まず必要なのは、だいたいこんな情報だ。
- どんなファイルがあるか
- ファイルサイズ
- 更新日時
- CSVの列構造
- 最初の数行
- 最後の数行
- 収録期間
- 調べたい日時付近のデータ
たとえば20GBのUSDJPY CSVがあったとしても、
2020年3月16日の値動きを調べたい
のであれば、20GB全部を最初に読む必要はない。
必要な位置を探して、その周辺だけ数百KB~数MB取ればいい。
そこで「Nextcloud → Web → AI」の橋を作る
今回作っているのが、Nextcloudと普通のWebページの間に置く小さなBridgeだ。
Nextcloud ↓ 読み取り専用Bridge ↓ 普通のHTMLページ ↓ ファイル一覧 ↓ ファイル詳細 ↓ 必要部分だけRange取得 ↓ 生成AI
Bridgeがやることは、それほど複雑ではない。
- list ― フォルダ内のファイル一覧
- stat ― サイズ、更新日時など
- range ― 巨大ファイルの一部分だけ取得
- text ― 小さなテキストを確認
- search ― ファイル名検索
- seek-time ― CSV内の指定日時付近を探す
Nextcloud本体をインターネットへ丸裸にするわけではない。
むしろBridge側は読み取り専用にする。
削除、変更、アップロードといった機能は生成AI側へ公開しない。
最初はAPIとして作った
最初に考えたのは、ごく普通のREST APIだった。
/wp-json/.../list /wp-json/.../stat /wp-json/.../range
人間がブラウザから使う分には、これでいい。
しかし実際に通常の生成AIからアクセスさせてみると、環境によってはAPI風のURLや動的URLを直接取得できないことがあった。
そこで、かなり古典的な方向へ戻ってみることにした。
普通のWebサイトとして公開する。
API for AIではなく「Web for AI」
考えてみれば、Webそのものが巨大なデータ交換規格だ。
HTMLがあり、リンクがあり、URLがある。
検索エンジンはリンクをたどる。
生成AIもWeb検索を使う場合、似た経路を使う。
だったら、AI専用の怪しい入口を作るより、人間が読んでも意味のあるデータ公開ページにしてしまったほうがいい。
技術記事 ↓ 実験用データブラウザ ↓ USDJPY EURUSD XAUUSD AUDCAD ... ↓ ファイル詳細 ↓ 収録期間・サイズ・CSV構造 ↓ 必要な日時を見る
これなら「AIにWebページだと思わせる」必要すらない。
本当にWebコンテンツだからだ。
人間にも便利なデータブラウザにする
ここは結構重要だと思っている。
検索エンジンや生成AIのためだけに大量の意味のないページを作るのではなく、人間が使っても便利なものにする。
たとえばファイル詳細ページなら、こんな表示にする。
USDJPY_GMT+0_NO-DST.csv ファイルサイズ 18.4 GB 形式 CSV 列 Date, Time, Bid, Ask 収録開始 2003-05-05 収録終了 2026-08-14 [先頭を見る] [25%地点を見る] [50%地点を見る] [75%地点を見る] [末尾を見る] 日時を指定 2020-03-16 09:00 [この付近を見る]
これはAIがいなくても普通に便利だ。
巨大CSVをPCへダウンロードすることなく、ブラウザから中身をちょっと確認できる。
HTTP Rangeとの相性がいい
この方式の肝になるのがHTTP Rangeだ。
Range取得に対応していれば、10GBのファイルでも、
先頭から1MBだけ 中央付近から1MBだけ 末尾から1MBだけ
のように取得できる。
生成AIがファイル全体を抱える必要がなくなる。
Tickデータのような巨大時系列データとは特に相性がいい。
日時からファイル位置を探す
さらに実験しているのが、日時からCSV内の位置を探す機能だ。
たとえば、
2024-01-01
を指定する。
Bridgeは巨大CSVを最初から順番に読むのではなく、ファイル中央付近をRange取得する。
そこに書かれている日時を見る。
中央地点 ↓ 2018年だった ↓ もっと後ろを見る 2022年だった ↓ さらに後ろ 2024年付近 ↓ 発見
要するに巨大な時系列CSVを二分探索する。
これがうまくいけば、数十GBのデータから特定の日付周辺をかなり少ない通信量で探せる。
EAのバックテストにも使いたい
私がこの仕組みを作っている大きな理由は、EAの研究だ。
Nextcloudには長期間のFX Tickデータを保存している。
理想はこうだ。
「このEAを2008年から2026年まで検証して」
↓
AIがデータ一覧を見る
↓
必要な通貨ペアを特定
↓
必要期間をRange取得
↓
Pythonバックテスト
↓
PF / DD / 勝率 / 年別成績を集計
↓
EAを修正
↓
再テスト
これが通常のチャット環境だけで動けば、かなり面白い。
高機能なブラウザ操作環境は、本当にブラウザ操作が必要な仕事へ残しておける。
もちろん公開範囲には注意が必要
便利だからといって、Nextcloud全体をAIから自由に読めるようにするのは危険だ。
今回の設計では、できるだけ次のようにする。
- 読み取り専用
- 指定フォルダ以外へ移動できない
- アップロード不可
- 削除不可
- ファイル変更不可
- 巨大ファイルを丸ごと取得させない
- Rangeサイズに上限を設ける
- 機密情報を置かない
特に今回公開するTickデータは、個人情報や秘密文書ではない。
生成AIに渡して困るデータは、そもそもこの公開領域へ置かない。
実験用 Tick Data Browser
現在、Nextcloud上の研究用TickデータをWebから確認できるブラウザを試験的に作っている。
目的は、巨大ファイルそのものを配ることではなく、人間や生成AIが必要な部分だけ確認できるデータ公開方法を試すことだ。
※実験中のため、構成やURLは変更する場合があります。
検索エンジン向けページとAI向けページを分ける必要はないのかもしれない
今回やっていて面白かったのはここだ。
当初は、
生成AIからNextcloudへアクセスするための特殊なAPIを作ろう
と考えていた。
でも、いろいろ試しているうちに、
普通のWebを、ちゃんと普通のWebとして作る
ほうが汎用性が高いのではないかと思い始めた。
人間が記事を読む。
検索エンジンが記事を読む。
生成AIも記事を読む。
その先に構造化されたデータページがある。
それで十分なのかもしれない。
Webサイトが「AI用の外付けストレージ」になる
この方法がうまくいけば、Nextcloudだけに限らない。
- 巨大CSV
- アクセスログ
- センサーデータ
- バックテスト結果
- JSON
- 研究データ
- 公開資料
などを、Webサイト経由で生成AIへ渡せる。
それも、毎回ファイルをアップロードし直すのではない。
URLを知っていれば、AIが必要なところを取りに行く。
Webサイトが一種の「生成AI用外付けストレージ」になる。
まだ実験中
もちろん、まだ完成した仕組みではない。
生成AI側のWebアクセス制限は環境や時期によって変わるし、検索エンジンがどこまで巡回するかも一定ではない。
それでも、
巨大ファイルをAIへ全部渡す
のではなく、
AIが必要なデータへWeb経由で取りに行けるようにする
という方向性は、かなり使い道がありそうだ。
API、MCP、専用コネクタだけが生成AIとの接続方法ではない。
昔からあるHTML、URL、リンク、HTTP Rangeでも、意外といろいろできる。
しばらくこの方法で、Nextcloudに保存している巨大Tickデータを通常の生成AIからどこまで扱えるか試してみる。
