見出し画像

実験ノート:言語ネットワークによる知識構造化ツール vibe coding with Claude 4 Sonnet

【注】題名がおどろおどろしいが、良い命名を考え中。

さて、先日、ビジネスモデルキャンバス(BMC)の作成を補助するツールをvibe codingした。

これって、何かのフレームワーク(モデル)に従った、実例(インスタンス)を作成することを補助するそういう仕組みの一つだといえる。先例では、Grok3でBMCの説明や、評価指標を仕様化させて、Claude 4 Sonnetでアーティファクトを作った。


準備段階

コアアイデア=言語シミュレータ

このビジネスモデルキャンバスでやったvibe codingの内容を抽象化すると、何らかのフレームワーク(モデル)を定義すれば、このモデルに従ったインスタンスを作る補助をしていることになる。ではこのフレームワーク(モデル)を言語で定義できないか?大規模言語モデル(LLM)は言語に強いわけだから、言葉で定義したモデルに対して、インスタンスの整合性チェックや、補助がLLMとして実現可能な、はず、である。モデルに拘束原理が含まれるとすれば、入力に対して拘束原理に従い、入力に対して出力を見せる、仮にこれを「言語シミュレータ」と呼ぼう。これはずっとLLMが世に出てから、その可能性をもやもやと考えていたものでもある。果たして仕様として言語化できるのだろうか?

仕様の準備

いつもは生成AIをつかって仕様を整理するが、まずは自分の手でアイデアを言語化する。

# WordSystemSimuator
# 背景

これは「言語シミュレータ」仕様である。言語シミュレータは、単語と単語の間の関係性をグラフ構造の言語ネットワークモデルとして定義し。このモデル定義に従って、実際のインスタンスデータを作成したり評価・改良する仕組みである。

背景部分

ううん、これじゃ何のことかよく伝わらない。言語化は難しい。ならば、例で示そう。

例えば、報告書の表紙が、「目的」、「方法」、「結果」、「結論」から構成されているときに、これらの単語の間の関係性は、

<タームの定義>
「目的」:報告書の目的
「方法」:目的を達成するためにせんたくした方法
「結果」:方法をためしたらどうなったかの結果
「結論」:結果から導き出される結論

<関係性定義>
「目的」→(の手段が)→「方法」、目的を実現するために方法を設定した、方法は目的を実現する一手段
「方法」⇔(対応関係)⇔「結果」、方法をたしかめた結果が結果。結果は方法の妥当性を示す
「結果」→(みちびく)→「結論」、結果から結論が導き出される
「目的」⇔(対応関係)⇔「結論」、目的は結局達成させられたどうかの結論

モデルは言語で定義されているので、その言葉の関係性を利用して、インスタンスデータを評価したり部分情報から生成することができる。

<インスタンス例>
目的:月に人間を届ける
方法:ロケットを開発する
結果:ロケットはコストもかかり時間もかかる
結論:長期的な計画を立てる

例示

そう、報告書の表紙で、昔システマティックな入力のコツとか評価の方法というのがあって、それを例題とした。

仕様(のひな型)

やりたかったことはこういうこと。

# 仕様のひな型
2つのモジュールを作成する、言語ネットワークモデル構築エディタと、インスタンス作成支援エディタである。

## 言語ネットワークモデル構築エディタ
言語ネットワークを構築するためのエディタ、言語の定義、関係性の定義を行う。json形式で内部では保存する

テーブル式のエディタあるいはグラフ型のエディタ、グラフの場合はグラフをクリックすれば項目に入力できるようなイメージ。

## インスタンス作成支援エディタ
言語ネットワークモデルに従って、インスタンスデータ作成を支援する。言語ごとに内容を入力(例:「目的」に”月に5年以内に人を送る」)、を行う。関係性はすでに言語ネットワークモデルで定義されているので、ここでは出てこない。

### 入力支援機能
自然言語でかかれた仕様から、この言語ネットワークモデルに従って、インスタンスデータをAI機能(API)をつかって仮に、埋める。

入力された、インスタンスデータを、言語ネットワークモデルに定義された背景情報をもとに、評価して、改善点を指摘し、点数をつける。

## その他仕様
結果はjsonで保存し、jsonで読み取ることができる。言語ネットワークモデルとインスタンスが両方データに入っていること。インスタンス作成は、クリアできること。

仕様本体

まあ、作りたかったのはこういう話。ずっとやりたいと思っていたことが、なんとか言語化できた。でも足らない。

Claude 4 Sonnetに仕様をまとめてもらう

言語化もまだ未熟だし、いきなり手書きの仕様を投げる前に、Claude 4 Sonnetに仕様書としてまとめてもらう。

以下の、言語システムシミュレータの構想を、精査して、htmlアプリ+AI API利用で実現できるような仕様書として案をしめして。

# WordSystemSimuator
# 背景 これは「言語シミュレータ」仕様である。言語シミュレータは、単語と単語の間の関係性をグラフ構造の言語ネットワークモデルとして定義し。このモデル定義に従って、実際のインスタンスデータを作成したり評価・改良する仕組みである。
<略>

指示

出来た仕様書がこちら。「言語シミュレータは、"WordSystemSimulator"という名称になった。

WordSystemSimulator仕様書(一部)

そうそう、グラフ構造の言語ネットワークとして定義し、そのモデルに基づいてインスタンスデータの作成・評価・改良を支援するWebアプリ―ケーション。

おお、モデル=言語ネットワークモデルということになったのね。この言語ネットワークの構造はこうなる。

言語ネットワークモデル構造(一部)

インスタンスはこんな感じね、

UIも概要が設計された

UI(メイン画面)

一応、Claude APIのプロンプトも定義してくれた。

インスタンス自動生成機能

そして、整合性評価機能のプロンプト。

整合性評価機能

なんかプロンプトが、シンプルすぎる気もするが、まあいいか。

全体としては、よくわかっているねClaude 4 Sonnet。あの言語化が中途半端な仕様からここまで詳細化してくれるとは。恐れい言った。

最後に、実装優先度として、グラフによる可視化とか高度な機能までフェーズわけしてくれた。

まあ、ここは、MVPでよいので、

この仕様を基に、MVPとしてのhtmlアプリをつくってほしい。AI APIを使ったAI機能も試したい。

次の指示

成果物:言語ネットワークモデルによる知識構造化ツール

できたものがこちら。

モデル構造

モデル構造定義

先にモデル構造を作る。用語追加で用語の定義を追加できる。

用語定義

関係性定義では、用語間の関係性を定義する。

関係性定義

出来上がった「報告書表紙」のモデルはこちら。

最初の仕様通りだ

インスタンス作成

モデルが出来たら、つぎはインスタンス(データ)だ。タブを切り替えると、モデル定義で定義した用語をタイトルとしたフォームが生成される。自然言語で入力したものから展開されるというAI機能もある。

インスタンス仕作成

整合性評価

整合性評価は、モデルに基づき、編集中のインスタンス(データ)を評価する。プロンプトはこのようになる、他の生成AIでも試せる。

以下の言語ネットワークモデルの定義に基づいて、インスタンスデータの整合性を評価してください。

モデル定義:
{
  "modelId": "model_1756557191864",
  "modelName": "報告書表紙",
  "version": "1.0",
  "terms": [
    {
      "id": "term_1756557208858",
      "name": "目的",
      "definition": "報告書の目的を記述",
      "number": "用語1"
    },
    {
      "id": "term_1756557223393",
      "name": "方法",
      "definition": "目的を達成するための方法の一つ",
      "number": "用語2"
    },
    {
      "id": "term_1756557242384",
      "name": "結果",
      "definition": "方法を試したその結果はどうだったか",
      "number": "用語3"
    },
    {
      "id": "term_1756557273899",
      "name": "結論",
      "definition": "目的にに対して、解決方法を取得し、ためしてみてその結果から、どのような結論が得られるか",
      "number": "用語4"
    }
  ],
  "relationships": [
    {
      "id": "rel_1756557303863",
      "source": "term_1756557208858",
      "target": "term_1756557223393",
      "type": "手段",
      "description": "目的を達成する手段の1つ、他の手段もありうる",
      "number": "関係性1"
    },
    {
      "id": "rel_1756557338326",
      "source": "term_1756557223393",
      "target": "term_1756557242384",
      "type": "対応",
      "description": "方法を試した結果が結果、結果の内容は方法についてどうだったかを述べる",
      "number": "関係性2"
    },
    {
      "id": "rel_1756557377364",
      "source": "term_1756557242384",
      "target": "term_1756557273899",
      "type": "導き出される",
      "description": "結果からどのような結論が導き出されるか、",
      "number": "関係性3"
    },
    {
      "id": "rel_1756557397562",
      "source": "term_1756557208858",
      "target": "term_1756557273899",
      "type": "対応",
      "description": "目的に対して、どのような結論だったのか",
      "number": "関係性4"
    }
  ],
  "createdAt": "2025-08-30T12:33:11.864Z",
  "updatedAt": "2025-08-30T12:36:41.634Z"
}

インスタンスデータ:
[
  {
    "termId": "term_1756557208858",
    "termName": "目的",
    "content": "月に人を5年以内に送ることを実現し、持続可能な月面探査活動を支えるインフラを構築する"
  },
  {
    "termId": "term_1756557223393",
    "termName": "方法",
    "content": "大型ロケットの開発、月面着陸船の設計・製造、宇宙飛行士の訓練プログラム実施、月面基地建設技術の開発、通信システムの構築"
  },
  {
    "termId": "term_1756557242384",
    "termName": "結果",
    "content": "ロケット開発には時間がかかり到底5年では達成できないことがわかった。"
  },
  {
    "termId": "term_1756557273899",
    "termName": "結論",
    "content": "関連産業振興に5年、インフラ整備に5年、並行してロケット開発を行うので、10年は必要あ"
  }
]

以下の観点から評価し、結果をJSON形式で返してください:
1. 用語間の関係性の整合性
2. 内容の論理的一貫性  
3. 完成度

{
  "score": 数値(0-100),
  "consistency": 数値(0.0-1.0),
  "completeness": 数値(0.0-1.0),
  "suggestions": ["改善提案1", "改善提案2", ...]
}

回答は必ずJSONのみにしてください。

そして結果は、

整合性評価

たしかに方法と結果が対応していないし、目的と結果も対応してない。最低の報告書表紙であることがわかる。75点はちょっと甘いな。

ビジネスモデルキャンバスでもやってみる

「報告書表紙」モデルで動作を確認したので、別のモデルということで、先日取り組んだビジネスモデルキャンパス(BMC)もやってみる。

まずは用語の定義

用語の定義(一部)

そして関係性の定義

関係性の定義(一部)

インスタンスは、Netflixだ、おお、BMCに沿ったフォームになってる!、あたりまえだけど。

ビジネスモデルキャンバス入力(一部)
整合性評価

おっしゃることはごもっともです。

感想

なんか、ずっともやもやと思っていた、LLMを使ってやりたいことの一端が検証できた。完成度という面では低いが、まさにこれがMVPという出来だった。vibe codingで汎用のフレームワーク自身の定義とそれに従ったデータの作成・評価の仕組みのMVP(Minimum Viable Product)が実現できたのだ。やっぱり、vibe codingの肝はClaude APIと組みわせたAI機能だ。Claudeのアーティファクトやgeminiのcanvasはその意味で最高だ。あとはどうやってもう少し使えるものにするか、、つづく。

これってオントロジーの話では?という考察は別途

追記1:整合性評価結果の説明性を上げた

改善提案のところで、用語定義や関係定義のどれを根拠にしているかを明記するようにした。

プロンプトは、AnthropicのConsoleで、改良を重ねたものを、Claudeに直接与えて直してもらった。

あなたは言語ネットワークモデル定義に基づいてインスタンスデータの整合性と完成度を評価する専門システムです。徹底的な分析を行い、実行可能な改善提案を提供することが目標です。

以下のモデル定義とインスタンスデータを注意深く確認してください:

<model_definition>
{
  "modelId": "model_1756557191864",
  "modelName": "報告書表紙",
  "version": "1.0",
  "terms": [
    {
      "id": "term_1756557208858",
      "name": "目的",
      "definition": "報告書の目的を記述",
      "number": "用語1"
    },
    {
      "id": "term_1756557223393",
      "name": "方法",
      "definition": "目的を達成するための方法の一つ",
      "number": "用語2"
    },
    {
      "id": "term_1756557242384",
      "name": "結果",
      "definition": "方法を試したその結果はどうだったか",
      "number": "用語3"
    },
    {
      "id": "term_1756557273899",
      "name": "結論",
      "definition": "目的にに対して、解決方法を取得し、ためしてみてその結果から、どのような結論が得られるか",
      "number": "用語4"
    }
  ],
  "relationships": [
    {
      "id": "rel_1756557303863",
      "source": "term_1756557208858",
      "target": "term_1756557223393",
      "type": "手段",
      "description": "目的を達成する手段の1つ、他の手段もありうる",
      "number": "関係性1"
    },
    {
      "id": "rel_1756557338326",
      "source": "term_1756557223393",
      "target": "term_1756557242384",
      "type": "対応",
      "description": "方法を試した結果が結果、結果の内容は方法についてどうだったかを述べる",
      "number": "関係性2"
    },
    {
      "id": "rel_1756557377364",
      "source": "term_1756557242384",
      "target": "term_1756557273899",
      "type": "導き出される",
      "description": "結果からどのような結論が導き出されるか、",
      "number": "関係性3"
    },
    {
      "id": "rel_1756557397562",
      "source": "term_1756557208858",
      "target": "term_1756557273899",
      "type": "対応",
      "description": "目的に対して、どのような結論だったのか",
      "number": "関係性4"
    }
  ],
  "createdAt": "2025-08-30T12:33:11.864Z",
  "updatedAt": "2025-08-30T12:36:41.634Z"
}
</model_definition>

<instance_data>
[
  {
    "termId": "term_1756557208858",
    "termName": "目的",
    "content": "月に人を5年以内に送ることを実現し、持続可能な月面探査活動を支えるインフラを構築する"
  },
  {
    "termId": "term_1756557223393",
    "termName": "方法",
    "content": "大型ロケットの開発、月面着陸船の設計・製造、宇宙飛行士の訓練プログラム実施、月面基地建設技術の開発、通信システムの構築"
  },
  {
    "termId": "term_1756557242384",
    "termName": "結果",
    "content": "ロケット開発には時間がかかり到底5年では達成できないことがわかった。"
  },
  {
    "termId": "term_1756557273899",
    "termName": "結論",
    "content": "関連産業振興に5年、インフラ整備に5年、並行してロケット開発を行うので、10年は必要あ"
  }
]
</instance_data>

あなたのタスクは、モデル定義に基づいてインスタンスデータを評価することです。以下の観点に焦点を当ててください:
1. 用語間の関係性の整合性
2. 内容の論理的一貫性
3. インスタンスデータの完成度

まず内部で以下の分析を実施してください:

1. モデル定義の概要:すべての用語・関係性とその総数を把握
2. インスタンスデータの概要:存在する用語と内容の概要を把握
3. 用語の関係性:モデルとインスタンスの関係性を比較、不整合を特定
4. 論理的整合性:要素間の論理的フローと矛盾を検証
5. 完成度:欠落要素と情報の深さを評価
6. スコアリング:品質・整合性・完成度を数値化
7. 改善提案:具体的番号(用語1、関係性2など)を参照した実行可能な提案

分析完了後、以下のJSON形式でのみ回答してください(JSONオブジェクト以外は出力しないでください):

{
  "score": 0から100の全体スコア,
  "consistency": 0.0から1.0の整合性スコア,
  "completeness": 0.0から1.0の完成度スコア,
  "suggestions": [
    "改善提案1(用語/関係性番号を参照)",
    "改善提案2(用語/関係性番号を参照)",
    "改善提案3(用語/関係性番号を参照)"
  ]
}

重要:回答は上記のJSONフォーマットのみとし、分析過程や説明テキストは含めず、純粋なJSONオブジェクトのみを出力してください。


成果物をここに供養する。

https://claude.ai/public/artifacts/c841e281-193a-4055-84e1-3e5fb15ac62d

追記:2025.9.3 上記の供養は、要素が削除されないという振る舞いがあったのを修正こころみるもなんかうまくいかない、削除はできない、チャットの長さのリミットがきて、別チャットで継続したので、削除は動くが、UIがなんか変になった供養がこちら。

https://claude.ai/public/artifacts/12b76851-ff16-48da-9fd2-de4c67b5bf1b


いいなと思ったら応援しよう!