Udostępnij

Nov 14, 2024

Ulepszanie narzędzi dla programistów opartych na AI za pomocą Gemini API

Scott Werner

Prezes Sublayer

Paige Bailey

Inżynier ds. wrażeń programistów AI

Vishal Dharmadhikari

Inżynier ds. rozwiązań produktowych

Baner powitalny prezentujący podwarstwę

Demokratyzacja AI w ostatnim roku otworzyła przed deweloperami 2 duże możliwości: niezwykle łatwe integrowanie najnowocześniejszych technologii AI z projektami oraz wprowadzanie do procesu tworzenia oprogramowania wydajności opartej na AI.

Sublayer, platforma agentów AI oparta na Ruby, pokazuje moc i wydajność interfejsu Gemini API, integrując nasze modele 1.5 z podstawową ofertą dla deweloperów, a także z własnymi przepływami pracy.

Aktualizowanie dokumentacji Sublayer za pomocą Gemini

Jedną z możliwości, jakie AI daje deweloperom, jest umożliwienie zespołom, zwłaszcza w małych startupach na wczesnym etapie rozwoju, osiągania lepszych wyników przy mniejszych nakładach. Dla wielu osób może to być coś tak prostego, a zarazem kluczowego jak dokumentacja. W swoich procesach Sublayer rozwiązuje ten problem, integrując swoją bibliotekę z Gemini 1.5 Pro i tworząc automatyzacje AI, które pomagają w aktualizowaniu dokumentacji i identyfikowaniu obszarów wymagających ulepszeń.

„Wszystko zaczęło się od tego, że ogromne okno kontekstu Gemini daje swobodę wypróbowywania nowych pomysłów bez konieczności od razu wdrażania złożonych, zoptymalizowanych rozwiązań”

– mówi Scott Werner, dyrektor generalny Sublayer, który niedawno napisał o tym koncepcie w artykule Waste Inferences!

Proces przebiega w ten sposób:

  1. Za każdym razem, gdy żądanie scalenia zostanie scalone z głównym repozytorium Sublayer, wyzwala to działanie agenta, który aktualizuje dokumentację.

  2. Agent generuje prompt, który zawiera całą zawartość biblioteki, całą zawartość dokumentacji i wszystkie istotne treści z żądania pull request wraz z instrukcjami wyjaśniającymi zadanie, a następnie wysyła go do Gemini.

  3. Następnie Gemini odpowiada za pomocą danych wyjściowych w formacie strukturalnym zawierających ścieżki, nazwy i zawartość plików, które biblioteka Sublayer przekształca w obiekt do użycia.

  4. Na koniec agent pobiera otrzymane informacje strukturalne i wykorzystuje je do utworzenia nowej gałęzi, wprowadzenia żądanych zmian w plikach i przesłania nowego żądania pull request.

            
              
# 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  
          
            
          

Zobacz pełny kod przepływu pracy w przykładach open source Sublayer

Po sukcesie pierwszego projektu zespół rozszerzył zakres działania agentów, którzy monitorują oddzielne repozytoria zasobów, aby dbać o aktualność konkretnej strony katalogu dokumentów. Istnieje nawet podobne zadanie, które jest wykonywane w nocy. Gemini analizuje bieżącą dokumentację, wskazuje kilka obszarów, które można ulepszyć, klasyfikuje je na podstawie wpływu i generuje 1 zgłoszenie z prośbą o scalenie, które zespół Sublayer może przejrzeć każdego ranka.

Wprowadzanie AI do społeczności programistów Ruby za pomocą modeli Gemini

Oprócz zwiększania wydajności własnej infrastruktury i narzędzi dla deweloperów Sublayer obsługuje też modele Gemini w ramach podstawowych funkcji produktu.

Misją Sublayer jest umożliwienie indywidualnym programistom i małym zespołom realizacji ambitnych projektów, które wcześniej były poza ich zasięgiem ze względu na koszty lub złożoność. Koncentrują się na automatyzacji żmudnych, czasochłonnych i powtarzalnych zadań, co jest idealnym zastosowaniem AI. Może to obejmować migracje kodu na dużą skalę, w przypadku których podobne operacje trzeba powtarzać tysiące razy, a także codzienne usprawnienia osiągane dzięki automatyzacji małych zadań na liście kontrolnej, które pochłaniają czas i energię.

Głównym wyzwaniem dla Sublayer jest wspieranie społeczności programistów Ruby, która jest stosunkowo zaniedbywana w ekosystemie AI. Integracja Gemini pozwoliła im sprostać rosnącemu zapotrzebowaniu na obsługę Gemini w ich narzędziach. Implementacja Gemini w przypadku Sublayer jest bardzo wydajna i dzięki warstwie abstrakcji wymaga tylko około 60 linii kodu. Korzystają z danych wyjściowych w formie strukturalnej, wchodząc w interakcję z modelami w ramach iteracyjnego procesu jednokrotnego. Upraszcza to proces tworzenia i debugowania, co pomaga deweloperom tworzyć niezawodne aplikacje.

„Podczas tworzenia aplikacji opartych na LLM podziel problem na jak najmniejsze komponenty” – radzi Werner. „Programy powinny być zaprojektowane tak, aby skutecznie przetwarzać dane wyjściowe modelu. Może to nawet oznaczać celowe dodanie kroków, w których człowiek sprawdza i edytuje dane przed przejściem do kolejnego etapu”.

LLM, czyli kluczowy element układanki infrastruktury AI

Dla Sublayer modele LLM, takie jak Gemini, są kluczowymi elementami infrastruktury, podobnie jak bazy danych. Ich platforma została zaprojektowana tak, aby bezproblemowo integrować wywołania modeli Gemini 1.5 Pro i Gemini 1.5 Flash, pobierając uporządkowane dane, które deweloperzy mogą łatwo wykorzystywać w swoich aplikacjach. Otwiera to świat możliwości, od wyodrębniania statystyk z różnych źródeł danych po generowanie kodu i przekształcanie baz kodu w różnych językach i bibliotekach. Sublayer korzysta nawet z modeli Gemini, aby umożliwić użytkownikom generowanie nowych komponentów funkcjonalnych w ramach platformy. Ta cecha „samodzielnego składania” zachęca do eksperymentowania i umożliwia użytkownikom szybkie odkrywanie nowych pomysłów.

„Gemini świetnie radzi sobie z rozwiązywaniem wszystkich problemów, które nasz framework ma ułatwiać – generowaniem kodu, dzieleniem zadań na mniejsze części, wykonywaniem instrukcji i generowaniem nowych struktur danych na podstawie przykładów”.

– Scott Werner, Sublayer

Co dalej?

W przyszłości Sublayer zamierza uruchomić Augmentations.ai, czyli platformę, która udostępni tworzone przez firmę automatyzacje wszystkim zespołom deweloperskim. W pierwszej wersji znajdą się 2 narzędzia oparte na Gemini 1.5 Pro: Semantic Linting, które umożliwia zespołom tworzenie opartych na AI reguł sprawdzania kodu, które rozumieją kontekst i wymuszają stosowanie zmieniających się sprawdzonych metod, oraz Weekly Summaries, które przekształca aktywność deweloperską w wielu repozytoriach i narzędziach do zarządzania produktem w praktyczne statystyki dla kierownictwa.

Planują nadal korzystać z modelu Gemini 1.5 Pro do bardziej złożonych zadań i z modelu Gemini 1.5 Flash do funkcji, które są bardziej wrażliwe na opóźnienia i są przeznaczone dla użytkowników, ponieważ udostępniają więcej narzędzi na platformie Augmentations. Wyniki tych prac zostaną też uwzględnione w ramach open source, dzięki czemu społeczność Ruby będzie mogła korzystać z nowych funkcji Gemini, gdy tylko się pojawią. Będą one oparte na rzeczywistych zastosowaniach zespołu Sublayer.

Historia Sublayer pokazuje przełomowy potencjał interfejsu Gemini API. To dowód na to, jak łatwo deweloperzy mogą zintegrować Gemini ze swoimi przepływami pracy, co otwiera przed nimi świat możliwości innowacji i automatyzacji. Aby zacząć tworzyć rozwiązania z użyciem modeli Gemini, zapoznaj się z naszą dokumentacją interfejsu API.