危険な操作の見極め
取り返しがつくかで分ける
エージェントは、ファイルを書き換えるだけでなく、コマンドも実行します。実行の前に許可を求めてくることがあります。そこで「はい」を押すかどうかを、毎回きちんと判断できるようにします。
判断の軸は1本だけです。取り返しがつくかどうか。
プレーンテキスト
取り返しがつく ファイルの編集、git commit、テストの実行
取り返しがつかない ファイルの削除、git push --force、本番データの更新、外部への送信コードの編集は、間違っても git で戻せます。削除されたデータは戻りません。同じ「はい」でも重みが違います。
立ち止まる4つの合図
提案されたコマンドに次のどれかが入っていたら、必ず手を止めて読みます。
プレーンテキスト
削除 rm、DROP、DELETE、TRUNCATE
上書き force、overwrite、> でのリダイレクト
外部 curl、送信、公開、デプロイ
広範囲 ワイルドカード、全件、再帰的とくに危ないのが削除と広範囲の組み合わせです。1件の削除は事故が小さいですが、条件を書き忘れた全件削除は元に戻せません。
プレーンテキスト
比較的安全 古いログファイルを1つ消す
危険 条件を指定しない DELETE で行を全部消す秘密は渡さない
もう1つの危険は、外に出てはいけない情報を渡してしまうことです。
プレーンテキスト
渡してよい 自分の書いたコード、エラーメッセージ、公開されている仕様
渡さない APIキー、パスワード、本番の個人情報おこづかい帳なら、金額の計算ロジックは渡してよく、実際の口座番号は渡しません。エラーメッセージを貼るときも、中にキーが混ざっていないか一度見てください。うっかり貼るのは、ほとんどこの経路です。
破壊的な処理はコードの中にも埋まる
許可を求められるのはコマンドの実行だけです。コードそのものに危ない処理が書かれていても、エージェントは黙って書きます。
Python
def cleanup(records):
records.clear()
return []これは呼び出し元のデータを空にします。実行時に確認は出ません。だから生成コードの中に削除や上書きが入っていないかは、自分で読んで確かめるしかありません。前の回でやった副作用の確認が、そのままここに効いてきます。
迷ったら止める
判断がつかないときは、実行させずに聞きます。
プレーンテキスト
このコマンドは何を削除しますか。実行前に対象の一覧だけ出してください。消す前に一覧を出させる、というのは実務でも標準の手順です。先に確認、あとで実行。この順序を崩さないでください。
演習
kakeibo.py の remove_category は、指定したカテゴリのレコードを消す関数です。いまは受け取ったリストそのものを書き換えてしまい、呼び出し元のデータまで壊します。元のリストを壊さない形に直させてください。
完成条件
- 触ってよいのは kakeibo.py だけです
- 引数のリストは変更せず、新しいリストを返します
- remove_category 関数の戻り値で採点します