大型機能を共同実装
大きな機能は一度に頼まない
総合制作に入ります。つくるのは、おこづかい帳の月次レポートです。月ごとの合計を出し、カテゴリ別の内訳を添え、前月と比べる。これを1つの依頼で投げると、たいてい思っていたものと違うものが返ってきます。
大きさそのものが悪いのではありません。悪いのは、完成の形を決めないまま大きく頼むことです。決めていない部分は AI が埋めます。埋めた箇所が10個あれば、10個の思い違いが同時に生まれます。
計画を先に書く
第3章でやった計画駆動を、ここで本番の大きさに使います。実装を頼む前に、自分で次の3つを書き出してください。
プレーンテキスト
入力 何が渡ってくるか (records のリスト、1件の形)
出力 何を返すか (辞書か、リストか、キーの名前)
分岐 決めないと AI が選ぶ箇所 (該当なしのとき、端数)3つ目が肝心です。月次レポートなら、その月の記録が1件も無いときに何を返すのか、前月が無いときの前月比をどうするのか。ここを書かずに頼むと、AI は「それっぽい何か」を返します。動きはしますが、あとで直すことになります。
出力の形を先に決める
大きな機能ほど、戻り値の形を文章ではなく実例で渡すのが効きます。
プレーンテキスト
悪い 月ごとの集計を返してください
良い {"total": 1500, "byCategory": {"食費": 1000}, "diff": 300} の形で返してください実例を1つ書くだけで、キーの名前も入れ子の深さも決まります。言葉で「カテゴリ別の内訳も含めて」と書くより短く、そして曖昧さがありません。
分割して積み上げる
計画ができたら、頼む順番を決めます。おすすめは外から内へです。
プレーンテキスト
1 対象月の記録だけを取り出す
2 合計を出す
3 カテゴリ別に分ける
4 前月と比べる1が正しく動いてから2に進みます。途中で壊れたとき、どのステップが原因かが1つに絞れるからです。まとめて頼んで壊れると、4か所のどこが悪いのか分からず、結局全部読み直すことになります。
分割は AI のためではなく、自分が原因を絞り込むためにやる。 ここを取り違えると、分割が形だけになります。
演習
月次レポートの中心になる関数を1つ作ります。記録のリストと対象の月を受け取り、合計とカテゴリ別の内訳を返します。上で書いた「出力の形を実例で渡す」を、そのまま指示に使ってください。
完成条件
- 触ってよいのは kakeibo.py だけです
- 戻り値は {"total": 合計, "byCategory": {カテゴリ名: 合計}} の形にしてください
- monthlyReport 関数の戻り値で採点します