在AI浪潮汹涌的当下,一个基于.NET 9和Blazor技术栈的开源项目正在悄然改变着企业级AI应用的开发格局。AntSK,这个集成了Semantic Kernel和Kernel Memory的智能体平台,不仅展现了.NET生态在AI领域的强大潜力,更为开发者提供了一个完整的AI应用开发解决方案。

💡 项目概览:不只是一个知识库

AntSK(Ant Semantic Kernel)是一个基于.NET 9构建的企业级AI知识库和智能体平台。它巧妙地将微软的Semantic Kernel和Kernel Memory框架融合在一起,通过Blazor Server技术提供了一个现代化的Web界面,让AI应用的开发变得既直观又高效。

🎯 核心价值主张

  1. 多模型统一管理:支持OpenAI、Azure OpenAI、讯飞星火、阿里云积灵等主流大语言模型

  2. 智能知识库:基于向量化技术的文档检索和问答系统

  3. 开放插件架构:支持.NET DLL插件和API插件的动态加载

  4. 文生图能力:集成Stable Diffusion本地模型

  5. 企业级部署:支持Docker容器化和多种数据库后端

🏗️ 技术架构深度剖析

分层架构设计

AntSK采用了经典的分层架构模式,但在AI应用的特殊需求下进行了巧妙的调整:

graph TB
    subgraph "表现层 Presentation"
        UI[Blazor Server UI]
        API[Web API Controllers]
    end
    
    subgraph "应用服务层 Application"
        Chat[ChatService]
        KMS[KMService]
        Kernel[KernelService]
        Plugin[FunctionService]
    end
    
    subgraph "领域核心层 Domain"
        SK[Semantic Kernel]
        KM[Kernel Memory]
        Embedding[向量嵌入引擎]
    end
    
    subgraph "基础设施层 Infrastructure"
        DB[(关系数据库)]
        Vector[(向量数据库)]
        Storage[文件存储]
        OCR[OCR服务]
    end
1. 表现层:Blazor Server的现代化UI

AntSK选择Blazor Server而非传统的MVC或Web API + SPA模式,这个决策颇具前瞻性:

// Program.cs 中的关键配置
builder.Services.AddServerSideBlazor();
builder.Services.AddAntDesign(); // 集成Ant Design组件库

// 实时通信支持
app.MapBlazorHub();
app.MapFallbackToPage("/_Host");

技术亮点

  • 实时性:通过SignalR实现客户端与服务器的实时通信,完美适配AI对话场景

  • 组件化:基于Ant Design Blazor的企业级UI组件库

  • 服务端渲染:减少客户端资源消耗,提升首屏加载速度

2. 应用服务层:智能化的业务编排

ChatService:对话服务的核心引擎

[ServiceDescription(typeof(IChatService), ServiceLifetime.Scoped)]
public class ChatService(
    IKernelService _kernelService,
    IKMService _kMService,
    IKmsDetails_Repositories _kmsDetails_Repositories,
    IAIModels_Repositories _aIModels_Repositories
) : IChatService

这个服务展现了现代.NET的设计理念:

  • 使用主构造函数(.NET 9新特性)简化代码

  • 依赖注入模式确保服务解耦

  • 泛型仓储模式提供数据访问抽象

KernelService:AI模型的统一调度器

public Kernel GetKernelByApp(Apps app)
{
    var chatModel = _aIModels_Repositories.GetFirst(p => p.Id == app.ChatModelID);
    var chatHttpClient = OpenAIHttpClientHandlerUtil.GetHttpClient(chatModel.EndPoint);
    
    var builder = Kernel.CreateBuilder();
    WithTextGenerationByAIType(builder, chatModel, chatHttpClient);
    
    _kernel = builder.Build();
    RegisterPluginsWithKernel(_kernel);
    return _kernel;
}

这里的设计精妙之处在于:

  • 动态模型切换:每次创建新的Kernel实例,支持不同应用使用不同模型

  • 插件热加载:通过反射机制动态注册插件功能

  • 多AI厂商适配:统一的接口适配不同的AI服务提供商

3. 领域核心层:AI能力的技术基石

Semantic Kernel集成:函数调用的艺术
private void WithTextGenerationByAIType(IKernelBuilder builder, AIModels chatModel, HttpClient chatHttpClient)
{
    switch (chatModel.AIType)
    {
        case AIType.OpenAI:
            builder.AddOpenAIChatCompletion(
                modelId: chatModel.ModelName,
                apiKey: chatModel.ModelKey,
                httpClient: chatHttpClient);
            break;
        case AIType.AzureOpenAI:
            builder.AddAzureOpenAIChatCompletion(/*...*/);
            break;
        case AIType.SparkDesk:
            builder.Services.AddKeyedSingleton<IChatCompletionService>(
                chatModel.ModelName, 
                new SparkDeskChatCompletion(/*...*/));
            break;
    }
}

技术创新点

  • 多厂商统一接口:通过适配器模式支持不同AI服务商

  • HTTP客户端优化:自定义HttpClient处理代理和超时

  • 服务键化注册:使用.NET DI的键化服务支持多模型并存

Kernel Memory:知识库的向量化魔法
public MemoryServerless GetMemoryByKMS(string kmsID)
{
    var memoryBuild = new KernelMemoryBuilder()
        .WithCustomTextPartitioningOptions(new TextPartitioningOptions
        {
            MaxTokensPerLine = kms.MaxTokensPerLine,
            MaxTokensPerParagraph = kms.MaxTokensPerParagraph,
            OverlappingTokens = kms.OverlappingTokens
        });
    
    WithTextGenerationByAIType(memoryBuild, chatModel, chatHttpClient);
    WithTextEmbeddingGenerationByAIType(memoryBuild, embedModel, embeddingHttpClient);
    WithMemoryDbByVectorDB(memoryBuild);
    
    return memoryBuild.Build<MemoryServerless>();
}

核心技术特性

  • 文档分块策略:智能的文本分割算法,平衡检索精度和性能

  • 向量嵌入:支持BGE、OpenAI等多种嵌入模型

  • 多向量数据库:Postgres、Qdrant、Redis等多种存储后端

4. 插件系统:可扩展性的终极体现

AntSK的插件系统是其最具创新性的特性之一,支持三种插件类型:

.NET原生插件
[Description("AntSK:获取订单信息")]
[return: Description("订单信息")]
public string GetOrder([Description("订单号")] string id)
{
    return $"""
        订单ID: {id}
        商品名:小米MIX4
        数量:1个
        价格:4999元
        收货地址:上海市黄浦区
    """;
}

技术实现

  • 反射机制:运行时扫描带有特定特性的方法

  • 动态加载:使用AssemblyLoadContext实现程序集隔离

  • 依赖解析:自动解析插件依赖的服务

API插件
private void ImportApiFunction(Apps app, List<KernelFunction> functions)
{
    if (!string.IsNullOrWhiteSpace(app.ApiFunctionList))
    {
        var apiIdList = app.ApiFunctionList.Split(",");
        var apis = _apis_Repositories.GetList(p => apiIdList.Contains(p.Id));
        
        foreach (var api in apis)
        {
            var openApiDocument = OpenApiDocument.Parse(api.Content);
            var plugin = await _kernel.ImportPluginFromOpenApiAsync(
                api.Name, 
                openApiDocument, 
                new OpenApiFunctionExecutionParameters()
                {
                    HttpClient = httpClient,
                    EnableDynamicPayload = true
                });
            functions.AddRange(plugin);
        }
    }
}

设计亮点

  • OpenAPI标准:基于业界标准的API描述格式

  • 动态解析:运行时解析API文档并生成函数

  • HTTP客户端复用:优化网络资源使用

🎨 核心功能深度解析

1. 智能知识库:RAG架构的最佳实践

AntSK的知识库功能基于RAG(Retrieval-Augmented Generation)架构,但在实现上有诸多创新:

文档处理流水线
public void ImportKMSTask(ImportKMSTaskReq req)
{
    var _memory = _kMService.GetMemoryByKMS(km.Id);
    
    if (req.IsQA)
    {
        _memory.Orchestrator.AddHandler<TextExtractionHandler>("extract_text");
        _memory.Orchestrator.AddHandler<QAHandler>(km.ChatModelID);
        _memory.Orchestrator.AddHandler<GenerateEmbeddingsHandler>("generate_embeddings");
        _memory.Orchestrator.AddHandler<SaveRecordsHandler>("save_memory_records");
    }
}

处理流程

  1. 文本提取:支持Word、PDF、Excel、PPT等多种格式

  2. 问答生成:使用大语言模型生成问答对

  3. 向量化:将文本转换为高维向量

  4. 存储索引:保存到向量数据库中

检索增强机制
var searchResult = await memory.SearchAsync(
    questions, 
    index: KmsConstantcs.FileIndex, 
    filters: filters);

relevantSourceList.AddRange(searchResult.Results.SelectMany(item => 
    item.Partitions.Select(part => new RelevantSource()
    {
        SourceName = item.SourceName,
        Text = Markdown.ToHtml(part.Text),
        Relevance = part.Relevance
    })));

技术特点

  • 语义检索:基于向量相似度的智能检索

  • 结果重排:使用BGE-rerank模型提升检索精度

  • 上下文融合:将检索结果融入对话上下文

2. 文生图功能:Stable Diffusion的本地化部署

AntSK集成了Stable Diffusion模型,提供本地化的文生图能力:

public static Bitmap[] TextToImage(TextToImageParams textToImageParams)
{
    SDImagePtr sd_Image_ptr = Native.txt2img(sd_ctx,
        textToImageParams.Prompt,
        textToImageParams.NegativePrompt,
        textToImageParams.ClipSkip,
        textToImageParams.CfgScale,
        textToImageParams.Width,
        textToImageParams.Height,
        textToImageParams.SampleMethod,
        textToImageParams.SampleSteps,
        textToImageParams.Seed,
        textToImageParams.BatchCount,
        /*...其他参数...*/);

    Bitmap[] images = new Bitmap[textToImageParams.BatchCount];
    for (int i = 0; i < textToImageParams.BatchCount; i++)
    {
        SDImage sd_image = Marshal.PtrToStructure<SDImage>(
            sd_Image_ptr + i * Marshal.SizeOf<SDImage>());
        images[i] = GetBitmapFromSdImage(sd_image);
    }
    return images;
}

技术实现

  • P/Invoke调用:通过DllImport调用C++编写的SD库

  • 内存管理:使用Marshal类进行非托管内存操作

  • 批量生成:支持一次生成多张图片

3. OCR文字识别:多模态输入支持

private static void WithOcr(IKernelMemoryBuilder memoryBuild, Kmss kms)
{
    if (kms.IsOCR == 1)
    {
        memoryBuild.WithCustomImageOcr(new AntSKOcrEngine());
    }
}

AntSK集成了OCR引擎,支持从图片中提取文字,为多模态AI应用提供基础能力。

🛠️ 技术栈深度分析

后端技术栈

.NET 9:现代化的开发平台
<PropertyGroup>
    <TargetFramework>net9.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

关键特性应用

  • 可空引用类型:编译时空引用检查,提升代码质量

  • 隐式using:减少样板代码,提升开发效率

  • 主构造函数:简化依赖注入的写法

  • 原始字符串字面量:更好的多行字符串支持

依赖包版本管理
<PropertyGroup>
    <KMVersion>0.71.240820.1</KMVersion>
    <SKVersion>1.17.2</SKVersion>
    <NetVersion>9.0.0</NetVersion>
</PropertyGroup>

项目采用集中式版本管理,通过Directory.Build.props文件统一管理依赖版本,确保版本一致性。

数据访问层:SqlSugar ORM
builder.Services.Configure<DBConnectionOption>(
    builder.Configuration.GetSection("DBConnection"));

支持多种数据库:

  • PostgreSQL:推荐的生产环境数据库

  • SQLite:轻量级开发测试数据库

  • MySQL/SQL Server:传统企业级数据库

  • Oracle:大型企业级解决方案

AI技术栈

1. Semantic Kernel:AI编排框架
<PackageReference Include="Microsoft.SemanticKernel" Version="$(SKVersion)" />
<PackageReference Include="Microsoft.SemanticKernel.Core" Version="$(SKVersion)" />
<PackageReference Include="Microsoft.SemanticKernel.Plugins.Core" Version="$(SKVersion)-alpha" />

核心优势

  • 统一抽象:为不同AI服务提供统一接口

  • 插件机制:支持功能扩展和组合

  • 规划能力:支持复杂任务的自动规划和执行

2. Kernel Memory:知识管理框架
<PackageReference Include="Microsoft.KernelMemory.Core" Version="$(KMVersion)" />
<PackageReference Include="Microsoft.KernelMemory.MemoryDb.Postgres" Version="$(KMVersion)" />
<PackageReference Include="Microsoft.KernelMemory.MemoryDb.Qdrant" Version="$(KMVersion)" />
<PackageReference Include="Microsoft.KernelMemory.MemoryDb.Redis" Version="$(KMVersion)" />

多存储后端支持

  • PostgreSQL + pgvector:关系型数据库的向量扩展

  • Qdrant:专业的向量数据库

  • Redis:高性能内存向量存储

  • AzureAI Search:云端托管的搜索服务

前端技术栈

Ant Design Blazor:企业级UI组件
builder.Services.AddAntDesign();

组件特性

  • 丰富的组件库:60+高质量Blazor组件

  • 主题定制:支持深度定制的主题系统

  • 国际化:内置多语言支持

  • 响应式设计:适配各种屏幕尺寸

🚀 部署架构与运维实践

Docker容器化部署

AntSK提供了完整的容器化解决方案:

简化版部署(docker-compose.simple.yml)
version: '3.8'
services:
  antsk:
    container_name: antsk-simple
    image: registry.cn-hangzhou.aliyuncs.com/AIDotNet/antsk:latest
    ports:
      - "5000:5000"
    environment:
      - ASPNETCORE_URLS=http://*:5000
    volumes:
      - ./appsettings.json:/app/appsettings.json
      - ./data:/app/data

特点

  • SQLite数据库:无需额外数据库服务

  • 磁盘向量存储:简化向量数据管理

  • 快速启动:适合开发和小规模部署

完整版部署(docker-compose.yml)
version: '3.8'
services:
  antsk:
    depends_on:
      - postgres
      - redis
    environment:
      - ConnectionStrings__DefaultConnection=Host=postgres;Database=antsk;Username=antsk;Password=your_password
      - KernelMemory__VectorDb=Postgres

企业级特性

  • PostgreSQL集群:支持主从复制和读写分离

  • Redis缓存:提升系统响应速度

  • 监控集成:集成Aspire监控面板

配置管理最佳实践

{
  "DBConnection": {
    "DbType": "Postgres",
    "ConnectionStrings": "Host=localhost;Database=antsk;Username=antsk;Password=your_password"
  },
  "KernelMemory": {
    "VectorDb": "Postgres",
    "ConnectionString": "Host=localhost;Database=antsk;Username=antsk;Password=your_password",
    "TableNamePrefix": "km-"
  },
  "BackgroundTaskBroker": {
    "ImportKMSTask": {
      "WorkerCount": 2
    }
  }
}

配置要点

  • 环境隔离:开发、测试、生产环境独立配置

  • 敏感信息:使用环境变量或密钥管理服务

  • 性能调优:根据硬件资源调整工作线程数

🎯 应用场景与实践案例

1. 企业知识管理系统

场景描述:大型企业内部文档检索和知识问答

技术实现

  • 导入企业内部文档(规章制度、技术文档、培训材料)

  • 使用BGE中文嵌入模型提升中文检索效果

  • 集成企业认证系统,实现权限控制

价值体现

  • 提升员工查找信息效率80%

  • 减少重复性咨询工作量60%

  • 保障企业知识资产安全

2. 智能客服系统

场景描述:电商平台的智能客服机器人

技术实现

// 集成订单查询插件
[Description("AntSK:获取订单信息")]
public string GetOrder([Description("订单号")] string orderId)
{
    // 调用订单系统API
    var order = _orderService.GetOrderById(orderId);
    return JsonSerializer.Serialize(order);
}

功能特性

  • 24/7全天候服务

  • 多轮对话上下文理解

  • 业务系统集成(订单、物流、库存)

3. 研发团队的代码助手

场景描述:为开发团队提供代码查询和技术支持

技术实现

  • 导入项目文档、API文档、最佳实践

  • 集成代码仓库,实现代码片段搜索

  • 结合函数调用能力,提供实时的系统状态查询

🔮 技术趋势与未来展望

1. 多模态AI集成

随着GPT-4V、Claude 3等多模态模型的普及,AntSK未来将深度集成:

  • 图像理解:文档中的图表、图片内容理解

  • 视频处理:视频内容的自动转录和索引

  • 语音交互:语音输入输出能力

2. Agent工作流编排

基于Semantic Kernel的规划能力,构建更复杂的AI Agent:

  • 任务分解:复杂任务的自动分解和执行

  • 工具调用:与外部系统的深度集成

  • 决策推理:基于上下文的智能决策

3. 边缘计算优化

针对私有化部署需求:

  • 模型量化:减少模型大小和计算资源需求

  • 推理优化:使用ONNX Runtime等推理引擎

  • 硬件适配:支持更多类型的GPU和专用AI芯片

4. 企业级治理能力

  • 模型安全:内容过滤、偏见检测

  • 审计日志:完整的操作记录和追踪

  • 合规支持:满足各行业的合规要求

💎 技术亮点总结

1. 架构设计的前瞻性

AntSK的架构设计充分体现了现代软件工程的最佳实践:

  • 领域驱动设计:清晰的业务边界和职责划分

  • 依赖注入:高度解耦的服务架构

  • 异步编程:充分利用.NET的异步特性

2. AI技术的深度整合

不是简单的API调用,而是深度的技术整合:

  • 多模型适配:统一接口支持不同AI服务商

  • 向量化存储:高效的语义检索能力

  • 插件生态:可扩展的功能架构

3. 开发体验的优化

  • 热重载:Blazor的开发时热重载能力

  • 类型安全:C#的强类型系统保障

  • 工具链完善:Visual Studio的完整支持

4. 部署运维的便利性

  • 容器化:标准化的部署方式

  • 配置外化:灵活的配置管理

  • 监控集成:内置的监控和日志系统

🎪 结语:AI时代的.NET新篇章

AntSK项目的出现,标志着.NET生态在AI领域的一次重要突破。它不仅展示了.NET 9在现代AI应用开发中的强大能力,更为企业级AI应用的构建提供了一个完整的参考实现。

从技术角度看,AntSK成功地将Semantic Kernel、Kernel Memory等前沿AI框架与.NET生态深度融合,创造了一个既强大又易用的AI开发平台。从业务角度看,它为企业数字化转型提供了一个可落地、可扩展的智能化解决方案。

对于.NET开发者而言,AntSK不仅是一个可以直接使用的AI平台,更是学习现代AI应用架构设计的绝佳案例。它展示了如何在传统的Web应用框架基础上,构建面向AI时代的新型应用。

在AI技术日新月异的今天,AntSK以其开源、开放的姿态,为.NET社区在AI领域的探索提供了一个重要的里程碑。相信随着项目的持续发展和社区的积极参与,AntSK将成为企业级AI应用开发的重要基础设施,推动更多创新应用的诞生。


项目地址https://github.com/AIDotNet/AntSK
在线体验https://demo.antsk.cn/
技术文档http://antsk.cn

让我们一起见证.NET在AI时代的华丽蜕变,共同构建更智能的未来! 🚀✨

更多AIGC文章

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐