TRIDENT STAND ALONE COMPLEX
TRIDENT STAND ALONE COMPLEXとは
スタンド・アローンで動作する、OpenStreetMap関係の様々なAPIやオープンLLMの複合体(complex)
TRIDENT
個人開発している対話的地理空間情報可視化アシスタント
Vector tile
例
Nominatim
例
Overpass
例
Ollama
例
https://gyazo.com/a7a346117c8bd1a07fa8465364b19f6b
スペック
CPU
8 Core, 16 Thread
Memory
96 GB RAM
Graphics
24 GB VRAM
RTX 3060 12 GB VRAM * 2
Disk
Total: 14 TB
/ : 2 TB NVMe SSD
/home : 4 TB NVMe SSD
/everything : 4 TB RAID 0 (2 TB SATA SSD*2)
/data : 4T B USB SSD
TRIDENT STAND ALONE COMPLEX
code:architecture.mermaid
flowchart TB
%% クライアント
%% 単一マシン
direction TB
%% TRIDENT(三層)
direction TB
SUR --> INR --> DEP
end
%% 同一マシン上のサービス
direction TB
direction TB
OA --- LLM
end
%% 各層は内部で Ollama と通信
SUR --- OA
INR --- OA
DEP --- OA
end
%% ユーザーは各層と対話(ステートレス)
U --> SUR
U --> INR
U --> DEP
%% ユーザーはデータ系にも直接アクセス
U --> V
U --> N
U --> P
TRIDENT STAND ALONE COMPLEXのデモ
yuiseki.icon
code:prompt
Show UN facilities in New York City.
TRIDENT.icon
yuiseki.icon
code:prompt
Add hotels, police stations and train stations to this map.
TRIDENT.icon
yuiseki.icon
code:prompt
Show military installations in South Sudan.
TRIDENT.icon
yuiseki.icon
code:prompt
Add hospitals and shelters to this map.
TRIDENT.icon
yuiseki.icon
code:prompt
Show only military installations, after all.
TRIDENT.icon
yuiseki.icon
code:prompt
表示領域を首都に限定して
TRIDENT.icon
yuiseki.icon
code:prompt
スーダンと南スーダンの軍事施設を表示して
TRIDENT.icon
yuiseki.icon
code:prompt
台東区のお寺と神社を表示して
TRIDENT.icon
yuiseki.icon
code:prompt
やっぱり神社だけにして
TRIDENT.icon
yuiseki.icon
code:prompt
表示範囲に文京区と墨田区も加えて
TRIDENT.icon
yuiseki.icon
code:prompt
台東区のラーメン屋と蕎麦屋と寿司屋とピザ屋とハンバーガー屋を表示して
TRIDENT.icon
yuiseki.icon
code:prompt
やっぱりラーメン屋だけにして
TRIDENT.icon
yuiseki.icon
code:prompt
ウチの近所の最高に美味いラーメン屋が表示されてないじゃないか!どういうことだ!
TRIDENT.icon
TRIDENT 三層アーキテクチャ
以下の3つの層になっている
表層
表層は、ユーザーと自然に対話して、どんな地図を作りたいのかという要望を聞き出すことに特化している
内層
内層は、表層とユーザーの対話履歴全体を分析して、複雑な地図を作るために必要な情報を、中間言語として出力することに特化している
深層
深層は、内層が出力した中間言語を元にOverpass APIクエリを生成することに特化している
なぜこんなややこしいことをしているのか?
非同期処理したいから
対話の応答も非同期でやりたい
対話の分析も非同期でやりたい
Overpass APIクエリを考えさせるのも非同期でやりたい
Overpass APIにリクエストするのも非同期でやりたい
低性能のローカルAIでも動かしたいから
TRIDENT 表層(Surface Layer)
表層は、「対話型オンライン地図構築アシスタント」である
平凡な対話プロンプトになっている
TRIDENT 内層(Inner Layer)
内層は、「デジタル地図構築専用対話履歴分析アシスタント」である
内層は、ユーザーと表層の対話履歴を分析する
対話履歴から地理空間情報を特定できなければ、適切に諦める
内層は、Overpass APIクエリを直接出力はしない
内層は、Overpass APIクエリを構築し、結果を描画するのに必要な情報を、中間言語で出力する
中間言語は、JSONではなく、接頭辞+改行区切りにしている
内層の出力する中間言語のフォーマット
code:geoai
ConfirmHelpful: text that meanings "Mapping has been completed. Do you have any other requests? Have we been helpful to you?", MUST be the last language written by the human
EmojiForConcern: emoji best suited to expressing specific concern, MUST be unique for each concern
ColorForConcern: color name best suited to expressing specific concern, MUST be unique for each concern, should be one of the name of Web Safe Color
Area: geospatial area mentioned by human
AreaWithConcern: pair of geospatial area and concern mentioned by human
... (You MUST ALWAYS output only one ConfirmHelpful)
... (this Area/AreaWithConcern/EmojiForConcern/ColorForConcern can repeat N times)
これはReActを強く参考にしている
ReActのプロンプトの一部:
code:react
Thought: you should always think about what to do
Action Input: the input to the action
Observation: the result of the action
... (this Thought/Action/Action Input/Observation can repeat N times)
中間言語の具体例
「スーダンと南スーダンの軍事施設の地図を作って」
code:geoai
EmojiForConcern: 軍事施設, 🪖
ColorForConcern: 軍事施設, pink
Area: スーダン
Area: 南スーダン
AreaWithConcern: スーダン, 軍事施設
AreaWithConcern: 南スーダン, 軍事施設
「台東区と文京区の駅と病院の地図を作って」
または「台東区の駅と病院の地図を作って」「そこに文京区も追加して」
code:geoai
EmojiForConcern: 駅, 🚉
EmojiForConcern: 病院, 🏥
ColorForConcern: 駅, gray
ColorForConcern: 病院, coral
Area: 台東区
Area: 文京区
AreaWithConcern: 台東区, 駅
AreaWithConcern: 台東区, 病院
AreaWithConcern: 文京区, 駅
AreaWithConcern: 文京区, 病院
TRIDENT 深層(Deep Layer)
AreaWithConcern: 台東区, 駅
深層は、「OpenStreetMapとOverpass APIの専門家で、中間言語に基づいて、正確にOverpass APIクエリを出力する」