10 KiB
10 KiB
GreenHome.AI.DeepSeek
سرویس هوش مصنوعی DeepSeek برای پروژه GreenHome
درباره DeepSeek
DeepSeek یک مدل هوش مصنوعی پیشرفته است که میتوانید از آن برای:
- پاسخ به سوالات کاربران
- تحلیل دادههای خانه هوشمند
- ارائه پیشنهادات بهینهسازی
- تولید محتوای هوشمند
نصب و راهاندازی
1. اضافه کردن Reference به پروژه
در فایل .csproj پروژه خود:
<ItemGroup>
<ProjectReference Include="..\GreenHome.AI.DeepSeek\GreenHome.AI.DeepSeek.csproj" />
</ItemGroup>
2. دریافت API Key
- به وبسایت DeepSeek بروید
- ثبتنام کنید یا وارد حساب کاربری خود شوید
- از بخش API Keys، یک کلید API جدید بسازید
- کلید را کپی کنید (فقط یک بار نمایش داده میشود!)
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(پیشفرض) - توضیح: مدل مورد استفاده برای تولید پاسخ
نکات مهم
- هزینه: هر درخواست به DeepSeek بر اساس تعداد توکنهای استفاده شده هزینه دارد
- Rate Limiting: محدودیت تعداد درخواست در واحد زمان را رعایت کنید
- Timeout: درخواستهای AI ممکن است طولانی باشند (پیشفرض: 60 ثانیه)
- خطاها: همیشه خطاها را مدیریت کنید و پیام مناسب به کاربر نمایش دهید
- امنیت: 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 ایجاد کنید.