検索
ニュース

GitHubが「GitHub Copilot」開発で得た教訓、LLMアプリケーション開発のベストプラクティスとは開発から公開までに3年、何に取り組んでいたのか

GitHubは、「GitHub Copilot」の開発から公開における同社の経験を振り返り、個人と企業の両方に大きな価値を提供するLLM(大規模言語モデル)アプリケーションの開発に役立つ教訓として紹介した。

PC用表示
Share
Tweet
LINE
Hatena

 GitHubは2023年9月6日(米国時間)、AI(人工知能)ペアプログラミングツール「GitHub Copilot」の開発から一般公開(GA)に至るまでの経験を整理し、LLM(大規模言語モデル)アプリケーションの開発に役立つ教訓として紹介した。

 GitHubはGitHub Copilotを開発し、一般提供を開始するまでに3年を要した。アイデアを形にするため、次の3つの段階を踏んだとしている。

  • 見つける:LLMアプリケーションで解決する、インパクトのある問題領域を特定する
  • 作り上げる:スムーズなAI製品体験を創造する
  • スケールする:LLMアプリケーションをGAに向けて準備し、使用可能にする

 GitHubはこれらの段階に沿って、GitHub Copilotの開発で得た教訓を以下のように紹介している。「スケールする」の段階では、「AIの責任ある利用を最適化する」「市場参入戦略を立てる」というテーマも盛り込んでいる。

見つける:解決したい問題を特定する

 ソリューションの作成で最も難しいのは、問題領域を絞り込むことだ。問題は、インパクトを素早く提供できるほど焦点を絞ったものでなければならない。開発されたアプリケーションで解決された場合に、ユーザーを驚かせるのに十分な大きさの問題である必要もある。LLMの利用が適切なソリューションとなるような問題を見つける必要もある。

誰を助けたいかを明確にする

 GitHub Copilotチームは、常に時間に追われている開発者を優先的に支援し、コンテキストの切り替えを減らして、より速くコードを書けるようにサポートしたいと考えた。

1つの問題に集中する

 AIで開発者の全ての問題に対処しようとするのではなく、ソフトウェア開発ライフサイクルの一部分、つまりIDE(統合開発環境)でのコーディング機能に焦点を当てた。開発当時、ほとんどのAIコーディングアシスタントは、1行のコードしか完成させることができなかった。この状況の改善を目指した。

製品の野心と品質のバランスを取る

 GitHub Copilotチームは当初、コミット全体を自動生成することを検討していた。だが、当時のLLMの機能レベルを踏まえ、追加テストを経て、「関数全体」レベルでのコード提案を行うという結論に達した。

人々がいる場所に会いに行く

 開発者向けのLLMアプリは、既存のツールを拡張したり、既存のワークフローに統合したりできるようにする必要がある。GitHub Copilotチームは、開発者が作業方法を変えることなく、GitHub Copilotのコード提案を受け取れるようにすることを目標とした。

作り上げる:スムーズなAI製品体験を生み出すためにイテレーション開発を行う

 生成AIのような新しい技術を使った製品開発は、未知の部分が多く、直線的な道ではなく、曲がりくねった道をたどることが多い。開発プロセスに迅速な反復サイクルを組み込むことで、チームは素早く失敗し、学ぶことができる。GitHubには、素早く反復するための主な仕組みとして、A/B実験プラットフォームがある。

ユーザーの立場になって考える

 GitHubの従業員は、リリース前とリリース後に製品を「ドッグフーディング」することで、エンドユーザーの立場に立つという文化を持っている。GitHub Copilotの開発でも、この文化が実践された。そうした中でチームは、開発者がコーディング中に、IDEで複数の開いているタブを参照することが多いことに着目した。この洞察から、「隣接タブ」と呼ばれる機能が試され、実装された。隣接タブ機能は、開発者が作業している1つのファイルだけでなく、IDEで開いている複数のファイルを、GitHub Copilotが処理するものだ。

テストツールを評価する

 GitHub Copilotチームは実験を続けるうちに、社内のテストツールをより汎用(はんよう)的で強力なものに拡張する必要が出てきた。当初は独自のテストツールに頼っていたが、最終的には「Microsoft Experimentation Platform」に切り替え、大規模なフィードバックややりとりに基づいて機能を最適化した。

サンクコストの誤りを避ける

 サンクコストの誤りは、多大な投資をしたために、見切りをつけるべき行動になかなか見切りをつけないことを指す。GitHubとOpenAIのチームは当初、コーディング言語ごとに、ファインチューニングされた固有のAIモデルが必要だと考えていた。だが、生成AI全体や、OpenAIのLLMの技術進化により、1つのモデルで多種多様なコーディング言語とタスクに対応できるようになった。

古いアイデアを見直す習慣をつける

 LLMは急速に進歩している分野であるため、2023年現在は実現不可能な機能が、近い将来に実現できるかもしれない。開発者がコーディングの質問をするためのチャットインタフェースは、初期テストではユーザーの期待に届かず、優先順位が引き下げられた。だが、ChatGPTの登場で人々がAIチャットbotに慣れ親しみ、LLMが進化し続けたことで、GitHub Copilot Chatのような反復的なチャット体験が可能になった。

スケールする:GAに到達するために、AIの品質、ユーザビリティ、責任ある利用を最適化する

 早期のフィードバックとテクニカルプレビューは、製品の改善を後押しし、アプリケーションをGAに到達させる鍵となる。GitHubは、GitHub Copilotのテクニカルプレビューを開始する前に同社が取ったステップや、どのようにテクニカルプレビューを管理したか、どのようにユーザーフィードバックを最大限に活用したか、大規模な需要に対応するためにどのように社内インフラを準備したかを、以下のように紹介している。

品質とユーザビリティを最適化する

一貫した結果を保証する

 LMMは確率的なものであるため、常に同じ予測可能な結果が得られるとは限らない。解決策の一つは、LLMを使用したビルド特有の課題に対応する品質パイプラインを設定することだ。GitHub Copilotチームは、関数全体のコーディング提案機能を提供するに当たって、出力の予測可能性と一貫性を確保する必要があった。そこで、パラメーターを変更して出力のランダム性を減らすとともに、レスポンスをキャッシュするアプローチを取った。

テクニカルプレビューにウェイティングリストを導入する

 ウェイティングリストにより、GitHub Copilotチームは質問、フィードバック、コメントを管理し、効果的に対処できるようになった。さまざまな経験レベルの開発者をアーリーアダプターとして確保できた。

実際のユーザーからのフィードバックを活用する

 GitHubは、多くの開発者から、実際のユースケースを通じて多様なフィードバックが寄せられたことは有益だったと振り返っている。開発者が、あるアップデートがモデルのコーディング提案の品質に悪影響を及ぼしたことを共有した。これを受けてGitHub Copilotチームは、新しいガードレール指標(複数行の提案と1行の提案の割合)を実装し、顧客が引き続き高品質の提案を得られるようにモデルをチューニングした。

規模を拡大しながらイテレーションを行うことを約束する

 GitHub CopilotがGAしたとき、チームは製品だけでなく、インフラも改善しなければならなかった。GitHub Copilotが実験段階にあり、迅速なイテレーションが行われていたときは、OpenAI APIと直接連携していた。製品が成長するにつれて、チームはMicrosoft Azureインフラの利用を拡大し、GitHub Copilotがエンタープライズグレードの品質、信頼性、責任あるガードレールを提供するようにした。

製品の主要なパフォーマンス指標を定義する

 GitHub Copilotを最適化するために、初期の開発者からのフィードバックを生かして、コード受け入れ率や、コード保持率(開発者によって元のコード案がどれだけ保持または編集されたかを測定する)など、適切なパフォーマンス指標を特定した。

コストを最適化する

 開発チームは、開発者への影響とのバランスを取りながら、GitHub Copilotの提案を提供するコストの最適化に取り組んだ。その一例が、ゴーストテキスト(入力中に1つのコーディング提案を点滅させるグレーのテキスト)の採用だ。ゴーストテキストを採用する前は、GitHub Copilotは10個の提案を生成し、一度に全て表示していた。

AIの責任ある利用を最適化する

 GitHubは、AIの責任ある利用を最適化する際に重要なポイントとして「セキュリティと信頼を優先する」「コミュニティーの協力を得る」を挙げている。

市場参入戦略を立てる

 GitHubは市場参入戦略を立てる際に重要なポイントとして「製品エバンジェリストとともに製品をリリースする」「企業をターゲットとして狙う前に、個人ユーザーに製品を届ける」を挙げている。

 GitHubは最後に、以下の部分をポイントとしてまとめた。

  • 焦点を絞って問題を特定し、AIのユースケースを慎重に見極める。これにより、アプリケーションのインパクトが大きくなり、市場投入期間が短縮される
  • 実験と緊密なフィードバックループを設計プロセスに統合する。これは、LLMを扱う上で特に重要だ。LLMは出力が確率的であり、ほとんどのエンドユーザーは、AIモデルの利用方法を学んでいる途上だからだ
  • 規模を拡大する中で、ユーザーからのフィードバックを活用し続け、ユーザーニーズを優先する。これにより、一貫した結果と真の価値を提供する製品を開発できる

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る