Aller au contenu
Runic
Français
Esc
naviguerouvrir⌘Japerçu
Sur cette page

Démarrage rapide

Intégrez askRunic et storeResult dans un agent existant en quelques minutes.

Installer

npm install @runic-labs/sdk
pnpm add @runic-labs/sdk
yarn add @runic-labs/sdk
bun add @runic-labs/sdk

@runic-labs/sdk dépend de @runic-labs/cache et @runic-labs/ledger — vous n’avez pas besoin de les installer séparément, sauf si vous souhaitez construire vous-même des instances de stockage personnalisées (voir Cache et Ledger).

Encapsulez l’appel que votre agent effectue déjà

Trouvez l’endroit de votre agent où il transforme une tâche en appel à un LLM ou à un outil, puis encapsulez-le avec askRunic / storeResult :

import { askRunic, storeResult } from "@runic-labs/sdk";

async function reviewFile(repo: string, file: string) {
  const decision = { intent: "review_code", params: { repo, file } };

  const cached = await askRunic(decision);
  if (cached) {
    console.log(`cache hit — saved ${cached.tokensSpent} tokens`);
    return cached.artifact;
  }

  const response = await callYourLLM(promptFor(repo, file));
  await storeResult(decision, response.text, response.tokensUsed);
  return response.text;
}

C’est toute l’intégration. Aucune configuration n’est nécessaire pour commencer — askRunic/storeResult utilisent un stockage par défaut basé sur des fichiers sous .runic/ dans votre répertoire de travail.

Choisir intent et params

La signature utilise une correspondance exacte ; déterminez donc ce qui fait réellement que deux appels représentent « la même décision » dans votre cas d’utilisation :

  • Bon : { intent: "summarize_pr", params: { repo: "acme/widgets", pr: 482 } } — même dépôt, même numéro de PR, même intention, à chaque fois que cette PR précise est interrogée.
  • Mauvais : { intent: "summarize_pr", params: { prompt: fullPromptString } } — inclure le texte brut de l’invite comme paramètre signifie que tout changement de formulation (même un espace) produit un échec du cache, ce qui annule l’intérêt.

Placez dans params uniquement les paramètres qui identifient réellement la décision. Excluez entièrement de la signature le texte de l’invite, les traces de raisonnement et tout élément non déterministe — consultez Comment cela fonctionne pour comprendre pourquoi.

Inspecter ce qui est en cache

npm install -g @runic-labs/cli
pnpm add -g @runic-labs/cli
npm install -g @runic-labs/cli
bun add -g @runic-labs/cli
runic cache status
runic ledger status

Consultez CLI pour des exemples de sortie complets.

Utiliser un autre emplacement de stockage

Par défaut, Runic écrit dans .runic/ de process.cwd(). Remplacez-le par une variable d’environnement si votre agent s’exécute depuis un répertoire de travail différent de celui où vous souhaitez conserver l’état :

RUNIC_HOME=/var/lib/my-agent/runic node agent.js

Utiliser plutôt le stockage en mémoire (tests, exécutions éphémères)

import { createRunicClient } from "@runic-labs/sdk";
import { createCache, MemoryCacheStore } from "@runic-labs/cache";
import { createLedger, MemoryLedgerStore } from "@runic-labs/ledger";

const runic = createRunicClient({
  cache: createCache(new MemoryCacheStore()),
  ledger: createLedger(new MemoryLedgerStore()),
});

const cached = await runic.askRunic({ intent: "summarize_pr", params: { repo, pr } });

C’est exactement ce qu’utilisent benchmarks/reuse-sweep et benchmarks/openrouter-savings, donc rien ne persiste entre des exécutions distinctes du script.

Suite

Cette page vous a-t-elle été utile ?