सामग्री पर जाएँ
Runic
हिन्दी
Esc
नेविगेटखोलें⌘Jप्रीव्यू
इस पेज पर

क्विकस्टार्ट

कुछ ही मिनटों में askRunic और storeResult को किसी मौजूदा एजेंट में जोड़ें।

इंस्टॉल करें

npm install @runic-labs/sdk
pnpm add @runic-labs/sdk
yarn add @runic-labs/sdk
bun 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/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

पूर्ण आउटपुट उदाहरणों के लिए 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 उपयोग करते हैं, इसलिए अलग-अलग स्क्रिप्ट रन के बीच कुछ भी स्थायी नहीं रहता।

आगे

क्या यह पेज सहायक था?