DeepSeek Harness: استخدام الأدوات
آخر تحديث: 2026-08-31
الأدوات هي "أيد وأقدام" Agent — بدون أدوات، يمكن لـ Agent فقط "الكلام"؛ مع الأدوات، يمكنه قراءة/كتابة الملفات وتنفيذ الأوامر والبحث في الكود ووضع الخطط. نظام أدوات DSH مبني على بنية إضافات Cordis — كل أداة هي إضافة، قابلة للتوسع والاستبدال والتركيب.
📋 المتطلبات المسبقة: إكمال 05-modes.md، إلمام بأوضاع التشغيل الأربعة
1. ما ستتعلمه
- قائمة الأدوات المدمجة في DSH ووظائفها
- المراحل الثلاث لمسار تنفيذ الأدوات
- حالات الاستخدام والأمثلة لكل أداة
- إعداد سياسة موافقة الأدوات
- طرق إنشاء الأدوات المخصصة
2. نظرة عامة على الأدوات المدمجة
(1) ToolOverview
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: قراءة محتوى ملف
// معاملات استدعاء file_edit من Agent
{
action: "read",
path: "src/config.ts",
encoding: "utf-8"
}
بعد القراءة، يحلل Agent محتوى الملف تلقائيًا:
🤖 Agent:
🔍 استخدام أداة: file_edit (قراءة)
→ المسار: src/config.ts
→ الحجم: 1.2KB
ملف الإعداد هذا يصدّر ثلاثة إعدادات:
- DATABASE_URL: سلسلة اتصال قاعدة البيانات
- PORT: منفذ الخدمة (الافتراضي 3000)
- LOG_LEVEL: مستوى السجل (الافتراضي info)
(3) إنشاء الملفات
▶ مثال 2: إنشاء ملف جديد
// 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، يعدل فقط الأجزاء التي تحتاج للتغيير:
// 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:
⚠️ الموافقة مطلوبة: تعديل ملف src/app.ts
+5 | import { log } from './utils/logger';
-23| console.log('Server started');
+23| log('info', 'Server started');
[سماح] [دائمًا] [رفض]
(5) التعديل القابل للعكس
جميع تعديلات file_edit قابلة للعكس. يحفظ DSH تلقائيًا لقطة للملف قبل التعديل:
graph LR
A[لقطة قبل التعديل] --> B[تطبيق التعديلات]
B --> C[حالة بعد التعديل]
C -->|تراجع| A
4. shell — أداة أوامر Shell
(1) الاستخدام الأساسي
▶ مثال 4: تنفيذ أمر آمن
// 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: تنفيذ أمر مخاطر متوسطة
// Agent ينفذ npm view (عرض معلومات الحزمة، مخاطر متوسطة)
{
command: "npm view jsonwebtoken",
cwd: "/home/alice/project",
timeout: 120000
}
نافذة الموافقة المنبثقة:
⚠️ الموافقة مطلوبة: تنفيذ أمر shell
الأمر: npm view jsonwebtoken
دليل العمل: /home/alice/project
الحزم المقدرة: 1
[سماح] [دائمًا لـ npm] [رفض]
(3) المهلة والمقاطعة
// معاملات أداة shell
interface ShellParams {
command: string;
cwd?: string;
timeout?: number; // المهلة بالمللي ثانية، الافتراضي 30000
env?: Record<string, string>; // متغيرات بيئة إضافية
}
الأوامر طويلة التشغيل ستُقاطع بالمهلة:
🤖 Agent:
🔧 استخدام أداة: shell
→ الأمر: npm run build
→ المهلة: 120000ms
⏱️ اكتمل البناء في 45ث
→ المخرج: بناء ناجح. 15 ملفًا مُولَّدًا.
5. search — أداة البحث
(1) أوضاع البحث
تدعم أداة البحث أوضاع بحث متعددة:
| الوضع | الوصف | مثال |
|---|---|---|
| بحث الملفات | البحث حسب اسم/مسار الملف | *.test.ts |
| بحث المحتوى | البحث حسب تعبير محتوى | import.*from |
| بحث الرموز | البحث عن تعريفات الدوال/الأصناف | class UserService |
▶ مثال 6: البحث في الملفات
// البحث عن جميع ملفات الاختبار
{
pattern: "*.test.ts",
type: "file",
maxResults: 50
}
▶ مثال 7: البحث في محتوى الكود
// البحث عن جميع عبارات import
{
pattern: "import.*from 'express'",
type: "content",
filePattern: "*.ts",
maxResults: 100
}
(2) عرض نتائج البحث
🤖 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) مفهوم المهارات
المهارات هي قوالب مهام محددة مسبقًا تغلف تدفقات عمل كاملة للعمليات الشائعة:
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: استدعاء مهارة
// استدعاء مهارة add-test
{
skill: "add-test",
params: {
target: "src/utils/format.ts::formatDate",
framework: "jest"
}
}
7. plan — أداة التخطيط
(1) إنشاء وتتبع الخطط
تُستخدم أداة plan لإنشاء وتتبع خطط تنفيذ المهام متعددة الخطوات:
▶ مثال 9: إنشاء خطة تنفيذ
// إنشاء خطة
{
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: تحديث حالة الخطة
// تعليم الخطوة كمكتملة
{
action: "update",
stepId: 1,
status: "completed",
result: "تم تثبيت jsonwebtoken، bcryptjs"
}
(2) أداة plan ووضع PTC
أداة plan هي أساس وضع PTC:
graph TD
PTC[وضع PTC] --> PLAN[أداة plan تنشئ الخطة]
PLAN --> USER[المستخدم يراجع]
USER --> EXEC[تنفيذ الخطوات حسب الخطة]
EXEC --> UPDATE[أداة plan تُحدث الحالة]
UPDATE --> DONE{هل اكتمل الكل؟}
DONE -->|لا| EXEC
DONE -->|نعم| REPORT[إخراج الملخص]
8. مسار تنفيذ الأدوات
(1) مسار من ثلاث مراحل
يمر كل استدعاء أداة بثلاث مراحل:
graph LR
PRE[pre-execute<br/>التحقق من المعاملات<br/>فحص الصلاحيات<br/>نافذة الموافقة] --> EXEC[execute<br/>التنفيذ الفعلي<br/>التقاط المخرجات] --> POST[post-execute<br/>تسجيل السجلات<br/>إصدار الأحداث<br/>تحديث الحالة]
▶ مثال 11: كود زائف للمسار
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 مع التحقق والموافقة:
interface PreExecuteResult {
allowed: boolean;
reason?: string;
modifiedParams?: Params;
}
| عنصر التحقق | الوصف |
|---|---|
| التحقق من المعاملات | هل تنسيق وأنواع المعاملات صحيحة |
| فحص الصلاحيات | هل يمتلك المستخدم صلاحية تنفيذ هذه العملية |
| نافذة الموافقة | هل العمليات الخطيرة تتطلب تأكيد المستخدم |
| فحص Sandbox | هل العملية ضمن نطاق مساحة العمل |
(3) مرحلة post-execute
تتعامل post-execute مع التسجيل والإشعار:
interface PostExecuteAction {
log: boolean; // تسجيل في سجل الجلسة
emit: boolean; // إصدار حدث
updateTrajectory: boolean; // تحديث Trajectory
notifyUI: boolean; // إشعار واجهة الويب بالتحديث
}
9. سياسة موافقة الأدوات
(1) إعداد السياسة
▶ مثال 12: إعداد سياسة الموافقة
# 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 مخصصة
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/ الخاص بالمشروع:
.dsh/
└── plugins/
└── tool-http-request/
├── index.ts
└── package.json
أو حدد في ملف الإعداد:
# dsh.config.yaml
plugins:
- path: "./custom-tools/http-request"
- path: "./custom-tools/database-query"
(3) موافقة الأدوات المخصصة
تحتاج الأدوات المخصصة أيضًا لتعريف سياسات الموافقة:
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 مرفوض تلقائيًا
]
}
});
❓ أسئلة شائعة
tools.disabled: ["shell"] في ملف الإعداد لتعطيل أدوات محددة.📖 ملخص
- DSH لديه ست أدوات مدمجة: file_edit، shell، search، skills، plan، sandbox
- تنفيذ الأدوات له مسار من ثلاث مراحل: pre-execute → execute → post-execute
- file_edit يدعم القراءة/الكتابة/الإنشاء/التعديل؛ جميع التعديلات قابلة للعكس
- shell يصنف الأوامر حسب مستوى الأمان: آمن/متوسط/خطير/محظور
- search يدعم أوضاع بحث اسم/محتوى/رمز
- سياسات الموافقة تُتحكم بدقة حسب الأداة ونوع العملية عبر الإعداد
- الأدوات المخصصة هي في جوهرها إضافات Cordis، تُكتب بـ TypeScript
📝 تمارين
1. ⭐ أساسي: استخدم DSH Agent لإكمال العمليات التالية: 1) استخدم أداة search للعثور على جميع ملفات TypeScript في المشروع؛ 2) استخدم file_edit لقراءة أحدها. سجّل معاملات ونتائج استدعاءي الأداة.
2. ⭐⭐ متوسط: أعد سياسات موافقة بحيث تكون عمليات قراءة file_edit مسموحة تلقائيًا، وعمليات الإنشاء/التعديل تتطلب موافقة، وعمليات الحذف تتطلب تأكيدًا مزدوجًا. اختبر كل عملية للتحقق من أن سياسات الموافقة تعمل.
3. ⭐⭐⭐ تحدٍ: أنشئ إضافة أداة مخصصة تستعلم عن آخر 5 عمليات commit في مستودع Git الحالي (باستدعاء git log -5 --oneline)، سجلها في DSH، واجعل Agent يستدعيها بنجاح.