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