Evolusi Konteks untuk AI Coding Agent

AI coding agent membutuhkan konteks struktural yang tepat untuk menghasilkan kode yang valid tanpa memicu halusinasi interface atau melanggar arsitektur repositori. Dua pendekatan utama yang digunakan untuk menyuplai konteks ini adalah static documentation file (seperti pola AGENTS.md atau implementasi tool seperti agent0ai/dox) dan dynamic vector retrieval (RAG).

Dynamic RAG mengandalkan chunking teks dan vector embedding database untuk mencari potongan kode yang relevan secara semantik. Sebaliknya, pola AGENTS.md menggunakan pendekatan deterministic documentation: file statis terkompresi yang digenerate otomatis menggunakan AST (Abstract Syntax Tree) parser, diletakkan langsung di dalam repositori, dan dimuat langsung ke sistem context LLM.

Pola Arsitektur AGENTS.md Berbasis AST

Alih-alih menyimpan seluruh implementasi fungsi ke dalam prompt, pola AGENTS.md mengekstraksi metadata struktural seperti nama class, tipe parameter, signature fungsi, return type, dan dependensi antar-modul. Pola ini memangkas bodi implementasi sehingga menghasilkan peta repositori dengan konsumsi token minimal.

// Contoh ekstraksi signature menggunakan TypeScript Compiler API
import * as ts from 'typescript';

export function extractContract(sourceCode: string, fileName: string): string {
  const sourceFile = ts.createSourceFile(fileName, sourceCode, ts.ScriptTarget.Latest, true);
  let output = '';

  function visit(node: ts.Node) {
    if (ts.isClassDeclaration(node) && node.name) {
      output += `class ${node.name.text} {
`;
      node.members.forEach(member => {
        if (ts.isMethodDeclaration(member) && member.name) {
          const params = member.parameters.map(p => `${p.name.getText()}: ${p.type ? p.type.getText() : 'any'}`).join(', ');
          const returnType = member.type ? member.type.getText() : 'void';
          output += `  ${member.name.getText()}(${params}): ${returnType};
`;
        }
      });
      output += '}
';
    }
    ts.forEachChild(node, visit);
  }

  visit(sourceFile);
  return output;
}

Hasil dari generator AST ini adalah ringkasan ringkas dalam format Markdown yang ditaruh di root repositori:

# Repository Blueprint

## Module: AuthService (src/auth/service.ts)
- `validateToken(token: string): Promise`
- `revokeSession(sessionId: string): Promise`

## Module: BillingClient (src/billing/client.ts)
- `charge(userId: string, amountCents: number): Promise`

Matriks Evaluasi: Static Doc (AGENTS.md) vs Dynamic RAG

Memilih antara file statis dan RAG memerlukan evaluasi trade-off dari berbagai parameter rekayasa perangkat lunak:

  • Latensi Konsumsi Token: Static doc memiliki latensi retrieval nol (0 ms) karena file langsung dibaca dari disk lokal atau dicache oleh LLM context window. Dynamic RAG membutuhkan embedding query roundtrip, vector similarity search, dan reranking sebelum prompt dikirim.
  • Akurasi Konteks Kode Lokal: AST-based static doc menjamin deterministic parsing 100% tanpa risiko false positive chunk. Dynamic RAG sering memotong syntax scope di tengah block akibat sliding-window chunker, menyebabkan syntax truncation.
  • Kompleksitas Tooling: AGENTS.md memerlukan integrasi CLI pada Git pre-commit hook atau CI pipeline untuk regenerasi file. RAG membutuhkan database vektor terpisah, service chunker, dan pipeline embedding continuous update.
  • Biaya Infrastruktur: Static doc tidak memiliki biaya embedding berkelanjutan. Dynamic RAG memerlukan komputasi embedding model pada setiap pull request dan biaya query database vektor.

Analisis Skenario: Monorepo vs Microservices

1. Arsitektur Monorepo

Pada monorepo skala besar dengan jutaan baris kode, menyatukan seluruh signature ke dalam satu file AGENTS.md akan menghabiskan context window model (melebihi 100k token). Pada skenario ini:

  • Dynamic RAG lebih efektif jika dipadukan dengan hierarchical indexing berbasis metadata modul.
  • Alternatif hybrid: pecah AGENTS.md secara desentralisasi per root package/modul (misal: apps/web/AGENTS.md, packages/shared-ui/AGENTS.md). AI agent memuat sub-blueprint sesuai konteks working directory.

2. Arsitektur Microservices

Pada repositori microservices dengan batasan bounded context yang ketat:

  • AGENTS.md jauh lebih unggul. Scope kode relatif kecil (biasanya < 50.000 token untuk seluruh schema interface), sehingga seluruh blueprint dapat masuk ke context prompt tanpa overhead eksternal.
  • Dynamic RAG pada microservices sering mengalami over-engineering karena kompleksitas infrastruktur tidak sebanding dengan ukuran basis kode.

Rekomendasi Implementasi

Gunakan pola AGENTS.md yang dihasilkan via AST parser jika basis kode terisolasi, kebutuhan deterministic type contract tinggi, dan tim ingin memangkas dependensi database vektor. Gunakan Dynamic RAG jika ukuran repositori melampaui batas efisiensi context window dan membutuhkan pencarian semantik teks non-kode (seperti issue tracker atau dokumentasi operasional).