কম্পিউটার টিউটোরিয়াল

AI এজেন্টের জন্য লাইটনিং-ফাস্ট ইন-মেমরি ফাইলসিস্টেম ডিজাইন Redis ব্যবহার করে

Codex বা Claude Code-এর মত AI এজেন্টরা স্বাভাবিকভাবে ব্যবসায়িকভাবে ভালো বাশ কমান্ড রান করতে। ফাইলসিস্টেমে সার্চ করা, গ্রেপিং, শেলের মাধ্যমে কন্টেক্সট পাওয়া।

তাই আমি চেষ্টা করতে চেযলাম: কি হয় যদি একটি AI এজেন্ট যে পুরো ফাইলসিস্টেমে কাজ করে সেটা ডিস্কের বদলে Redis-এ থাকে? কি হয় যদি, AI এজেন্টের কাছে, এটা যেন যেকোনো অন্য ফাইলসিস্টেমের মত দেখাবে, কিন্তু আসলে এটি একটি খুব ফাস্ট ইন-মেমরি স্টোর?

এখানে আমি কীভাবে কাজ করাতে চেযলাম 👇

AI এজেন্টের জন্য লাইটনিং-ফাস্ট ইন-মেমরি ফাইলসিস্টেম ডিজাইন Redis ব্যবহার করে

যখন এজেন্ট একটি grep কমান্ড চালাবে (যা সবই এক্সপার্ট), আমরা Vercel-এর just-bash লাইব্রেরি ব্যবহার করে এটি ইন্টারসেপ্ট করব এবং একটা Redis Search কোয়েরিতে ট্রান্সলেট করব।

সেজন্য, রিড-অনলি অ্যাক্সেসের জন্য কোনো স্যান্ডবক্স লাগবে না এবং (তত্ত্বतः) এটি অনেক বেশি দ্রুত হবে। এবং Mintlify ইতিমধ্যে এরকম কিছু অনুরূপ করে ফেলেছে।

আইডিয়া

এটা কাজ করবে কিনা সেটা देखने জন্য, আমি লজিককে তিনটি টুকরোতে ভাগ করলাম

  1. প্রতিটি ফাইল একটি Redis JSON ডকুমেন্ট। আমরা পাথ, কন্টেন্ট, সাইজ, টাইমস্ট্যাম্প, সব একসাথে একটি কিয়ের অধীনে রাখি।
  2. একটি ম্যানিফেস্ট ডিরেক্টরি ট্রি ট্র্যাক করে। একটি Redis কি পুরো ফোল্ডার স্ট্রাকচার ধারণ করে যাতে ls এবং tree কখনো স্ক্যান করতে হয় না।
  3. grep করার জন্য Redis Search। এইভাবে grep প্রতিটি ফাইল পড়ে ম্যাচ খুঁজতে হবে না।

এই খুব কম জিনিসগুলো inplace থাকলে, আমরা একটি রেগুলার (রিড-অনলি) ফাইলসিস্টেমের খুব কাছাকাছি প্যারিটি পেতে পারি, কিন্তু অনেক দ্রুত। আমি লেখা ইমপ্লিমেন্ট না করার সিদ্ধান্ত নিয়েছি।

সবচেয়ে বড় চ্যালেঞ্জ: গ্রেপিং (grepping)

cat বা ls এর মত কমান্ডগুলো খুব সোজা। আমরা হয় একটি ফাইল পুরোপুরি পড়ি বা ডিরেক্টরি স্ট্রাকচার লিস্ট করি, যেগুলো রেডিসে করা সহজ। sed -n '1,240p' এর মত কমান্ডগুলো একটু জটিল, কিন্তু আমরা সেটাও সোয়ার্ডেড সেট ব্যবহার করে কাজ করে ফেলতে পারি।

Grеpping একটু আলাদা। একটি নরমাল grep -R "oauth" /workspace সেটি ডিরেক্টরির অধীনে প্রতিটি ফাইল পড়তে হয়। একটি ভার্চুয়াল ফাইলসিস্টেমে সেটা মানে Redis থেকে প্রতিটি ডকুমেন্ট পুল করা শুধু চেক করার জন্য এটা ওয়ার্ডটি কন্টেইন করে কিনা। সেটা খুব স্লো এবং এক্সপেনসিভ।

তবুও, আমরা gầnে Upstash Redis Search পরিচয় করিয়েছি, একটি রাস্ট-বেসড, অত্যন্ত দ্রুত এবং এফিশিয়েন্ট উপায় Redis ডেটা সার্চ করার জন্য। Redis Search-এ, আমরা 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 কীভাবে তাদের অ্যাসিস্ট্যান্টের ফাইলসিস্টেম বানিয়েছিল সেটা থেকে অনুপ্রাণিত হয়ে, আমরা একটি রেডিস-ব্যাকড fs অ্যাডাপ্টার মাউন্ট করি /workspace-এ একটি 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 কলটি সরাসরি Redis-এ যাবে। grep ইন্টারসেপ্ট হবে এবং Redis Search-এ রিডাইরেক্ট হবে।

এজেন্টের পেরস্পেক্টিভ থেকে এটি শুধু একটি শেল। ls, cat, grep, find, সব কাজ করে। যখন আমরা এটাকে Vercel AI SDK-তে একটি bash টুল হিসেবে রাখি, আমাদের একটি এজেন্ট থাকে যা একটি কোডবেস এক্সপ্লোর করতে পারে যা সম্পূর্ণরূপে Redis-এ বাস করে।

আমি এই আইডিয়া কীভাবে পেলাম

একজন্য, উপরে লিংক করা Mintlify-এর দুর্দান্ত আর্টিকেল। এবং দ্বিতীয়জন্য, অধিকাংশ এজেন্ট স্যান্ডবক্স ভারী। আমরা একটি কন্টেইনার বুট করি, একটি ডিস্ক মাউন্ট করি, এবং সেটার সকল খরচ বোঝায় चाहে এজেন্ট একটি ফাইল ছোয়ে বা হাজার।

Redis-এ একটি ভার্চুয়াল ফাইলসিস্টেম সবসময় অন, গ্লোবালি রিপ্লিকেটেড, ডিউরেবল, এবং সবচেয়ে এক্সপেনসিভ অপারেশন (ফাইল জুড়ে সার্চিং) সেটি Redis Search যা দারুণ।

Cheers 🙌 Josh


  1. উচ্চuptime Redis ক্লাস্টারেเช่น PUBSUB এবং ব্লকিং লিস্ট অপারেশন নিশ্চিত করা

  2. HTML DOM KeyboardEvent shiftKey প্রপার্টি

  3. Tkinter Canvas-এর ভেতরে LabelFrame তৈরি করার পদ্ধতি

  4. Android WebView-এ PDF ডকুমেন্ট প্রদর্শন করার পদ্ধতি