Files
wip-reference/contents/1.3-design-principles.md

44 lines
5.0 KiB
Markdown

# 1.3. WIPの設計方針
## 対象を見つけ、その対象の操作を知る
WIPでは、アプリケーションが公開する対象を辿り、各対象で利用できる操作を確認してから実行する。操作の一覧だけを独立して渡すのではなく、操作がどの対象に属するかも共通のモデルで表す。
対象の配置を表すTreeをWorldspace、その中で観測・操作できる対象をObjectと呼ぶ。Objectは公開するInterfaceへの参照を持ち、自身の短い説明も公開できる。InterfaceにはOperationとその引数・結果の型を宣言し、用途を判断するための説明を添えられる。説明の公開は必須ではない。
この分離によって、対象を探索するときには配置と公開情報を使い、操作を選ぶときには必要なInterfaceの宣言を使える。すべての対象の本文や、すべてのOperationの詳細を、探索の開始時にまとめて取得する必要はない。
## ドメイン固有の操作を残す
共通化するために、すべての操作をread / writeへ変換するわけではない。Issueを閉じるなら`close(reason)`というOperationを公開できる。本文の取得は`read_body()`、metadataの取得は`get_metadata()`として表せる。
これらのOperationの業務上の意味は、アプリケーションが定める。WIPが共通にするのは、Operationを宣言し、取得し、型に従って呼び出し、結果を受け取る方法である。Filesystem、Issue Tracker、Databaseなどの全操作を、単一の巨大な標準APIへ収めることは目指さない。
同じ操作定義を複数のObjectで使う場合は、Interfaceとして共有する。一つのObjectが複数のInterfaceを公開することもできる。対象ごとに操作定義を重複させず、かつ、その対象がどの機能を公開するかを明示できる。
## 共通モデルと提示方法を分ける
Hostは、対象とInterfaceを共通のProtocol dataとして公開する。Clientはそれを取得・検証し、人間向けのView、AI向けのTools、プログラム向けのAPIへ投影する。
人間向けには対象の配置や操作を画面へ表示し、AI向けには説明とsignatureを提示し、プログラム向けにはmethod呼び出しとして扱うことができる。表示の形が違っても、参照するObjectとInterfaceの契約は共有できる。
観測のcache、対象の同一性の追跡、観測時と操作時の対応関係の検証はClientが担う。利用者にProtocolのvalidatorを取得・更新させることを前提にしない。共通化のために、通信や整合性管理の詳細まで各利用者へ直接見せる必要はない。
## 環境全体を事前に列挙しない
アプリケーションが扱う対象は、実行時に増減し得る。Worldspace全体を事前にmaterializeしたり、すべてのObjectを常駐させたりすることは要求しない。Hostは必要な範囲をlazy / virtualなTreeとして公開できる。
ただし、遅延して列挙できることと、その集合をTreeへ展開するのが適切であることは別である。機械的な探索で辿る範囲は、Hostがindexableとして公開した親子関係に限る。大量の検索結果や動的Objectは、Operationの結果から発見できる。
Operation Resultには、型付きの値として未知の対象のpathを含められる。Clientは必要な対象を選んで観測し、保持できる。探索を始める前にすべての対象を知っている必要も、発見した対象をすべて即時に取得する必要もない。
## AIのTool利用に現れる課題
個別の機能をそれぞれToolとして登録する方式では、統合先や公開機能が増えると、提示するTool SchemaとAction Spaceも増えていく。Tool一覧を提示するだけでは、その環境にどの対象が存在し、何に対して操作するのかを把握する手段が別に必要になる。
WIPのAI向けインターフェースでは、配置を見る`tree`、対象の説明と操作を確認する`inspect`、選んだ操作を実行する`invoke`を使う。新しいOperationを発見しても、それを別のToolとして登録するのではなく、同じ`invoke`から呼び出す。
この方式でも、個々のOperationの意味や引数を理解する必要は残る。基礎Toolの数を固定するだけで、操作の選択や判断が自動的に正しくなるわけではない。違いは、操作定義を最初から一括して提示することを前提にせず、対象を探索しながら必要な操作を取得できる点にある。
Tool SelectionからWorld Explorationへ問題の扱い方を変えることは、この共通モデルをAIへ提示したときの狙いである。WIP全体の動機は、AI専用のToolを減らすことよりも広い。人間やシステムも同じ対象と操作の契約を使えるようにする。