Gemini API で AI 搭載デベロッパー ツールを強化する

11月 14, 2024
Vishal Dharmadhikari Product Solutions Engineer
Paige Bailey AI Developer Experience Engineer
Scott Werner Sublayer

この 1 年間で AI の裾野が広がり、デベロッパーは 2 つの大きなチャンスを得ることになりました。その 1 つは、信じられないほど簡単に最先端の AI をプロジェクトに組み込めるようになったこと。そしてもう 1 つは、AI の主導で開発プロセスを効率化できるようになったことです。

Ruby ベースの AI エージェント フレームワークである Sublayer は、コア デベロッパー製品と独自のツール ワークフローに私たちの 1.5 モデルを組み込むことで、Gemini API のパワーと効率性を実証しています。


Gemini で Sublayer のドキュメントを最新に保つ

AI を活用して少ないリソースで多くのことを行えるようにすれば、デベロッパーにとってのチャンスが生まれます。これは特に、小規模な初期段階のスタートアップのチームに当てはまります。多くの人にとって、それはシンプルでありながら重要なもの、たとえばドキュメントのようなものかもしれません。Sublayer は、独自のワークフローのライブラリを Gemini 1.5 Pro と連携させ、AI で自動化することで、ドキュメントを最新の状態に保ち、改善点を特定できるようにしています。

「Gemini の巨大なコンテキスト ウィンドウによって、新しいアイデアを試す余地が生まれたおかげです。複雑で最適化された実装を最初から気にする必要はありません」と、Sublayer の CEO である Scott Werner 氏は述べています。同氏は最近、無駄な推論!と題した記事で、このコンセプトについて書いています。

このプロセスは、次のような仕組みです。

  1. PR がメインの Sublayer リポジトリにマージされるたびに、ドキュメントを更新するエージェントがトリガーされます。

2. エージェントは、ライブラリの内容全体、ドキュメントの内容全体、PR のすべての関連する内容と、タスクについて説明する指示文を含むプロンプトを生成し、Gemini に送信します。

3. Gemini は、構造化された出力を返します。ここにはファイルパス、名前、内容が含まれ、Sublayer のライブラリはこれをオブジェクトに変換して利用します。

4. エージェントは構造化された情報を受け取り、それを使って新しいブランチを作成し、リクエストされた変更をファイルに加えたうえで、新しい PR を送信します。

# Get the diff from the PR
diff = GithubGetDiffAction.new(repo: repo, pr_number: pr_number).call
 
# Get the contents of the library repository and docs repository
code_context = GetContextAction.new(path: code_repo_path).call
doc_context = GetContextAction.new(path: doc_repo_path).call
 
# Use Gemini 1.5 Pro to decide whether this PR requires a documentation update
result = DocUpdateNecessityGenerator.new(
    code_context: code_context,
    doc_context: doc_context,
    diff: diff
  ).generate
 
# Use Gemini 1.5 Pro to generate suggested changes to the documentation
doc_update_suggestions = DocUpdateSuggestionGenerator.new(
        code_context: code_context,
        doc_context: doc_context,
        context_ignore_list: context_ignore_list,
        diff: diff
      ).generate
 
# Use Gemini 1.5 Pro to generate the changes to the suggested files
file_updates = DocUpdateGenerator.new(
        code_context: code_context,
        suggestions: suggestions,
        doc_context: doc_context,
        context_ignore_list: context_ignore_list
      ).generate
 
# Update each of the files returned by Gemini 1.5 Pro and create a new PR

完全なワークフローのコードはこちらを参照: Sublayer のオープンソース サンプル


この最初のプロジェクトが成功した後、Sublayer はそれをさらに拡張し、個別のリソース リポジトリを監視してドキュメントの特定のカタログページを最新の状態に保つことに特化したエージェントを実現しました。また、同じようなタスクを夜間にも実行しています。そこでは Gemini が現在のドキュメントを分析し、改善点を特定して影響に基づいてランク付けし、1 つの PR を作成します。Sublayer のチームは、毎朝それを確認できるようになっています。


Gemini モデルで Ruby デベロッパー コミュニティに AI を導入する

Sublayer は、独自のデベロッパー インフラストラクチャやツールを効率化するだけでなく、プロダクトのコア機能にも Gemini モデルを導入しています。

Sublayer のミッションは、個人デベロッパーや小規模なチームが、それまではコストや複雑さのために手の届かなかった野心的なプロジェクトを実現できるようにすることです。重点的に取り組んでいるのは、退屈で時間のかかる反復的なタスクの自動化で、これこそ AI の完璧なユースケースです。そこには、同じような作業を何千回も繰り返さなければならない大規模なコード移行から、時間とエネルギーを消耗するような細かいチェックリストのタスクを自動化することで実現する日々の効率化まで、幅広い作業が含まれます。

Sublayer の主な課題は、AI エコシステムで対応するサービスが少ない Ruby デベロッパー コミュニティのサポートです。Gemini 対応ツールの需要は増加していますが、Gemini との連携によって、それを満たすことができました。Sublayer の Gemini 実装は非常に効率的で、抽象化レイヤのおかげで 60 行ほどのコードしか必要としていません。構造化された出力を使い、モデルとのやり取りは 1 回の反復プロセスで済ませます。このアプローチによって、開発とデバッグが簡単になり、デベロッパーは堅牢なアプリケーションを構築できるようになります。

「LLM ベースのアプリを構築するときは、問題を最小コンポーネントまで分解しましょう」と Werner 氏はアドバイスします。「どんなモデル出力でも効果的に処理できるプログラムを設計したいなら、人がレビューや編集を行う手順を意図的に追加する必要すらあるかもしれません」


AI インフラストラクチャ パズルのコアピースとしての LLM

Sublayer にとって、Gemini のような LLM はインフラストラクチャの不可欠な部分であり、いわばデータベースのようなものです。このフレームワークには、Gemini 1.5 Pro と Gemini 1.5 Flash の両方への呼び出しがシームレスに組み込まれています。デベロッパーがアプリケーションで簡単に利用できるように、構造化データを取得する設計にもなっています。このアプローチで可能性が大きく広がり、多様なデータソースから知見を抽出することも、コードを生成することも、言語やライブラリ間でコードベースを変換することもできます。Sublayer は Gemini モデルを使って、ユーザーがフレームワークの中で新しい機能コンポーネントを生成することも可能にしています。この「自己組織化」特性により、実験が促進され、ユーザーが新しいアイデアを短時間で試せるようになります。

「Gemini は、私たちがフレームワークを使ってサポートしようとしている問題、すなわちコード生成、タスク分解、指示の順守、例に基づく新しいデータ構造の生成といった問題の解決を得意としています」
Scott Werner 氏(Sublayer、CEO)


次のステップ

Sublayer は、Augmentations.ai を立ち上げる準備をしています。このプラットフォームは、あらゆる開発チームが Sublayer の自動化を利用できるようにするものです。最初のリリースには、Gemini 1.5 Pro を利用した 2 つのツールが含まれる予定です。セマンティック lint チェックは、コンテキストを理解し、進化するベスト プラクティスを適用できる AI 搭載コードレビュー ルールを作成できるようにします。ウィークリー サマリーは、複数のリポジトリやプロダクト管理ツールにまたがる開発アクティビティを実用的な知見に変えるため、管理が簡単になります。

また、Augmentations プラットフォームのツールを拡充する予定で、Gemini 1.5 Pro をさらに複雑なタスクに使うことや、Gemini 1.5 Flash をレイテンシの影響を受けやすいユーザー向けの機能に使うことを計画しています。この取り組みはオープンソース フレームワークにもフィードバックされるので、Ruby コミュニティは、Sublayer チームの実際の事例による後押しを受けながら、新しい Gemini 機能をすぐに利用できるようになります。

Sublayer のストーリーが示しているのは、Gemini API がもたらす変革の可能性です。デベロッパーが Gemini をワークフローに組み込むのは簡単であり、それによってイノベーションと自動化の可能性が開くという証明にほかなりません。Gemini モデルを使って開発を始めたい方は、API ドキュメントをご覧ください。