النشر الإنتاجي والسلامة
المشروع النهائي: مُعبِّئ نماذج التقديم للوظائف الآلي
النتيجة: بنهاية هذا الدرس سيكون لديك وكيل استخدام حاسوب Claude يعمل يقرأ وصف الوظيفة، يفتح نموذج التقديم في متصفح حقيقي (معزول)، يملأ كل حقل بمحتوى مصمم لذلك الوصف، يرفق ملف PDF لسيرتك الذاتية — ويتوقف عند زر الإرسال لمراجعتك. لا تقديمات مفاجئة، لا تاريخ عمل مهلوس، لا تقديمات آلية مشبوهة.
هذا المشروع النهائي يجمع كل شيء من الوحدات الخمس السابقة: حلقة الوكيل (م1)، حاوية Docker (م2)، أتمتة سطح المكتب (م3)، أتمتة المتصفح (م4)، وحواجز الأمان (م5).
ما ستشحنه — هذا الأمر يشغّل الوكيل من البداية إلى النهاية:
python apply.py \
--jd ./jds/anthropic-applied-ai.txt \
--form https://boards.greenhouse.io/anthropic/jobs/4087737 \
--resume ./me.pdf \
--profile ./profile.yaml
المخرج: Chrome يفتح (داخل حاوية Docker)، الوكيل يملأ النموذج حقلاً بحقل مستشهداً بأي تفصيل من السيرة/الملف استخدم لكل، يرفع PDF، ويخرج بالمتصفح متوقفاً عند شاشة المراجعة. تنظر إلى النموذج، تعدّل إن لزم، وتضغط إرسال بنفسك.
الجزء 1 — إعداد المشروع (5 دقائق)
(انظر النسخة الإنجليزية أعلاه لهيكل الملفات الكامل والمتطلبات. profile.yaml يحتوي إجاباتك الثابتة: الاسم، البريد، الروابط، توقعات الراتب، صوت الكتابة).
الجزء 2 — حاوية Docker (5 دقائق)
الوحدة 2 الدرس 3 بنت هذا. تذكير سريع — Dockerfile يستخدم xvfb + chromium + xdotool + scrot. بناء:
docker build -t job-form-filler .
docker run --rm --env-file .env \
-v $(pwd)/jds:/app/jds \
-v $(pwd)/me.pdf:/app/me.pdf \
-p 5900:5900 \
job-form-filler
المنفذ 5900 هو VNC — لرؤية الوكيل يعمل مباشرة، اتصل بعارض VNC.
الجزء 3 — مخطط JD (10 دقائق)
قبل أن يلمس الوكيل المتصفح، يحلل الوصف ويقرر ما يعنيه "مصمم" لهذا الدور.
planner.py:
import yaml, json, re
from anthropic import Anthropic
client = Anthropic()
def plan(jd_text: str, profile: dict) -> dict:
prompt = f"""أنت تجهّز طلب وظيفة. اقرأ JD وملف المرشح،
ثم أنتج مخطط JSON المعرّف أدناه. لا تخترع تاريخ عمل —
استخدم فقط الحقائق من الملف.
JD:
\"\"\"
{jd_text}
\"\"\"
PROFILE:
{yaml.safe_dump(profile, sort_keys=False)}
Return ONLY JSON:
{{
"role_summary": "...",
"why_us": "80-120 word paragraph",
"highlights": ["3-5 bullets"],
"answers": {{"years_experience": "...", "work_authorization": "...", "salary_expectations": "..."}}
}}
"""
reply = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=2048,
messages=[{"role": "user", "content": prompt}],
)
text = reply.content[0].text
match = re.search(r"\{[\s\S]*\}", text)
if not match:
raise ValueError(f"المخطط لم يُرجع JSON:\n{text[:500]}")
return json.loads(match.group(0))
لماذا خطوة مخطط منفصلة: سياق الوكيل المتصفح مزدحم أصلاً بلقطات الشاشة ودورات tool_use/tool_result. حساب الإجابات المصممة مرة واحدة يُبقي حلقة المتصفح مركزة على ميكانيكا الواجهة، ليس إعادة التفكير فيما يجب كتابته.
الجزء 4 — أدوات استخدام الحاسوب (10 دقائق)
أدوات استخدام الحاسوب القياسية من م3 + م4، بالإضافة إلى واحدة لرفع الملفات. (راجع tools.py في النسخة الإنجليزية للكود الكامل — take_screenshot, click, type_text, key, scroll, file_upload مع تأخيرات مناسبة).
الجزء 5 — حلقة الوكيل (10 دقائق)
apply.py يعرّف 3 أدوات:
computer_20250124— مُدارة من Anthropic (لقطة شاشة + نقر/كتابة بالإحداثيات)file_upload— أداة مخصصة لحوار ملف نظام التشغيل خارج إطار عرض المتصفحstop_for_review— الحاجز الأهم — الوكيل يستدعي هذا بدلاً من النقر على "إرسال"
موجّه النظام يفرض:
- لا تضغط إرسال أبداً. استدعِ
stop_for_reviewعند اكتمال النموذج. - استخدم فقط معلومات من الخطة — لا تخترع تاريخ عمل.
- إذا رأيت CAPTCHA/MFA، استدعِ
stop_for_reviewفوراً.
الحلقة تعمل حتى 40 دوراً (نماذج طويلة تحتاج 40–60).
الجزء 6 — حواجز الأمان (10 دقائق)
الوحدة 5 الدرس 3 غطت هذه؛ في المشروع النهائي:
- أداة
stop_for_reviewهي الحاجز الأساسي — موجّه النظام يمنع الضغط على إرسال. - لا أداة
bash— لا يستطيع الوكيل تنفيذ أوامر shell حرفياً. - حقائق من الملف فقط — الموجّه يمنع تاريخ العمل المخترع.
- عزل Docker — الوكيل يعمل في حاوية بلا أدوات شبكة.
- فتحة نجاة CAPTCHA/MFA — توقف ومراجعة بشرية.
الجزء 7 — قائمة استكشاف الأخطاء
| العرض | أول شيء تتحقق منه | السبب المعتاد |
|---|---|---|
| الوكيل يحاول النقر على إرسال | سجل الرسائل | موجّه النظام لم يُحمّل — تأكد من تمرير system=SYSTEM_PROMPT |
| حوار رفع الملف يمتلئ بنفايات | سلوك ctrl+l في tools.py | بعض حوارات Linux تستخدم ctrl+location |
| حقول النموذج ممتلئة بشكل خاطئ | فحص blueprint في السجلات | المخطط هلوس — شدّد موجّه النظام في planner.py |
| المتصفح يفتح لكن الوكيل لا يراه | env DISPLAY في Dockerfile | Xvfb لم يبدأ |
| الوكيل يتوقف في الدور الثالث | زد max_turns | النماذج الطويلة تحتاج 40–60 دوراً |
| موجّه MFA يظهر والوكيل يتجمد | تحقق من لقطة الشاشة | الوكيل استدعى stop_for_review بشكل صحيح — أكمل MFA بنفسك |
نقطة تحقق — أنجز هذا قبل ادعاء الشهادة
- شحن الحاوية.
docker build + docker runيبدأ بلا أخطاء، Xvfb يبدأ. - شحن المخطط. شغّل
planner.plan(jd_text, profile)مستقلاً وتحقق من أن مخرج JSON يذكر تفاصيل من JD وملفك. - شحن الحلقة الكاملة على نموذج واحد. اختر أبسط نموذج وجدته. الوكيل يجب أن يصل
stop_for_reviewبنموذج ممتلئ تماماً. - شحن الحالة الصعبة. جرّب نموذجاً بـ (أ) رفع ملف، (ب) قائمة منسدلة، (ج) مربع إجابة طويلة. الثلاثة يجب أن تعمل.
- التقط النموذج الممتلئ، سطر سجل
stop_for_review، وتأكيد تقديمك النهائي — كإثبات عملك.
الآن لديك وكيل استخدام حاسوب آمن وقابل للنشر. كل نمط من الوحدات الخمس السابقة هبط للتو في سير عمل حقيقي.
التالي (اختياري): اربط هذا بكاشف لوحة وظائف (مثل خلاصات Greenhouse RSS) لتُصاغ تقديمات آلية للمنشورات الجديدة لمراجعتك كل صباح. :::