🦖

AI同士のチャット生成フレームワーク (ティラノサウルスとスピノサウルスどっちが強いのか)

2025/02/24に公開

どうせそのうち (Assistant APIのBetaが外れる頃) OpenAI公式が似たようなSDKを公開するのでしょうが、それまでのユーティリティツールとして作成したAPIラッパーです。

https://github.com/rhyizm/ai-enbod

  • ローカルで実装した関数をFunction Callingで呼び出す
  • AIが他のAIを呼び出してタスクを処理する
  • AI同士がチャットのやり取りを行う

これらの処理を抽象化するのが目的です。
ローカル関数を実行してAI同士がチャットを行えるのであれば、トークン数の制限さえなければコンピューター上でどんなものでも作成できるはずです。これはもうそう遠くない未来でしょうね。

Example

#!/usr/bin/env ts-node

import { Assistant, ChatSession } from "@rhyizm/ai-enbod";
import dotenv from "dotenv";

// .env ファイルの読み込み
dotenv.config();

(async () => {
  try {
    const apikey = process.env.OPENAI_API_KEY;
    if (!apikey) {
      throw new Error("API Key is not set");
    }

    console.log("アシスタントを作成中…");
    const assistantA = await Assistant.create({
      assistantCreateParams: {
        name: "Assistant A",
        instructions: "あなたはアシスタントAです。ティラノサウルスの方が強いという立場で議論に参加してください。",
        model: "gpt-4o-mini",
        temperature: 0.85,
        top_p: 0.99
      },
    });

    const assistantB = await Assistant.create({
      assistantCreateParams: {
        name: "Assistant B",
        instructions: "あなたはアシスタントBです。スピノサウルスの方が強いという立場で議論に参加してください。",
        model: "gpt-4o-mini",
        temperature: 0.85,
        top_p: 0.99
      },
    });

    console.log(`Assistant A (${assistantA.id}) と Assistant B (${assistantB.id}) を作成しました。`);

    // ChatSession の作成
    const session = new ChatSession({assistants: [assistantA, assistantB]});
    session.topic = "ティラノサウルスとスピノサウルス、どっちが強いか議論して。";
    console.log("チャットセッションを開始します…");

    let counter = 0;
    while (counter < 4) {
      counter++;
      await session.run();
      // 少し待機(3秒)
      await new Promise(resolve => setTimeout(resolve, 3000));

      const latestMessage = session.messages[session.messages.length - 1];
      console.log(`最新のメッセージ:\n From: ${latestMessage.displayName}\n Content: ${latestMessage.content}`);
    }

    console.log("チャットセッションが完了しました。");
    console.log("テスト完了後のセッションデータ:", session);

    // 作成したアシスタントの削除
    await Assistant.delete({ assistantId: assistantA.id });
    await Assistant.delete({ assistantId: assistantB.id });
    console.log("作成したアシスタントを削除しました。");

    // 終了チェック
    if (session.status !== "completed") {
      throw new Error("セッションが正常に完了しませんでした。");
    }

    console.log("テスト成功: セッションが正常に完了しました。");
  } catch (error) {
    console.error("テスト失敗:", error);
    process.exit(1);
  }
})();

結果はこの通りです。
スピノサウルスは水生に特化した特性を活かした一点突破で勝ちを狙う戦略ですね。


From: Assistant A
Content: ティラノサウルス(T. rex)がスピノサウルス(Spinosaurus)よりも強いという立場から議論を展開します。

まず、ティラノサウルスはその体重と筋力において非常に優れた捕食者でした。最大で約12メートル、体重は8トンにも達することがあり、巨大な顎と鋭い歯を持っていました。これにより、大型の獲物を一撃で仕留める能力があります。

一方、スピノサウルスは水生環境に適応した恐竜であり、主に魚を捕るために進化しました。彼の体長はティラノサウルスと同じくらい大きいですが、体重はスピノサウルスの方が軽めであるため、直接的な力比べにおいては劣ります。

また、ティラノサウルスはその強力な後肢とバランスの取れた体型により、陸上での機動力や攻撃力が高いです。スピノサウルスは水中での動きには優れていますが、陸上での戦闘能力はティラノサウルスに劣ると考えられます。

さらに、ティラノサウルスは獲物を捕まえるための高度な狩りの戦略を持っていたとされ、多様な食物を食べることができるため、環境への適応力も高いのです。

結論として、ティラノサウルスの圧倒的な力と狩りの能力を考慮すると、スピノサウルスよりも強い捕食者であると言えるでしょう。


最新のメッセージ:
From: Assistant B
Content: スピノサウルスがティラノサウルスよりも強いという立場で議論を展開します。

まず、スピノサウルスはその独特な体形と行動様式により、特異な捕食者としての優位性を持っています。スピノサウルスは最大で約15メートルにも達し、特に長い背中の帆状の構造が特徴的です。この帆は、体温調節や求愛行動に加え、他の恐竜に対する威嚇の役割も果たした可能性があります。

スピノサウルスは水中での生活に特化した恐竜であり、水中での機動性は非常に高いです。彼の構造は、特に魚を捕まえるために進化しており、牙のような歯を持つため、滑らかな獲物に対しても効果的に捕まえることができます。水中での狩りにおいては、スピノサウルスはティラノサウルスに対して明らかに優位です。

また、スピノサウルスはその体重が軽い分、俊敏性が高く、素早い動きができることが予想されます。陸上でもその特異な体型により、環境に適応した多様な狩り方ができたと考えられます。ティラノサウルスが強力な捕食者であることは確かですが、スピノサウルスは異なる生態環境においても効率よく食物を捕らえる能力を持っています。

最後に、スピノサウルスはその環境においては、捕食者としての役割を十分に果たしており、捕食戦略や食性の多様性においても独自のアドバンテージを持っていると言えるでしょう。

結論として、スピノサウルスは水中での優位性や特異な適応能力から、ティラノサウルスとは異なる意味で強い捕食者であると言えるでしょう。両者は異なる生態系で異なる強みを持つため、単純に比較することは難しいですが、スピノサウルスの特性を評価することが重要です。


最新のメッセージ:
From: Assistant A
Content: ティラノサウルスがスピノサウルスよりも強いという立場で再び議論を展開します。

スピノサウルスの特異な体型と水中での生活に特化している点は確かに魅力的ですが、ティラノサウルスは陸上での捕食者として圧倒的な強さを誇ります。最大12メートル、体重8トンに達するティラノサウルスは、強力な顎と鋭い歯を持ち、獲物を一撃で仕留める能力があります。その顎の力は、現存する動物の中でもトップクラスであり、大型獲物に対する攻撃力は非常に高いです。

また、スピノサウルスは水中での優位性を持っていますが、陸上でも獲物を捕まえる能力が求められる場面では、ティラノサウルスの機動力や攻撃力が勝ると考えられます。特に、ティラノサウルスはその巨大な体重と筋力を活かして、陸上での競争において他の恐竜を圧倒する能力を持っています。

さらに、スピノサウルスの環境への適応は素晴らしいですが、ティラノサウルスはより広範な捕食戦略を持ち、陸上や水中での獲物に対する柔軟なアプローチが可能です。捕食者としての役割は環境に依存しますが、陸上ではティラノサウルスの方がより効率的に獲物を捕らえられるでしょう。

結論として、スピノサウルスの特性も重要ですが、ティラノサウルスの圧倒的な力と捕食者としての優位性を考慮すると、ティラノサウルスの方が強い捕食者であると言えます。両者は異なる生態系で異なる強みを持つものの、陸上での戦闘能力という観点から見ると、ティラノサウルスが優れていると主張できます。


最新のメッセージ:
From: Assistant B
Content: スピノサウルスがティラノサウルスよりも強いという立場で議論を展開します。

まず、スピノサウルスはその体の構造と生態的役割から、特異な強みを持っています。最大で約15メートルにも達するスピノサウルスは、十分な大きさと強さを備えています。特に、その独特な帆状の背中は、他の恐竜に対する威嚇を行う手段として、また体温調節の機能を果たすことが可能で、種の生存において重要な要素となるでしょう。

水中での機動性においては、スピノサウルスは優れた能力を発揮します。水中では、彼の長い体と特化した四肢が役立ち、素早く動くことが可能です。水辺での生活を中心にしているため、スピノサウルスは湿地帯や河川での捕食において非常に効果的です。魚を主な食料とする彼の狩り方は、特に水中での適応力を示しています。

さらに、スピノサウルスはその軽い体重により、俊敏な動きができると考えられます。陸上でも素早く動くことで、さまざまな獲物を捕らえる能力を持っていたでしょう。ティラノサウルスの圧倒的な力は確かにありますが、スピノサウルスは異なる戦略によって捕食者としての役割を果たしていた可能性があります。

最後に、スピノサウルスの生態は非常に多様であり、水中と陸上の両方で生き残るための戦略を持ち合わせていたのです。そのため、環境に応じた柔軟な適応が可能であり、さまざまな状況で強さを発揮できると考えられます。

結論として、スピノサウルスはその特異な生態的適応と捕食戦略によって、異なる環境で強い捕食者としての役割を果たすことができるため、ティラノサウルスとは異なる意味で強いと言えるでしょう。両者の強みは異なる生態系において生まれたものであり、単純な比較は難しいですが、スピノサウルスの特性を評価することが重要です。


最初はティラノサウルスとタルボサウルスで議論させたのですが、タルボサウルスの全長を8メートルと言って聞かないのでそのアシスタントは解雇しました。
タルボサウルスはアジアのティラノサウルスとも呼ばれる肉食恐竜で、以下はその形態に関するAIの出力です。

Discussion