क्विकस्टार्ट
कुछ ही मिनटों में askRunic और storeResult को किसी मौजूदा एजेंट में जोड़ें।
इंस्टॉल करें
npm install @runic-labs/sdkpnpm add @runic-labs/sdkyarn add @runic-labs/sdkbun add @runic-labs/sdk@runic-labs/sdk, @runic-labs/cache और @runic-labs/ledger पर निर्भर है — इन्हें अलग से इंस्टॉल करने की आवश्यकता नहीं है, जब तक कि आप स्वयं कस्टम स्टोर इंस्टेंस बनाना न चाहें (देखें कैश और लेजर)।
आपके एजेंट द्वारा पहले से किए जाने वाले कॉल को रैप करें
अपने एजेंट में वह स्थान खोजें जहाँ वह किसी कार्य को LLM या टूल के कॉल में बदलता है, और उसे 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;
}
बस इतना ही एकीकरण है। शुरुआत करने के लिए किसी कॉन्फ़िगरेशन की आवश्यकता नहीं है — askRunic/storeResult आपकी कार्यशील डायरेक्टरी में .runic/ के अंतर्गत डिफ़ॉल्ट फ़ाइल-समर्थित स्टोर का उपयोग करते हैं।
intent और params चुनना
सिग्नेचर सटीक-मिलान वाला है, इसलिए अपने उपयोग के मामले के लिए तय करें कि वास्तव में किन बातों से दो कॉल “एक ही निर्णय” बनते हैं:
- अच्छा:
{ intent: "summarize_pr", params: { repo: "acme/widgets", pr: 482 } }— हर बार जब इस सटीक PR के बारे में पूछा जाता है, वही रेपो, वही PR नंबर, वही इंटेंट। - खराब:
{ intent: "summarize_pr", params: { prompt: fullPromptString } }— कच्चे प्रॉम्प्ट टेक्स्ट को पैरामीटर के रूप में शामिल करने का अर्थ है कि शब्दों में कोई भी बदलाव (यहाँ तक कि व्हाइटस्पेस भी) कैश मिस उत्पन्न करता है, जिससे उद्देश्य विफल हो जाता है।
params में केवल वे पैरामीटर रखें जो वास्तव में निर्णय की पहचान करते हैं। प्रॉम्प्ट टेक्स्ट, रीजनिंग ट्रेस और किसी भी गैर-नियतात्मक चीज़ को सिग्नेचर से पूरी तरह बाहर रखें — कारण जानने के लिए यह कैसे काम करता है देखें।
कैश में क्या है, जाँचें
npm install -g @runic-labs/clipnpm add -g @runic-labs/clinpm install -g @runic-labs/clibun add -g @runic-labs/clirunic cache status
runic ledger status
पूर्ण आउटपुट उदाहरणों के लिए CLI देखें।
किसी अलग स्टोर स्थान की ओर इंगित करें
डिफ़ॉल्ट रूप से, Runic process.cwd() में .runic/ पर लिखता है। यदि आपका एजेंट उस कार्यशील डायरेक्टरी से अलग किसी डायरेक्टरी से चलता है जहाँ आप स्टेट रखना चाहते हैं, तो इसे एनवायरनमेंट वेरिएबल से ओवरराइड करें:
RUNIC_HOME=/var/lib/my-agent/runic node agent.js
इसके बजाय इन-मेमोरी स्टोरेज का उपयोग करें (टेस्ट, अस्थायी रन)
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 } });
ठीक यही benchmarks/reuse-sweep और benchmarks/openrouter-savings उपयोग करते हैं, इसलिए अलग-अलग स्क्रिप्ट रन के बीच कुछ भी स्थायी नहीं रहता।
आगे
- यह कैसे काम करता है — सिग्नेचर एल्गोरिदम का विस्तृत विवरण
- बेंचमार्क — वास्तविक टोकन-बचत संख्याओं को पुनः प्रस्तुत करें