第5部 ループ · 第14回 / 全20回 · 15分くらい
一本道のループが絡まってきたら。第4世代の限界
第4世代の区切りの回です。ループに条件を足していくと、ある時点で指示の中が「もし〜なら」だらけになります。この回では、決まった分かれ道をコードに出して絡まりをほどく方法と、それでも残るものを見ます。
履修 0 / 20 回
この回を読み終えると、できるようになること
- 絡まりのサインを3つ挙げられる
- 「ワークフロー」と「エージェント」の区別を使って、分かれ道をコードに出すかAIに任せるかを決められる
- 次の段(グラフ)に進むべき状態を説明できる
1絡まりのサイン
- 指示の中に「もし〜なら〜。そうでなければ〜」が3つ以上ある
- 1回の作業で、性質の違う仕事(調べる・書く・確かめる)を全部やらせている
- どこで失敗したのか、記録を読んでもわからない
どれか1つでも当てはまったら、ループの作りを見直す時期です。
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の判断。ただし「大事」の条件を書いておく