Upgrade to Pro — share decks privately, control downloads, hide ads and more …

生成AIを活用して、openapi ベースで設計したAPIを効率よくテストする手法を考えてみた...

ワンキャリアTech
August 26, 2024
50

生成AIを活用して、openapi ベースで設計したAPIを効率よくテストする手法を考えてみた/I thought of a method to efficiently test APIs designed based on OpenAPI by using generative AI

データチームのテックリード高根沢が「Go Conference 2024 Pre Party」でLTをした際の資料となります。

イベントURL:
https://moneyforward.connpass.com/event/313929/

ワンキャリアTech

August 26, 2024
Tweet

More Decks by ワンキャリアTech

Transcript

  1. ONE CAREER Inc . Copyright © ONE CAREER Inc. All

    Rights Reserved. 自己紹介 Career 趣味 ひとこと 2 高根沢 光輔 ONE CAREER for Engineer 開発チーム テックリード 14年間のエンジニア活動を経て、 ワンキャリアに新卒入社 個人開発サービスの安定運用(k8s)、コスト最適化 (GCP)プログラミング、ゲーム(MMO/FPS) フルスタックにひたすらコード書く人間です。 *12,641 contributions in 2023(p0x0q)
  2. Copyright © ONE CAREER Inc. All Rights Reserved. 目次 3

    • 今回のテーマ • 何故作ろうと思ったのか?目指すゴール • 全体構成 • 結果 • 課題 • まとめ
  3. Copyright © ONE CAREER Inc. All Rights Reserved. 目次 4

    • 今回のテーマ • 何故作ろうと思ったのか?目指すゴール • 全体構成 • 結果 • 課題 • まとめ
  4. Copyright © ONE CAREER Inc. All Rights Reserved. 目次 6

    • 今回のテーマ • 何故作ろうと思ったのか?目指すゴール • 全体構成 • 結果 • 課題 • まとめ
  5. Copyright © ONE CAREER Inc. All Rights Reserved. 何故作ろうと思ったのか?目指すゴール 7

    作成の背景 自社プロダクトにて、Integrationレイ ヤーのテストが不足気味(0ではない) ゴール 新規プロダクトとはいえ、 テストカバレッジをより高いものにする
  6. Copyright © ONE CAREER Inc. All Rights Reserved. 目次 8

    • 今回のテーマ • 何故作ろうと思ったのか?目指すゴール • 全体構成 • 結果 • 課題 • まとめ
  7. Copyright © ONE CAREER Inc. All Rights Reserved. 全体構成 9

    全体構成 1. 既存コード、テストコードの読み取り (フィルター処理) 2. プロンプトを構成 3. Geminiに問い合わせ 4. レスポンスを整形して_test.goファイ ルを生成 今回はオレンジ部分について解説
  8. Copyright © ONE CAREER Inc. All Rights Reserved. 全体構成 10

    2. プロンプトを構成 方針:既存コードをベースに追加の    テストケースを追加してもらう ・参照させるコードはトークン制約の都合で、 「openapi-generatorのreq/resモデル」と 「既存Integrationテストコード」のみに限定 ・token数は276k程度なのでgeminiに投げる  (gpt-4o = 128k limit, gemini= 1M limit)
  9. Copyright © ONE CAREER Inc. All Rights Reserved. 全体構成 11

    方針:既存コードをベースに追加の    テストケースを追加してもらう ・参照させるコードはトークン制約の都合で、 「openapi-generatorのreq/resモデル」と 「既存Integrationテストコード」のみに限定 ・token数は276k程度なのでgeminiに投げる  (gpt-4o = 128k limit, gemini= 1M limit) 2. プロンプトを構成
  10. Copyright © ONE CAREER Inc. All Rights Reserved. 全体構成 12

    4. レスポンスを整形して_test.go ファイルを生成 ・gpt-4o、geminiともにJSONレスポンス に対応している。 ・geminiの場合は「Using this JSON schema: xxx Return a …」を使えばJSON 形式が内部的に強制されるよう。 ref: https://ai.google.dev/gemini-api/docs/ api-overview?hl=ja#json
  11. Copyright © ONE CAREER Inc. All Rights Reserved. 目次 13

    • 今回のテーマ • 何故作ろうと思ったのか?目指すゴール • 全体構成 • 結果 • 課題 • まとめ
  12. Copyright © ONE CAREER Inc. All Rights Reserved. 結果 14

    簡単なテストなら、ほぼ動くコードが自動生成できた。
  13. Copyright © ONE CAREER Inc. All Rights Reserved. 結果 15

    簡単なテストなら、ほぼ動くコードが自動生成できた。
  14. Copyright © ONE CAREER Inc. All Rights Reserved. 目次 16

    • 今回のテーマ • 何故作ろうと思ったのか?目指すゴール • 全体構成 • 結果 • 課題 • まとめ
  15. Copyright © ONE CAREER Inc. All Rights Reserved. 課題①:型エラー 18

    期待している型に沿わない形で生成されてしまうことがある。 自動生成:int値、修正後:int32のポインタ型(左:自動生成、右:手動で修正後)
  16. Copyright © ONE CAREER Inc. All Rights Reserved. 課題②:生成量 19

    長いコードは生成できなさそう 今回は生成できたとしても200〜300行程度(内部では2,500 tokensほど) geminiはoutput tokensが8,192 tokensなので、途中で止まってしまう
  17. Copyright © ONE CAREER Inc. All Rights Reserved. 課題③:最適化 20

    全てのコードを含めようとすると、2.5M tokensほどになるので省いてい る。無駄が多い&品質が落ちてしまっている※1 今後の展望:Reranking API を使って関連のあるファイルのみフィルター してみる ※1 実際に関連するファイルに絞ったら精度が良くなった(少なくとも型エラーは起きなくなった)
  18. Copyright © ONE CAREER Inc. All Rights Reserved. 課題③:最適化 21

    企業検索API拡張にRerankingを適用した場合にはどうなる? ➜既存の企業テストコードをプロンプトの一番最初に含めることができるように
  19. Copyright © ONE CAREER Inc. All Rights Reserved. 目次 22

    • 今回のテーマ • 何故作ろうと思ったのか?目指すゴール • 全体構成 • 結果 • 課題 • まとめ