"在人工智能的浪潮中,RAG(检索增强生成)就像一把钥匙,打开了大模型与专业知识深度融合的神秘大门。而在AntSK项目中,Semantic Kernel与Kernel Memory的完美结合,更是将这把钥匙锻造得璀璨夺目。"

🎯 引言:为什么RAG技术如此重要?

想象一下,你正在与一个博学的AI助手对话,它不仅能流畅地回答问题,还能从你的企业知识库中精准检索相关信息,并结合最新的文档内容给出专业的回答。这不是科幻电影的场景,而是RAG技术在现实中的精彩演绎。

在当今这个信息爆炸的时代,企业的知识资产如同散落的珍珠,而RAG技术就是那根将它们串联成璀璨项链的金线。AntSK项目作为一个企业级的AI知识管理平台,巧妙地运用了Microsoft的Semantic Kernel和Kernel Memory技术栈,构建了一个功能强大、架构优雅的RAG系统。

🏗️ 技术架构:双剑合璧的智慧之选

Semantic Kernel:编排AI能力的指挥家

如果说AI模型是一个个才华横溢的音乐家,那么Semantic Kernel就是那位技艺精湛的指挥家,能够协调各种AI服务、插件和工具,奏出和谐动听的智能交响曲。

在AntSK项目中,Semantic Kernel承担着以下关键职责:

1. 多模型统一抽象
public class KernelService : IKernelService
{
    public Kernel GetKernelByApp(Apps app)
    {
        var chatModel = _aIModels_Repositories.GetFirst(p => p.Id == app.ChatModelID);
        var embedModel = _aIModels_Repositories.GetFirst(p => p.Id == app.EmbeddingModelID);
        var builder = GetKernelBuilderByAIModel(chatModel, embedModel);
        _kernel = builder.Build();
        RegisterPluginsWithKernel(_kernel);
        return _kernel;
    }
}

这段代码展现了Semantic Kernel的第一个魅力:统一抽象。无论是OpenAI的GPT系列、Azure OpenAI、还是国产的文心一言、星火大模型,都能通过统一的接口进行调用。就像一个万能遥控器,让开发者不再为不同AI服务的接口差异而头疼。

2. 智能插件系统
public void ImportFunctionsByApp(Apps app, Kernel _kernel)
{
    List<KernelFunction> functions = new List<KernelFunction>();
    
    //API插件
    ImportApiFunction(app, functions, _kernel);
    //本地函数插件
    ImportNativeFunction(app, functions, _kernel);
    
    _kernel.ImportPluginFromFunctions("AntSKFunctions", functions);
}

这里体现了Semantic Kernel的第二个亮点:插件生态。系统能够动态地将REST API、本地C#方法等包装成AI可调用的函数,让AI助手拥有了"手脚",能够真正地与外部世界交互。

3. 多Agent协作框架
// 支持多Agent群聊协作
ChatCompletionAgent agent = new()
{
    Name = "AssistantName",
    Instructions = "You are a helpful assistant.",
    Kernel = kernel,
    ExecutionSettings = new OpenAIPromptExecutionSettings() 
    { 
        ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions 
    },
};

在复杂的业务场景中,单一AI助手往往力不从心。AntSK通过Semantic Kernel的多Agent框架,让不同专长的AI助手协同工作,如同一个高效的专业团队。

Kernel Memory:知识存储的智慧守护者

如果说Semantic Kernel是大脑的思维中枢,那么Kernel Memory就是记忆宫殿的建筑师,负责将海量的非结构化知识转化为AI可以理解和检索的形式。

1. 多模态文档处理
public MemoryServerless GetMemoryByApp(Apps app)
{
    var memoryBuild = new KernelMemoryBuilder()
        .WithSearchClientConfig(searchClientConfig)
        .WithCustomTextPartitioningOptions(new TextPartitioningOptions
        {
            MaxTokensPerLine = kms.MaxTokensPerLine,
            MaxTokensPerParagraph = kms.MaxTokensPerParagraph,
            OverlappingTokens = kms.OverlappingTokens
        });
    
    memoryBuild.WithCustomImageOcr(AntSKOcrEngine.Instance);
    WithTextGenerationByAIType(memoryBuild, chatModel, chatHttpClient);
    WithTextEmbeddingGenerationByAIType(memoryBuild, embedModel, embeddingHttpClient);
    WithMemoryDbByVectorDB(memoryBuild);
    
    return memoryBuild.Build<MemoryServerless>();
}

这段代码揭示了Kernel Memory的强大之处:不仅支持文本文档,还集成了OCR引擎处理图片中的文字,真正实现了多模态知识处理。其中的文本分段策略更是体现了工程师们的匠心独运:

  • MaxTokensPerLine: 控制单行最大token数

  • MaxTokensPerParagraph: 控制段落最大token数

  • OverlappingTokens: 段落间重叠token数,确保语义连续性

2. 灵活的向量存储后端
private void WithMemoryDbByVectorDB(IKernelMemoryBuilder memory)
{
    string VectorDb = KernelMemoryOption.VectorDb.ConvertToString();
    switch (VectorDb)
    {
        case "Postgres": 
            memory.WithPostgresMemoryDb(new PostgresConfig());
            break;
        case "Qdrant":
            memory.WithQdrantMemoryDb(qdrantConfig[0], qdrantConfig[1]);
            break;
        case "Redis":
            memory.WithRedisMemoryDb(new RedisConfig());
            break;
        case "AzureAISearch":
            memory.WithAzureAISearchMemoryDb(aisearchConfig[0], aisearchConfig[1]);
            break;
    }
}

支持多种向量数据库的设计体现了系统的高度灵活性:从传统的Postgres扩展pgvector,到专业的向量数据库Qdrant,再到云端的Azure AI Search,开发者可以根据实际需求选择最适合的存储方案。

3. 智能文档分段与向量化
public async Task<PostgresMemoryRecord> GenerateEmbeddingAsync(string kmsId, PostgresMemoryRecord item)
{
    var memory = GetMemoryByKMS(kmsId);
    
    foreach (var generator in memory.Orchestrator.GetEmbeddingGenerators())
    {
        var result = await generator.GenerateEmbeddingAsync(item.Content);
        if (result.Length > 0)
        {
            item.Embedding = new Vector(result.Data);
        }
    }
    return item;
}

这个过程看似简单,实则蕴含着深刻的技术智慧:将自然语言文本转换为高维向量空间中的点,使得语义相似的内容在向量空间中彼此靠近,为后续的相似性检索奠定了基础。

🎨 RAG核心流程:知识检索的艺术

智能检索:在知识海洋中精准定位

RAG的核心魅力在于能够在海量知识中精准定位相关信息。AntSK的检索流程堪称工程艺术的典范:

public async Task<(string, List<RelevantSource>, bool)> GetRelevantSourcesAndHistoryAsync(
    Apps app, string questions, ChatHistory history)
{
    // 1. 提示词优化
    if (appKms.IsPromptOptimize && history.Count() >= 3)
    {
        KernelFunction recommend = _kernel.Plugins.GetFunction("KMSPlugin", "HistoryPromptOptimize");
        questions = funcResult.GetValue<string>()?.Trim().ReplaceThink() ?? questions;
    }
    
    // 2. 向量检索
    var relevantSourceList = await _kMService.GetRelevantSourceList(app, questions);
    
    // 3. 重排序优化
    if (appKms.IsRerank && !string.IsNullOrEmpty(appKms.RerankModelID))
    {
        foreach (var item in relevantSourceList)
        {
            item.RerankScore = await _kMService.Rerank(rerankModel, rerank);
        }
        relevantSourceList = relevantSourceList.OrderByDescending(p => p.RerankScore).ToList();
    }
    
    return (dataMsg.ToString(), relevantSourceList, isSearch);
}

这个流程展现了三个层次的智能优化:

  1. 历史对话优化:基于对话历史自动优化查询词,提升检索精度

  2. 向量相似性检索:在高维向量空间中寻找语义相似的知识片段

  3. AI重排序:使用专门的重排序模型进一步优化检索结果的相关性

上下文融合:让AI理解更深层的含义

检索到相关知识后,如何将其与用户问题巧妙融合,生成有价值的回答,这是RAG技术的另一个关键挑战:

public async IAsyncEnumerable<StreamingKernelContent> SendKmsByAppAsync(
    Apps app, string questions, ChatHistory history, 
    List<RelevantSource>? relevantSources = null)
{
    var (dataMsg, relevantSourceList, isSearch) = await GetRelevantSourcesAndHistoryAsync(app, questions, history);
    
    if (isSearch)
    {
        // 记录使用了知识库
        PluginUtils.SafeAddPlugin(calledPlugins, "知识库.RAG检索");
        
        // 构建包含检索内容的提示词
        if (history.Count() > 0)
        {
            history.RemoveAt(history.Count() - 1);
        }
        history.AddUserMessage(appKms.Prompt.Replace("{{$doc}}", dataMsg.ToString()).Replace("{{$input}}", questions));
        
        // 流式生成回答
        var chatResult = _chatCompletionService.GetStreamingChatMessageContentsAsync(history, settings);
        await foreach (var content in chatResult)
        {
            yield return content;
        }
    }
}

这里的设计思路非常巧妙:通过模板化的提示词将检索到的知识文档与用户问题融合,让AI在充分理解上下文的基础上生成回答。流式输出的设计更是让用户体验如行云流水般顺畅。

🌟 应用场景:从理论到实践的华丽转身

1. 企业知识问答系统

在传统企业中,员工经常需要在堆积如山的技术文档、政策手册中寻找答案。AntSK的RAG系统就像一个博学的同事,能够瞬间定位相关文档并给出准确回答:

场景示例

  • 用户询问:"公司的差旅报销标准是什么?"

  • 系统检索:自动从HR政策文档中找到相关条款

  • 智能回答:结合具体政策条文,给出详细的报销标准说明

2. 智能客服系统

客服领域是RAG技术的另一个重要应用场景。AntSK能够将产品手册、FAQ、历史客服记录等转化为智能客服的知识基础:

// 支持多轮对话的上下文管理
public async Task<ChatHistory> GetChatHistory(List<Messages> MessageList, ChatHistory history)
{
    // 只保留最后 5 条记录,避免上下文过长
    var lastFiveMessages = MessageList.OrderByDescending(m => m.CreateTime).Take(5).OrderBy(m => m.CreateTime).ToList();
    
    // 处理连续的用户消息问题
    var processedMessages = new List<Messages>();
    for (int i = 0; i < lastFiveMessages.Count; i++)
    {
        if (i > 0 && lastFiveMessages[i].IsSend && lastFiveMessages[i - 1].IsSend)
        {
            processedMessages.RemoveAt(processedMessages.Count - 1);
        }
        processedMessages.Add(lastFiveMessages[i]);
    }
    
    return history;
}

3. 代码文档助手

对于技术团队而言,AntSK可以构建强大的代码文档助手,帮助开发者快速理解项目架构、API使用方法等:

技术亮点

  • 支持多种编程语言的代码文档解析

  • 自动提取API接口信息和使用示例

  • 结合代码注释和文档生成全面的技术说明

4. 工作流智能化

AntSK的工作流功能展现了RAG技术在复杂业务场景中的应用:

public async IAsyncEnumerable<StreamWorkflowResult> SendFlowStreamAsync(Apps app, string questions)
{
    // 初始化工作流
    var setupResult = await SetupWorkflowAsync(app, questions);
    if (!setupResult.Success)
    {
        yield return new StreamWorkflowResult(setupResult.Message, true);
        yield break;
    }
    
    // 等待工作流完成并获取结果
    await foreach (var statusUpdate in MonitorWorkflowAsync(setupResult.InstanceId))
    {
        yield return statusUpdate;
    }
}

工作流中的每个步骤都可以利用RAG技术,从知识库中检索相关信息,实现真正的智能化业务流程。

🔬 技术深度解析:工程实现的精妙之处

1. 多模型适配的技术架构

AntSK在多模型支持方面的设计堪称典范,通过统一的抽象层支持了众多AI服务提供商:

private void WithTextEmbeddingGenerationByAIType(IKernelBuilder builder, AIModels embedModel, HttpClient embeddingHttpClient)
{
    switch (embedModel.AIType)
    {
        case AIType.OpenAI:
            builder.AddOpenAITextEmbeddingGeneration(modelId: embedModel.ModelName, apiKey: embedModel.ModelKey, httpClient: embeddingHttpClient);
            break;
        case AIType.AzureOpenAI:
            builder.AddAzureOpenAITextEmbeddingGeneration(deploymentName: embedModel.ModelName, apiKey: embedModel.ModelKey, endpoint: embedModel.EndPoint);
            break;
        case AIType.BgeEmbedding:
            builder.AddBgeTextEmbeddingGeneration(new BgeTextEmbeddingGeneratorService(embedModel.EndPoint, embedModel.ModelName));
            break;
        case AIType.DashScope:
            builder.Services.AddDashScopeTextEmbeddingGeneration(embedModel.ModelKey, embedModel.ModelName);
            break;
    }
}

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

  • 统一接口:无论底层使用哪种AI服务,上层业务逻辑保持一致

  • 灵活切换:可以根据成本、性能、政策等因素灵活选择AI服务提供商

  • 扩展性强:新增AI服务支持时,只需要增加相应的适配代码

2. 向量检索的性能优化

在大规模知识库场景下,检索性能是关键挑战。AntSK采用了多层次的优化策略:

// 支持分批次的大数据集分析
public static class Text2SqlSysOption 
{
    /// <summary>
    /// 小数据集阈值(少于或等于此数量的记录使用直接分析)
    /// </summary>
    public static int SmallDataSetThreshold { get; set; } = 50;
    
    /// <summary>
    /// 分段分析的批次大小
    /// </summary>
    public static int BatchSize { get; set; } = 20;
    
    /// <summary>
    /// 大数据集分析时的最大分析记录数
    /// </summary>
    public static int MaxAnalyzedRecords { get; set; } = 200;
}

优化策略包括

  • 智能分批:根据数据集大小采用不同的处理策略

  • 向量索引:利用向量数据库的高效索引机制

  • 缓存机制:缓存频繁查询的结果,提升响应速度

3. 内存管理与资源优化

public class PostgresMemoryRecord
{
    /// <summary>
    /// Content embedding vector
    /// </summary>
    public Vector Embedding { get; set; } = new Vector(new ReadOnlyMemory<float>());
    
    /// <summary>
    /// Memory content
    /// </summary>
    public string Content { get; set; } = string.Empty;
    
    /// <summary>
    /// Additional payload, not searchable
    /// </summary>
    public string Payload { get; set; } = string.Empty;
}

内存记录的设计充分考虑了性能和存储效率:

  • 向量压缩:使用ReadOnlyMemory<float>减少内存复制

  • 分离存储:将可搜索内容与元数据分离,优化检索性能

  • 懒加载:按需加载详细内容,减少内存占用

🎪 实战案例:Text2SQL的RAG应用

AntSK项目中的Text2SQL功能是RAG技术的一个精彩应用案例,它将自然语言查询转换为SQL语句,并结合知识增强技术提升查询的准确性。

核心实现原理

public async Task<ChatMessage> GenerateAndExecuteSqlAsync(
    string connectionId, string userName, string userQuestion, 
    bool enableDataAnalysis = true, bool showTableResult = true, bool showSqlQuery = false)
{
    // 1. 知识增强:从术语库检索相关概念
    var enhancedQuestion = await _knowledgeEnhancedService.EnhanceQuestionAsync(connectionId, userQuestion);
    
    // 2. SQL生成:使用增强后的问题生成SQL
    var sqlResult = await GenerateSqlAsync(connectionId, userName, enhancedQuestion);
    
    // 3. 执行与分析:执行SQL并进行智能分析
    if (enableDataAnalysis && sqlResult.QueryResult?.Count > 0)
    {
        sqlResult.AnalysisResult = await AnalyzeQueryResultAsync(enhancedQuestion, sqlResult.QueryResult);
    }
    
    return sqlResult;
}

知识增强的实现

public async Task<string> EnhanceQuestionAsync(string connectionId, string userQuestion)
{
    // 1. 术语向量检索
    var terminologies = await SearchRelevantTerminologiesAsync(connectionId, userQuestion);
    
    // 2. 数据库结构增强
    var schemaContext = await GetRelevantSchemaAsync(connectionId, userQuestion);
    
    // 3. 历史查询模式学习
    var queryPatterns = await GetSimilarQueryPatternsAsync(connectionId, userQuestion);
    
    // 4. 生成增强后的查询上下文
    return await GenerateEnhancedContextAsync(userQuestion, terminologies, schemaContext, queryPatterns);
}

这个实现展现了RAG技术在结构化数据查询中的巧妙应用:

  • 术语映射:将业务术语映射到数据库字段

  • 模式学习:从历史查询中学习用户的查询模式

  • 上下文增强:提供丰富的上下文信息帮助AI理解查询意图

大数据集智能分析

public async Task<string> AnalyzeQueryResultAsync(string userQuestion, List<Dictionary<string, object>> queryResult)
{
    if (queryResult.Count <= Text2SqlSysOption.SmallDataSetThreshold)
    {
        // 小数据集:直接分析
        return await AnalyzeSmallDatasetAsync(userQuestion, queryResult);
    }
    else if (Text2SqlSysOption.EnableLargeDataSetAnalysis)
    {
        // 大数据集:分段分析
        return await AnalyzeLargeDatasetAsync(userQuestion, queryResult);
    }
    else
    {
        // 回退到传统分析
        var limitedData = queryResult.Take(Text2SqlSysOption.BatchSize).ToList();
        return await AnalyzeSmallDatasetAsync(userQuestion, limitedData);
    }
}

分段分析的优势

  • 可扩展性:能够处理数十万条记录的查询结果

  • 智能采样:优先分析最具代表性的数据段

  • 综合报告:将分段分析结果综合成完整的洞察报告

🔮 未来展望:RAG技术的演进方向

1. 多模态融合的深度发展

随着AI技术的发展,未来的RAG系统将不仅仅处理文本,还会融合图像、音频、视频等多模态信息:

// 未来可能的多模态检索接口
public async Task<MultiModalSearchResult> SearchMultiModalKnowledge(
    string textQuery, 
    byte[]? imageData = null, 
    byte[]? audioData = null)
{
    // 融合文本、图像、音频的语义检索
    // 返回最相关的多模态知识片段
}

2. 实时知识更新与学习

传统的RAG系统知识更新相对静态,未来的系统将支持实时的知识学习和更新:

  • 增量学习:新增知识无需重建整个索引

  • 知识冲突解决:自动识别和解决知识冲突

  • 个性化知识图谱:为每个用户构建个性化的知识视图

3. 联邦学习与隐私保护

在企业级应用中,数据隐私和安全至关重要:

  • 联邦RAG:多个组织共享知识而不泄露原始数据

  • 差分隐私:在保护隐私的前提下提供知识检索服务

  • 知识蒸馏:将大型知识库压缩为轻量级模型

4. 智能知识图谱构建

AntSK项目中的GraphRAG功能预示了未来的发展方向:

public async Task<GraphModel> CreateGraphAsync(string input)
{
    var retryPolicy = Policy.Handle<Exception>().RetryAsync(GraphSysOption.RetryCounnt);
    var result = await retryPolicy.ExecuteAsync<GraphModel>(async () =>
    {
        OpenAIPromptExecutionSettings settings = new()
        {
            Temperature = 0.1,
            ResponseFormat = typeof(GraphModel)
        };
        KernelFunction createFun = _kernel.Plugins.GetFunction("graph", "create");
        var skresult = await _kernel.InvokeAsync(createFun, args);
        return JsonConvert.DeserializeObject<GraphModel>(json);
    });
    return result;
}

GraphRAG的优势

  • 关系理解:不仅理解实体,还理解实体间的关系

  • 推理能力:基于知识图谱进行复杂的逻辑推理

  • 可解释性:提供清晰的推理路径和依据

🎯 工程实践的关键要点

1. 系统架构设计原则

基于AntSK项目的实践,我总结出RAG系统设计的几个关键原则:

模块化设计

  • Semantic Kernel负责AI能力编排

  • Kernel Memory负责知识存储和检索

  • 插件系统提供扩展能力

  • 工作流引擎支持复杂业务流程

可扩展性考虑

  • 支持多种AI模型和向量数据库

  • 插件化的功能扩展机制

  • 微服务架构支持水平扩展

性能优化策略

  • 智能缓存减少重复计算

  • 分批处理应对大数据集

  • 异步流式处理提升用户体验

2. 开发者最佳实践

向量化策略

// 合理设置文本分段参数
.WithCustomTextPartitioningOptions(new TextPartitioningOptions
{
    MaxTokensPerLine = 300,        // 控制单行复杂度
    MaxTokensPerParagraph = 1000,  // 保持语义完整性
    OverlappingTokens = 100        // 确保上下文连续
})

检索优化

// 多阶段检索策略
public async Task<List<RelevantSource>> GetRelevantSources(string query)
{
    // 1. 初步向量检索
    var candidates = await VectorSearch(query, topK: 50);
    
    // 2. 重排序精化
    var reranked = await Rerank(query, candidates, topK: 10);
    
    // 3. 多样性优化
    return DiversityOptimization(reranked);
}

提示词工程

// 结构化的提示词模板
private const string RAG_PROMPT_TEMPLATE = @"
基于以下知识内容回答用户问题:

知识内容:
{{$doc}}

用户问题:
{{$input}}

要求:
1. 基于提供的知识内容回答问题
2. 如果知识内容不足以回答问题,请明确说明
3. 回答要准确、简洁、有条理
";

3. 性能监控与优化

// 性能监控的关键指标
public class RAGMetrics
{
    public double RetrievalLatency { get; set; }     // 检索延迟
    public double GenerationLatency { get; set; }   // 生成延迟
    public double RelevanceScore { get; set; }      // 相关性得分
    public int TokenUsage { get; set; }             // Token使用量
    public double UserSatisfaction { get; set; }    // 用户满意度
}

🚪 结语:开启智能知识管理的新篇章

回顾AntSK项目中Semantic Kernel与Kernel Memory的精彩应用,我们看到了RAG技术从理论到实践的华丽转身。这不仅仅是技术的堆砌,更是对企业知识管理场景的深刻理解和精心设计。

在这个AI飞速发展的时代,RAG技术就像一座桥梁,连接着海量的知识资源和用户的实际需求。Semantic Kernel提供了强大的AI编排能力,让不同的AI服务像乐器一样和谐协作;Kernel Memory则构建了智能的知识存储和检索系统,让机器能够像人类一样理解和运用知识。

技术的价值最终体现在解决实际问题上。AntSK项目展现的不仅仅是技术的先进性,更是对用户体验的极致追求:从流式输出的顺畅交互,到多模态文档的智能处理,从工作流的自动化执行,到知识图谱的深度推理,每一个细节都体现了工程师们的匠心独运。

展望未来,RAG技术还将在以下方面持续演进:

  • 更强的多模态融合能力,处理图文音视频等多元化知识

  • 更智能的知识更新机制,实现实时学习和动态优化

  • 更严格的隐私保护措施,在保障安全的前提下共享知识

  • 更精确的知识图谱构建,支持复杂的逻辑推理和知识发现

对于开发者而言,AntSK项目提供了一个优秀的学习范例:如何在复杂的企业级应用中优雅地运用RAG技术,如何在性能与功能之间找到最佳平衡点,如何构建既强大又易用的智能知识管理系统。

正如古人云:"工欲善其事,必先利其器。" 在AI时代,RAG技术就是我们手中最锋利的工具,而Semantic Kernel与Kernel Memory的结合,则为我们打造了一套完整的"工具箱"。掌握了这套工具箱的使用方法,我们就能在智能知识管理的道路上走得更远、更稳、更精彩。

让我们一起拥抱这个智能化的未来,用RAG技术点亮知识管理的星空!


💬 互动环节:与读者共同探讨

读完这篇文章,相信您对RAG技术在企业级应用中的实践有了更深入的理解。我很好奇您的想法:

🤔 问题讨论

  1. 在您的工作场景中,最希望RAG技术解决什么样的知识管理痛点?

  2. 您认为Semantic Kernel与Kernel Memory的组合还可以在哪些领域发挥更大价值?

  3. 关于RAG系统的性能优化,您有什么独特的见解或实践经验?

💡 技术交流

  • 如果您正在或计划构建类似的RAG系统,欢迎分享您的架构设计思路

  • 对于文章中提到的技术实现细节,有任何疑问都可以在评论区讨论

  • 期待听到您在多模态知识处理、向量检索优化等方面的创新想法

🚀 未来展望

  • 您认为下一代RAG系统最可能在哪些方面取得突破?

  • 对于企业级知识管理的未来发展,您有什么预测和期待?

欢迎在评论区留下您的真知灼见,让我们一起构建一个充满智慧和创新的技术社区!同时,如果这篇文章对您有所帮助,也请不吝点赞和分享,让更多的开发者朋友受益。

知识的价值在于分享,技术的进步源于交流。 期待与您的深度对话!


本文基于AntSK开源项目的深度分析撰写,所有代码示例均来自实际项目实现。如需了解更多技术细节,欢迎访问项目仓库或关注相关技术社区的最新动态。

AntSK大模型知识库

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐