Files
GreenHomeBack/src/GreenHome.AI.DeepSeek/README.md
2025-12-16 16:52:40 +03:30

10 KiB
Raw Blame History

GreenHome.AI.DeepSeek

سرویس هوش مصنوعی DeepSeek برای پروژه GreenHome

درباره DeepSeek

DeepSeek یک مدل هوش مصنوعی پیشرفته است که می‌توانید از آن برای:

  • پاسخ به سوالات کاربران
  • تحلیل داده‌های خانه هوشمند
  • ارائه پیشنهادات بهینه‌سازی
  • تولید محتوای هوشمند

نصب و راه‌اندازی

1. اضافه کردن Reference به پروژه

در فایل .csproj پروژه خود:

<ItemGroup>
  <ProjectReference Include="..\GreenHome.AI.DeepSeek\GreenHome.AI.DeepSeek.csproj" />
</ItemGroup>

2. دریافت API Key

  1. به وب‌سایت DeepSeek بروید
  2. ثبت‌نام کنید یا وارد حساب کاربری خود شوید
  3. از بخش API Keys، یک کلید API جدید بسازید
  4. کلید را کپی کنید (فقط یک بار نمایش داده می‌شود!)

3. ثبت سرویس در Program.cs

using GreenHome.AI.DeepSeek;

// روش 1: استفاده از Configuration (پیشنهادی)
builder.Services.AddDeepSeek(builder.Configuration);

// روش 2: استفاده از Configuration Section
builder.Services.AddDeepSeek(builder.Configuration.GetSection("DeepSeek"));

// روش 3: تنظیم دستی
builder.Services.AddDeepSeek(options =>
{
    options.ApiKey = "YOUR_API_KEY_HERE";
    options.BaseUrl = "https://api.deepseek.com";
    options.DefaultModel = "deepseek-chat";
    options.DefaultTemperature = 1.0;
});

4. تنظیمات در appsettings.json

{
  "DeepSeek": {
    "BaseUrl": "https://api.deepseek.com",
    "ApiKey": "YOUR_DEEPSEEK_API_KEY_HERE",
    "DefaultModel": "deepseek-chat",
    "DefaultTemperature": 1.0,
    "DefaultMaxTokens": 2000
  }
}

نکته امنیتی: هرگز API Key خود را در کد یا repository قرار ندهید! از Environment Variables یا User Secrets استفاده کنید.

استفاده از User Secrets (Development)

dotnet user-secrets init
dotnet user-secrets set "DeepSeek:ApiKey" "YOUR_API_KEY_HERE"

استفاده از Environment Variables (Production)

export DeepSeek__ApiKey="YOUR_API_KEY_HERE"

استفاده در کنترلرها

تزریق سرویس

public class AIController : ControllerBase
{
    private readonly IDeepSeekService deepSeekService;

    public AIController(IDeepSeekService deepSeekService)
    {
        this.deepSeekService = deepSeekService;
    }
}

سوال ساده

var response = await deepSeekService.AskSimpleAsync(
    "چگونه می‌توانم مصرف انرژی خانه را کاهش دهم؟"
);

Console.WriteLine(response);

سوال با System Prompt

var systemPrompt = "شما یک مشاور خانه هوشمند هستید.";
var question = "بهترین دمای کولر برای صرفه‌جویی انرژی چقدر است؟";

var response = await deepSeekService.AskSimpleAsync(question, systemPrompt);

چت پیشرفته با تاریخچه

var request = new ChatRequest
{
    Model = "deepseek-chat",
    Messages = new List<ChatMessage>
    {
        new ChatMessage 
        { 
            Role = "system", 
            Content = "شما یک دستیار هوشمند خانه هوشمند هستید." 
        },
        new ChatMessage 
        { 
            Role = "user", 
            Content = "دمای فعلی 28 درجه است" 
        },
        new ChatMessage 
        { 
            Role = "assistant", 
            Content = "باشه، دمای فعلی خانه را دریافت کردم." 
        },
        new ChatMessage 
        { 
            Role = "user", 
            Content = "آیا باید کولر را روشن کنم؟" 
        }
    },
    Temperature = 0.7,
    MaxTokens = 1000
};

var response = await deepSeekService.AskAsync(request);
var answer = response?.Choices?.FirstOrDefault()?.Message?.Content;

API Endpoints

سرویس شامل 3 endpoint اصلی است:

1. POST /api/ai/ask

پرسیدن یک سوال ساده

Request Body:

{
  "question": "چگونه می‌توانم دمای خانه را کنترل کنم؟",
  "systemPrompt": "شما یک مشاور خانه هوشمند هستید."
}

Response:

{
  "question": "چگونه می‌توانم دمای خانه را کنترل کنم؟",
  "answer": "برای کنترل دمای خانه می‌توانید از ترموستات هوشمند استفاده کنید...",
  "timestamp": "2025-12-16T10:30:00Z"
}

2. POST /api/ai/chat

چت پیشرفته با تاریخچه

Request Body:

{
  "model": "deepseek-chat",
  "messages": [
    {
      "role": "system",
      "content": "شما یک دستیار هوشمند هستید."
    },
    {
      "role": "user",
      "content": "سلام"
    }
  ],
  "temperature": 0.7,
  "maxTokens": 2000
}

Response:

{
  "id": "chatcmpl-xxx",
  "object": "chat.completion",
  "created": 1702735200,
  "model": "deepseek-chat",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "سلام! چطور می‌تونم کمکتون کنم؟"
      },
      "finishReason": "stop"
    }
  ],
  "usage": {
    "promptTokens": 20,
    "completionTokens": 15,
    "totalTokens": 35
  }
}

3. POST /api/ai/suggest

دریافت پیشنهادات برای بهینه‌سازی خانه هوشمند

Request Body:

{
  "deviceContext": "دمای اتاق: 28°C، رطوبت: 65%، ساعت: 14:00"
}

Response:

{
  "suggestions": "با توجه به دمای بالای 28 درجه، توصیه می‌شود کولر را روشن کنید...",
  "timestamp": "2025-12-16T10:30:00Z"
}

مثال‌های کاربردی

1. تحلیل داده‌های سنسور

var deviceData = $@"
دمای اتاق خواب: {temperature}°C
رطوبت: {humidity}%
کیفیت هوا: {airQuality}
ساعت: {DateTime.Now:HH:mm}
";

var systemPrompt = "شما یک مشاور خانه هوشمند هستید که بر اساس داده‌های سنسورها پیشنهاد می‌دهید.";

var response = await deepSeekService.AskSimpleAsync(
    $"وضعیت خانه: {deviceData}\nچه کاری باید انجام دهم؟",
    systemPrompt
);

2. پاسخ به سوالات کاربر

[HttpPost("ask")]
public async Task<IActionResult> Ask([FromBody] string question)
{
    var answer = await deepSeekService.AskSimpleAsync(question);
    return Ok(new { question, answer });
}

3. دستیار هوشمند با حافظه

// ذخیره تاریخچه در session یا database
var conversationHistory = GetConversationHistory(userId);

var request = new ChatRequest
{
    Messages = conversationHistory.Select(m => new ChatMessage
    {
        Role = m.Role,
        Content = m.Content
    }).ToList()
};

// اضافه کردن پیام جدید کاربر
request.Messages.Add(new ChatMessage
{
    Role = "user",
    Content = userMessage
});

var response = await deepSeekService.AskAsync(request);

// ذخیره پاسخ در تاریخچه
SaveToHistory(userId, response);

پارامترها

Temperature

  • مقدار: 0 تا 2
  • پیش‌فرض: 1.0
  • توضیح: هر چه عدد بالاتر باشد، پاسخ‌ها خلاقانه‌تر و تصادفی‌تر هستند

MaxTokens

  • توضیح: حداکثر تعداد توکن در پاسخ
  • توصیه: برای پاسخ‌های کوتاه: 500، برای پاسخ‌های بلند: 2000

Model

  • مقدار: deepseek-chat (پیش‌فرض)
  • توضیح: مدل مورد استفاده برای تولید پاسخ

نکات مهم

  1. هزینه: هر درخواست به DeepSeek بر اساس تعداد توکن‌های استفاده شده هزینه دارد
  2. Rate Limiting: محدودیت تعداد درخواست در واحد زمان را رعایت کنید
  3. Timeout: درخواست‌های AI ممکن است طولانی باشند (پیش‌فرض: 60 ثانیه)
  4. خطاها: همیشه خطاها را مدیریت کنید و پیام مناسب به کاربر نمایش دهید
  5. امنیت: API Key را محرمانه نگه دارید

عیب‌یابی

خطای 401 Unauthorized

  • بررسی کنید که API Key صحیح است
  • مطمئن شوید که در configuration به درستی تنظیم شده است

خطای 429 Too Many Requests

  • به محدودیت rate limit رسیده‌اید
  • کمی صبر کنید و دوباره تلاش کنید

خطای Timeout

  • درخواست خیلی طولانی است
  • MaxTokens را کاهش دهید یا Timeout را افزایش دهید

مثال کامل

using GreenHome.AI.DeepSeek;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/[controller]")]
public class SmartHomeAIController : ControllerBase
{
    private readonly IDeepSeekService _ai;
    private readonly ILogger<SmartHomeAIController> _logger;

    public SmartHomeAIController(
        IDeepSeekService ai,
        ILogger<SmartHomeAIController> logger)
    {
        _ai = ai;
        _logger = logger;
    }

    [HttpPost("analyze")]
    public async Task<IActionResult> AnalyzeHome([FromBody] HomeData data)
    {
        try
        {
            var prompt = $@"
داده‌های خانه هوشمند:
- دمای داخل: {data.Temperature}°C
- رطوبت: {data.Humidity}%
- مصرف برق: {data.PowerUsage}W
- تعداد افراد: {data.OccupancyCount}

لطفاً تحلیل کامل ارائه دهید و پیشنهادات بهینه‌سازی بدهید.
            ";

            var systemPrompt = "شما یک متخصص خانه هوشمند هستید.";
            
            var analysis = await _ai.AskSimpleAsync(prompt, systemPrompt);
            
            return Ok(new { analysis, timestamp = DateTime.UtcNow });
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Error analyzing home data");
            return StatusCode(500, "خطا در تحلیل داده‌ها");
        }
    }
}

منابع

پشتیبانی

در صورت بروز مشکل، لطفاً یک Issue در GitHub ایجاد کنید.