DeepSeek Harness: Python SDK: الواجهة البرمجية

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

واجهة الويب وسطر الأوامر رائعان للتفاعل البشري، لكن عندما تحتاج لدمج Agent في خطوط أتمتة أو سير عمل CI/CD أو تطبيقات مخصصة، Python SDK هو نقطة دخولك — بضعة أسطر كود لبدء جلسة Agent والحصول على استجابات منظمة.

💡 نصيحة: Python SDK مخصص لسيناريوهات التحكم البرمجي في Agent — المعالجة الدفعية، الاختبار الآلي، خطوط البيانات. للاستخدام اليومي، واجهة الويب وسطر الأوامر أكثر ملاءمة.

📋 المتطلبات المسبقة: إكمال 06-tools.md، إلمام بنظام الأدوات؛ معرفة أساسية بـ Python

1. ما ستتعلمه

تدفق استدعاء SDK


2. التثبيت والتهيئة

(1) تثبيت SDK

BASH
pip install deepseek-dsh

التحقق من التثبيت:

PYTHON
import dsh

print(dsh.__version__)
# 0.x.x

(2) المتطلبات المسبقة

يتطلب Python SDK تشغيل خادم DSH:

BASH
# تشغيل خادم DSH أولاً (وضع Headless)
npx @deepseek-ai/dsh headless --port 3080

أو تحديد منفذ مخصص:

BASH
npx @deepseek-ai/dsh headless --port 8080

(3) تهيئة العميل

▶ مثال 1: إنشاء عميل SDK

PYTHON
from dsh import DSHClient

client = DSHClient(
    base_url="http://127.0.0.1:3080",
    api_key="your-api-key"  # اختياري، إذا كان DSH يملك مصادقة مُعدة
)

▶ مثال 2: التهيئة باستخدام متغيرات البيئة

PYTHON
import os
from dsh import DSHClient

client = DSHClient.from_env()
# يقرأ متغيرات البيئة DSH_BASE_URL وDSH_API_KEY

3. إنشاء جلسة

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

▶ مثال 3: إنشاء جلسة

PYTHON
session = client.create_session(
    workspace="/home/alice/my-project",
    model="deepseek-chat",
    mode="standard"
)

print(f"معرف الجلسة: {session.id}")
print(f"مساحة العمل: {session.workspace}")
print(f"النموذج: {session.model}")

(2) إعداد الجلسة

PYTHON
session = client.create_session(
    workspace="/home/alice/my-project",
    model="deepseek-chat",
    mode="ptc",
    sandbox="permissive",
    settings={
        "temperature": 0.7,
        "max_tokens": 4096
    }
)

(3) استعادة جلسة موجودة

▶ مثال 4: الاستعادة بمعرف الجلسة

PYTHON
session = client.get_session("sess_abc123")
print(f"جلسة مستعادة: {session.id}")
print(f"الرسائل: {len(session.messages)}")

4. إرسال الرسائل والحصول على الاستجابات

(1) إرسال رسالة أساسية

▶ مثال 5: إرسال رسالة والحصول على استجابة كاملة

PYTHON
response = session.send("ساعدني في التحقق من package.json الخاص بالمشروع")

print(response.content)
# يُظهر package.json الخاص بالمشروع...

print(f"الأدوات المستخدمة: {len(response.tool_calls)}")
for tool in response.tool_calls:
    print(f"  - {tool.name}: {tool.status}")

(2) بنية الاستجابة

PYTHON
class AgentResponse:
    content: str               # رد Agent النصي
    tool_calls: list[ToolCall] # سجلات استدعاءات الأدوات
    model: str                 # النموذج المستخدم
    tokens_used: int           # الرموز المستهلكة
    duration_ms: int           # وقت الاستجابة

class ToolCall:
    name: str                  # اسم الأداة
    params: dict               # معاملات الاستدعاء
    status: str                # حالة التنفيذ
    result: Any                # نتيجة التنفيذ
    duration_ms: int           # وقت التنفيذ

(3) محادثات متعددة الأدوار مع السياق

▶ مثال 6: محادثة متعددة الأدوار

PYTHON
# الدور الأول
resp1 = session.send("اعرض محتويات src/app.ts")
print(resp1.content)

# الدور الثاني (السياق تلقائي)
resp2 = session.send("أضف وسيط معالجة أخطاء لهذا الملف")
print(resp2.content)

# الدور الثالث
resp3 = session.send("شغّل الاختبارات للتأكد من عدم وجود أخطاء")
print(resp3.content)

5. استدعاءات الأدوات

(1) استدعاءات الأدوات التلقائية

في وضع Standard، يقرر Agent متى يستدعي الأدوات تلقائيًا:

PYTHON
response = session.send("أنشئ src/utils/helpers.ts، اكتب دالة debounce")

for tool in response.tool_calls:
    print(f"الأداة: {tool.name}")
    print(f"المعاملات: {tool.params}")
    print(f"النتيجة: {tool.result}")

(2) معالجة موافقة الأدوات

عندما تتطلب عملية Agent موافقة، يوفر SDK آلية استدعاء عكسي:

▶ مثال 7: استدعاء عكسي للموافقة

PYTHON
def on_approval(tool_name: str, params: dict) -> bool:
    print(f"موافقة مطلوبة: {tool_name}")
    print(f"المعاملات: {params}")
    
    # سماح تلقائي للعمليات الآمنة
    if tool_name == "file_edit" and params.get("action") == "read":
        return True
    
    # العمليات الأخرى تتطلب تأكيدًا يدويًا
    confirm = input(f"هل تسمح بـ {tool_name}؟ (y/n): ")
    return confirm.lower() == "y"

session = client.create_session(
    workspace="/home/alice/project",
    approval_callback=on_approval
)

(3) تعطيل أدوات محددة

PYTHON
session = client.create_session(
    workspace="/home/alice/project",
    disabled_tools=["shell", "sandbox"]
)

(4) معالجة نتائج استدعاء الأدوات

▶ مثال 8: معالجة مفصلة لنتائج الأدوات

PYTHON
response = session.send("حلل تغطية الاختبار في المشروع")

for tool in response.tool_calls:
    if tool.name == "shell":
        output = tool.result.get("stdout", "")
        if "Coverage" in output:
            print(f"تغطية الاختبار: {output}")
    elif tool.name == "search":
        files = tool.result.get("files", [])
        print(f"وُجد {len(files)} ملف اختبار")
    elif tool.name == "file_edit":
        action = tool.params.get("action")
        path = tool.params.get("path")
        print(f"ملف {action}: {path}")

6. معالجة المخرجات المتدفقة

(1) تفعيل المخرجات المتدفقة

للاستجابات الطويلة، استخدم المخرجات المتدفقة للحصول على النتائج في الوقت الفعلي:

▶ مثال 9: مخرجات متدفقة

PYTHON
for chunk in session.send_stream("اشرح تصميم بنية هذا المشروع بالتفصيل"):
    if chunk.type == "content":
        print(chunk.text, end="", flush=True)
    elif chunk.type == "tool_call":
        print(f"\n[أداة: {chunk.tool_name}]")
    elif chunk.type == "tool_result":
        print(f"[تم استلام نتيجة الأداة]")

(2) أنواع أحداث المخرجات المتدفقة

نوع الحدث الوصف حقول البيانات
content جزء محتوى نصي text
tool_call بدء استدعاء أداة tool_name، params
tool_result نتيجة تنفيذ أداة tool_name، result
approval طلب موافقة tool_name، params
done اكتمال الاستجابة tokens_used، duration_ms
error حدث خطأ code، message

(3) دمج التدفق مع الموافقة

▶ مثال 10: معالجة الموافقة في المخرجات المتدفقة

PYTHON
def auto_approve(tool_name: str, params: dict) -> bool:
    safe_actions = ["read", "search"]
    if params.get("action") in safe_actions:
        return True
    return False

for chunk in session.send_stream(
    "أعد هيكلة جميع المتحكمات، أضف معالجة الأخطاء",
    approval_callback=auto_approve
):
    if chunk.type == "content":
        print(chunk.text, end="")
    elif chunk.type == "approval":
        print(f"\n[موافقة تلقائية: {chunk.tool_name}]")

7. ميزات متقدمة

(1) تكامل وضع Headless

حالة استخدام SDK الأكثر شيوعًا هي الاقتران بوضع Headless لتنفيذ Agent غير مراقب:

▶ مثال 11: سير عمل Headless كامل

PYTHON
from dsh import DSHClient

client = DSHClient(base_url="http://127.0.0.1:3080")

def auto_approve(tool_name: str, params: dict) -> bool:
    safe_tools = ["search", "file_edit", "plan"]
    if tool_name in safe_tools:
        action = params.get("action", "")
        if action in ["read", "create"]:
            return True
    return False

session = client.create_session(
    workspace="/home/alice/project",
    model="deepseek-coder",
    mode="ptc",
    approval_callback=auto_approve
)

response = session.send(
    "أضف وسيط التحقق من المدخلات لجميع المسارات، مع التأكد من أن معاملات الطلب تتطابق مع الأنواع المتوقعة"
)

print(f"الخطة: {response.content}")
print(f"الأدوات المستخدمة: {len(response.tool_calls)}")
print(f"الرموز: {response.tokens_used}")

(2) جلسات متزامنة

▶ مثال 12: جلسات متعددة متوازية

PYTHON
import concurrent.futures

def process_file(filepath: str):
    client = DSHClient(base_url="http://127.0.0.1:3080")
    session = client.create_session(workspace="/home/alice/project")
    response = session.send(f"أضف اختبارات وحدة لـ {filepath}")
    return {"file": filepath, "tests_added": len(response.tool_calls)}

files = [
    "src/utils/format.ts",
    "src/utils/validate.ts",
    "src/routes/users.ts"
]

with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
    results = list(executor.map(process_file, files))

for r in results:
    print(f"{r['file']}: {r['tests_added']} استدعاءات أدوات")

(3) معالجة الأخطاء

▶ مثال 13: معالجة الأخطاء

PYTHON
from dsh import DSHClient, DSHTimeoutError, DSHConnectionError

client = DSHClient(base_url="http://127.0.0.1:3080")

try:
    session = client.create_session(workspace="/home/alice/project")
    response = session.send("ساعدني في إصلاح جميع أخطاء TypeScript", timeout=300)
except DSHTimeoutError:
    print("انتهت مهلة استجابة Agent. يرجى تبسيط المهمة أو زيادة المهلة")
except DSHConnectionError:
    print("لا يمكن الاتصال بخادم DSH. يرجى التحقق من تشغيله")
except Exception as e:
    print(f"خطأ غير معروف: {e}")

8. مقارنة SDK بواجهة الويب/سطر الأوامر

البُعد واجهة الويب سطر الأوامر Python SDK
طريقة التفاعل متصفح طرفية كود
مناسب لـ الجميع المطورين مهندسي الأتمتة
آلية الموافقة نافذة منبثقة تفاعلية تأكيد سطر الأوامر دالة استدعاء عكسي
المخرجات المتدفقة عرض في الوقت الفعلي مخرجات طرفية تدفق أحداث
التزامن جلسة واحدة جلسة واحدة جلسات متعددة
قدرة الدمج منخفضة متوسطة عالية
منحنى التعلم الأدنى منخفض متوسط

❓ أسئلة شائعة

س هل يتطلب SDK تثبيت DSH منفصل؟
ج نعم. SDK هو عميل؛ خادم DSH لا يزال يحتاج للتشغيل عبر npx أو من المصدر. يتواصل SDK مع الخادم عبر HTTP API.
س هل يدعم Python SDK لغة Python 2؟
ج لا. يتطلب Python SDK إصدار Python 3.8+.
س هل اتصالات SDK مشفرة؟
ج الاتصال المحلي غير مشفر افتراضيًا (http://). للإنتاج، نوصي بإعداد HTTPS أو الوصول عبر نفق SSH.
س هل يمكنني استخدام SDK للتحكم في Agent في وضع سطر الأوامر؟
ج لا. يتواصل SDK مع HTTP API لـ DSH (وضع Headless). وضع سطر الأوامر هو تفاعل طرفية منفصل.
س هل النتائج المتدفقة وغير المتدفقة متطابقة؟
ج نعم، النتائج النهائية متطابقة. التدفق فقط يُرجع أجزاء المحتوى في الوقت الفعلي؛ الوضع العادي ينتظر الاستجابة الكاملة ويُرجعها دفعة واحدة.
س كيف أتحقق من أخطاء اتصالات SDK؟
ج فعّل تسجيل التصحيح: client = DSHClient(base_url="...", debug=True). جميع طلبات واستجابات HTTP ستُطبع في الطرفية.

📖 ملخص


📝 تمارين

1. ⭐ أساسي: ثبّت Python SDK، شغّل DSH في وضع Headless، أنشئ جلسة باستخدام SDK وأرسل رسالة "مرحبًا"، اطبع محتوى رد Agent.

2. ⭐⭐ متوسط: اكتب نص Python يستخدم SDK لجعل Agent يقرأ README.md الخاص بالمشروع ويُولد تقرير ملخص، ويحفظه في project-summary.txt.

3. ⭐⭐⭐ تحدٍ: اكتب نص معالجة دفعية يستخدم جلسات متزامنة لجعل 3 Agents تحلل جودة الكود في أدلة مشروع مختلفة في وقت واحد، وتُنتج تقرير جودة كود موحد.

Web-Tutorial.com

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

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

100%