إطار عمل البرمجة (CodingAgent)

CodingAgent هو إطار رفيع — مضمَّن في adk-agent خلف ميزة coding — يربط dev tools، وأداة write_todos للتخطيط، ونص نظام برمجة بسيطًا على LlmAgent عادي. إنه التهيئة بدلًا من LlmAgent، وليس نوعًا جديدًا من الوكيل، لذلك يبقي بناء adk-agent الافتراضي خفيفًا (تجلب الميزة adk-devtools).

البناء الأول

use adk_agent::coding::CodingAgent;
use adk_devtools::Workspace;

let coding = CodingAgent::builder()
    .model(model)                              // any adk-model provider (required)
    .workspace(Workspace::new("./my-repo"))    // sandboxed (required)
    .instruction("Follow the project's existing style; prefer small diffs.") // optional, appended
    .build()?;

let agent = coding.agent();   // Arc<dyn Agent> — hand to a Runner

خيارات المُنشئ:

الطريقةالتأثير
.model(Arc<dyn Llm>)النموذج (مطلوب).
.workspace(Workspace)مساحة العمل التي تقتصر عليها الأدوات (مطلوبة).
.name("…")اسم الوكيل (الافتراضي "coding-agent").
.instruction("…")إرشادات إضافية تُضاف إلى مطالبة الترميز الأساسية.
.tool(Arc<dyn Tool>)تسجيل أداة إضافية (MCP، أداة دالة، …).
.without_todos()تعطيل أداة التخطيط write_todos.

ما الذي تم توصيله

  • مجموعة أدوات التطوير — read/write/edit/glob/grep/bash، ومقيدة ضمن مساحة العمل.

  • write_todos — أداة تخطيط يستخدمها النموذج لتسجيل وتحديث قائمة مهام قصيرة. اقرأها مرة أخرى من harness:

    for todo in coding.todos() {
        println!("[{}] {}", todo.status, todo.content);  // pending | in_progress | completed
    }
  • موجه بسيط — تعليمات أساسية أقل من 1k رمز ("استكشف قبل أن تغيّر"، "اقرأ قبل أن تعدّل"، "تحقق عبر تشغيل الاختبارات"، "تتبّع خطة"), وُضعت صغيرة عمدًا حتى تأتي القدرات من الأدوات والمهارات بدلًا من موجه ضخم.

الحلقة

تشغّل CodingAgent مثل أي agent — عبر Runner. داخل turn واحد، ينفّذ LlmAgent الأساسي بالفعل حلقة plan → act → observe: يستدعي الأدوات، يرى نتائجها، ويواصل حتى ينتهي. مثال نموذجي لـ turn:

write_todos(...)            # plan
glob / grep / read_file     # explore
edit_file / write_file      # change
bash("…test…")              # verify
write_todos(... completed)  # update plan
→ final summary

للعمل متعدد الـ turn، أعد استخدام نفس Runner + session عبر الاستدعاءات، وسيبني agent على عمله السابق (يعيد قراءة الملفات التي كتبها ويعدّلها). راجع مثال coding_agent (وضع multiturn).

الذاكرة والمهارات

لأنه LlmAgent في الأساس، فإن كل ما في ADK يتراكب معًا:

  • أضف MemoryService (مثل bi-temporal knowledge graph) على Runner لتمكين ذاكرة المشروع عبر الجلسات.
  • أضف مهارات lazy عبر adk-skill لتوسيع القدرات من دون تضخيم الموجه.
  • Hooks/guardrails (adk-plugin، adk-guardrail) تتحكم في استدعاءات الأدوات بشكل حتمي.

تشغيله

ينتج harness Arc<dyn Agent>؛ شغّله باستخدام adk-runner (انظر البدء السريع) أو استخدم CLI، الذي يغلّف كل هذا.

التالي: The CLI →