生成AIに振り回された3か月間の成功と失敗/dev-productivity-con2024-link-and-motivation
by
リンクアンドモチベーション
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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