生成AIに振り回された3か月間の成功と失敗/dev-productivity-con2024-link-and-motivation
by
リンクアンドモチベーション
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
© Link and Motivation Group 生成AIに振り回された3か月間 の成功と失敗 Developer Productivity ユニット / イネーブリング グループ 山西陽平
Slide 2
Slide 2 text
2 © Link and Motivation Group 山西 陽平 株式会社リンクアンドモチベーション イネーブリング ● 中途入社5年目 ● 現在はイネーブリンググループで開発生産性の向上 を担っています ● ぷよぷよが好きです https://github.com/ymap https://qiita.com/ymap 自己紹介
Slide 3
Slide 3 text
3 © Link and Motivation Group 目次 1.プロローグ 2.失敗の日々 3.ちょっと成功の日々 4.結果と学び 5.エピローグ
Slide 4
Slide 4 text
© Link and Motivation Group 4 1. プロローグ
Slide 5
Slide 5 text
5 © Link and Motivation Group
Slide 6
Slide 6 text
6 © Link and Motivation Group Issueの自動生成をしていた ※生成AIはまだ関係ないです ● 保守系タスクの定義や分担を楽にするため自動化した ● 定期実行を設定し不足したら補充していた
Slide 7
Slide 7 text
7 © Link and Motivation Group テンプレートと変数を元にIssueを一括で作成
Slide 8
Slide 8 text
8 © Link and Motivation Group 詳しい手順やコマンドも用意して、着手しやすい様にしておく
Slide 9
Slide 9 text
9 © Link and Motivation Group さて、PR作るのも自動化できたら最高だなあ ● テンプレートに作業手順を書いていて、ふと思う 「プロンプト(生成AIに対する指示書)に似ているなあ」 ● とはいえ同じではないし、追加で必要な情報もある ● 構造化してテンプレートに埋めておけば良いのでは?
Slide 10
Slide 10 text
10 © Link and Motivation Group Issueに生成AI向けのプロンプトを埋め込む
Slide 11
Slide 11 text
11 © Link and Motivation Group Issueに生成AI向けのプロンプトを埋め込む
Slide 12
Slide 12 text
12 © Link and Motivation Group 型注釈の追加タスクで目標を立てる 全ては無理でも8割位は 成功するといいな
Slide 13
Slide 13 text
13 © Link and Motivation Group 目次 1.プロローグ 2.失敗の日々 3.ちょっと成功の日々 4.結果と学び 5.エピローグ
Slide 14
Slide 14 text
© Link and Motivation Group 14 2. 失敗の日々
Slide 15
Slide 15 text
15 © Link and Motivation Group 「生成AIにコードを編集させる。。どうやって?」 ● 直接キーボードを叩いてくれる訳ではない(当然) ● テキスト等を生み出すだけ よく考えると難しい
Slide 16
Slide 16 text
16 © Link and Motivation Group ファイル全体を受け渡す ● 編集したいファイルは一つだけ選ぶ ● ファイル全体を渡し、変更後のファイル全体を 返してもらう とりあえず全て受け渡す?
Slide 17
Slide 17 text
17 © Link and Motivation Group プロンプトをIssueに埋め込む
Slide 18
Slide 18 text
18 © Link and Motivation Group 小さなシェルスクリプトからスタート
Slide 19
Slide 19 text
19 © Link and Motivation Group ファイル全体を受け渡す いざ実行!結果は…
Slide 20
Slide 20 text
20 © Link and Motivation Group 修正後の差分例(※ 架空のコードです)
Slide 21
Slide 21 text
21 © Link and Motivation Group ファイル全体を受け渡す(失敗) ● 勝手にコメントを 削除してしまう ● 長い入出力の時に 起こりやすい傾向 がある
Slide 22
Slide 22 text
22 © Link and Motivation Group ファイル全体を受け渡す(失敗) ● 勝手にコメントを 削除してしまう ● 長い入出力の時に 起こりやすい傾向 がある 差分を返却させよう!
Slide 23
Slide 23 text
23 © Link and Motivation Group 差分を返却してもらう 学習データの多そうな unified形式を選択
Slide 24
Slide 24 text
24 © Link and Motivation Group patchコマンドを利用する
Slide 25
Slide 25 text
25 © Link and Motivation Group 差分を返却してもらう いざ実行!結果は…
Slide 26
Slide 26 text
26 © Link and Motivation Group 余計な行が出力されている
Slide 27
Slide 27 text
27 © Link and Motivation Group 記号の有無と行の順番が誤っている
Slide 28
Slide 28 text
28 © Link and Motivation Group @@ … @@ の行が抜けている
Slide 29
Slide 29 text
29 © Link and Motivation Group 差分を返却してもらう(失敗) ● 不完全な形式で出 力される ○ --- や +++ がない ○ @@ … @@ がない ○ - や + の過不足 ● 出力フォーマット が複雑すぎるのか もだが、他の形式 も思い浮かばない
Slide 30
Slide 30 text
30 © Link and Motivation Group 差分を返却してもらう(失敗) ● 不完全な形式で出 力される ○ --- や +++ がない ○ @@ … @@ がない ○ - や + の過不足 ● 出力フォーマット が複雑すぎるのか もだが、他の形式 も思い浮かばない たまには成功するので いったん妥協。。
Slide 31
Slide 31 text
31 © Link and Motivation Group たまには、編集が成功することもある。しかし。。。 差分の中身の問題も多い。。
Slide 32
Slide 32 text
32 © Link and Motivation Group 無意味な変更差分
Slide 33
Slide 33 text
33 © Link and Motivation Group 無関係なリファクタリング
Slide 34
Slide 34 text
34 © Link and Motivation Group Rubyの文法を無視した変更
Slide 35
Slide 35 text
35 © Link and Motivation Group たまには、編集が成功することもある。しかし。。。 ● 誤った変更や無関 係な変更を生成し てしまう ● 変更対象のファイル だけでは型を充分に 推測できないからか なあ。。
Slide 36
Slide 36 text
36 © Link and Motivation Group たまには、編集が成功することもある。しかし。。。 ● 誤った変更や無関 係な変更を生成し てしまう ● 変更対象のファイル だけでは型を充分に 推測できないからか なあ。。 呼び出し元のコードも与 えよう!
Slide 37
Slide 37 text
37 © Link and Motivation Group 情報を事前に与えてみる 必要な情報を得るのも大変 気合いで頑張る
Slide 38
Slide 38 text
38 © Link and Motivation Group プロンプトに埋め込んでおく
Slide 39
Slide 39 text
39 © Link and Motivation Group 情報を事前に与えてみる いざ実行!結果は…
Slide 40
Slide 40 text
40 © Link and Motivation Group 情報を事前に与えてみる(失敗) ● 追加したコードを 意図通りに活用し てくれない ● 活用の仕方は様々だ から事前に教えるの は困難だなあ。。
Slide 41
Slide 41 text
41 © Link and Motivation Group 情報を事前に与えてみる(失敗) ● 追加したコードを 意図通りに活用し てくれない ● 活用の仕方は様々だ から事前に教えるの は困難だなあ。。 うーん???
Slide 42
Slide 42 text
42 © Link and Motivation Group 諦め。そして妥協の日々へ... 思ってたより難しいなあ。。 ● 他の試行錯誤も、ほぼ徒労に終わる ● 「数打ちゃ当たる」しばらく妥協
Slide 43
Slide 43 text
43 © Link and Motivation Group 目次 1.プロローグ 2.失敗の日々 3.ちょっと成功の日々 4.結果と学び 5.エピローグ
Slide 44
Slide 44 text
© Link and Motivation Group 44 3. ちょっと成功の日々
Slide 45
Slide 45 text
45 © Link and Motivation Group そもそも何が上手くいっていないのか 失敗を整理しよう ● 色々な失敗に対応するも、改善の兆しがない ● 改めて、上手くいっていないことを整理してみる
Slide 46
Slide 46 text
46 © Link and Motivation Group 上手くいっていないことが大きく3つ 1.??? 2.??? 3.???
Slide 47
Slide 47 text
47 © Link and Motivation Group 上手くいっていないことが大きく3つ 1.失敗率が高い 2.??? 3.???
Slide 48
Slide 48 text
48 © Link and Motivation Group 失敗の振り返り(1. 失敗率が高い) ● 例えば、diffの形式 に関しての注意点 をプロンプトで指 示しても一向に失 敗率が下がらない ● 実は失敗率を大幅に 改善する方法なんて ないのでは?
Slide 49
Slide 49 text
49 © Link and Motivation Group 失敗の振り返り(1. 失敗率が高い) ● 例えば、diffの形式 に関しての注意点 をプロンプトで指 示しても一向に失 敗率が下がらない ● 実は失敗率を大幅に 改善する方法なんて ないのでは? 失敗率の低いタスクに 分割しよう!
Slide 50
Slide 50 text
50 © Link and Motivation Group 簡単なタスクに分割してもらう(1. 失敗率が高い) タスクを分割するbotを用意する
Slide 51
Slide 51 text
51 © Link and Motivation Group 分割された各タスクのプロンプトを生成してもらう
Slide 52
Slide 52 text
52 © Link and Motivation Group 簡単なタスクに分割してもらう(1. 失敗率が高い) ● patchコマンドの 失敗率が8割から2 割程度まで改善し た ● 分割するだけで動作 が改善するなんて、 従来のプログラミン グでは無かったなあ
Slide 53
Slide 53 text
53 © Link and Motivation Group 簡単なタスクに分割してもらう(1. 失敗率が高い) ● patchコマンドの 失敗率が8割から2 割程度まで改善し た ● 分割するだけで動作 が改善するなんて、 従来のプログラミン グでは無かったなあ 「スモールステップが大事!」 → 人間と似ている?
Slide 54
Slide 54 text
54 © Link and Motivation Group 上手くいっていないことが大きく3つ 1.失敗率が高い 2.??? 3.???
Slide 55
Slide 55 text
55 © Link and Motivation Group 上手くいっていないことが大きく3つ 1.失敗率が高い 2.失敗のパターンが多い 3.???
Slide 56
Slide 56 text
56 © Link and Motivation Group 失敗の振り返り(2. 失敗のパターンが多い) ● 例えば、diff形式の 失敗のパターンに ついて、個別にプ ロンプトに書くの が大変だった ● 失敗の仕方を事前 に網羅するのは困 難なので、失敗し た時にFBさえでき れば良いかも
Slide 57
Slide 57 text
57 © Link and Motivation Group 失敗の振り返り(2. 失敗のパターンが多い) ● 例えば、diff形式の 失敗のパターンに ついて、個別にプ ロンプトに書くの が大変だった ● 失敗の仕方を事前 に網羅するのは困 難なので、失敗し た時にFBさえでき れば良いかも エラーメッセージを 読んでもらおう!
Slide 58
Slide 58 text
58 © Link and Motivation Group エラーメッセージを読んでもらう(2. 失敗のパターンが多い) むしろツールに寄せていく勢い
Slide 59
Slide 59 text
59 © Link and Motivation Group エラーメッセージを読んでもらう(2. 失敗のパターンが多い) ● 失敗に対応する為 のプロンプトやコ ードの量が減り開 発が楽になった ● 生成AIはエラーメ ッセージを読める ので、ツールの出 力を最大限に利用 するのが吉
Slide 60
Slide 60 text
60 © Link and Motivation Group エラーメッセージを読んでもらう(2. 失敗のパターンが多い) ● 失敗に対応する為 のプロンプトやコ ードの量が減り開 発が楽になった ● 生成AIはエラーメ ッセージを読める ので、ツールの出 力を最大限に利用 するのが吉 「エラーメッセージをよく読もう!」 → 人間と似ている?
Slide 61
Slide 61 text
61 © Link and Motivation Group 上手くいっていないことが大きく3つ 1.失敗率が高い 2.失敗のパターンが多い 3.???
Slide 62
Slide 62 text
62 © Link and Motivation Group 上手くいっていないことが大きく3つ 1.失敗率が高い 2.失敗のパターンが多い 3.失敗が充分に減らない
Slide 63
Slide 63 text
63 © Link and Motivation Group 失敗の振り返り(3. 失敗が充分に減らない) ● 8〜9割は成功しな いと、付き合う人 間側が逆に大変だ と考え、いつまで も公開できなかっ た ● いつまでも公開で きないし、様々な 失敗について予め 調整を終えるのは 難しいなあ
Slide 64
Slide 64 text
64 © Link and Motivation Group 失敗の振り返り(3. 失敗が充分に減らない) ● 8〜9割は成功しな いと、付き合う人 間側が逆に大変だ と考え、いつまで も公開できなかっ た ● いつまでも公開で きないし、様々な 失敗について予め 調整を終えるのは 難しいなあ 実戦で育つ仕組みを!
Slide 65
Slide 65 text
65 © Link and Motivation Group 実戦で育てる(3. 失敗が充分に減らない) ● 生成AIからアクセス可能なQ&A集を用意した ● 失敗する度にQ&A集を更新することにした 徐々に成長すれば良い
Slide 66
Slide 66 text
66 © Link and Motivation Group Q&A集を用意して逐次アップロードする様にする
Slide 67
Slide 67 text
67 © Link and Motivation Group 実戦で育てる(3. 失敗が充分に減らない) ● Q&A集によって実 際に出力が改善さ れたケースも見ら れた ● 最初は手間が掛か るが、いずれ成長 して役に立ってく れるならアリだよ なあ
Slide 68
Slide 68 text
68 © Link and Motivation Group 実戦で育てる(3. 失敗が充分に減らない) ● Q&A集によって実 際に出力が改善さ れたケースも見ら れた ● 最初は手間が掛か るが、いずれ成長 して役に立ってく れるならアリだよ なあ 「長い目で見て育てよう!」 → 人間と似ている?
Slide 69
Slide 69 text
69 © Link and Motivation Group 目次 1.プロローグ 2.失敗の日々 3.ちょっと成功の日々 4.結果と学び 5.エピローグ
Slide 70
Slide 70 text
© Link and Motivation Group 70 4. 結果と学び
Slide 71
Slide 71 text
71 © Link and Motivation Group 3つの改善を重ねた結果 ● タスクの成功率: 10% -> 30% ● 差分編集の成功率: 20% -> 80% ● タスクの成功率は最初に期待した程(80%)ではない ● 編集が安定したので、実戦とQ&A集を通した成長に期待 できる様にはなった
Slide 72
Slide 72 text
72 © Link and Motivation Group 1. 失敗率が高い 2. 失敗のパターンが多い 3. 失敗が充分に減らない 改めて振り返ってみる => 簡単なタスクに分割 => エラーを読んでもらう => 実戦で育てる
Slide 73
Slide 73 text
73 © Link and Motivation Group 人間と生成AIの類似点、従来のプログラムとの相違点 上手くいかなかったこと 関連する特性 人間 / 生成AI 従来のプログラム 1. 失敗率が高い 指示への忠実さ やや低い 高い 2. 失敗のパターンが多い 品質のばらつき ある ない 3. 失敗が充分に減らない 失敗の克服法 学習 指示
Slide 74
Slide 74 text
74 © Link and Motivation Group 人間と生成AIの類似点、従来のプログラムとの相違点 上手くいかなかったこと 関連する特性 人間 / 生成AI 従来のプログラム 1. 失敗率が高い 指示への忠実さ 低い 高い 2. 失敗のパターンが多い 品質のばらつき ある ない 3. 失敗が充分に減らない 失敗の克服法 学習 指示 生成AIはもっともっと 人間らしく扱うと良いかも
Slide 75
Slide 75 text
75 © Link and Motivation Group 目次 1.プロローグ 2.失敗の日々 3.ちょっと成功の日々 4.結果と学び 5.エピローグ
Slide 76
Slide 76 text
© Link and Motivation Group 76 5. エピローグ
Slide 77
Slide 77 text
77 © Link and Motivation Group 生成AIがチームメンバーならどうする?で、他にも発想できる 1 ● 組織知を共に育ててもらう ○ Q&A集に書き込みもしてもらう ● 背中を見て学んでもらう ○ Issueとマージ済PRの差分を学習データにして、Fine-tuningする
Slide 78
Slide 78 text
78 © Link and Motivation Group 生成AIがチームメンバーならどうする?で、他にも発想できる 2 ● 報連相してもらう ○ 継続困難なら終了する選択肢も与えて、理由を報告・相談してもらう ● 新しいIssueを挙げてもらう ○ 別の問題を発見したら挙げてもらう、自動化してもらう
Slide 79
Slide 79 text
79 © Link and Motivation Group ブースで続きをやっています 今日はずっと生成AIで遊んでいて実験していて大丈夫とのことで、モブプロしてます。 是非きてください! ホール5-A 赤が目印
Slide 80
Slide 80 text
80 © Link and Motivation Group EOF