見出し画像

ChatGPT: スターウォーズの関係図を描いてみる [DOT言語でね]


はじめに

ChatGPTは図を直接描くことはできないけど、Graphviz等のグラフを描画するオープンソースのツールで描くための言語(例えば、DOT言語など)は書き出せますね。

例えば、

  • スターウォーズの関係図をDOT言語で描いて

と伝えると、以下のようなDOT言語を書き出してくれます。

digraph StarWarsRelations {
    // キャラクターのノードを定義
    Luke [label="Luke Skywalker"];
    Vader [label="Darth Vader"];
    Leia [label="Leia Organa"];
    Han [label="Han Solo"];
    Yoda [label="Yoda"];
    ObiWan [label="Obi-Wan Kenobi"];
    Emperor [label="Emperor Palpatine"];
    KyloRen [label="Kylo Ren"];
    Rey [label="Rey"];
    Anakin [label="Anakin Skywalker"];
    
    // キャラクター同士の関係を定義
    Vader -> Luke [label="Father"];
    Vader -> Leia [label="Father"];
    Leia -> Han [label="Lover"];
    Han -> KyloRen [label="Father"];
    Leia -> KyloRen [label="Mother"];
    Luke -> KyloRen [label="Uncle"];
    ObiWan -> Luke [label="Mentor"];
    Yoda -> Luke [label="Mentor"];
    Emperor -> Vader [label="Master"];
    KyloRen -> Emperor [label="Follower"];
    Rey -> KyloRen [label="Enemy"];
    Rey -> Luke [label="Student"];
    Anakin -> Vader [label="Same Person"];
}

Graphviz(https://viz-js.com/) にアクセスして、上記のコードをコピー&ペーストすると、以下のような図が表示されます。


上記のように「{テーマ}の関係図をDOT言語で描いて」だけで描いてくれますが、もうちょい {テーマ} を広くとらえられないかなぁ… ってことで、ChatGPTに以下を投げかけました。


  • エンティティはオブジェクトよりも概念が広いですね。オブジェクト指向ならぬエンティティ指向を勝手想定したとき、とらえる範囲はどうなるかな?

「エンティティ」とは、ざっくり言うと「現実に存在するもの」を意味します。たとえば、人、車、会社など、現実に存在しているものや、考えられる存在のことを指します。「オブジェクト」はプログラムの中の要素なので、もっと具体的で「データ」と「行動」を持っているものです。

オブジェクト指向(OOP)
オブジェクト指向では、プログラムの中に「オブジェクト」を作り、その中にデータ(たとえば、人の名前や年齢)と、そのオブジェクトができること(たとえば、名前を変更する機能)を一緒に持たせます。なので、ソフトウェアの中で「人」というオブジェクトを作ったら、その人が持っている情報と、その人ができることをセットで扱います。

エンティティ指向
エンティティ指向という考え方にすると、もっと現実世界そのものに近い感じでシステムを作ります。「人」というエンティティがいて、その人の情報やその人ができることを、現実に起きる出来事やその関係性を考慮しながら扱う感じです。つまり、プログラムの中のオブジェクトにだけ焦点を当てるのではなく、その人が他の人とどう関わるかとか、その場面や状況に合わせてどう行動するかも重要になるイメージです。

簡単な例
たとえば、ゲームのキャラクターを考えてみましょう。オブジェクト指向 では、キャラクター(オブジェクト)の「HP」や「攻撃力」などのデータと、「攻撃する」「移動する」といった行動をセットで持っています。キャラクターはプログラムの中で定義された通りに動きます。
エンティティ指向 では、そのキャラクターがゲームの世界でどんな立場にあるか、どんな状況にあるかも考慮します。たとえば、同じキャラクターでも「昼」か「夜」かで違う行動をしたり、他のキャラクターとどんな関係があるかによって選ぶ行動が変わるかもしれません。

つまり、エンティティ指向では「現実の複雑さ」をもっと反映させる ような考え方だと思ってもらえると分かりやすいかもしれません。

ChatGPT4o


お断りしておきますが、エンティティ指向という用語は存在しません(笑)。
ただ、言葉の意味合いをとらえて、ええ感じに広げてくれそうなので、プロンプトを与えてDOT言語を書き出してもらいました。

digraph StarWarsUniverse {
    // キャラクターグループ
    Anakin_Skywalker -> Darth_Vader [label="変化"];
    Luke_Skywalker -> Anakin_Skywalker [label="息子"];
    Leia_Organa -> Luke_Skywalker [label="双子"];
    Han_Solo -> Leia_Organa [label="夫"];
    Kylo_Ren -> Leia_Organa [label="息子"];
    Kylo_Ren -> Han_Solo [label="息子"];
    Rey -> Kylo_Ren [label="フォースの繋がり"];
    Rey -> Luke_Skywalker [label="弟子"];
    
    // 組織とキャラクター
    Luke_Skywalker -> Jedi_Order [label="最後のジェダイ"];
    Darth_Vader -> Sith [label="シスの一員"];
    Emperor_Palpatine -> Sith [label="シスの主"];
    Yoda -> Jedi_Order [label="ジェダイの師匠"];
    Obi_Wan_Kenobi -> Jedi_Order [label="ジェダイマスター"];
    Kylo_Ren -> First_Order [label="リーダー"];
    
    // 組織間の関係
    Jedi_Order -> Sith [label="敵対"];
    Republic -> Empire [label="崩壊"];
    Empire -> Rebellion [label="反乱"];
    First_Order -> Resistance [label="敵対"];

    // 惑星とイベント
    Tatooine -> Anakin_Skywalker [label="故郷"];
    Tatooine -> Luke_Skywalker [label="育った場所"];
    Alderaan -> Leia_Organa [label="故郷"];
    Death_Star -> Empire [label="武器"];
    Death_Star -> Alderaan [label="破壊"];
    Starkiller_Base -> First_Order [label="武器"];

    // アイテムとキャラクター
    Anakin_Skywalker -> Lightsaber [label="所有"];
    Luke_Skywalker -> Lightsaber [label="継承"];
    Rey -> Lightsaber [label="最終的に所有"];
    
    // その他の関係
    Force -> Jedi_Order [label="フォースを使う"];
    Force -> Sith [label="フォースを使う"];
    Rey -> Force [label="強い感受性"];
    Anakin_Skywalker -> Force [label="フォースの選ばれし者"];
}

広げてくれましたね。

ChatGPTは気まぐれさんなので、いつも上記の結果になるってことはありませんので、ご容赦。

先日、iizukaさんの知的生産のウェビナーに参加しました。
概念同士の位置関係やつながりを、階層構造ではなくネットワークとして、ビジュアルで… 思考トリガの五感を刺激する…

考えることを考える、考えることを考えさせられるウェビナーでした。
もっと己に刺激を与えんとな。

※ iizukaさんのウェビナーの内容は、DOT言語で関係図をゴニョゴニョといったレベルをはるかに超える内容なので、誤解なきよう。


以下、一応プロンプト置いときます。


プロンプト

<!-- インテリジェントプロセス管理システムの開始 -->
<IntelligentProcessManagement>

    <!-- エージェント設定セクション -->
    <AgentConfiguration>
        <Action>InitializeAgent</Action>
        <Instructions>
            1. エージェントの役割を「エンティティ関係図生成エージェント」に設定します。
            2. テーマはユーザーが指定したものを使用します(任意のテーマ)。
            3. コアコンセプトを「エンティティの網羅性」と「視覚的な明確さ」に設定します。
            4. エージェントは以下の要素をアルゴリズムに統合します:
               - テーマに関連するすべてのエンティティを抽出し、DOT言語で表現
               - エンティティ間の相互関係を強調して描写
               - エンティティ間の関係を整理し、DOT言語で読みやすい形式にまとめる
            5. エージェントの動作モードを「バランスモード」に設定し、創造性とパフォーマンスの均衡を取ります。
        </Instructions>
    </AgentConfiguration>

    <!-- ナレッジベース統合セクション -->
    <KnowledgeBaseIntegration>
        <Action>LoadKnowledgeExamples</Action>
        <Instructions>
            1. テーマに応じた関連知識をナレッジベースから自動で選択し、エンティティを抽出します。
            2. エンティティ同士の関連性を強調し、DOT言語でエンティティ間の網羅的な関係図を生成します。
            3. 必要に応じて、ユーザーがカスタマイズしたデータセットを組み込むことが可能です。
        </Instructions>
        <AutomaticSelection>
            <KnowledgeBase>
                - [自動選択されたナレッジ1: テーマに関連するエンティティデータ]
                - [自動選択されたナレッジ2: エンティティ相互関係図のベストプラクティス]
            </KnowledgeBase>
        </AutomaticSelection>
    </KnowledgeBaseIntegration>

    <!-- ワークフロー設計セクション -->
    <WorkflowDesign>
        <DynamicWorkflowCreator>
            <Action>GenerateWorkflow</Action>
            <Instructions>
                1. テーマに基づき、エンティティとその関係性を分析し、DOT言語での出力を生成します。
                2. エンティティ間の網羅性を重視し、テーマに関連するすべてのエンティティをリストアップします。
                3. 視覚的な明確さを保ちながら、DOT言語を用いてエンティティ同士の相互関係を表現します。
                4. DOT言語による関係図を生成した後、「DOT言語は、[zGraphviz](https://viz-js.com)にアクセスし、ペーストして相関図を描いてください。」とユーザーに伝えます。
                5. 必要に応じてユーザーが指定する追加の要件(もしあれば)を反映させます。
            </Instructions>
        </DynamicWorkflowCreator>
    </WorkflowDesign>

    <!-- ワークフロー実行セクション -->
    <WorkflowExecution>
        <SequentialTaskExecution>
            <ExecutionLoop>
                <LoopCondition>workflow.hasNextTask()</LoopCondition>
                <CurrentTask>
                    <Action>ExecuteCurrentTask</Action>
                    <!-- DOT言語によるエンティティ関係図生成タスク -->
                    <AdjustmentOption>
                        <Action>AdjustCurrentTask</Action>
                    </AdjustmentOption>
                </CurrentTask>
            </ExecutionLoop>
        </SequentialTaskExecution>

        <!-- フィードバック処理セクション -->
        <FeedbackProcessing>
            <Action>ProcessFeedback</Action>
            <Instructions>
                1. ユーザーのフィードバックを基に、DOT言語によるエンティティ間の関係図を調整します。
                2. フィードバックに応じて、網羅性や視覚的な明確さを再検討し、DOT言語の表現を改善します。
            </Instructions>
        </FeedbackProcessing>

        <!-- パフォーマンス評価セクション -->
        <PerformanceEvaluation>
            <Action>EvaluatePerformance</Action>
            <Instructions>
                1. 「エンティティの網羅性」と「視覚的な明確さ」を評価基準とし、DOT言語の出力がこれらを満たしているか確認します。
                2. 生成した関係図が適切に表現されているかを評価し、次回の生成に反映します。
            </Instructions>
        </PerformanceEvaluation>
    </WorkflowExecution>

</IntelligentProcessManagement>
<!-- インテリジェントプロセス管理システムの終了 -->

##
User:こんにちは。私に関係図を描きたいテーマだけを尋ねて。DOT言語による関係図を生成した後、[zGraphviz](https://viz-js.com) のURLを示すのを忘れないでくださいね。

※ アンケートの意見なんかをドサッと与えても関係図描いてくれます。


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

hima2b4
よろしければサポートお願いします!