Het bouwen van één kennisgraaf over 46 repositories heen

Ik ben Ryan, CTO bij airCloset.

Ik heb drie maanden besteed aan het bouwen van code-graph. Het is een enkele kennisgraaf die 46 repositories over meerdere services heen verenigt.

Veel mensen denken dat je al je code simpelweg aan een AI kunt geven en vragen kunt stellen. Dit mislukt om twee redenen:

  • Contextvensters: Je kunt jaren aan code uit 46 repositories niet in één prompt passen.
  • Hallucinatie: AI maakt fouten wanneer het probeert relaties af te leiden. Het mist verbindingen.

Om dit op te lossen, heb ik statische analyse gebruikt om een 'source of truth' te bouwen.

De uitdaging: grenzen overschrijden

Een grote codebase is rommelig. Eén API kan worden aangeroepen door vijf verschillende repositories. Eén database-tabel kan worden gebruikt door drie verschillende services.

Als je alleen naar één repository kijkt, mis je het volledige plaatje. Dit is gevaarlijk. Als je code aanpast en de werkelijke blast radius niet ziet, breek je het systeem.

Mijn aanpak maakt gebruik van tree-sitter om code te parsen naar syntaxbomen. Maar tree-sitter alleen kan niet over de grenzen van repositories heen kijken.

Ik heb boundary nodes gebouwd om dit op te lossen.

Hoe het werkt:

  • We extraheren relaties binnen een repo met behulp van tree-sitter.
  • We gebruiken de TypeScript Compiler API om types en variabelen te resolven.
  • We gebruiken Gemini om dynamische gevallen af te handelen die tools missen.

In plaats van de AI te laten gissen, geven we het feiten. We vertellen het: "Deze API wordt ook aangeroepen vanuit Repo X." Dit voorkomt hallucinaties.

Het moeilijke deel: de framework-dierentuin

De echte strijd was het extraheren van deze grenzen. Elk framework schrijft grenzen anders.

Het ene team gebruikt NestJS-decorators. Een ander gebruikt Express-routes. Weer een ander gebruikt pure jQuery. Elk van deze creëert een andere structuur in de code.

Om dit werkend te krijgen, moesten we aangepaste parsers bouwen voor:

  • NestJS en TypeORM
  • Express en Fastify
  • AngularJS en Redux
  • Verschillende path-alias schema's

We moesten mikken op 99% nauwkeurigheid. Als onze verbindingsgraad slechts 90% is, mist de AI 10% van de verbindingen. In een productiesysteem is die 10% de plek waar de bugs zich verschuilen.

We draaien nu een dagelijkse controle. Als onze verbindingsgraad met meer dan 5% daalt, krijgen we een alert. Zo vangen we het op wanneer nieuwe codepatronen onze parsers breken.

Huidige beperkingen

De graaf is niet perfect.

  • Zoeken is lastig. Je moet vaak een functienaam weten om je zoekopdracht te starten.
  • Node-explosie. Het volgen van een pad kan duizenden kleine, nutteloze helperfuncties aantrekken.
  • Onderhoud. Elke keer dat er een nieuw framework in onze stack terechtkomt, moeten we een nieuwe parser schrijven.

Dit is deel 1. In deel 2 zal ik de service-product-graph (SPG) laag bespreken die ik heb gebouwd om deze hiaten te dichten.

Bron: https://dev.to/ryantsuji/building-one-knowledge-graph-across-46-repositories-with-static-analysis-part-1-egm

Optionele leercommunity: https://t.me/GyaanSetuAi