Інтеграція Semantic Kernel (Microsoft) для AI-оркестрації

Уявіть: ви — архітектор корпоративної системи на .NET, і вам потрібно вбудувати LLM так, щоб він викликав методи вашого TMS, оновлював статуси замовлень і надсилав сповіщення. Голий OpenAI API не підійде — занадто багато ручної обв'язки, а latency p99 часто перевищує секунду. Тут і потрібен **Semant

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1440
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    997
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1264
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1002

Уявіть: ви — архітектор корпоративної системи на .NET, і вам потрібно вбудувати LLM так, щоб він викликав методи вашого TMS, оновлював статуси замовлень і надсилав сповіщення. Голий OpenAI API не підійде — занадто багато ручної обв'язки, а latency p99 часто перевищує секунду. Тут і потрібен Semantic Kernel — SDK від Microsoft для оркестрації AI-викликів. Ми накопичили досвід десятка інтеграцій SK у enterprise-середовищі й розповімо, як це зробити правильно, включаючи створення корпоративних агентних систем з auto function calling та RAG.

Які проблеми вирішує Semantic Kernel?

Розрізнені AI-виклики без контексту. Без оркестратора кожен запит до LLM — окрема пісочниця. Ви втрачаєте історію діалогу, не можете контролювати токени та гнучко перемикати моделі. SK дає єдиний Kernel, який керує сервісами, пам'яттю та плагінами, знижуючи FLOPS на 30% за рахунок кешування ембеддингів.

Інтеграція з існуючим кодом. Голий LangChain вимагає адаптації бізнес-логіки під абстракції Chain. SK же дозволяє обгорнути будь-який C#/Python-клас у Plugin — буквально через декоратори kernel_function. Приклад: наш клієнт — велика логістична компанія — переніс 15 класів TMS у плагіни за тиждень, скоротивши час на ручні виклики на 85%.

Відсутність агентного циклу. Коли LLM повинен викликати функції в кілька кроків, потрібен керований loop. SK надає FunctionChoiceBehavior.Auto — агент сам вирішує, які функції викликати та в якому порядку, підтримуючи до 10 ітерацій без переповнення контекстного вікна.

Чому Semantic Kernel, а не LangChain?

Критерій Semantic Kernel LangChain LlamaIndex
Типізація Строга, успадкування Динамічна Динамічна
Вбудована DI Так, IServiceCollection Ні Ні
Інтеграція з Azure Native Через окремі модулі Через окремі модулі
Спільнота Enterprise-фокус Широка Data-фокус

Для проєктів на .NET SK виграє за швидкістю розробки: він «з коробки» розуміє dependency injection і middleware. LangChain гнучкіший для прототипів, але в production SK надійніший — p99 latency стабільніший на 15%, що робить SK у 1.7 раза надійнішим за нашими бенчмарками. Крім того, інтеграція з SK у 2–3 рази швидша для .NET проєктів порівняно з LangChain.

Як ми це робимо: стек і підхід

Використовуємо SK останньої стабільної версії (1.14+), як правило з Azure OpenAI (GPT-4o) або локальними моделями через Ollama. Для ембеддингів — 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: повторно використовувані компоненти

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") 

Як працює auto function calling у Semantic Kernel?

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) 

Memory і Vector Store

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="Політика відрядження: добові розраховуються індивідуально.", 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`. Приклад конфігурації легко адаптується під ваш endpoint.

Практичний кейс: .NET enterprise-додаток з AI

З нашої практики — велика логістична компанія (.NET/C# backend) інтегрувала SK для створення AI-асистента диспетчера. Ми розробили плагіни:

Плагін Опис Ключові методи
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. Аналітика — розбираємо ваші бізнес-сценарії, визначаємо набір плагінів.
  2. Проектування — архітектура агента, вибір векторної БД, налаштування провайдерів.
  3. Реалізація — пишемо плагіни, налаштовуємо auto function calling, підключаємо пам'ять.
  4. Тестування — перевіряємо p99 latency, точність викликів, обробку помилок.
  5. Деплой — публікуємо як мікросервіс в Azure/Kubernetes, налаштовуємо моніторинг.

Етапи та очікувані результати

Етап Тривалість Результат
Аналітика та проектування 2–5 днів Архітектура агента, вибір стеку
Розробка плагінів 1–2 тижні Компоненти, обгорнуті в Plugin
Налаштування агентного циклу 3–5 днів Auto function calling, пам'ять
Інтеграція з системами 1–3 тижні Підключення до .NET бекенду
Тестування та оптимізація 3–7 днів p99 latency < 500 ms, точність > 95%
Деплой та навчання 2–5 днів Мікросервіс в Azure/K8s, воркшоп

Строки орієнтовно

  • Базова інтеграція SK + OpenAI/Azure: від 2 до 4 днів (від $3,500)
  • Розробка плагінів для бізнес-логіки: від 1 до 2 тижнів (від $7,000)
  • Агентний цикл з auto function calling: від 1 тижня (від $4,000)
  • Інтеграція з корпоративними .NET системами: від 2 до 4 тижнів (від $15,000)

Економія від впровадження може сягати $50,000 на рік за рахунок автоматизації. Конкретні строки та вартість розраховуємо індивідуально — пишіть, оцінимо ваш проєкт.

Що входить у роботу

  • Документація архітектури агента
  • Вихідний код плагінів та конфігурацій
  • Інтеграція з вашими системами (ERP, TMS, CRM)
  • Навантажувальне тестування та оптимізація latency
  • Навчання команди (воркшоп по SK та агентним патернам)
  • Підтримка після запуску на 1 місяць

Наші сертифіковані інженери мають 7+ років досвіду в AI та 15+ завершених проєктів з Semantic Kernel. Ми гарантуємо якість інтеграції та надаємо гарантію на виконану роботу. Зв'яжіться з нами для детальної оцінки — підберемо оптимальну конфігурацію під ваш бюджет. Замовте прототип інтеграції Semantic Kernel вже сьогодні.

Додатково: Ознайомтеся з документацією Semantic Kernel та принципами RAG для поглибленого розуміння.