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

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

استخدام DeepSeek Harness لأول مرة يشبه الجلوس في سيارة ذكية لأول مرة — لوحة القيادة تبدو معقدة، لكن بمجرد أن تعرف أين المقود والمسرّع، يمكنك بدء القيادة. يأخذك هذا الدرس من الصفر إلى أول محادثة مع DSH Agent.

💡 نصيحة: DSH Agent ليس روبوت محادثة، بل مساعد ذكي يمكنه تشغيل الملفات وتنفيذ الأوامر والبحث في الكود. قدرته الأساسية تكمن في "اتخاذ الإجراء" وليس مجرد "التحدث".

📋 المتطلبات المسبقة: إكمال 02-install.md، تشغيل واجهة DSH Web UI بنجاح

1. ما ستتعلمه

سير عمل واجهة الويب


2. مقدمة واجهة الويب

(1) المناطق الأربع الرئيسية

تتكون واجهة DSH Web UI من أربع مناطق أساسية:

ar تخطيط واجهة الويب

100%
graph TB
    subgraph DSH Web UI
        A[يسار: قائمة الجلسات]
        B[وسط: منطقة المحادثة]
        C[يمين: لوحة الأدوات]
        D[أعلى: شريط التحكم<br/>الوضع + النموذج + الإعدادات]
    end
    D --> B
    A --> B
    B --> C
المنطقة الموضع الوظيفة
قائمة الجلسات يسار عرض الجلسات السابقة؛ دعم الإنشاء والبحث والحذف
منطقة المحادثة وسط منطقة التفاعل الرئيسية؛ إرسال الرسائل، عرض الردود ونتائج تنفيذ الأدوات
لوحة الأدوات يمين عرض تفاصيل استدعاءات الأدوات في الوقت الفعلي، إجراءات الموافقة، سجلات التنفيذ
شريط التحكم أعلى تبديل الوضع، اختيار النموذج، دخول الإعدادات

(2) تفاصيل شريط التحكم العلوي

يحتوي شريط التحكم العلوي على:

TEXT 📖 للعرض فقط
┌──────────────────────────────────────────────────┐
│ [Standard ▼]  [deepseek-chat ▼]  ⚙️  📋  ❓  │
└──────────────────────────────────────────────────┘
   ↑اختيار الوضع   ↑اختيار النموذج   ↑الإعدادات ↑السجلات ↑المساعدة

(3) تفاصيل منطقة المحادثة

منطقة المحادثة هي منطقة التفاعل الأساسية. كل رسالة قد تحتوي على:

TEXT 📖 للعرض فقط
┌─────────────────────────────────────────┐
│ 👤 Alice                                │
│ ساعدني في تحليل بنية المشروع            │
│ في الدليل الحالي                        │
├─────────────────────────────────────────┤
│ 🤖 Agent                                │
│ 🔍 استخدام أداة: search                 │
│   → البحث في /home/alice/project...     │
│ ✅ وُجد 15 ملفًا                        │
│                                         │
│ هذا المشروع تطبيق Express.js.           │
│ البنية الرئيسية:                        │
│ - src/routes/ — تعريفات المسارات        │
│ - src/models/ — نماذج البيانات          │
│ - src/middleware/ — الوسائط              │
└─────────────────────────────────────────┘

3. اختيار مساحة العمل

(1) غرض مساحة العمل

مساحة العمل هي الدليل الجذر لعمليات Agent. جميع عمليات الملفات وأوامر Shell نسبية إليها:

ar اختيار مساحة العمل

BASH
# مساحة العمل تحدد "مجال رؤية" Agent
/home/alice/project     ← Agent يمكنه رؤية الملفات في هذا الدليل فقط
├── src/
├── package.json
└── README.md

(2) اختيار مساحة العمل

عند أول تشغيل، يطلب منك DSH اختيار مساحة عمل:

TEXT 📖 للعرض فقط
📂 اختر مساحة العمل
┌──────────────────────────────────────┐
│ ○ /home/alice/project               │
│ ○ /home/alice/another-repo          │
│ ● أدخل مسارًا مخصصًا...              │
└──────────────────────────────────────┘

يمكنك أيضًا التبديل في أي وقت من الإعدادات:

BASH
# تعيين مساحة العمل مسبقًا عبر متغير بيئة
export DSH_WORKSPACE="/home/alice/my-project"

# أو في واجهة الويب: الإعدادات → مساحة العمل → تغيير

(3) مساحة العمل و Sandbox

تعمل مساحة العمل مع آلية Sandbox لتحديد نطاق عمليات Agent:

100%
graph TB
    W[مساحة العمل /home/alice/project] -->|مسموح| A1[قراءة الملفات]
    W -->|مسموح| A2[تعديل الملفات]
    W -->|مسموح| A3[تنفيذ الأوامر]
    OUT[خارج مساحة العمل /etc/passwd] -->|مرفوض| B1[قراءة]
    OUT -->|مرفوض| B2[تعديل]

4. المحادثة الأولى

(1) دع Agent يحلل مستودعًا

بعد اكتمال اختيار مساحة العمل، نرسل رسالتنا الأولى:

ar المحادثة الأولى

TEXT 📖 للعرض فقط
Placeholder for user input

عملية الرد الكاملة للـ Agent:

TEXT 📖 للعرض فقط
🤖 Agent: سأساعدك في تحليل هذا المشروع.

🔍 استخدام أداة: search
  → نمط: *
  → المسار: /home/alice/project
  → أقصى عمق: 3

🔍 استخدام أداة: file_edit (قراءة)
  → الملف: package.json
  → الإجراء: قراءة

📊 نتائج التحليل:

1. حزمة التقنيات:
   - بيئة التشغيل: Node.js 20.x
   - الإطار: Express 4.18
   - قاعدة البيانات: PostgreSQL (pg 8.12)
   - الاختبار: Jest 29.x

2. بنية الدليل:
   src/
   ├── routes/    — 8 ملفات مسارات
   ├── models/    — 5 نماذج بيانات
   ├── middleware/ — 3 وسائط
   └── utils/     — دوال مساعدة

3. اقتراحات:
   - تعريفات أنواع TypeScript مفقودة
   - يُنصح بإضافة طبقة src/services/ لفصل منطق الأعمال

(2) عملية تنفيذ أدوات Agent

يتم عرض كل استدعاء أداة في الوقت الفعلي في لوحة الأدوات على اليمين:

ar لوحة الأدوات

TEXT 📖 للعرض فقط
│                                      │
│ 🔍 search                            │
│ ├─ الحالة: ✅ مكتمل               │
│ ├─ المدة: 0.3ث                    │
│ └─ الملفات الموجودة: 23                   │
│                                      │
│ 📄 file_edit (قراءة)                  │
│ ├─ الحالة: ✅ مكتمل               │
│ ├─ المدة: 0.1ث                    │
│ └─ الملف: package.json (1.2KB)        │
│                                      │
│ 📊 إجمالي الأدوات: 2                    │
│ 📊 إجمالي الوقت: 0.4ث                  │
└──────────────────────────────────────┘

(3) مسار تنفيذ الأدوات

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

100%
graph LR
    A[pre-execute<br/>التحقق من المعاملات<br/>فحص الصلاحيات] --> B[execute<br/>التنفيذ الفعلي]
    B --> C[post-execute<br/>معالجة النتائج<br/>تسجيل السجلات]
TYPESCRIPT
// كود زائف لمسار تنفيذ الأدوات
async function executeTool(tool, params) {
  // 1. pre-execute: التحقق + الموافقة
  await preExecute(tool, params);
  
  // 2. execute: التنفيذ الفعلي
  const result = await tool.execute(params);
  
  // 3. post-execute: تسجيل السجلات
  await postExecute(tool, params, result);
  
  return result;
}

5. آلية نوافذ الموافقة

(1) لماذا الحاجة للموافقة

يمتلك Agent قدرات تشغيلية قوية (تعديل الملفات، تنفيذ الأوامر)، لكن العمليات غير السليمة قد تسبب أضرارًا. آلية الموافقة تتيح للمستخدمين التأكيد قبل أن ينفذ Agent عمليات خطيرة.

ar آلية نوافذ الموافقة

(2) ▶ مثال 2

عندما يريد Agent تعديل ملف، تعرض واجهة الويب نافذة موافقة:

TEXT 📖 للعرض فقط
┌─ ⚠️ الموافقة مطلوبة ───────────────────┐
│                                            │
│ Agent يريد:                            │
│ 📝 تعديل ملف: src/index.ts                 │
│                                            │
│ التغييرات:                                   │
│ - سطر 12: إضافة عبارة import            │
│ - سطر 45: تعديل معالج الأخطاء            │
│                                            │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐    │
│ │  ✅ سماح │ │ 🔁 دائمًا│ │  ❌ رفض │    │
│ └──────────┘ └──────────┘ └──────────┘    │
└────────────────────────────────────────────┘

معاني الخيارات الثلاثة:

الخيار المعنى حالة الاستخدام
سماح السماح هذه المرة؛ لا يزال يتطلب موافقة في المرة القادمة عملية لمرة واحدة
دائمًا السماح دائمًا بهذا النوع من العمليات؛ لا مزيد من النوافذ المنبثقة أنواع عمليات موثوقة
رفض رفض هذه العملية عمليات غير مرغوب فيها

(3) إعداد سياسة الموافقة

يمكنك تعيين سياسات الموافقة مسبقًا في الإعدادات:

YAML
# dsh.config.yaml
approval:
  # قراءة الملفات: السماح دائمًا
  file_read: always
  
  # تعديل الملفات: تتطلب موافقة
  file_edit: ask
  
  # أوامر Shell: بناءً على مستوى الخطورة
  shell:
    safe_commands: always     # ls, cat, grep, إلخ
    unsafe_commands: ask      # rm, chmod, sudo, إلخ
    dangerous_commands: deny  # rm -rf /, dd, إلخ
  
  # عمليات البحث: السماح دائمًا
  search: always

(4) علاقة وضع Sandbox بالموافقة

وضع Sandbox سلوك الموافقة مستوى المخاطر
strict جميع العمليات تتطلب موافقة 🟢 آمن
permissive العمليات الخطيرة فقط تتطلب موافقة 🟡 متوسط
off بدون موافقة؛ Agent يعمل بحرية 🔴 مخاطر عالية
BASH
# تعيين وضع Sandbox
export DSH_SANDBOX=strict    # الأكثر أمانًا
export DSH_SANDBOX=permissive # الافتراضي
export DSH_SANDBOX=off        # غير موصى به

6. تطبيق عملي: تفاعل Agent كامل

(1) وصف السيناريو

تريد Alice أن يقوم Agent بإضافة نقطة نهاية فحص الصحة لمشروعها.

ar تفاعل Agent كامل

(2) ▶ مثال 2

TEXT 📖 للعرض فقط
👤 Alice: أنشئ health.ts تحت src/routes/، أضف نقطة نهاية GET /health
        تُرجع { status: "ok", timestamp: Date.now() }

🤖 Agent: سأنشئ نقطة نهاية فحص الصحة لك.

📝 استخدام أداة: file_edit
  → الإجراء: إنشاء
  → المسار: src/routes/health.ts
  → المحتوى: 
    import { Router } from 'express';
    const router = Router();
    router.get('/health', (_req, res) => {
      res.json({ status: 'ok', timestamp: Date.now() });
    });
    export default router;

⚠️ الموافقة مطلوبة: إنشاء ملف src/routes/health.ts
  → [Alice نقر سماح]

✅ تم إنشاء الملف: src/routes/health.ts

الآن نحتاج لتسجيل هذا المسار في app.ts:

📝 استخدام أداة: file_edit
  → الإجراء: تعديل
  → المسار: src/app.ts
  → التغييرات: 
    + import healthRouter from './routes/health';
    + app.use('/health', healthRouter);

⚠️ الموافقة مطلوبة: تعديل ملف src/app.ts
  → [Alice نقر سماح]

✅ تم تعديل الملف: src/app.ts

تم! أُضيفت نقطة نهاية فحص الصحة. اختبرها على GET /health.

(3) ▶ مثال 3

TEXT 📖 للعرض فقط
┌─ لوحة الأدوات ────────────────────────┐
│ 📝 file_edit (إنشاء)                │
│ ├─ المسار: src/routes/health.ts        │
│ ├─ الحالة: ✅ موافق عليه ومكتمل    │
│ └─ المدة: 0.2ث                    │
│                                      │
│ 📝 file_edit (تعديل)                  │
│ ├─ المسار: src/app.ts                  │
│ ├─ التغييرات: +2 سطر                 │
│ ├─ الحالة: ✅ موافق عليه ومكتمل    │
│ └─ المدة: 0.1ث                    │
└──────────────────────────────────────┘

7. إدارة الجلسات

(1) إنشاء جلسة جديدة

TEXT 📖 للعرض فقط
قائمة الجلسات اليسرى → انقر زر + → جلسة جديدة

تُسمى الجلسات تلقائيًا (بناءً على محتوى أول محادثة)، أو يمكن إعادة تسميتها يدويًا.

ar إدارة الجلسات

(2) تبديل الجلسات

انقر جلسات مختلفة في قائمة الجلسات اليسرى للتبديل. كل جلسة لها بشكل مستقل:

(3) استمرار الجلسات

سجلات جلسات DSH تستخدم وضع الإلحاق فقط:

ar سجل الجلسات

TYPESCRIPT
// كل SessionEvent يُحفظ تلقائيًا
interface SessionEvent {
  type: 'user_message' | 'agent_message' | 'tool_call' | 'tool_result' | 'approval';
  timestamp: number;
  data: Record<string, unknown>;
}

بعد إغلاق المتصفح، لا تُفقد بيانات الجلسة — فقط أعد فتح واجهة الويب لاستعادتها.

ar Sandbox ومساحة العمل


❓ أسئلة شائعة

س ماذا لو لم يستجب Agent؟
ج تحقق: 1) هل API Key مُعد بشكل صحيح؛ 2) هل الشبكة متصلة بنقطة نهاية LLM؛ 3) هل هناك رسائل خطأ في لوحة الأدوات على اليمين. يمكنك محاولة إعادة تشغيل DSH.
س نوافذ الموافقة متكررة جدًا. كيف أقللها؟
ج عيّن أنواع العمليات الموثوقة إلى always في الإعدادات، أو بدّل إلى وضع Sandbox permissive. لا نوصي باستخدام وضع off في بيئات غير معزولة.
س Agent عدّل الملف الخاطئ. ماذا أفعل؟
ج التأثيرات الجانبية لـ DSH قابلة للعكس. ابحث عن العملية المقابلة في لوحة الأدوات وانقر زر التراجع. يمكنك أيضًا الاستعادة لأي نقطة زمنية عبر عرض Trajectory.
س كيف يمكنني معرفة ما ينفذه Agent حاليًا؟
ج لوحة الأدوات على اليمين تعرض حالة استدعاء الأداة الحالي في الوقت الفعلي. إذا تعلق Agent، ستعرض اللوحة السبب المحدد للانتظار (مثل انتظار الموافقة، انتهاء مهلة الشبكة، إلخ).
س هل يمكنني تغيير مساحة العمل إذا اخترت الخاطئة؟
ج نعم. انقر الإعدادات → مساحة العمل → تغيير في الأعلى للتبديل. سجل المحادثات الحالي لا يتأثر، لكن عمليات الملفات اللاحقة ستكون بناءً على مساحة العمل الجديدة.
س هل تدعم واجهة الويب عدة مستخدمين في وقت واحد؟
ج DSH يعمل افتراضيًا في وضع المستخدم الواحد. الوصول متعدد المستخدمين يتطلب تشغيل نسخ DSH منفصلة (على منافذ مختلفة) لكل مستخدم، أو انتظار الدعم الرسمي لعدة مستخدمين.

📖 ملخص


📝 تمارين

1. ⭐ أساسي: شغّل واجهة DSH Web UI، اختر مساحة عمل، وأرسل لـ Agent "ساعدني في عرض محتوى package.json الخاص بالمشروع". سجّل الأدوات التي استخدمها Agent.

2. ⭐⭐ متوسط: اطلب من Agent إنشاء ملف hello-dsh.txt في مساحة العمل بمحتوى "Hello, DSH!". راقب نافذة الموافقة المنبثقة، جرّب كل من السماح والرفض، وسجّل السلوكيات المختلفة اللاحقة.

3. ⭐⭐⭐ تحدٍ: اضبط وضع Sandbox permissive واطلب من Agent إكمال ثلاث عمليات في وقت واحد: 1) إنشاء ملف جديد؛ 2) تعديل ملف موجود؛ 3) تنفيذ أمر Shell ls -la. سجّل أي العمليات أثارت نوافذ موافقة وأيها لم يفعل، وحلل السبب.

Web-Tutorial.com

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

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

100%