من «كود عادي» إلى «تطبيق ذكي»: دليلك لدمج الذكاء الاصطناعي في C# خطوة بخطوة

هل تريد أن يحلّل تطبيقك النصوص، يكتب ملخصات، يجيب على الأسئلة، أو يقترح قرارات؟ بإمكانك فعل ذلك الآن في ساعات—not شهور. هذا الدليل العملي يريك أسرع مسارين: عبر واجهات API سحابية (مثل OpenAI/Azure) أو عبر ML.NET محليًا—مع كود جاهز.


الخريطة السريعة

  1. حدّد السيناريو (تلخيص/أسئلة وأجوبة/تصنيف/استخراج كيانات…).
  2. اختر المسار:
    • API سحابية: أفضل دقة وأسهل بداية.
    • ML.NET: محلي/أوفلاين أو بياناتك لا تخرج من جهازك.
  3. اكتب طبقة خدمة Service بسيطة تستدعي الذكاء.
  4. اربطها بالواجهة (WinForms/WPF/ASP.NET).
  5. أضِف حماية المفاتيح، حدود الاستهلاك، والتسجيل (Logging).

المسار 1: الذكاء عبر API سحابية

المتطلبات:

  • .NET 8 أو 7
  • مفتاح API من مزودك (OpenAI/Azure/OpenRouter…)
  • حزمة System.Net.Http.Json

طبقة خدمة عامة:


using System.Net.Http;
using System.Net.Http.Headers;
using System.Net.Http.Json;
using System.Text.Json;

public sealed class AiClient {
    private readonly HttpClient _http;
    public AiClient(string apiKey) {
        _http = new HttpClient();
        _http.BaseAddress = new Uri("https://api.openai.com/v1/");
        _http.DefaultRequestHeaders.Authorization =
            new AuthenticationHeaderValue("Bearer", apiKey);
    }

    public async Task<string> GenerateAsync(string instruction, CancellationToken ct = default) {
        var payload = new {
            model = "gpt-4o-mini",
            messages = new[] {
                new { role = "system", content = "You are a helpful assistant." },
                new { role = "user", content = instruction }
            }
        };

        using var res = await _http.PostAsJsonAsync("chat/completions", payload, ct);
        res.EnsureSuccessStatusCode();

        using var stream = await res.Content.ReadAsStreamAsync(ct);
        using var doc = await JsonDocument.ParseAsync(stream, cancellationToken: ct);
        return doc.RootElement.GetProperty("choices")[0]
                 .GetProperty("message")
                 .GetProperty("content")
                 .GetString() ?? string.Empty;
    }
}

مثال ربط (WinForms)


private AiClient _ai = new AiClient(Environment.GetEnvironmentVariable("AI_API_KEY")!);

private async void btnAsk_Click(object sender, EventArgs e) {
    btnAsk.Enabled = false;
    try {
        var prompt = txtPrompt.Text.Trim();
        if (string.IsNullOrWhiteSpace(prompt)) return;

        txtAnswer.Text = "جارٍ التفكير...";
        var answer = await _ai.GenerateAsync(prompt);
        txtAnswer.Text = answer;
    }
    catch (Exception ex) {
        txtAnswer.Text = "حدث خطأ: " + ex.Message;
    }
    finally {
        btnAsk.Enabled = true;
    }
}

ملاحظات: خزّن مفتاحك في Environment Variables أو UserSecrets. أضِف Timeout وRetry وحدودًا على المدخلات.

المسار 2: الذكاء محليًا باستخدام ML.NET

يُستخدم عندما تريد أوفلاين أو بياناتك لا تغادر جهازك.


dotnet add package Microsoft.ML
dotnet add package Microsoft.ML.FastTree

using Microsoft.ML;
using Microsoft.ML.Data;

public class SentimentData { public string Text { get; set; } = ""; public bool Label { get; set; } }
public class SentimentPrediction { [ColumnName("PredictedLabel")] public bool Prediction { get; set; } public float Probability { get; set; } }

var ml = new MLContext();

var samples = new[] {
    new SentimentData{ Text="الخدمة ممتازة", Label=true},
    new SentimentData{ Text="التجربة سيئة جدا", Label=false},
};

var data = ml.Data.LoadFromEnumerable(samples);
var pipeline = ml.Transforms.Text.FeaturizeText("Features", nameof(SentimentData.Text))
                .Append(ml.BinaryClassification.Trainers.SdcaLogisticRegression());

var model = pipeline.Fit(data);

var engine = ml.Model.CreatePredictionEngine<SentimentData, SentimentPrediction>(model);
var result = engine.Predict(new SentimentData{ Text="المنتج رائع" });

أفضل الممارسات

  • تصميم الـPrompt: وضّح الدور والهدف.
  • الأداء: استخدم Caching وChunking.
  • الأمان: فلترة المدخلات وإخفاء المفاتيح.
  • المتابعة: سجّل الطلبات والردود لمراقبة الجودة.

قالب Prompt سريع

الدور: أنت مساعد برمجي مختصر.

المهمة: لخص النص التالي في 4 نقاط تنفيذية موجهة لمدير منتج.

الإخراج: نقاط معدودة فقط.

{{TEXT}}

ماذا تبني اليوم؟

  • ملخصات فواتير/تقارير يومية
  • بحث دلالي داخل مستندات الشركة
  • تصنيف رسائل العملاء
  • مولّد مقترحات بريد/وصف منتجات

#CSharp #dotnet #ذكاء_اصطناعي #AI #MLNET #OpenAI #Azure #برمجة #تطبيقات #WinForms #WPF #ASPNetCore #Blazor

تعليقات