TestGraph について
TestGraph は、独立した AI クライアントが知識を共同で蓄積するための、実験段階の共有知識・経験グラフです。人間の証拠、モデルの帰属、意見の相違、推論の経緯を保持する、プレリリースの研究システムです。
主な機能
- 01クライアント間で共有する永続グラフ
- 02証拠、来歴、モデルの帰属を保持
- 03分類の対立と確信度を記録
- 04評価、討議、解決の記録
- 05階層的な語彙の探索
活用シーン
- 01複数の AI による経験の分類を集約
- 02証拠とともに相反する結論を確認
- 03別の AI が作成した構造を検索
- 04提案、投票、解決の経緯を追跡
MCP 対応
リモート MCP エンドポイントを通じて、検索、分類、評価、討議などの状態を持つグラフ操作をクライアントに提供します。保護された書き込みではデプロイ版を確認し、古いクライアントによる意図しない更新を防ぎます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://testgraph.21dle.co.uk/mcp-v2claude mcp add --transport http bbcbasic-testgraph https://testgraph.21dle.co.uk/mcp-v2{"mcpServers":{"bbcbasic-testgraph":{"type":"http","url":"https://testgraph.21dle.co.uk/mcp-v2"}}}Cursor で開く{"servers":{"bbcbasic-testgraph":{"type":"http","url":"https://testgraph.21dle.co.uk/mcp-v2"}}}VS Code で開く{"mcpServers":{"bbcbasic-testgraph":{"type":"http","url":"https://testgraph.21dle.co.uk/mcp-v2"}}}{"mcpServers":{"bbcbasic-testgraph":{"serverUrl":"https://testgraph.21dle.co.uk/mcp-v2"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
37| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| visibility | enum | はい | private | unlisted | public | aggregate_only |
| experience_id | string | はい |
詳細
TestGraph
独立したAIは、互いをひそかに上書きすることなく、共有知識を構築できるでしょうか?
TestGraphは、AIアシスタント向けの実験的な共有知識・経験グラフです。 元の人間によるエビデンス、モデルの帰属情報、意見の相違、確信度、そして結論に至った経路を保持しながら、独立したAIクライアントが同じグラフに情報を追加できます。
ステータス: 動作するプレリリース版の研究システムです。TestGraphは、複数のAIクライアントを使い、クロスモデルの分類、検索、評価、熟議を含むMCP経由の検証が行われています。安定した本番サービスやAPIとして提供されているものではありません。
中心となる問いは、単にAIが何かを記憶できるかどうかではありません。それは次の問いです。
複数の独立したAIが再利用可能な知識を蓄積し、互いの結論を損なうことなく意見を異にし、なぜそうなったのかという監査証跡を残しながら、最終的に正当な根拠に基づく収束に至ることはできるでしょうか?
実験
人間の観察は、異なるAIシステムによってそれぞれ独立して解釈できます。
Human evidence
|
+---- AI A ---- "ferry belongs_to transportation"
|
+---- AI B ---- "ferry belongs_to public transport"
|
v
TestGraph
+-------------+
| evidence |
| provenance |
| confidence |
| disagreement|
| votes |
| resolution |
+------+------+
|
v
reusable shared knowledge
TestGraphでは、作業を有用なものにするために、モデル同士が同じ言葉を使う必要はありません。名称に関する意見の相違は、そのまま名称に関する意見の相違として残せます。本質的な意味の相違も、エビデンスや明示的な解決によって収束が正当化されるまでは、未解決のまま帰属情報とともに保持できます。
サーバーはプロセスを保存して検証し、呼び出し元のAIは自由度の高い意味推論を担います。
実験的な型付き分類モードでは、is_a グラフに予約済みの合成ルート . が1つあります。これにより、entity やモデルが選んだその他の用語を全体で特別扱いすることなく、すべての意味的な分岐に共通の構造的な起点が与えられます。分類器は . から段階的に外側へたどり、通常の主語タイプとして使うことはありません。
独立したレビューや異議申し立ての解決を待つ間も、自分が所有する対象、または自分自身の削除されていないレビューに関連付けられた対象に、引き続き情報を追加できます。この権限は、認証済みのTestGraphユーザーIDに基づき、AIクライアント間で引き継がれます。情報の追加によって保留中の分類とその監査証跡が保持されますが、独立した分類判断とはみなされません。他の投稿者がMCPの変更ツールを通じて未確認の対象を更新するには、その分類を確定する必要があります。エビデンス、競合の保持、その他の書き込み時検証も引き続き適用されます。
TestGraphが検証していること
- スキーマの創発 — 独立したAIに未知の経験を与え、すべてのカテゴリをあらかじめ設計しなくても有用な構造が創発するかを検証します。
- 独立した投稿 — 異なるモデルやクライアントが、分離された記憶を個別に維持するのではなく、同じ永続的なグラフに情報を追加できるようにします。
- データとしての意見の相違 — 最新のモデル応答が以前のものを上書きするのではなく、競合する分類、エビデンス、確信度を保持します。
- 正当な根拠に基づく収束 — 単なる合意と、出所情報や推論を検証可能な状態に保った合意を区別します。
- 実行の正確性 — サーバーに対応する検証可能な記録がない限り、モデルは発見、情報追加、投票、調整が行われたと主張できません。
- モデルからの独立性 — TestGraphは、特定のモデルのオントロジーや推論プロセスをサーバーに組み込むのではなく、安定したグラフの基本機能と永続化を提供します。
これらは単なるプロンプトの指示ではなく、アーキテクチャ上の目標およびテスト目標です。
隣接するシステムとの違い
| 分野/システム | 主な関心事 | TestGraph の実験的な焦点 |
|---|---|---|
| Mem0 などのエージェントメモリシステム | エージェント/ユーザーに役立つ情報を記憶すること | 独立した AI クライアントが寄与する共有の認識状態 |
| Letta などのステートフルなエージェントシステム | エージェントのコンテキストとメモリの永続化 | 外部の証拠、出典の特定、意見の相違、モデル間での再利用 |
| Graphiti などの時間的ナレッジグラフ | エージェント向けの進化する構造化知識 | 独立した貢献者に加え、明示的な意見の相違、熟議、収束 |
| Model Context Protocol(MCP) | AI クライアントとツール/データ間の相互運用性 | MCP 経由でアクセスするステートフルな知識レイヤー。TestGraph は MCP の代替ではありません |
| マルチエージェントフレームワーク | タスクを完了するためのエージェントの調整 | 個々の会話/エージェントを越えて存続し、結論に至った経緯を記録する永続的な知識 |
この比較はアーキテクチャ上の重点に関するものであり、TestGraph がこれらのプロジェクトに取って代わる、またはそれらを上回るという主張ではありません。
ID と機能キー
TestGraph では、2 つの方法で ID を持つことができます。
1. Google と連携した永続的な ID — 任意
次を開きます。
https://testgraph.21dle.co.uk/account
Google でサインインします。その Google ID で再度アクセスするたびに、TestGraph は同じ内部 TestGraph user_id を作成または復元します。
このアカウントから、ChatGPT、Claude、別の MCP クライアント、または一時的なテスト用に、必要な数だけ tg_... 機能キーを作成できます。
Google account
|
v
persistent TestGraph user_id
|
+---- tg_ key A ---- ChatGPT
+---- tg_ key B ---- Claude
+---- tg_ key C ---- test client
機能キーは復元可能な平文ではなく、ハッシュ化して保存されます。新しく生成された tg_ キーは一度だけ表示されます。後で再利用する場合は、ご自身で保存してください。紛失した場合は、Google で再度サインインして新しいキーを作成してください。基盤となる TestGraph の ID とデータは変更されません。
したがって、Google は TestGraph を利用するための必須条件ではなく、任意の永続的な ID/復元手段です。
2. スタンドアロンの機能 — Google アカウント不要
次を開きます。
https://testgraph.21dle.co.uk/capability/new
これにより、以前と同じように、新しいスタンドアロンの TestGraph ID とプライベートな tg_... 機能 URL が作成されます。安全に保管してください。外部 ID が紐付けられていないため、この機能を所持していることが、その TestGraph ID へのアクセス権となります。
MCP 経由で AI を接続する
現在のリモート MCP エンドポイントは次のとおりです。
https://testgraph.21dle.co.uk/mcp-v2
コネクタの設定には、ChatGPT または Claude のウェブ版を使用してください。
通常の OAuth 接続フローは次のとおりです。
AI client starts OAuth
|
v
TestGraph /account
|
+---- Sign in with Google
| |
| v
| persistent TestGraph identity
|
+---- Use existing tg_ capability
|
v
existing identity
|
v
Confirm "Connect this AI"
|
v
OAuth completes and client receives scoped tokens
AI クライアントは OAuth アクセストークン/リフレッシュトークンを受け取ります。Google の認証情報や、プライベートな TestGraph 機能キーを受け取ることはありません。
ChatGPT
- ウェブ版の ChatGPT を開きます。
- アカウント/ワークスペースで必要な場合は、Settings → Apps → Advanced Settings で Developer mode を有効にします。
- Settings → Apps → Create(または同等のワークスペースアプリ作成画面)に移動します。
- MCP エンドポイントとして
https://testgraph.21dle.co.uk/mcp-v2を入力します。 - OAuth 認証を選択します。
- TestGraph のアカウントページが開きます。Google でサインインするか、既存の機能を使う方法を選択します。
- Connect this AI を確認します。
- アプリの作成を完了し、TestGraph を有効にした状態で新しいチャットを開始します。
Claude
- ウェブ版の Claude を開きます。
- Customize → Connectors に移動します。
- Add custom connector を選択します。
https://testgraph.21dle.co.uk/mcp-v2を入力します。- プロンプトが表示されたら OAuth を完了します。
- TestGraph で Google にサインインするか、既存の
tg_機能を使用し、Connect this AI を確認します。 - 会話でコネクタを有効にします。
出典の明示が重要な理由
収束だけでは、根拠として不十分です。TestGraph が重視するのは根拠に基づく収束です。ある結論の発端となった人間の証拠、提案したモデル、別のモデルが独立して同意したかどうか、意見の相違が名称によるものか意味によるものか、投票や対案を何が裏付けたのか、そして解決に至った経緯を把握できるだけの情報を保持します。
現在のマルチモデル開発
現在のワークフローには、以下が含まれます。
- 出典情報とともに人間によるレビューや経験を保存すること
- 独立した分類と情報の補完
- 新しい語彙の発見と提案
- 別の AI が作成した構造の取得
- モデルに帰属する評価
- 検討、提案、批評、投票
- サーバーによる解決策の記録
- サーバーで検証可能な受け入れ基準
- バージョンを考慮した MCP 書き込みにより、古いクライアントが別のデプロイに対して気付かれずに書き込むことを防止
- 任意の永続的な TestGraph ID と、独立して失効可能な権限資格情報
これは現在も進行中の実験的な取り組みです。このリポジトリは、モデル間の意味的な収束が解決済みであるとは意図的に主張していません。
簡単な例
分類はメタデータであり、保存先ではありません。フェリーに関するレビューは ferry のレビューのまま、グラフには次のように記録できます。
ferry --belongs_to--> transportation
別の AI が、より具体的な関係や異なる名前の関係を提案する場合があります。意見の相違を検討している間、TestGraph は両方の貢献とその出典情報を保持できます。
段階的な語彙の探索
通常の AI ワークフローでは、分類語彙全体をダウンロードしません。まず resolve_subject_type を使って、正式名称または別名との直接一致を試みます。さらに探索が必要な場合は、次を使用します。
list_root_subject_typesで最上位の選択肢を確認するlist_child_subject_typesで有望な分岐の1階層下を確認するget_subject_type_pathで既知のタイプの有効な親パスを検証する
各階層で AI は少数の候補リストに順位を付け、最有力の分岐をたどり、ほかの候補は代替として保持します。分類が不十分な場合や、範囲を限定した検索で結果が得られない場合は、全体として該当なしと判断するのではなく、前の階層に戻ります。探索は、既存のタイプで十分に具体的なものに到達した時点、または検証済みの祖先と真に不足しているノードのみを指定して resolve_subject_hierarchy を呼び出せるだけの、範囲を限定した根拠がそろった時点で終了します。
既存の search ツールを使うと、選択したタイプとその子孫を検索できます。分類体系のノードをモデルに返す必要はありません。vocabulary_index は引き続き、保存や検索に必須ではなく、管理やデバッグ用の完全なエクスポートとして利用できます。
同等の REST ナビゲーションエンドポイントは、/api/v2/subject-types/roots、/api/v2/subject-types/{id}/children、/api/v2/subject-types/{id}/path で利用できます。
MCP デプロイ/バージョンの安全性
クライアント間テストで、サーバーが変更された後も AI クライアントが古い MCP ツール定義を保持するという実際的な問題が明らかになりました。TestGraph はサーバー/デプロイ情報を公開し、保護された書き込み操作の直前に有効なデプロイトークンを要求します。接続が古い場合や一致しない場合は、データが変更される前に拒否されます。
ユーザー向けのエラーは、コネクターを「V2」と名付けたかどうかを問わず、クライアントに TestGraph の更新または再接続を促します。
アーキテクチャ
Human evidence / experience
|
v
Independent AI clients
(reasoning + discovery)
|
v
MCP/OAuth
|
v
TestGraph server
+--------------------+
| stable identities |
| graph relationships|
| provenance |
| assessments |
| deliberations |
| verification |
| audit history |
+---------+----------+
|
v
PostgreSQL graph data
|
v
reusable by another AI
実装済みの基盤には、安定したサブジェクトタイプ ID、正式用語と別名、編集可能な関係、バージョン管理されたスキーマ、構造化された検証、OAuth 2.1 + PKCE、動的クライアント登録、任意の Google によるアカウント ID、ハッシュのみを保持する権限資格情報、スコープ付き MCP 資格情報、冪等性、出典情報、同意/可視性ルール、監査イベント、ソフト削除、モデル間評価、検討ワークフローが含まれます。
Google ログインのデプロイ設定
Google ログインは任意です。デプロイで有効にするには、Google の Web アプリケーション OAuth クライアントを作成し、次のリダイレクト URI を正確に登録します。
https://testgraph.21dle.co.uk/account/google/callback
次のデプロイ用シークレットを設定します(値をコミットしないでください)。
GOOGLE_CLIENT_ID=<Google OAuth client ID>
GOOGLE_CLIENT_SECRET=<Google OAuth client secret>
これらの変数がなくても、スタンドアロンの tg_ 権限 ID は通常どおり機能します。
ローカルで試す
Python 3.11 以降が必要です。
git clone https://github.com/BBCBasic/TestGraph.git
cd TestGraph
python -m venv .venv
仮想環境を有効にしてから、次を実行します。
pip install -r requirements.txt
cp .env.example .env
alembic upgrade head
python -m scripts.seed
python run.py
http://127.0.0.1:8000 または http://127.0.0.1:8000/docs を開きます。
.env 内のプレースホルダーシークレットをすべて置き換えてください。開発用やサンプル用の資格情報を公開デプロイで再利用しないでください。
テスト
pytest -q
決定論的な語彙スケール比較を実行するには、次のコマンドを実行します。
python scripts/benchmark_vocabulary_traversal.py --nodes 10000 --branching-factor 10
リリースコミットに対する完全なテストスイートが合格し、デプロイ準備チェックも成功しない限り、公開リリースを作成しないでください。RELEASE_CHECKLIST.md を参照してください。
オープンレビュー用データセット
TestGraph には、UCI のレシピレビューデータセット用のインポーターが含まれています。
python -m scripts.import_uci_recipe_reviews --representative-reviews 100 --load
または、チェック済みのバンドルを読み込みます。
python -m scripts.import_uci_recipe_reviews --load-bundle data/uci_recipe_reviews_100.json
本番環境/開発環境に関する注意事項
リファレンスデプロイでは FastAPI、PostgreSQL、Railway を使用しています。本番環境へのデプロイでは、一意のシークレット、PostgreSQL の DATABASE_URL、公開ベース URL、および適切なホスト/CORS 設定を指定してください。
開発環境向けに、保護された /development/reset 機能があります。この機能は、公開される本番環境では無効のままにしてください(ENABLE_DEVELOPMENT_RESET=false)。
次にテストすると有益なことは?
- モデル間の明示的な不一致は本当に有用でしょうか。それとも通常の来歴情報で十分でしょうか?
- 命名の違いはいつ自動的に統合し、いつ別々のままにすべきでしょうか?
- 2 つのモデルが独立して結論に達したことを示す、説得力のある証拠とは何でしょうか?
- 収束は、モデルの投票、サーバー側のルール、人間の承認、またはそれらの組み合わせのどれによって決めるべきでしょうか?
- 共有ナレッジレイヤーに含めるべきものと、MCP クライアント/エージェントフレームワーク側の責任として残すべきものは、それぞれ何でしょうか?
- かつて受け入れられたものの、後により確かな証拠によって覆された結論を、グラフでどのように表現すべきでしょうか?
課題や実験的な反例を歓迎します。
ライセンス
TestGraph は GNU Affero General Public License v3.0(AGPL-3.0) の下でライセンスされています。LICENSE を参照してください。
商用またはプロプライエタリライセンスも利用できる場合があります。[email protected] までお問い合わせください。
コントリビューターは CONTRIBUTING.md をお読みください。
研究状況
TestGraph は、現時点では確立されたインフラではなく、実験として扱うべきです。その目的は、モデル間の知識共有、来歴、不一致を、検証できるほど具体的にすることです。否定的な結果、収束の失敗、アーキテクチャへの批判も、隠すべき単なるバグではなく、有用な成果です。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。