Zum Inhalt springen
Runic
Deutsch
Esc
navigierenöffnen⌘Jvorschau
Auf dieser Seite

Schnellstart

Binde askRunic und storeResult in wenigen Minuten in einen bestehenden Agenten ein.

Installation

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

@runic-labs/sdk hängt von @runic-labs/cache und @runic-labs/ledger ab — du musst diese nicht separat installieren, es sei denn, du möchtest selbst benutzerdefinierte Store-Instanzen erstellen (siehe Cache und Ledger).

Kapsle den Aufruf, den dein Agent bereits ausführt

Finde die Stelle in deinem Agenten, an der eine Aufgabe in einen Aufruf eines LLM oder Tools umgewandelt wird, und kapsle sie mit 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;
}

Das ist die gesamte Integration. Für den Einstieg ist keine Konfiguration erforderlich — askRunic/storeResult verwenden einen standardmäßigen dateibasierten Store unter .runic/ in deinem Arbeitsverzeichnis.

Auswahl von intent und params

Die Signatur ist eine exakte Übereinstimmung. Entscheide daher, wodurch zwei Aufrufe für deinen Anwendungsfall tatsächlich zur „gleichen Entscheidung“ werden:

  • Gut: { intent: "summarize_pr", params: { repo: "acme/widgets", pr: 482 } } — gleiches Repository, gleiche PR-Nummer, gleiche Absicht, jedes Mal, wenn genau diese PR abgefragt wird.
  • Schlecht: { intent: "summarize_pr", params: { prompt: fullPromptString } } — wenn der rohe Prompt-Text als Parameter enthalten ist, führt jede Formulierungsänderung (selbst Leerraum) zu einem Cache-Miss und vereitelt den Zweck.

Füge in params nur die Parameter ein, die die Entscheidung tatsächlich identifizieren. Lass Prompt-Text, Reasoning-Traces und alles Nichtdeterministische vollständig aus der Signatur heraus — unter So funktioniert es erfährst du, warum.

Prüfen, was im Cache liegt

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

Unter CLI findest du vollständige Ausgabebeispiele.

Einen anderen Store-Speicherort festlegen

Standardmäßig schreibt Runic nach .runic/ in process.cwd(). Überschreibe dies mit einer Umgebungsvariable, wenn dein Agent aus einem anderen Arbeitsverzeichnis ausgeführt wird als dem, in dem der Status gespeichert werden soll:

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

Stattdessen In-Memory-Speicher verwenden (Tests, kurzlebige Ausführungen)

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 } });

Genau das verwenden benchmarks/reuse-sweep und benchmarks/openrouter-savings, sodass zwischen separaten Skriptausführungen nichts erhalten bleibt.

Nächste Schritte

War diese Seite hilfreich?