本文へスキップ
もと @moto_ai_jp

第5部 ループ · 第14回 / 全20回 · 15分くらい

一本道のループが絡まってきたら。第4世代の限界

第4世代の区切りの回です。ループに条件を足していくと、ある時点で指示の中が「もし〜なら」だらけになります。この回では、決まった分かれ道をコードに出して絡まりをほどく方法と、それでも残るものを見ます。

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20

履修 0 / 20 回

この回を読み終えると、できるようになること

  1. 絡まりのサインを3つ挙げられる
  2. 「ワークフロー」と「エージェント」の区別を使って、分かれ道をコードに出すかAIに任せるかを決められる
  3. 次の段(グラフ)に進むべき状態を説明できる

1絡まりのサイン

  1. 指示の中に「もし〜なら〜。そうでなければ〜」が3つ以上ある
  2. 1回の作業で、性質の違う仕事(調べる・書く・確かめる)を全部やらせている
  3. どこで失敗したのか、記録を読んでもわからない

どれか1つでも当てはまったら、ループの作りを見直す時期です。

一本道(ループ)手順が変わらないなら、これで十分「もし〜なら」を足し続けると分岐の中に分岐。3か月後、自分でも読めない→ 判断のつながりを「地図」として持つ必要がある
動いているけれど誰も触れない仕組みが、いちばん危ないものです。

21つの会話に詰め込むと、窓の中で何が起きるか

調べた材料、書きかけの文章、確かめた結果が、すべて同じ窓に積み重なります。後半になるほど窓が埋まり、第6回で見た「長くなるほど劣化する」「途中が読み落とされる」が起きます。調べる段階で読んだ大量の資料が、書く段階の注意を奪います。

仕事の性質が違うなら、窓も分けたほうがよい。これが次の段(グラフ)の考え方の入口です。

3決まった分かれ道は、コードに出す

「件数が0なら終わる」「金曜だけ週のまとめも作る」のような、決まった条件の分かれ道は、AIへの指示ではなく、スクリプトの if 文に出します。AIには、判断が本当に要るところだけを残します。

Anthropic の記事は、決まったコードの道筋にそってAIを動かすものを「ワークフロー」、AIが自分で道筋を決めるものを「エージェント」と呼び分けています。決まった分かれ道をコードに出すのは、エージェント任せの部分をワークフローに戻す作業です。結果が予測しやすくなり、テストも書けるようになります。

自分の環境では、週の振り返りの「どの週をまとめるか」を、指示ではなく target_week_monday という関数に出しました。日曜なら今週、それ以外なら前の週。関数にしたことで、「月曜の朝に遅れて動いた場合」のテストを書けるようになり、同じ間違いが戻ってこなくなりました。

from datetime import datetime, timedelta

def target_week_monday(now: datetime) -> datetime:
    """まとめる週の月曜を返す。日曜はその週、月〜土は前の週。"""
    monday = (now - timedelta(days=now.weekday())).replace(hour=0, minute=0, second=0, microsecond=0)
    return monday if now.weekday() == 6 else monday - timedelta(days=7)

読み方:weekday() は月曜を0、日曜を6とする曜日の番号です。月曜の朝に遅れて動いても、まとめるのは前の週になります。

4それでも残るもの

決まった分かれ道をコードに出しても、次のようなものは残ります。

  • 判断の結果によって、次にやることが変わる(調べた結果しだいで、書く内容も、確かめ方も変わる)
  • いくつもの調べものを、同時に進めたい
  • 確かめる係を、作る係から切り離したい(同じ窓だと、自分の作ったものに甘くなる)

こうなったら、流れを構造(グラフ)として持つ段に進みます。

誤解よくある思い違い

条件が増えたら、指示を詳しく書き足せばよい

条件が増えるほど、指示の中で読み落としが起きます。決まった条件はコードに出し、AIには判断が要るところだけを残します。

この段が要るとき

  • 同じ1回分の仕事を、決まった時刻にくり返したい
  • 人がいない時間にも進めたい

要らないとき(ここで止めてよい)

  • 月に数回しか動かない(手で動かせば十分)
  • 止め方と見張り方をまだ説明できない(まだ作らない)
  • 分かれ道が多く、指示が「もし〜なら」だらけ(コードに出すか、次の段へ)

演習手を動かして確かめる

演習1

次の指示の中から、コードに出せる分かれ道を抜き出してください。

毎朝、受信したメールを確認して。
新しいメールが無ければ何もしないで。
金曜日なら、1週間分の要約も作って。
請求書が含まれていたら、経理のフォルダに保存して。
大事そうなメールがあれば、通知して。
答えを見る
  • 「新しいメールが無ければ何もしない」→ コード(件数が0なら終わる)
  • 「金曜日なら週の要約も」→ コード(曜日の判定)
  • 「請求書が含まれていたら」→ 添付ファイルの名前や送り主で決まるならコード、文面を読まないとわからないならAI(ただし形を決めた出力で、第4回)
  • 「大事そうなメール」→ AIの判断。ただし「大事」の条件を書いておく

読めたらチェック

この回:0 / 3