Skip to content

Atom と関係 ​

Atom は、本文と参照を持つ addressable な一つの情報です。メモだけでなく、複数のメモについての説明や、メモ同士の関係も同じ形で保存できます。ただしAtomに数学的な唯一の「最小意味単位」はありません。意味の粒度はAgentとホストが原資料の内容に応じて決めます。

招待手順なら、次の三つを別々に扱えます。

Atom本文の例参照
ルール招待リンクの有効期限は24時間です。なし
手順の説明招待と参加の手順なし
関係Atom(必要な場合)この手順には有効期限のルールが含まれる。手順 → 説明、ルール → メモ

ルールを別の手順でも使いたい場合は、もう一つ関係を追加します。本文のコピーや、親となる説明のメンバー一覧の書き換えは必要ありません。

リンクの役割と、関係Atomの本文 ​

次の例では、一つの関係に依頼者・承認者・対象という三つの役割を持たせています。同じ役割に複数の対象も指定できます。

ts
(
  await memory.write({
    changes: [
      {
        id: 'atom',
        op: 'create',
        content: {
          text: '参加申請は、担当者の承認を受けて受け付ける。',
          links: {
            依頼者: applicant.ref,
            承認者: [primaryReviewer.ref, backupReviewer.ref],
            対象: application.ref,
          },
        },
        sources: [],
      },
    ],
  })
).changes.atom;

役割を入れ替えると違う関係になります。役割名の繰り返しや全体の順序を明示したいときは、links: [{ role: '承認者', target: ref }, ...] の配列形式を使えます。

検索候補の直接入口は各Atom自身の本文です。リンク先の本文を親へ暗黙に連結しません。inspect はrootから一-hopだけを調べ、direction、roles、limit、cursorで隣接をページングします。read は独自のdepth、件数、訪問済み管理でrequired閉包を有限に選びます。相互参照があっても停止し、関係weightが0の役割・方向は構造伝播にも入りません。

関係をAtomにする境界 ​

通常の二項関係は、本文を持たない役割付きリンクで表します。関係そのものに独立した本文、出典、改訂履歴、認可・ライフサイクル、n項参加者、またはさらにリンクが必要な場合だけ、関係を別Atomへ reify します。説明や所属のAtomは、それ自身の本文で直接見つかる必要があります。一つのレコード形を共有することは、すべての関係を別ノードにすることではありません。

別IDの関係Atomは別ノードとして順位へ影響します。同じ根拠を重複して作ると、構造伝播のmassや候補順位を増やします。重複を意味的に統合するか、どの粒度で分けるかはWriterの責務です。

主張と条件を一緒に渡す ​

「外部参加者を招待できる」と「管理者の承認が必要」を別の Atom にするなら、条件を required: true の参照として結び付けます。

ts
const condition = (
  await memory.write({
    changes: [
      {
        id: 'atom',
        op: 'create',
        content: {
          text: '外部参加者の招待には管理者の承認が必要です。',
          links: [],
        },
        sources: [],
      },
    ],
  })
).changes.atom;
(
  await memory.write({
    changes: [
      {
        id: 'atom',
        op: 'create',
        content: {
          text: '外部参加者を招待できます。',
          links: { 条件: { ref: condition.ref, required: true } },
        },
        sources: [],
      },
    ],
  })
).changes.atom;

read は主張と条件の本文を一緒にパックします。両方を予算内で渡せなければ、主張を省きます。通常の関係は周辺を探す手掛かりになり、required はその本文を読むために欠かせない依存を指定します。

参照は観測した版も覚えている ​

保存や検索で受け取る ref には、論理的な対象と、そのとき見た版が対応付いています。使う操作によって、どちらを使うかが決まります。

操作読む・変更する対象
inspect(ref)そのとき観測した版
inspect(ref, { version: 'latest' })同じ対象の最新版
write({ changes: [{ op: 'revise', target: ref, ... }] })観測版を前提に同じ対象を改訂
links: { role: ref }同じ対象へ接続し、読取時の状態で版を解決
links: { role: { ref, at: 'observed' } }接続先を観測版に固定

例えば有効期限を改訂しても、手順からルールへの通常リンクは接続し続けます。一方、以前の回答の根拠を調べる inspect は、その回答で参照した版を返します。

整理を更新して、当時の構成も残す ​

別の視点でまとめた説明は、そのまま並べて保存できます。同じ整理を更新する場合は write の revise changeで新しい版を作ります。以前に受け取った参照は元の版を指します。複数のcreate/revise/retireとbatch-local linkは一つのwriteへまとめて原子的に確定できます。

「どの整理を採用するか」「何を後継とするか」「当時の構成をいつまで残すか」はアプリ側の運用です。Atomは役割名から後継採用を推定せず、特定の関係形式や保持期間を要求しません。検索の score も queryへの相対関連度であり、真偽や絶対的重要度ではありません。責務の境界を参照してください。

MIT License · TypeScript / Node.js