دمج ChatGPT API مع Go: من الفكرة إلى الكود العملي

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا Go وChatGPT هما الثنائي المثالي؟

\n

هل تساءلت يومًا كيف يمكنك بسرعة "تعليم" برنامجك بلغة Go التواصل مع المستخدم كإنسان حي؟ أو ربما تريد أتمتة إنشاء المحتوى، أو إنشاء مساعد ذكي، أو ببساطة إضافة "لمسة خاصة" لخدمتك؟ دمج ChatGPT API مع Go ليس مجرد موضة عابرة، بل أداة قوية تفتح أبواب عالم الذكاء الاصطناعي. Go، بسرعتها وبساطتها، مثالية لإنشاء طلبات سريعة وموثوقة للشبكات العصبية. في هذه المقالة، لن نناقش النظرية فقط، بل سنكتب كودًا حقيقيًا يمكنك استخدامه فورًا في مشاريعك.

\n\n

تهيئة الأرضية: ماذا تحتاج للبدء؟

\n

قبل الغوص في الكود، دعنا نتأكد من أن لدينا كل ما نحتاجه. ستحتاج إلى:

\n
    \n
  • Go مثبتة (الإصدار 1.21 أو أعلى لاستخدام جميع الإمكانيات الحديثة).
  • \n
  • مفتاح API من OpenAI. يمكنك الحصول عليه من منصة OpenAI. تعامل معه ككلمة مرور بطاقتك المصرفية - احفظه بسرية!
  • \n
  • فهم أساسي لطلبات HTTP وهياكل البيانات في Go.
  • \n
\n

سنكتب كل الكود في هذه المقالة في ملف واحد main.go لتبسيط الهيكل. هيا بنا!

\n\n

الخطوة 1: إنشاء عميل HTTP وإرسال أول طلب

\n

قلب تكاملنا سيكون الحزمة القياسية net/http. إنها خفيفة الوزن وسريعة ولا تتطلب تبعيات خارجية. مهمتنا هي إرسال طلب POST إلى نقطة النهاية https://api.openai.com/v1/chat/completions مع الجسم والرؤوس الصحيحة.

\n\n

هيكل الطلب

\n

يتوقع ChatGPT API JSON بتنسيق محدد. دعنا ننشئ هياكل Go تتطابق تمامًا مع هذا التنسيق:

\n
package main\n\nimport (\n    "bytes"\n    "encoding/json"\n    "fmt"\n    "io"\n    "net/http"\n    "os"\n)\n\ntype ChatMessage struct {\n    Role    string `json:"role"`\n    Content string `json:"content"`\n}\n\ntype ChatRequest struct {\n    Model    string        `json:"model"`\n    Messages []ChatMessage `json:"messages"`\n}\n\ntype ChatResponse struct {\n    Choices []struct {\n        Message ChatMessage `json:"message"`\n    } `json:"choices"`\n}
\n

لاحظ العلامات json:"...". إنها تضمن أن Go "يحزم" (يسلسل) بياناتنا بشكل صحيح إلى JSON الذي ستفهمه OpenAI.

\n\n

دالة الإرسال

\n

الآن سنكتب دالة تتولى كل العمل "القذر": تشكيل الطلب، إرساله، وتحليل الرد.

\n
func askChatGPT(apiKey, prompt string) (string, error) {\n    reqBody := ChatRequest{\n        Model: "gpt-3.5-turbo",\n        Messages: []ChatMessage{\n            {Role: "user", Content: prompt},\n        },\n    }\n\n    jsonData, err := json.Marshal(reqBody)\n    if err != nil {\n        return "", fmt.Errorf("خطأ في التسلسل: %w", err)\n    }\n\n    request, err := http.NewRequest("POST", "https://api.openai.com/v1/chat/completions", bytes.NewBuffer(jsonData))\n    if err != nil {\n        return "", fmt.Errorf("خطأ في إنشاء الطلب: %w", err)\n    }\n\n    request.Header.Set("Content-Type", "application/json")\n    request.Header.Set("Authorization", "Bearer "+apiKey)\n\n    client := &http.Client{}\n    response, err := client.Do(request)\n    if err != nil {\n        return "", fmt.Errorf("خطأ في تنفيذ الطلب: %w", err)\n    }\n    defer response.Body.Close()\n\n    body, err := io.ReadAll(response.Body)\n    if err != nil {\n        return "", fmt.Errorf("خطأ في قراءة الرد: %w", err)\n    }\n\n    // التحقق من رمز الحالة\n    if response.StatusCode != http.StatusOK {\n        return "", fmt.Errorf("أعادت API خطأ: %s, الجسم: %s", response.Status, string(body))\n    }\n\n    var chatResp ChatRes                

المدونات

توصيات الكتب