Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Redis

ออกแบบ In-Memory Filesystem ระดับเร็วสำหรับ AI Agents ด้วย Redis

AI agents อย่าง Codex หรือ Claude Code เป็น เก่งมากที่การรัน bash commands การค้นหาผ่าน filesystems, grepping, ได้ context ผ่าน shell

ดังนั้นผมอยากลอง: ถ้าทั้ง filesystem ที่ AI agent ทำงานอยู่ใน Redis แทน disk จะเป็นอย่างไร? ถ้าในมุมมองของ AI agent มันดูเหมือนใช้ filesystem อื่นๆ แต่จริงๆ มันคือ in-memory store ที่เร็วมาก?

นี่คือวิธีที่ผมอยากให้มันทำงาน 👇

ออกแบบ In-Memory Filesystem ระดับเร็วสำหรับ AI Agents ด้วย Redis

เมื่อ agent รัน grep command (ซึ่งพวกเขาเก่งมาก) เรา intercept มันด้วย library just-bash ของ Vercel และแปลงเป็น Redis Search query

แบบนั้น เราไม่ต้องการ sandboxes สำหรับ read-only access และ (ทฤษฎีแล้ว) ควร เร็วมาก และ Mintlify ทำอย่างนี้ไปแล้ว

The Idea (ไอเดีย)

เพื่อดูว่าสามารถทำงานได้ไหม ผมแยก logic ออกเป็น 3 ส่วน

  1. แต่ละไฟล์คือ Redis JSON document เราเก็บ path, content, size, timestamps ทั้งหมดใต้ key เดียว
  2. Manifest ติดตาม directory tree Redis key หนึ่งเก็บโครงสร้างโฟลเดอร์ทั้งหมด ทำให้ ls และ tree ไม่ต้อง scan
  3. Redis Search สำหรับ grepping ทำให้ grep ไม่ต้องอ่านทุกไฟล์เพื่อหา match

และแค่นี้! ด้วยสิ่งเหล่านี้เพียงไม่กี่อย่าง เราเข้าใกล้ full parity ของ regular (read-only) filesystem ได้มาก แต่เร็วกว่ามาก ผมตัดสินใจไม่ implement writes ตอนนี้

The Biggest Challenge: Grepping (ความท้าทาย最大: Grepping)

Commands อย่าง cat หรือ ls ค่อนข้าง straightforward เรา entweder อ่านไฟล์เดียวทั้งหมด หรือ list directory structure ทั้งคู่ง่ายกับ Redis Commands อย่าง sed -n '1,240p' ซับซ้อนกว่า แต่เราทำได้โดยใช้ Sorted Sets

Grepping แตกต่างออกไป grep -R "oauth" /workspace ปกติต้องอ่านทุกไฟล์ใต้ directory นั้น ใน virtual filesystem หมายถึง pull ทุก document ออกจาก Redis แค่เพื่อเช็คว่ามีคำหรือไม่ นั่นช้าและแพง

แตเรา introduce Upstash Redis Search ไปเมื่อเร็วๆ นี้ rust-based, extremely fast และ efficient ทางค้นหาผ่าน Redis data ด้วย Redis Search เราสามารถ intercept grep ก่อนรัน แปลงเป็น query และได้ fast results โดยไม่ต้อง fetch files

Search query ดูประมาณนี้:

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

Agent ยังเห็น output เดียวกับ shell ปกติ

การให้ Agent ได้ Shell

ชิ้นสุดท้ายคือ wiring นี้เข้ากับ just-bash ให้ agent รัน commands ติดได้ Inspired by how Mintlify built their assistant's filesystem เรา mount Redis-backed fs adapter ที่ /workspace บน MountableFs:

import { InMemoryFs, MountableFs } from "just-bash"; const mountableFs = new MountableFs({ base: new InMemoryFs() }); mountableFs.mount("/workspace", redisFs); // redisFs คุยกับ Upstash const bash = new Bash({ fs: mountableFs, cwd: "/workspace" });

เมื่อ agent รัน cat /workspace/src/index.ts readFile call นั้นไปตรง Redis grep ถูก intercept และ redirect ไป Redis Search

จากมุมมองของ agent มันแค่ shell ls, cat, grep, find ทุกอย่างทำงาน ตอนเราใส่เข้า Vercel AI SDK เป็น bash tool เรามี agent ที่ explore codebase ที่อยู่ทั้งหมดใน Redis

ผมได้ไอเดียอย่างไร

หนึ่ง บทความเก๋ของ Mintlify ที่ลิงก์ข้างต้น สอง ส่วนใหญ่ agent sandboxes หนัก เรา boot container, mount disk และจ่ายค่าใช้จ่ายทั้งหมด ไม่ว่าจะ agent สัมผัสไฟล์เดียวหรือพัน

Virtual filesystem ด้วย Redis always on, globally replicated, durable และ expensive operation ที่สุด (searching across files) เป็นสิ่งที่ Redis Search เก่ง

Cheers 🙌 Josh