لماذا يحتاج مطور Java إلى ChatGPT؟ أو كيف تتوقف عن الخوف وتحب الشبكات العصبية
\nمرحبًا، زميلي! إذا كنت تقرأ هذا، فهذا يعني أنك، مثلي، قد سئمت من كتابة ردود متكررة للدعم الفني، أو إنشاء أوصاف منتجات مملة، أو تحليل التعليقات يدويًا. ماذا لو أخبرتك أنه في أمسية واحدة فقط يمكنك بث الحياة في تطبيق Java الخاص بك عن طريق ربطه بذكاء اصطناعي حقيقي؟ نعم، أعني ذلك ChatGPT الذي يستطيع المزاح وكتابة الكود وحتى شرح نظرية فيثاغورس لقط.
\nفي هذه المقالة، لن نقوم بتحليل نظرية الاحتمالات أو تعلم المحولات. سنأخذ ببساطة Java، ونضيف قليلًا من طلبات HTTP، ونجعل GPT-4 (أو 3.5 إذا كانت الميزانية محدودة) يعمل لصالحنا. يبدو كالسحر؟ في الحقيقة، إنها هندسة بحتة. هيا بنا!
\n\nماذا نحتاج؟ الحد الأدنى من الأدوات الأساسية
\nقبل كتابة الكود، تأكد من أن لديك:
\n- \n
- JDK 11 أو أحدث (سنستخدم
HttpClientالجديد الذي ظهر في الإصدار 11); \n - مفتاح API من OpenAI — يمكنك الحصول عليه من منصة OpenAI. لا تنسَ شحن الرصيد (بضع دولارات فقط تكفي للاختبار); \n
- أي بيئة تطوير متكاملة (IDE) — IntelliJ IDEA، Eclipse، أو حتى المفكرة إذا كنت من المحترفين; \n
- Maven أو Gradle — لربط التبعيات بسهولة (لكننا سنكتفي بالحد الأدنى). \n
بالمناسبة، إذا كنت تعتقد أن دمج ChatGPT على Java هو شيء معقد ويتطلب تعلم آلة، فأنا أسارع لإسعادك: كل شيء يتم حله بطلب HTTP عادي. لا توجد شبكات عصبية في وقت التشغيل، فقط REST API.
\n\nتحضير المشروع: Maven والتبعيات
\nأنشئ مشروع Maven جديد وأضف إلى pom.xml مكتبة واحدة فقط — Jackson للتعامل مع JSON. لا غنى عنها، لأن ChatGPT يتواصل مع العالم بهذه اللغة فقط.
<dependency>\n <groupId>com.fasterxml.jackson.core</groupId>\n <artifactId>jackson-databind</artifactId>\n <version>2.15.2</version>\n</dependency>\n\nهذا كل شيء! لا حاجة لأي SDK أو أغلفة — فقط Java النقية وذكاؤنا. إذا كنت تستخدم Gradle، فقط أضف implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2'.
هيكل الطلب إلى OpenAI API
\nقبل كتابة الكود، دعنا نفهم ما يريده الخادم منا. ChatGPT API يقبل طلب POST إلى نقطة النهاية https://api.openai.com/v1/chat/completions. جسم الطلب هو JSON بالهيكل التالي:
{\n "model": "gpt-3.5-turbo",\n "messages": [\n {"role": "system", "content": "أنت مساعد مفيد."},\n {"role": "user", "content": "أخبرني نكتة عن مطوري Java."}\n ],\n "temperature": 0.7\n}\n\nدعنا نحلل الحقول:\n
- \n
- model — أي نموذج سيجيب. للتوفير، استخدم
gpt-3.5-turbo، وللإجابات الرائعة —gpt-4; \n - messages — مصفوفة من الرسائل. الرسالة النظامية تحدد النغمة، و user هو طلبنا; \n
- temperature — من 0 إلى 2. كلما زادت، زادت إبداعية الإجابة (وزادت فرصة أن تبدأ الشبكة العصبية في الهلوسة). \n
تأتي الإجابة أيضًا بصيغة JSON، ونحن مهتمون بالحقل choices[0].message.content. هناك يختبئ النص الذي سنعرضه للمستخدم.
نكتب الكود: عميل Java لـ ChatGPT
\nلننشئ الفئة ChatGPTClient. ستكون مسؤولة عن إرسال الطلبات ومعالجة الإجابات. كل الكود في ملف واحد، لتجنب تكرار الكيانات.
import java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpRes