بناءً على حالة حقيقية للبرمجة التلقائية باستخدام Claude Code، شارك بعض تقنيات كتابة التلميحات

من خلال هذه المقالة، سأشارك معكم حالة استخدام حقيقية لـ Claude Code بناءً على مثال واقعي. قبل المشاركة، دعونا نجري استطلاعًا صغيرًا
الطلب الأصلي: كان هناك مستخدم مميز مدفوع، يرغب في أن أقوم بإضافة وقت التعديل للمقالات في المحتوى
للوهلة الأولى، يبدو تنفيذ هذا الطلب صعبًا بعض الشيء. لأن مقالات موقعي ليست مخزنة في قاعدة بيانات، بل يتم بناؤها باستخدام SSG الخاص بـ next.js. فهي لا تحتوي على وقت التحديث أساسًا.
إحدى الحيل هنا هي: عند حل المشكلات، لا يجب أن نقدم الطلب الأصلي مباشرةً لـ Claude Code، للأسباب التالية
1- الطلب الأصلي غامض نسبيًا، وقد يفهمه بشكل خاطئ، وإذا حدث ذلك، قد يضيف وقتًا في النهاية، لكن هذا الوقت قد لا يكون موثوقًا
2- استهلاك Token في Claude Code غالٍ حقًا، لذلك، قد يؤدي الطلب الغامض إلى استهلاك كميات كبيرة من الرموز دون فائدة
لذلك، نحتاج إلى تحليل الطلب الأصلي، استشرت أولاً في deepseek، وقدمني خيارين
1- وقت بناء الملف، في كل مرة نقوم بالبناء، نحتاج إلى الحصول على وقت بناء الملف، لكن استراتيجية التعبئة لـ turbopack مختلفة بعض الشيء، حيث يتغير قيمة hash للملف في كل بناء، لذا قد لا يكون وقت البناء موثوقًا
2- وقت الالتزام في git، فكرت في أن هذا يجب أن يكون أكثر موثوقية
بعد تحديد اتجاه الحل تقريبًا، حصلت على هذه التلميحة البسيطة: تضمين وقت الالتزام في git في رأس كل مقالة من نوع .mdx
Claude Code موثوق إلى حد ما، إذا كانت التلميحة دقيقة، فبشكل عام لا توجد مشكلة، وينفذ المهمة بسرعة
بعد استهلاك 7 دولارات من رصيدي، واستغرق حوالي 20 دقيقة، نجح التنفيذ أخيرًا.
كما هو متوقع، حدثت مفاجأة، فقد تخطى تعديل 171 ملفًا.
هنا تكمن المشكلة، في الواقع، الملفات التي تم تخطيها هنا، تم تمرير معلمة إضافية pass فقط، وكل شيء آخر متطابق تمامًا
<PostLayout pass>...لكنه لم يكن مرنًا، وعرف هذه المعلمة الإضافية الممررة كمكون مخصص مختلف تمامًا. ثم تخطاها ولم يعالجها ~ ~
import Layout from 'components/post-layout';
import { getGitFileInfo } from '@/utils/git-info';
export default function Article({ children }: any) {
const gitInfo = getGitFileInfo('src/app/مسارك/page.mdx');
return (
<Layout gitInfo={gitInfo || undefined}>
{children}
</Layout>
);
}لكن الواقع هو أنني أحتاج إلى هذه النتيجة، وكانت نتيجة التشغيل متطابقة تمامًا.
import MdxLayout from 'components/mdx-layout';
export default function Article({ children }: any) {
return (
<MdxLayout pass filePath="src/app/r19base/(4.compiler)/23.compilerlower/page.mdx">
{children}
</MdxLayout>
);
}ثم في هذه المرحلة، وقعت في فخ التلميحات
أدخلت التلميحة مرة أخرى: استخدم نفس الطريقة السابقة لإعادة هيكلة الملفات الـ 171 التي تم تخطيها
تعبيري هذا، عند التفكير فيه بعمق، يحتوي على بعض الغموض. لأن Claude Code قد قدم لي بالفعل اقتراحًا، لكنني لم أوافق عليه، وكان قصدي هو تعديل الملفات المتخطاة بنفس طريقة المئات من الملفات المعدلة، لكن أثناء التنفيذ، فهمها على أنها: الاقتراح الذي قدمه لي سابقًا
هذا الغموض تسبب مباشرة في تنفيذه للخطة التي لا أريدها لمدة 20 دقيقة، مع ظهور خطأين قام بإصلاحهما ذاتيًا، مما استهلك رموزي بشراهة، وبدأ النوعان من الغموض في التصادم مسببين الأخطاء.
في النهاية، اضطررت إلى التخلي عن هذا التنفيذ مرة أخرى، وإعادة توضيح معناي.
الخلاصة
1- من الأفضل أن تحتوي التلميحات على حلول مستقرة ودقيقة نسبيًا، كلما قل تفكير الذكاء الاصطناعي كان أفضل، فهذا يقلل من معدل الهلوسة.
2- يجب ألا تحتوي تلميحات الطلبات على أي غموض، فالغموض قد يؤدي إلى الأخطاء، على الرغم من أن Claude Code يمكنه الإصلاح في النهاية، لكن هذا سيسبب استهلاكًا كبيرًا للرموز. ونظرًا لأن LLM يعتمد على آلية التنبؤ لإنتاج النتائج، فإن الفهم الخاطئ أو الغموض المبكر سيؤدي إلى استمرار كل خطوة لاحقة في الاتجاه الخاطئ، وسيحاول أيضًا أن يكون منطقيًا ذاتيًا، ويولد أشياء غير موجودة، مما يزيد المشكلة سوءًا، ويزيد أيضًا من صعوبة مراجعة المطور، إذا انخدعت بهلوساته، فسيؤدي ذلك إلى عواقب وخيمة
3- قيود اللغة الطبيعية ليست دقيقة مثل الكود، في التلميحات، تضمين أسماء الملفات، متغيرات الكود، مصطلحات الكود الخاصة، والمصطلحات المتخصصة، سيقلل بشكل كبير من هلوسات Claude Code





