Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Redis

रेडिस का उपयोग करने वाले एआई एजेंटों के लिए एक लाइटनिंग-फास्ट इन-मेमोरी फ़ाइल सिस्टम डिज़ाइन करना

<पी> कोडेक्स या क्लाउड कोड जैसे एआई एजेंट स्वाभाविक रूप से बैश कमांड चलाने में बेहद अच्छे हैं . फ़ाइल सिस्टम के माध्यम से खोजना, ग्रेपिंग करना, शेल के माध्यम से संदर्भ प्राप्त करना।

<पी> इसलिए मैं कोशिश करना चाहता था:क्या होगा यदि एआई एजेंट जिस संपूर्ण फ़ाइल सिस्टम पर काम करता है वह डिस्क के बजाय रेडिस में रहता है? क्या होगा यदि, AI एजेंट को, ऐसा लगता है कि यह किसी अन्य फ़ाइल सिस्टम का उपयोग कर रहा है, लेकिन वास्तव में यह वास्तव में तेज़ इन-मेमोरी स्टोर है?

<पी> यहां बताया गया है कि मैं इसे कैसे काम करना चाहता था 👇

<पी> रेडिस का उपयोग करने वाले एआई एजेंटों के लिए एक लाइटनिंग-फास्ट इन-मेमोरी फ़ाइल सिस्टम डिज़ाइन करना

<पी> जब एजेंट एक grep कमांड चलाता है (जिसमें वे सभी असाधारण हैं), तो हम वर्सेल के just-bash का उपयोग करके इसे रोकते हैं लाइब्रेरी बनाएं और इसे रेडिस सर्च क्वेरी में अनुवाद करें।

<पी> इस तरह, हमें रीड-ओनली एक्सेस के लिए किसी सैंडबॉक्स की आवश्यकता नहीं होगी और (सैद्धांतिक रूप से) यह बहुत तेज़ होना चाहिए . और पता चला कि Mintlify पहले भी ऐसा ही कुछ कर चुका है।

विचार

<पी> यह देखने के लिए कि क्या यह काम कर सकता है, मैंने तर्क को तीन टुकड़ों में विभाजित किया

  1. प्रत्येक फ़ाइल एक Redis JSON दस्तावेज़ है . हम पथ, सामग्री, आकार, टाइमस्टैम्प, सभी को एक कुंजी के अंतर्गत संग्रहीत करते हैं।
  2. एक मेनिफेस्ट डायरेक्टरी ट्री को ट्रैक करता है . एक रेडिस कुंजी संपूर्ण फ़ोल्डर संरचना को रखती है इसलिए ls और tree कभी भी स्कैन नहीं करना पड़ेगा.
  3. ग्रेपिंग के लिए रेडिस खोजें . इस प्रकार grep मिलान ढूंढने के लिए प्रत्येक फ़ाइल को पढ़ने की आवश्यकता नहीं है।
<पी> और बस इतना ही! इन बहुत कम चीज़ों के साथ, हम एक नियमित (केवल-पढ़ने के लिए) फ़ाइल सिस्टम की पूर्ण समता के बहुत करीब पहुँच सकते हैं, लेकिन बहुत तेज़ी से। मैंने फिलहाल लेखन कार्यान्वित न करने का निर्णय लिया है।

सबसे बड़ी चुनौती:ग्रेपिंग

<पी> cat जैसे कमांड या ls बहुत सीधे हैं. हम या तो एक फ़ाइल को पूरा पढ़ते हैं या हम एक निर्देशिका संरचना सूचीबद्ध करते हैं, दोनों ही Redis के साथ करना आसान है। sed -n '1,240p' जैसे कमांड थोड़े अधिक जटिल हैं, लेकिन हम सॉर्टेड सेट का उपयोग करके उन्हें बिल्कुल काम में ला सकते हैं।

<पी> ग्रेपिंग थोड़ा अलग है. एक सामान्य grep -R "oauth" /workspace उस निर्देशिका के अंतर्गत प्रत्येक फ़ाइल को पढ़ना होगा। एक वर्चुअल फाइल सिस्टम में इसका मतलब है कि प्रत्येक दस्तावेज़ को रेडिस से बाहर निकालना, यह जांचने के लिए कि उसमें शब्द है या नहीं। यह वास्तव में धीमा और महंगा है।

<पी> लेकिन हमने हाल ही में अपस्टैश रेडिस सर्च पेश किया है, जो रेडिस डेटा के माध्यम से खोज करने का एक जंग-आधारित, बेहद तेज़ और कुशल तरीका है। रेडिस सर्च के साथ, हम grep को इंटरसेप्ट कर सकते हैं इसे चलाने से पहले, इसे एक क्वेरी में अनुवाद करें, और फ़ाइलें लाए बिना तेज़ परिणाम प्राप्त करें।

<पी> एक खोज क्वेरी कुछ इस तरह दिखती है:

import { Redis } from "@upstash/redis";
 
const redis = new Redis.fromEnv();
const index = redis.search.index({ name: "vfs" });
 
const matches = await index.query({
 filter: {
 $must: [
 { workspaceId: "demo" },
 { kind: "file" },
 { content: { $phrase: "oauth" } },
 ],
 },
 select: { path: true },
});
<पी> एजेंट अभी भी वही आउटपुट देखता है जो वह सामान्य शेल से देखता है।

एजेंट को एक शेल देना

<पी> अंतिम भाग इसे just-bash तक वायर कर रहा है इसलिए एक एजेंट इसके विरुद्ध आदेश चला सकता है। Mintlify ने अपने सहायक का फ़ाइल सिस्टम कैसे बनाया, उससे प्रेरित होकर, हमने /workspace पर एक Redis-समर्थित fs एडाप्टर माउंट किया है। MountableFs पर :

import { InMemoryFs, MountableFs } from "just-bash";
 
const mountableFs = new MountableFs({ base: new InMemoryFs() });
mountableFs.mount("/workspace", redisFs); // redisFs talks to Upstash
 
const bash = new Bash({ fs: mountableFs, cwd: "/workspace" });
<पी> जब एजेंट cat /workspace/src/index.ts चलाता है , वह readFile कॉल सीधे रेडिस के पास जाती है। grep इंटरसेप्ट किया गया है और रेडिस सर्च पर रीडायरेक्ट किया गया है।

<पी> एजेंट के दृष्टिकोण से यह महज़ एक आवरण है। ls , cat , grep , find , यह सब काम करता है। जब हम उसे वर्सेल एआई एसडीके में bash के रूप में डालते हैं टूल, हमारे पास एक एजेंट है जो एक कोडबेस का पता लगा सकता है जो पूरी तरह से रेडिस में रहता है।

मुझे यह विचार कैसे आया

<पी> एक के लिए, Mintlify का महान लेख मैंने ऊपर लिंक किया है। और दूसरा, अधिकांश एजेंट सैंडबॉक्स भारी होते हैं। हम एक कंटेनर को बूट करते हैं, एक डिस्क को माउंट करते हैं, और इन सभी की लागत का भुगतान करते हैं, चाहे एजेंट एक फाइल को छूए या एक हजार को।

<पी> Redis के साथ एक वर्चुअल फ़ाइल सिस्टम हमेशा चालू रहता है, विश्व स्तर पर दोहराया जाता है, टिकाऊ होता है, और सबसे महंगा ऑपरेशन (फ़ाइलों में खोज करना) वह है जिसमें Redis सर्च बहुत अच्छा है।

<पी> चीयर्स 🙌जोश


  1. जावास्क्रिप्ट में तीर कार्यों के साथ लैम्ब्डाजावास्क्रिप्ट में तीर कार्यों के साथ लैम्बडास जावास्क्रिप्ट में तीर कार्यों के साथ लैम्ब्डाजावास्क्रिप्ट में तीर कार्यों के साथ लैम्बडास

    लैम्ब्डा फ़ंक्शन एक छोटा अनाम फ़ंक्शन है जिसमें केवल एक अभिव्यक्ति होती है और एक या एकाधिक पैरामीटर ले सकती है। वे मूल रूप से कार्यों को अन्य कार्यों के पैरामीटर के रूप में पारित करने की अनुमति देते हैं। चूंकि जावास्क्रिप्ट में, फ़ंक्शंस को ऑब्जेक्ट के रूप में माना जाता है, इसलिए उन्हें लैम्ब्डा फ़ं

  1. OpenCV फ़ंक्शन गॉसियन ब्लर () का उपयोग करके एक छवि को धुंधला करना OpenCV फ़ंक्शन गॉसियन ब्लर () का उपयोग करके एक छवि को धुंधला करना

    इस कार्यक्रम में, OpenCV फ़ंक्शन GaussianBlur () का उपयोग करके एक छवि को धुंधला कर देगा। गॉसियन ब्लर गाऊसी फ़ंक्शन का उपयोग करके एक छवि को धुंधला करने की प्रक्रिया है। यह छवि से शोर को दूर करने और विवरण को कम करने के लिए ग्राफिक्स सॉफ़्टवेयर में व्यापक रूप से उपयोग किया जाता है। एल्गोरिदम Step 1: Im

  1. एंड्रॉइड में वेबव्यू जावा स्क्रिप्ट कैसे सक्षम करें? एंड्रॉइड में वेबव्यू जावा स्क्रिप्ट कैसे सक्षम करें?

    यह उदाहरण एंड्रॉइड में वेबव्यू जावा स्क्रिप्ट को कैसे सक्षम करें के बारे में प्रदर्शित करता है। चरण 1 - एंड्रॉइड स्टूडियो में एक नया प्रोजेक्ट बनाएं, फाइल ⇒ न्यू प्रोजेक्ट पर जाएं और एक नया प्रोजेक्ट बनाने के लिए सभी आवश्यक विवरण भरें। चरण 2 - निम्न कोड को res/layout/activity_main.xml में जोड़ें।