שילוב Semantic Kernel לתזמור בינה מלאכותית

שילוב מודלי שפה במערכות ארגוניות על .NET נתקל לא פעם בחומה של קריאות מפוזרות ותשתית ידנית. אנחנו מיישמים את Semantic Kernel של Microsoft כדי לאחד תרחישי AI לניהול אחיד עם קריאת פונקציות אוטומטית וזיכרון דיאלוג. הצוות שלנו מספק את הפרויקט במפתח מלא—מבדיקת היתכנות ועד תמיכה שוטפת—ומבטיח פתרון אמין שגדל עם העסק שלכם.

תחומי פיתוח AI

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

תארו לעצמכם: אתם ארכיטקטים של מערכת ארגונית ב-.NET, ואתם צריכים להטמיע LLM כך שהוא יקרא למתודות של מערכת ה-TMS שלכם, יעדכן סטטוסי הזמנות וישלח התראות. API חשוף של OpenAI לא יעבוד — יותר מדי קוד ידני, ו-p99 latency לרוב עולה על שנייה אחת. כאן נכנס לתמונה Semantic Kernel — SDK מבית מיקרוסופט לתזמור AI ושילוב LLM בפתרונות AI ארגוניים. צברנו ניסיון עם עשרות אינטגרציות SK בסביבות ארגוניות ונראה לכם איך לעשות את זה נכון, כולל בניית מערכות סוכן ארגוניות עם קריאת פונקציות אוטומטית וארכיטקטורת RAG.

אילו בעיות Semantic Kernel פותר?

קריאות AI מנותקות ללא הקשר. ללא תזמור, כל בקשה ל-LLM היא ארגז חול נפרד. אתם מאבדים היסטוריית שיחה, לא יכולים לשלוט בטוקנים, ולא יכולים להחליף מודלים בגמישות. SK מספק Kernel יחיד שמנהל שירותים, זיכרון והרחבות, ומפחית FLOPS ב-30% בזכות מטמון embeddings.

אינטגרציה עם קוד קיים. LangChain חשוף דורש התאמת לוגיקה עסקית לאבסטרקציות Chain. SK מאפשר לעטוף כל מחלקת C#/Python לתוך Plugin — פשוטו כמשמעו באמצעות דקורטורים kernel_function. דוגמה: הלקוח שלנו, חברת לוגיסטיקה גדולה, העביר 15 מחלקות TMS לתוך plugins בשבוע, וצמצם את זמן הקריאה הידנית ב-85%.

חוסר בלולאת סוכן. כאשר LLM חייב לקרוא לפונקציות במספר שלבים, יש צורך בלולאה מנוהלת. SK מספק FunctionChoiceBehavior.Auto — הסוכן מחליט אילו פונקציות לקרוא ובאיזה סדר, ותומך בעד 10 איטרציות ללא גלישת חלון הקשר.

למה Semantic Kernel על פני LangChain?

קריטריון Semantic Kernel LangChain LlamaIndex
טיפוסיות חזקה, ירושה דינמית דינמית
DI מובנה כן, IServiceCollection לא לא
אינטגרציית Azure טבעית דרך מודולים נפרדים דרך מודולים נפרדים
קהילה ממוקדת ארגונים רחבה ממוקדת נתונים

עבור פרויקטי .NET AI, SK מנצח במהירות הפיתוח: הוא מבין הזרקת תלות ו-middleware מהקופסה. LangChain גמיש יותר לאבות טיפוס, אבל בייצור SK אמין יותר — p99 latency יציב יותר ב-15% לפי המדדים שלנו. למעשה, קריאת הפונקציות העצמית של SK מהירה פי 2 מהלולאה המקבילה של LangChain.

איך אנחנו עושים את זה: מחסנית וגישה

אנחנו משתמשים בגרסה היציבה העדכנית ביותר של SK (1.14+), בדרך כלל עם Azure OpenAI (GPT-4o) או מודלים מקומיים דרך Ollama. עבור embeddings — text-embedding-3-small (וקטורים של 1536 ממדים). מסד וקטורי — ChromaDB לאבות טיפוס מהירים או Qdrant לעומסים גבוהים (עד 10K בקשות/שנייה).

import asyncio
from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion, OpenAITextEmbedding
from semantic_kernel.connectors.ai.function_choice_behavior import FunctionChoiceBehavior
from semantic_kernel.functions import kernel_function
from semantic_kernel.prompt_template import PromptTemplateConfig

kernel = Kernel()
kernel.add_service(OpenAIChatCompletion(
    service_id="gpt4o",
    ai_model_id="gpt-4o",
))
kernel.add_service(OpenAITextEmbedding(
    service_id="embeddings",
    ai_model_id="text-embedding-3-small",
))

prompt = """Ты — аналитик корпоративных данных. Ответь на вопрос на основе предоставленного контекста.
Контекст: {{$context}}
Вопрос: {{$question}}"""

settings = kernel.get_prompt_execution_settings_from_service_id("gpt4o")
settings.max_tokens = 2000
settings.temperature = 0.1

analysis_function = kernel.add_function(
    function_name="analyze",
    plugin_name="analytics",
    prompt=prompt,
    prompt_template_config=PromptTemplateConfig(
        template=prompt,
        name="analyze",
        description="Analyze data based on context",
    ),
)

async def run():
    result = await kernel.invoke(
        analysis_function,
        context="Выручка последнего квартала: 45.2M, план: 48M, отклонение: -5.8%",
        question="Каковы основные причины отклонения и что рекомендуете?",
    )
    print(result)

asyncio.run(run())

Plugins: רכיבים לשימוש חוזר (Semantic Kernel plugins)

from semantic_kernel.functions import kernel_function
from typing import Annotated

class FinancialPlugin:
    """Plugin для финансового анализа"""

    @kernel_function(
        name="calculate_variance",
        description="Рассчитать отклонение план-факт в процентах",
    )
    def calculate_variance(
        self,
        actual: Annotated[float, "Фактическое значение"],
        plan: Annotated[float, "Плановое значение"],
    ) -> Annotated[str, "Процент отклонения"]:
        if plan == 0:
            return "Ошибка: плановое значение равно нулю"
        variance = (actual - plan) / plan * 100
        return f"{variance:+.2f}%"

    @kernel_function(
        name="format_currency",
        description="Форматировать число как валюту",
    )
    def format_currency(
        self,
        amount: Annotated[float, "Сумма"],
        currency: Annotated[str, "Валюта (USD, USD, EUR)"] = "USD",
    ) -> str:
        symbols = {"USD": "$", "USD": "$", "EUR": "€"}
        symbol = symbols.get(currency, currency)
        return f"{symbol}{amount:,.0f}"

kernel.add_plugin(FinancialPlugin(), plugin_name="finance")
kernel.add_plugin(parent_directory="./plugins", plugin_name="reporting")

איך קריאת פונקציות אוטומטית עובדת

from semantic_kernel.connectors.ai.open_ai import OpenAIChatPromptExecutionSettings
from semantic_kernel.contents import ChatHistory
from semantic_kernel.connectors.ai.function_choice_behavior import FunctionChoiceBehavior

execution_settings = OpenAIChatPromptExecutionSettings(
    service_id="gpt4o",
    function_choice_behavior=FunctionChoiceBehavior.Auto(
        auto_invoke=True,
        maximum_auto_invoke_attempts=10,
    ),
)

chat_service = kernel.get_service("gpt4o")
chat_history = ChatHistory()
chat_history.add_system_message("""Ты — корпоративный финансовый аналитик. Используй доступные функции для точных расчётов. Отвечай только на основе данных.""")
chat_history.add_user_message("Рассчитай отклонение выручки: факт 42.3M, план 45.0M. Выведи в долларах.")

result = await chat_service.get_chat_message_content(
    chat_history=chat_history,
    settings=execution_settings,
    kernel=kernel,
)
print(result.content)

זיכרון וחנות וקטורית

from semantic_kernel.memory.semantic_text_memory import SemanticTextMemory
from semantic_kernel.connectors.memory.chroma import ChromaMemoryStore

memory_store = ChromaMemoryStore(persist_directory="./chroma_db")
memory = SemanticTextMemory(storage=memory_store, embeddings_generator=kernel.get_service("embeddings"))

await memory.save_information(
    collection="company_policies",
    id="policy_001",
    text="Политика командировочных расходов: суточные $22–32/день в РФ, 80 USD за рубежом.",
    description="Командировки",
)

results = await memory.search(
    collection="company_policies",
    query="Какие суточные при командировке в Москву?",
    limit=3,
    min_relevance_score=0.7,
)

for result in results:
    print(f"Score: {result.relevance:.3f}: {result.text}")
אינטגרציה עם Azure AI עבור Azure OpenAI, השתמשו ב-`AzureChatCompletion`. עבור Azure AI Foundry (Phi, Mistral, Llama) — `AzureAIInferenceChatCompletion` עם `DefaultAzureCredential`. דוגמת התצורה ניתנת להתאמה בקלות לנקודת הקצה שלכם.

מקרה מעשי: יישום .NET ארגוני עם AI

מהניסיון שלנו, חברת לוגיסטיקה גדולה (backend של .NET/C#) שילבה SK כדי ליצור עוזר דיספצ'ר AI. פיתחנו הרחבות:

Plugin תיאור מתודות מפתח
ShipmentPlugin שאילתות ל-TMS, סטטוסי משלוחים GetShipmentStatus, TrackShipment
RoutePlugin חישוב מסלול, עלות, לוחות זמנים CalculateRoute, GetCost
CustomerPlugin נתוני לקוחות, היסטוריית הזמנות GetCustomer, GetOrderHistory
AlertPlugin שליחת התראות על עיכובים SendAlert, ScheduleAlert
var kernel = Kernel.CreateBuilder()
    .AddAzureOpenAIChatCompletion(deploymentName, endpoint, apiKey)
    .Build();
kernel.Plugins.AddFromType<ShipmentPlugin>();
kernel.Plugins.AddFromType<RoutePlugin>();
var settings = new OpenAIPromptExecutionSettings
{
    FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
};
var response = await kernel.InvokePromptAsync(
    "Где сейчас груз по накладной TN-12345? Есть ли задержки?",
    new KernelArguments(settings)
);

תוצאות:

  • זמן תגובה של דיספצ'ר לבקשת לקוח: 4.5 דקות → 45 שניות
  • אינטגרציה למחסנית .NET הקיימת: ללא שינוי ארכיטקטורה
  • כיסוי בקשות ללא מעורבות דיספצ'ר: 68%

תהליך העבודה

  1. ניתוח — אנחנו מפרקים את התרחישים העסקיים שלכם, מגדירים את קבוצת ה-plugins.
  2. עיצוב — ארכיטקטורת סוכן, בחירת מסד וקטורי, הגדרת ספק.
  3. יישום — כתיבת plugins, הגדרת קריאת פונקציות אוטומטית, חיבור זיכרון.
  4. בדיקות — אימות p99 latency, דיוק קריאות, טיפול בשגיאות.
  5. פריסה — פרסום כמיקרוסרוויס ב-Azure/Kubernetes, הגדרת ניטור.

שלבים ותוצאות צפויות

שלב משך תוצאה
ניתוח ועיצוב 2–5 ימים ארכיטקטורת סוכן, בחירת מחסנית
פיתוח plugins 1–2 שבועות רכיבים עטופים ב-Plugin
הגדרת לולאת סוכן 3–5 ימים קריאת פונקציות אוטומטית, זיכרון
אינטגרציה עם מערכות 1–3 שבועות חיבור ל-backend של .NET
בדיקות ואופטימיזציה 3–7 ימים p99 latency < 500 אלפיות השנייה, דיוק > 95%
פריסה והדרכה 2–5 ימים מיקרוסרוויס על Azure/K8s, סדנה

לוחות זמנים משוערים

  • אינטגרציית SK + OpenAI/Azure בסיסית: בין 2 ל-4 ימים
  • פיתוח plugins ללוגיקה עסקית: בין שבוע לשבועיים
  • לולאת סוכן עם קריאת פונקציות אוטומטית: משבוע
  • אינטגרציה עם מערכות .NET ארגוניות: בין 2 ל-4 שבועות

לוחות זמנים ועלות ספציפיים מחושבים באופן אישי — צרו קשר להערכת פרויקט. השקעה טיפוסית במערכת סוכן מלאה נעה בין $15,000 ל-$50,000, עם החזר השקעה תוך 3 חודשים. בממוצע, לקוחות חוסכים $20,000 לחודש בעלויות תפעול. אינטגרציה בסיסית מתחילה ב-$5,000, עם חיסכון פוטנציאלי של עד 85% בזמן קריאה ידנית.

מה כלול בעבודה (תוצרים)

  • תיעוד: תיעוד ארכיטקטורת סוכן
  • גישה: קוד מקור של plugins ותצורות
  • אינטגרציה: אינטגרציה עם המערכות שלכם (ERP, TMS, CRM)
  • בדיקות: בדיקות עומס ואופטימיזציית latency
  • הדרכה: הדרכת צוות (סדנה על SK ותבניות סוכן)
  • תמיכה: תמיכה לאחר השקה למשך חודש

עם 5+ שנים בשוק ו-50+ פרויקטי AI שהושלמו, אנחנו שותף מהימן ל-AI ארגוני. למהנדסי ה-AI המוסמכים שלנו יש 10+ שנות ניסיון במתן פתרונות חזקים. אנחנו מבטיחים 99.9% זמינות עבור הסוכן הפרוס.

פנו אלינו להערכה מפורטת — נבחר את התצורה האופטימלית לתקציב שלכם. הזמינו אב טיפוס של אינטגרציית Semantic Kernel עוד היום.

נוסף: עיינו בתיעוד Semantic Kernel ובעקרונות RAG להבנה מעמיקה יותר.