طراحی Helium Agent

Helium Agent یک عامل هوش مصنوعی سبک‌وزن است که با Python ساخته شده است. این عامل در ترمینال شما اجرا می‌شود و برای کمترین میزان پیچیدگی طراحی شده است.

در اینجا تصمیمات اصلی طراحی در طول فرآیند ساخت آورده شده است:

• معماری سیستم از یک معماری تخت (flat) استفاده می‌کند. من از فریم‌ورک‌های سنگین و درخت‌های وابستگی عمیق اجتناب می‌کنم. به جای استفاده از function calling در OpenAI، از تگ‌های XML مانند <action> استفاده می‌کنم. این کار باعث می‌شود عامل نسبت به مدل مستقل (model agnostic) باشد؛ یعنی می‌توانید از هر LLM استفاده کنید.

• ترکیب‌پذیری از طریق تزریق وابستگی (Dependency Injection) من از یک حلقه ساده به نام AgenticLoop استفاده می‌کنم. این حلقه دو ورودی می‌پذیرد: یک فراخوان‌کننده مدل (model caller) و یک اجراکننده ابزار (tool executor). همین یک انتخاب، چهار حالت مختلف را امکان‌پذیر می‌کند:

  • چت عمومی
  • جریان‌های کاری کدنویسی
  • زیر-عامل‌ها (Subagents)
  • مهارت‌های سفارشی من از زیرکلاس‌ها (subclasses) یا الگوهای پیچیده استفاده نمی‌کنم. فقط دو تابع ساده.

• مدیریت وضعیت (State Management) Helium یک ابزار تک‌کاربره است. من از Singletonهای سطح ماژول برای تاریخچه گفتگو و حافظه استفاده می‌کنم. وضعیت سراسری (Global state) ساده‌ترین راه برای نمایش یک نشست (session) کاربری واحد است. این کار از مهندسی بیش از حد (over-engineering) جلوگیری می‌کند.

• دروازه‌های ایمنی (Safety Gates) من از یک سیستم سه لایه برای اجرای ابزارها استفاده می‌کنم:

  • ایمن (Safe): وظایفی مانند خواندن فایل‌ها یا جستجو را به‌صورت خودکار اجرا می‌کند.
  • پرخطر (Risky): برای وظایفی مانند نوشتن فایل‌ها، نیاز به اجازه کاربر دارد.
  • مشروط (Conditional): دستوراتی مانند اسکریپت‌های bash را برای بررسی خطر بازرسی می‌کند. این کار از حذف فایل‌های شما توسط یک مدل دچار توهم (hallucinating) جلوگیری می‌کند.

• ارتباطات من به جای استفاده از OpenAI SDK، از درخواست‌های خام HTTP استفاده می‌کنم. این کار وابستگی‌ها را کاهش داده و کد را شفاف نگه می‌دارد. شما دقیقاً می‌بینید چه چیزی به API ارسال می‌شود.

• سیستم مهارت (Skill System) مهارت‌ها صرفاً فایل‌های Markdown هستند. شما می‌توانید با نوشتن یک فایل متنی حاوی YAML frontmatter، یک مهارت جدید اضافه کنید. هیچ API پیچیده‌ای برای ثبت (registration) وجود ندارد. این موضوع باعث می‌شود سیستم پلاگین برای هر کسی استفاده از آن را آسان کند.

• درس‌های آموخته شده

  1. تزریق وابستگی، ترکیب‌پذیری ارزان‌قیمتی را فراهم می‌کند.
  2. پرامپت سیستم (system prompt) همان API شماست. با آن مانند یک قطعه کد درجه‌یک برخورد کنید.
  3. اگر برای رفع وابستگی‌های چرخشی (circular dependencies) به importهای تنبل (lazy imports) نیاز دارید، مرزهای ماژول شما اشتباه است. به جای آن، معماری را اصلاح کنید.

سادگی مقیاس‌پذیر است. ساده‌ترین راه حلی را که برای مورد استفاده خاص شما کار می‌کند، انتخاب کنید.

منبع: https://dev.to/debmalyasen34/designing-helium-agent-1b39

انجمن یادگیری اختیاری: https://t.me/GyaanSetuAi