DeepSeek Harness: استخدام الأدوات

آخر تحديث: 2026-08-31

الأدوات هي "أيد وأقدام" Agent — بدون أدوات، يمكن لـ Agent فقط "الكلام"؛ مع الأدوات، يمكنه قراءة/كتابة الملفات وتنفيذ الأوامر والبحث في الكود ووضع الخطط. نظام أدوات DSH مبني على بنية إضافات Cordis — كل أداة هي إضافة، قابلة للتوسع والاستبدال والتركيب.

💡 نصيحة: نظام أدوات DSH يستخدم مسارًا من ثلاث مراحل — pre-execute (التحقق/الموافقة) → execute (التنفيذ الفعلي) → post-execute (تسجيل السجلات). فهم هذا المسار يمنحك تحكمًا كاملاً في سلوك الأدوات.

📋 المتطلبات المسبقة: إكمال 05-modes.md، إلمام بأوضاع التشغيل الأربعة

1. ما ستتعلمه

خط أنابيب الأدوات


2. نظرة عامة على الأدوات المدمجة

(1) ToolOverview

100%
graph TB
    subgraph DSHTools[أدوات DSH المدمجة]
        FE[file_edit<br/>قراءة/كتابة وتعديل الملفات]
        SH[shell<br/>تنفيذ أوامر Shell]
        SR[search<br/>البحث في الكود والملفات]
        SK[skills<br/>استدعاء المهارات]
        PL[plan<br/>إنشاء وتتبع الخطط]
        SB[sandbox<br/>إدارة بيئة Sandbox]
    end

(2) مقارنة وظائف الأدوات

الأداة الوظيفة مستوى الأمان تتطلب موافقة
file_edit إنشاء وقراءة وتعديل وحذف الملفات 🔴 عالي نعم
shell تنفيذ أوامر Shell 🔴 عالي نعم
search البحث في الملفات ومحتوى الكود 🟢 منخفض لا
skills استدعاء قوالب مهارات محددة مسبقًا 🟡 متوسط يعتمد
plan إنشاء وتتبع خطط التنفيذ 🟢 منخفض لا
sandbox إدارة بيئة Sandbox 🟡 متوسط نعم

3. file_edit — أداة عمليات الملفات

(1) العمليات المدعومة

file_edit هي الأداة الأكثر استخدامًا، تدعم أربع عمليات:

العملية الوصف تتطلب موافقة
read قراءة محتوى الملف لا تحتاج موافقة
create إنشاء ملف جديد تتطلب موافقة
edit تعديل ملف موجود تتطلب موافقة
delete حذف ملف تتطلب موافقة

(2) قراءة الملفات

▶ مثال 1: قراءة محتوى ملف

TYPESCRIPT
// معاملات استدعاء file_edit من Agent
{
  action: "read",
  path: "src/config.ts",
  encoding: "utf-8"
}

بعد القراءة، يحلل Agent محتوى الملف تلقائيًا:

TEXT 📖 للعرض فقط
🤖 Agent:
🔍 استخدام أداة: file_edit (قراءة)
  → المسار: src/config.ts
  → الحجم: 1.2KB

ملف الإعداد هذا يصدّر ثلاثة إعدادات:
- DATABASE_URL: سلسلة اتصال قاعدة البيانات
- PORT: منفذ الخدمة (الافتراضي 3000)
- LOG_LEVEL: مستوى السجل (الافتراضي info)

(3) إنشاء الملفات

▶ مثال 2: إنشاء ملف جديد

TYPESCRIPT
// Agent يستدعي file_edit لإنشاء ملف
{
  action: "create",
  path: "src/utils/logger.ts",
  content: "export function log(level: string, msg: string) {\n  const ts = new Date().toISOString();\n  console.log(`[${ts}] [${level}] ${msg}`);\n}"
}

إنشاء ملف يثير نافذة موافقة منبثقة؛ لا يُكتب الملف إلا بعد تأكيد المستخدم.

(4) تعديل الملفات

▶ مثال 3: تعديل ملف (وضع diff)

يستخدم تعديل ملفات DSH وضع diff، يعدل فقط الأجزاء التي تحتاج للتغيير:

TYPESCRIPT
// Agent يستدعي file_edit لتعديل ملف
{
  action: "edit",
  path: "src/app.ts",
  changes: [
    {
      type: "insert",
      line: 5,
      content: "import { log } from './utils/logger';"
    },
    {
      type: "replace",
      line: 23,
      oldContent: "console.log('Server started');",
      newContent: "log('info', 'Server started');"
    }
  ]
}

نافذة الموافقة المنبثقة تعرض عرض diff:

TEXT 📖 للعرض فقط
⚠️ الموافقة مطلوبة: تعديل ملف src/app.ts

  +5 | import { log } from './utils/logger';
  
  -23| console.log('Server started');
  +23| log('info', 'Server started');

  [سماح] [دائمًا] [رفض]

(5) التعديل القابل للعكس

جميع تعديلات file_edit قابلة للعكس. يحفظ DSH تلقائيًا لقطة للملف قبل التعديل:

100%
graph LR
    A[لقطة قبل التعديل] --> B[تطبيق التعديلات]
    B --> C[حالة بعد التعديل]
    C -->|تراجع| A

4. shell — أداة أوامر Shell

(1) الاستخدام الأساسي

▶ مثال 4: تنفيذ أمر آمن

TYPESCRIPT
// Agent ينفذ أمر ls
{
  command: "ls -la src/",
  cwd: "/home/alice/project",
  timeout: 30000
}

(2) تصنيف أمان الأوامر

يصنف DSH أوامر Shell حسب مستوى الخطورة:

المستوى أمثلة الأوامر سياسة الموافقة
آمن ls، cat، grep، head، wc سماح تلقائي
متوسط npm install، git add، mkdir تتطلب موافقة
خطير rm، chmod، sudo، dd تتطلب موافقة + تأكيد
محظور rm -rf /، mkfs، > /dev/sda رفض تلقائي

▶ مثال 5: تنفيذ أمر مخاطر متوسطة

TYPESCRIPT
// Agent ينفذ npm view (عرض معلومات الحزمة، مخاطر متوسطة)
{
  command: "npm view jsonwebtoken",
  cwd: "/home/alice/project",
  timeout: 120000
}

نافذة الموافقة المنبثقة:

TEXT 📖 للعرض فقط
⚠️ الموافقة مطلوبة: تنفيذ أمر shell

  الأمر: npm view jsonwebtoken
  دليل العمل: /home/alice/project
  الحزم المقدرة: 1

  [سماح] [دائمًا لـ npm] [رفض]

(3) المهلة والمقاطعة

TYPESCRIPT
// معاملات أداة shell
interface ShellParams {
  command: string;
  cwd?: string;
  timeout?: number;      // المهلة بالمللي ثانية، الافتراضي 30000
  env?: Record<string, string>;  // متغيرات بيئة إضافية
}

الأوامر طويلة التشغيل ستُقاطع بالمهلة:

TEXT 📖 للعرض فقط
🤖 Agent:
🔧 استخدام أداة: shell
  → الأمر: npm run build
  → المهلة: 120000ms

⏱️ اكتمل البناء في 45ث
  → المخرج: بناء ناجح. 15 ملفًا مُولَّدًا.

5. search — أداة البحث

(1) أوضاع البحث

تدعم أداة البحث أوضاع بحث متعددة:

الوضع الوصف مثال
بحث الملفات البحث حسب اسم/مسار الملف *.test.ts
بحث المحتوى البحث حسب تعبير محتوى import.*from
بحث الرموز البحث عن تعريفات الدوال/الأصناف class UserService

▶ مثال 6: البحث في الملفات

TYPESCRIPT
// البحث عن جميع ملفات الاختبار
{
  pattern: "*.test.ts",
  type: "file",
  maxResults: 50
}

▶ مثال 7: البحث في محتوى الكود

TYPESCRIPT
// البحث عن جميع عبارات import
{
  pattern: "import.*from 'express'",
  type: "content",
  filePattern: "*.ts",
  maxResults: 100
}

(2) عرض نتائج البحث

TEXT 📖 للعرض فقط
🤖 Agent:
🔍 استخدام أداة: search
  → النمط: import.*from 'express'
  → النوع: محتوى
  → النتائج: 8 تطابقات

وُجد في:
  src/app.ts:1         — import express from 'express';
  src/routes/users.ts:3 — import express from 'express';
  src/routes/auth.ts:2  — import express from 'express';
  ...

6. skills — أداة المهارات

(1) مفهوم المهارات

المهارات هي قوالب مهام محددة مسبقًا تغلف تدفقات عمل كاملة للعمليات الشائعة:

100%
graph LR
    USER[طلب المستخدم] --> SK[قالب مهارة]
    SK --> T1[استدعاء أداة 1]
    SK --> T2[استدعاء أداة 2]
    SK --> T3[استدعاء أداة 3]

(2) المهارات المدمجة

المهارة الوصف العمليات المتضمنة
add-test إضافة اختبارات لدالة search → file_edit (إنشاء)
refactor استخراج دوال/أصناف file_edit (قراءة) → file_edit (تعديل × N)
debug تصحيح أخطاء search → shell → file_edit
document إضافة تعليقات توثيقية file_edit (قراءة) → file_edit (تعديل)

▶ مثال 8: استدعاء مهارة

TYPESCRIPT
// استدعاء مهارة add-test
{
  skill: "add-test",
  params: {
    target: "src/utils/format.ts::formatDate",
    framework: "jest"
  }
}

7. plan — أداة التخطيط

(1) إنشاء وتتبع الخطط

تُستخدم أداة plan لإنشاء وتتبع خطط تنفيذ المهام متعددة الخطوات:

▶ مثال 9: إنشاء خطة تنفيذ

TYPESCRIPT
// إنشاء خطة
{
  action: "create",
  steps: [
    { id: 1, desc: "تثبيت التبعيات", tool: "shell" },
    { id: 2, desc: "إنشاء وحدة المصادقة", tool: "file_edit" },
    { id: 3, desc: "تحديث app.ts", tool: "file_edit" },
    { id: 4, desc: "كتابة الاختبارات", tool: "file_edit" },
    { id: 5, desc: "تشغيل الاختبارات", tool: "shell" }
  ]
}

▶ مثال 10: تحديث حالة الخطة

TYPESCRIPT
// تعليم الخطوة كمكتملة
{
  action: "update",
  stepId: 1,
  status: "completed",
  result: "تم تثبيت jsonwebtoken، bcryptjs"
}

(2) أداة plan ووضع PTC

أداة plan هي أساس وضع PTC:

100%
graph TD
    PTC[وضع PTC] --> PLAN[أداة plan تنشئ الخطة]
    PLAN --> USER[المستخدم يراجع]
    USER --> EXEC[تنفيذ الخطوات حسب الخطة]
    EXEC --> UPDATE[أداة plan تُحدث الحالة]
    UPDATE --> DONE{هل اكتمل الكل؟}
    DONE -->|لا| EXEC
    DONE -->|نعم| REPORT[إخراج الملخص]

8. مسار تنفيذ الأدوات

(1) مسار من ثلاث مراحل

يمر كل استدعاء أداة بثلاث مراحل:

100%
graph LR
    PRE[pre-execute<br/>التحقق من المعاملات<br/>فحص الصلاحيات<br/>نافذة الموافقة] --> EXEC[execute<br/>التنفيذ الفعلي<br/>التقاط المخرجات] --> POST[post-execute<br/>تسجيل السجلات<br/>إصدار الأحداث<br/>تحديث الحالة]

▶ مثال 11: كود زائف للمسار

TYPESCRIPT
async function executeToolPipeline(tool: Tool, params: Params): Promise<Result> {
  // المرحلة 1: pre-execute
  const preResult = await preExecute(tool, params);
  if (preResult.denied) {
    throw new ToolDeniedError(preResult.reason);
  }

  // المرحلة 2: execute
  const result = await tool.execute(params);

  // المرحلة 3: post-execute
  await postExecute(tool, params, result);
  ctx.emit('tool.executed', { tool: tool.name, params, result });

  return result;
}

(2) مرحلة pre-execute

تتعامل pre-execute مع التحقق والموافقة:

TYPESCRIPT
interface PreExecuteResult {
  allowed: boolean;
  reason?: string;
  modifiedParams?: Params;
}
عنصر التحقق الوصف
التحقق من المعاملات هل تنسيق وأنواع المعاملات صحيحة
فحص الصلاحيات هل يمتلك المستخدم صلاحية تنفيذ هذه العملية
نافذة الموافقة هل العمليات الخطيرة تتطلب تأكيد المستخدم
فحص Sandbox هل العملية ضمن نطاق مساحة العمل

(3) مرحلة post-execute

تتعامل post-execute مع التسجيل والإشعار:

TYPESCRIPT
interface PostExecuteAction {
  log: boolean;           // تسجيل في سجل الجلسة
  emit: boolean;          // إصدار حدث
  updateTrajectory: boolean;  // تحديث Trajectory
  notifyUI: boolean;      // إشعار واجهة الويب بالتحديث
}

9. سياسة موافقة الأدوات

(1) إعداد السياسة

▶ مثال 12: إعداد سياسة الموافقة

YAML
# dsh.config.yaml
approval:
  # السياسة الافتراضية العامة
  default: ask

  # إعدادات حسب الأداة
  tools:
    file_edit:
      read: always          # القراءة مسموحة دائمًا
      create: ask           # الإنشاء يتطلب موافقة
      edit: ask             # التعديل يتطلب موافقة
      delete: ask_with_confirm  # الحذف يتطلب تأكيدًا مزدوجًا
    
    shell:
      safe: always          # الأوامر الآمنة مسموحة دائمًا
      moderate: ask         # الأوامر المتوسطة تتطلب موافقة
      dangerous: deny       # الأوامر الخطيرة مرفوضة تلقائيًا
    
    search:
      default: always       # البحث مسموح دائمًا
    
    skills:
      default: ask          # استدعاءات المهارات تتطلب موافقة
    
    plan:
      default: always       # الخطط مسموحة دائمًا

(2) أوصاف أنماط الموافقة

النمط الوصف حالة الاستخدام
always السماح دائمًا، بدون نافذة منبثقة عمليات آمنة
ask تتطلب موافقة، تأكيد بنافذة منبثقة عمليات خطيرة
ask_with_confirm تتطلب تأكيدًا مزدوجًا عمليات خطيرة للغاية
deny رفض تلقائي عمليات يجب ألا تُسمح أبدًا

10. مقدمة في الأدوات المخصصة

(1) إنشاء أدوات مخصصة

أدوات DSH هي إضافات Cordis، تُكتب بـ TypeScript:

▶ مثال 13: أداة طلب HTTP مخصصة

TYPESCRIPT
import { definePlugin } from '@deepseek-ai/dsh';

export default definePlugin({
  name: 'tool-http-request',
  version: '1.0.0',
  contribute(ctx) {
    ctx.registerTool({
      name: 'http_request',
      description: 'Make HTTP requests to external APIs',
      parameters: {
        type: 'object',
        properties: {
          url: { type: 'string', description: 'Request URL' },
          method: { type: 'string', enum: ['GET', 'POST', 'PUT', 'DELETE'] },
          headers: { type: 'object', description: 'Request headers' },
          body: { type: 'string', description: 'Request body' }
        },
        required: ['url', 'method']
      },
      async execute(params) {
        const response = await fetch(params.url, {
          method: params.method,
          headers: params.headers,
          body: params.body
        });
        return {
          status: response.status,
          body: await response.text()
        };
      }
    });
  }
});

(2) تسجيل الأدوات المخصصة

ضع إضافات الأدوات المخصصة في دليل .dsh/plugins/ الخاص بالمشروع:

TEXT 📖 للعرض فقط
.dsh/
└── plugins/
    └── tool-http-request/
        ├── index.ts
        └── package.json

أو حدد في ملف الإعداد:

YAML
# dsh.config.yaml
plugins:
  - path: "./custom-tools/http-request"
  - path: "./custom-tools/database-query"

(3) موافقة الأدوات المخصصة

تحتاج الأدوات المخصصة أيضًا لتعريف سياسات الموافقة:

TYPESCRIPT
ctx.registerTool({
  name: 'http_request',
  // ...
  approval: {
    level: 'ask',     // تتطلب موافقة افتراضيًا
    rules: [
      { match: { method: 'GET' }, level: 'always' },     // طلبات GET مسموحة تلقائيًا
      { match: { method: 'POST' }, level: 'ask' },       // POST يتطلب موافقة
      { match: { method: 'DELETE' }, level: 'deny' }     // DELETE مرفوض تلقائيًا
    ]
  }
});

❓ أسئلة شائعة

س كم أداة يستدعي Agent في المرة الواحدة؟
ج يعتمد على تعقيد المهمة. الأسئلة والأجوبة البسيطة قد لا تستدعي أي أدوات؛ المهام المعقدة قد تستدعي 5-10 أدوات بالتسلسل. وضع Standard ليس له حد أعلى؛ وضع Minimal محدود بحد أقصى 1.
س ماذا يحدث إذا فشل استدعاء أداة؟
ج Agent يتلقى معلومات الخطأ ويمكنه إعادة المحاولة تلقائيًا أو تعديل استراتيجيته. بعد 3 فشل متتالية، يُبلغ Agent المستخدم ويطلب التوجيه.
س هل يمكنني تعطيل أداة محددة؟
ج نعم. عيّن tools.disabled: ["shell"] في ملف الإعداد لتعطيل أدوات محددة.
س ما الفرق بين search وgrep في shell؟
ج search هي أداة البحث المنظمة المدمجة في DSH التي تفهم بنية دليل المشروع وتدعم أوضاع اسم/محتوى/رمز. shell grep هي بحث نصي عام. نوصي باستخدام search أولاً.
س هل يمكن كتابة الأدوات المخصصة بـ Python؟
ج حاليًا نظام إضافات DSH يدعم TypeScript فقط. أدوات Python يمكن استدعاؤها بشكل غير مباشر عبر أداة shell باستدعاء نصوص Python.
س هل يوجد حد تزامن على تنفيذ الأدوات؟
ج DSH ينفذ الأدوات بشكل تسلسلي افتراضيًا (واحدة تكتمل قبل بدء التالية). هذا لأن الأدوات قد تعتمد على بعضها البعض.

📖 ملخص


📝 تمارين

1. ⭐ أساسي: استخدم DSH Agent لإكمال العمليات التالية: 1) استخدم أداة search للعثور على جميع ملفات TypeScript في المشروع؛ 2) استخدم file_edit لقراءة أحدها. سجّل معاملات ونتائج استدعاءي الأداة.

2. ⭐⭐ متوسط: أعد سياسات موافقة بحيث تكون عمليات قراءة file_edit مسموحة تلقائيًا، وعمليات الإنشاء/التعديل تتطلب موافقة، وعمليات الحذف تتطلب تأكيدًا مزدوجًا. اختبر كل عملية للتحقق من أن سياسات الموافقة تعمل.

3. ⭐⭐⭐ تحدٍ: أنشئ إضافة أداة مخصصة تستعلم عن آخر 5 عمليات commit في مستودع Git الحالي (باستدعاء git log -5 --oneline)، سجلها في DSH، واجعل Agent يستدعيها بنجاح.

Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%