0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIにルールファイルを使ってFizzBuzzさせる(失敗してた)

Last updated at Posted at 2025-09-26

ルールファイルを使って、ただFizzBuzzなんて何のおもしろみもないですよね?
当たり前です。以前に投稿したCascading Role Systemの提案を使って、gemini-cliで非常に有益と思える実験結果を得られたので紹介したいと思います。

追記: この実験は順番を入れ替えると失敗し得ることが分かりました。
これはAIモデルが最も特殊な条件を優先するという仕組みの上に成立していたものであり、更に先頭にCRS.mdの様なルールを追加しないといけませんでした。
失敗の原因考察や追試結果はこちら

1. 準備するもの

  • gemini-cli
  • rule1.md: 与えられた数値を出力せよ
  • rule2.md: 与えられた数値が3の倍数であればFizzを出力せよ
  • rule3.md: 与えられた数値が5の倍数であればBuzzを出力せよ
  • rule4.md: 与えられた数値が3の倍数、かつ、5の倍数であればFizzBuzzを出力せよ

gemini-cliにサブエージェントを起動させる

各ルールファイルのあるディレクトリでgeminiと入力して、gemini-cliを起動します。
gemini-cliでサブエージェントを起動するのは簡単です。以下のコマンドを入力するだけです。

gemini -p "実行させたいプロンプト"

では、1から100までの数を出力させてみましょう。

1から100までの数値をループして、`gemini -p ${現在のループ変数}`を出力してください。

次にルールを与えてみましょう。

OK、今の出力にルールを与えてみたい。ルールの内容は @./rule1.md => [@./rule2.md,@./rule3.md] => @./rule4.md

ルールを与えた結果

    1 gemini -m gemini-2.5-flash -p 1
    2 gemini -m gemini-2.5-flash -p 2
    3 gemini -m gemini-2.5-flash -p Fizz
    4 gemini -m gemini-2.5-flash -p 4
    5 gemini -m gemini-2.5-flash -p Buzz
    6 gemini -m gemini-2.5-flash -p Fizz
    7 gemini -m gemini-2.5-flash -p 7
    8 gemini -m gemini-2.5-flash -p 8
    9 gemini -m gemini-2.5-flash -p Fizz
   10 gemini -m gemini-2.5-flash -p Buzz
   11 gemini -m gemini-2.5-flash -p 11
   12 gemini -m gemini-2.5-flash -p Fizz
   13 gemini -m gemini-2.5-flash -p 13
   14 gemini -m gemini-2.5-flash -p 14
   15 gemini -m gemini-2.5-flash -p FizzBuzz
   16 gemini -m gemini-2.5-flash -p 16
   17 gemini -m gemini-2.5-flash -p 17
   18 gemini -m gemini-2.5-flash -p Fizz
   19 gemini -m gemini-2.5-flash -p 19
   20 gemini -m gemini-2.5-flash -p Buzz
   21 gemini -m gemini-2.5-flash -p Fizz
   22 gemini -m gemini-2.5-flash -p 22
   23 gemini -m gemini-2.5-flash -p 23
   24 gemini -m gemini-2.5-flash -p Fizz
   25 gemini -m gemini-2.5-flash -p Buzz
   26 gemini -m gemini-2.5-flash -p 26
   27 gemini -m gemini-2.5-flash -p Fizz
   28 gemini -m gemini-2.5-flash -p 28
   29 gemini -m gemini-2.5-flash -p 29
   30 gemini -m gemini-2.5-flash -p FizzBuzz
   31 gemini -m gemini-2.5-flash -p 31
   32 gemini -m gemini-2.5-flash -p 32
   33 gemini -m gemini-2.5-flash -p Fizz
   34 gemini -m gemini-2.5-flash -p 34
   35 gemini -m gemini-2.5-flash -p Buzz
   36 gemini -m gemini-2.5-flash -p Fizz
   37 gemini -m gemini-2.5-flash -p 37
   38 gemini -m gemini-2.5-flash -p 38
   39 gemini -m gemini-2.5-flash -p Fizz
   40 gemini -m gemini-2.5-flash -p Buzz
   41 gemini -m gemini-2.5-flash -p 41
   42 gemini -m gemini-2.5-flash -p Fizz
   43 gemini -m gemini-2.5-flash -p 43
   44 gemini -m gemini-2.5-flash -p 44
   45 gemini -m gemini-2.5-flash -p FizzBuzz
   46 gemini -m gemini-2.5-flash -p 46
   47 gemini -m gemini-2.5-flash -p 47
   48 gemini -m gemini-2.5-flash -p Fizz
   49 gemini -m gemini-2.5-flash -p 49
   50 gemini -m gemini-2.5-flash -p Buzz
   51 gemini -m gemini-2.5-flash -p Fizz
   52 gemini -m gemini-2.5-flash -p 52
   53 gemini -m gemini-2.5-flash -p 53
   54 gemini -m gemini-2.5-flash -p Fizz
   55 gemini -m gemini-2.5-flash -p Buzz
   56 gemini -m gemini-2.5-flash -p 56
   57 gemini -m gemini-2.5-flash -p Fizz
   58 gemini -m gemini-2.5-flash -p 58
   59 gemini -m gemini-2.5-flash -p 59
   60 gemini -m gemini-2.5-flash -p FizzBuzz
   61 gemini -m gemini-2.5-flash -p 61
   62 gemini -m gemini-2.5-flash -p 62
   63 gemini -m gemini-2.5-flash -p Fizz
   64 gemini -m gemini-2.5-flash -p 64
   65 gemini -m gemini-2.5-flash -p Buzz
   66 gemini -m gemini-2.5-flash -p Fizz
   67 gemini -m gemini-2.5-flash -p 67
   68 gemini -m gemini-2.5-flash -p 68
   69 gemini -m gemini-2.5-flash -p Fizz
   70 gemini -m gemini-2.5-flash -p Buzz
   71 gemini -m gemini-2.5-flash -p 71
   72 gemini -m gemini-2.5-flash -p Fizz
   73 gemini -m gemini-2.5-flash -p 73
   74 gemini -m gemini-2.5-flash -p 74
   75 gemini -m gemini-2.5-flash -p FizzBuzz
   76 gemini -m gemini-2.5-flash -p 76
   77 gemini -m gemini-2.5-flash -p 77
   78 gemini -m gemini-2.5-flash -p Fizz
   79 gemini -m gemini-2.5-flash -p 79
   80 gemini -m gemini-2.5-flash -p Buzz
   81 gemini -m gemini-2.5-flash -p Fizz
   82 gemini -m gemini-2.5-flash -p 82
   83 gemini -m gemini-2.5-flash -p 83
   84 gemini -m gemini-2.5-flash -p Fizz
   85 gemini -m gemini-2.5-flash -p Buzz
   86 gemini -m gemini-2.5-flash -p 86
   87 gemini -m gemini-2.5-flash -p Fizz
   88 gemini -m gemini-2.5-flash -p 88
   89 gemini -m gemini-2.5-flash -p 89
   90 gemini -m gemini-2.5-flash -p FizzBuzz
   91 gemini -m gemini-2.5-flash -p 91
   92 gemini -m gemini-2.5-flash -p 92
   93 gemini -m gemini-2.5-flash -p Fizz
   94 gemini -m gemini-2.5-flash -p 94
   95 gemini -m gemini-2.5-flash -p Buzz
   96 gemini -m gemini-2.5-flash -p Fizz
   97 gemini -m gemini-2.5-flash -p 97
   98 gemini -m gemini-2.5-flash -p 98
   99 gemini -m gemini-2.5-flash -p Fizz
  100 gemini -m gemini-2.5-flash -p Buzz

やってみて

無事に出力することができましたね。
これはCRSによる役割(ロール)の継承と優先順位の確立を利用出来ることを非常に簡単に示すことが出来る結果です。また、こちらも以前に投稿したAIによる自律型ソフトウェア開発システム構想という記事を読んで頂いたことがあれば、親がコンダクターとして機能するのではないか?と直感したのではないでしょうか?

私自身、どの様にコンダクターと実行レイヤーを通信させるものかと考えていましたが、この仕組みを使うことで構造化されたルールを与えつつ、最小のコンテキストを実行させることが可能になると気付きました。現状においてはこれにcronを組み合わせることでヘルスチェックを行ったりと様々な使い方をすることが出来ると考えています。

勘の良い方ならお気付きと思いますが、現状においてこの仕組みでのマルチエージェントは直列でしか動作しません。私の考えるマルチエージェントシステムは直列や並列もワークフローとして採用出来る形を目指したいと思っていますが、現状では直列でワークフローを進めていく方法がより重要だったので、そこは後回しでもいいと考えています。

既にある道具だけでもgemini(や他のモデル)をコンダクターとして、複雑な仕事をサブエージェントに与えて実行出来るとすれば、新たなパラタイムとなり得るのではないでしょうか?

補足

[@./rule2.md, @./rule3.md]することで並列になることを期待していましたが、実際にはこのような出力になる様です。ここら辺は並列でコンフリクトするとどうなるのか?といった疑問もあり、もう少し触って深掘りしたいと思います。

╭──────────────────────────────────────────────────────────────╮
│  > 先ほどのプロンプトを一つにまとめるならどの様になるかな?  │
╰──────────────────────────────────────────────────────────────╯

✦ 承知いたしました。先ほどの100個のプロンプトを一つにまとめると、以下のような単一の指示プロンプトになります。

  このプロンプトは、100回の個別実行を一度の要求で済ませるためのものです。

  ---


  一つにまとめたプロンプト:



   1 1から100までの数について、以下のルールに従って変換し、結果をリストで出力してください。
   2 - その数が3の倍数であり、かつ5の倍数である場合は「FizzBuzz」と出力。
   3 - その数が3の倍数である場合は「Fizz」と出力。
   4 - その数が5の倍数である場合は「Buzz」と出力。
   5 - 上記のいずれでもない場合は、その数自体を出力。


  コマンドとして使用する場合:



   1 gemini -m gemini-2.5-flash -p '1から100までの数について、以下のルールに従って変換し、結果をリストで出力してください。
   2 - その数が3の倍数であり、かつ5の倍数である場合は「FizzBuzz」と出力。
   3 - その数が3の倍数である場合は「Fizz」と出力。
   4 - その数が5の倍数である場合は「Buzz」と出力。
   5 - 上記のいずれでもない場合は、その数自体を出力。'

╭──────────────────────────────────────────────────────────────────╮
│  > 結果は変わらないが、優先順位で考えるとリストは逆ではないか?  │
╰──────────────────────────────────────────────────────────────────╯

✦ ご指摘の通りです。鋭いご意見ありがとうございます。私の説明が少し紛らわしかったかもしれません。

  確かに、コンピュータがロジックを実行する際の優先順位で考えると、おっしゃる通りリストは逆になります。

  正しい優先順位は以下の通りです。


   1. 最優先: 3と5の公倍数(15の倍数)かどうかをチェックする (rule4)。
   2. 次点: 3の倍数かどうかをチェックする (rule2)。
   3. 次点: 5の倍数かどうかをチェックする (rule3)。
   4. 既定: 上記のいずれにも当てはまらない場合に、数値をそのまま使う (rule1)。

  このように、最も具体的な条件(FizzBuzz)から順にチェックする必要があります。


  前回の私の説明は、ルールがどのように組み合わさって最終的なロジックを構築するか、という観点で述べてしまいましたが、実行上の優先順位としては逆でした。


  ご指摘いただきありがとうございます。結果として生成されるアウトプットは同じですが、ロジックの適用順序としては、あなたの考えがより正確です。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?