实战指南:利用Semantic Kernel构建企业级AI代理与多模态应用

semantic-kernel 国内代理的配置(详细教程) Semantic Kernel 是微软提供的一个工具,旨在帮助开发者快速、轻松地将最新的大型语言模型(LLM)技术集成到应用程序中。这意味着通过使用Semantic Kernel,开发者可以在他们的应用中加入先进的人工智能和自然语言理解能力,从而增强应用的功能性。 阅读详情

1. 为什么你需要Semantic Kernel来构建企业级AI应用?

如果你正在尝试将大语言模型(LLM)的能力集成到你的企业应用中,你很可能已经体验过那种“拼接感”——写了一大堆胶水代码,就为了把用户的问题传给AI,再把AI的回答塞回你的业务流程里。更头疼的是,当你想让AI不只是聊天,而是能真正“做事”,比如查询数据库、分析图片、调用内部API时,代码复杂度会直线上升。这还没算上多轮对话的记忆管理、不同AI模型的切换、以及生产环境下的监控和稳定性问题。

我自己在早期项目里就踩过这些坑,直到遇到了 Semantic Kernel(SK)。简单说,SK是微软开源的一个AI应用编排框架,它不是一个AI模型,而是一个“中间件”或者说“胶水层”。它的核心价值在于,让你能用熟悉的编程语言(C#、Python、Java),以模块化、可插拔的方式,轻松构建出能理解、推理并执行复杂任务的AI代理(AI Agent)。

想象一下,你要开发一个智能客服。传统做法是写一堆if-else规则。用SK,你可以创建一个“客服代理”,它背后是一个大语言模型(比如GPT-4)。你告诉这个代理:“你是我们的客服,这是产品手册(作为知识库),这是订单查询API(作为一个工具/插件)。” 当用户问“我的订单12345到哪了?”,代理会自己理解问题,决定调用“订单查询”插件,拿到数据后,组织成自然语言回复给用户。整个过程,你只需要定义好插件和代理的职责,剩下的复杂编排SK帮你搞定。

对于企业来说,SK的吸引力在于企业级就绪。它原生支持Azure OpenAI服务,与微软云生态无缝集成;提供了插件化架构,能把你现有的业务系统(CRM、ERP)快速封装成AI可用的工具;内置了记忆、规划、多代理协作等高级模式;并且从设计上就考虑了可观测性、安全性和向后兼容。这意味着你可以快速构建原型,并放心地将其部署到生产环境。

2. 快速上手:5分钟构建你的第一个AI代理

理论说了不少,咱们直接动手。这里我用Python来演示,因为语法更简洁。放心,C#和Java的API设计思路几乎一样。

首先,安装Semantic Kernel。确保你的Python版本在3.10以上。

pip install semantic-kernel

接下来,你需要一个大语言模型的服务。这里以Azure OpenAI为例(你也可以用OpenAI官方接口)。你需要准备好终结点(Endpoint)、API密钥和部署名称。

import asyncio
import os
from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion

# 通常建议通过环境变量管理密钥,这里为了演示直接写入
os.environ["AZURE_OPENAI_ENDPOINT"] = "https://你的资源名.openai.azure.com/"
os.environ["AZURE_OPENAI_API_KEY"] = "你的密钥"
os.environ["AZURE_OPENAI_CHAT_DEPLOYMENT_NAME"] = "你的聊天模型部署名"

async def main():
    # 1. 创建Kernel核心实例
    kernel = Kernel()

    # 2. 添加AI服务
    chat_service = AzureChatCompletion(
        deployment_name=os.getenv("AZURE_OPENAI_CHAT_DEPLOYMENT_NAME"),
        endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"),
        api_key=os.getenv("AZURE_OPENAI_API_KEY"),
        api_version="2024-02-01" # 使用较新的API版本
    )
    kernel.add_service(chat_service)

    # 3. 创建一个简单的提示函数(Prompt Function)
    # 这相当于给AI一个固定的任务模板
    prompt = """
    你是一个专业的文案助手。
    请根据用户提供的产品描述,生成一段吸引人的广告文案。
    产品描述:{{$product_description}}
    文案风格:{{$style}}
    """
    # 将提示模板注册到Kernel,成为一个可调用的函数
    generate_ad = kernel.create_function_from_prompt(
        prompt_template=prompt,
        function_name="GenerateAd",
        description="根据产品描述生成广告文案"
    )

    # 4. 调用这个AI函数
    arguments = kernel.create_new_arguments()
    arguments["product_description"] = "一款新型智能咖啡机,支持语音控制,10种口味定制,5分钟快速煮好。"
    arguments["style"] = "科技感、简洁"

    result = await kernel.invoke(function=generate_ad, arguments=arguments)
    print(f"生成的广告文案:\n{result}")

if __name__ == "__main__":
    asyncio.run(main())

运行这段代码,你应该能得到一段关于智能咖啡机的广告文案。虽然简单,但你已经完成了一个核心链路:配置服务 -> 定义任务 -> 执行并获得AI输出。这里的 Kernel 对象是整个SK的枢纽,它管理着所有服务(AI模型、插件等)和函数的执行。

3. 核心进阶:模块化插件设计与实战

让AI真正强大的,不是它自己有多能说,而是它能调用多少工具。在SK里,工具(Tool)以**插件(Plugin)**的形式存在。一个插件就是一组相关函数的集合。这些函数可以是:

  1. 语义函数(Semantic Function):基于自然语言提示词(Prompt)的AI函数,就像上面的generate_ad。
  2. 原生函数(Native Function):用编程语言(Python、C#)写的传统函数,用于执行确定性的操作,比如计算、数据库查询、调用API。

实战场景:我们来构建一个“智能会议室助手”代理的一部分。它需要能查询会议室预定情况。

首先,我们创建一个原生的“会议室管理”插件:

from semantic_kernel.functions import kernel_function
from typing import Annotated
from datetime import datetime
import json

class ConferenceRoomPlugin:
    """一个模拟的会议室管理插件"""

    # 模拟的会议室数据
    _rooms = {
        "A101": {"capacity": 10, "bookings": [("09:00", "11:00")]},
        "B202": {"capacity": 20, "bookings": [("14:00", "16:00")]},
        "C303": {"capacity": 8, "bookings": []},
    }

    @kernel_function(
        name="GetAvailableRooms",
        description="根据时间、人数和时长查询可用的会议室。"
    )
    def get_available_rooms(
        self,
        start_time: Annotated[str, "查询开始时间,格式 HH:MM"],
        duration_minutes: Annotated[int, "会议时长(分钟)"],
        min_capacity: Annotated[int, "最小容纳人数"] = 5
    ) -> str:
        """
        核心逻辑:遍历会议室,检查时间冲突和容量。
        返回JSON格式的字符串,方便AI解析。
        """
        available = []
        for room_id, info in self._rooms.items():
            if info["capacity"] < min_capacity:
                continue

            # 简单的冲突检查(真实场景需要更复杂的日期时间处理)
            conflict = False
            for (book_start, book_end) in info["bookings"]:
                # 这里简化了时间冲突逻辑
                if start_time < book_end: # 假设会议时间有重叠
                    conflict = True
                    break

            if not conflict:
                available.append({
                    "room_id": room_id,
                    "capacity": info["capacity"],
                    "available_until": "17:00" # 模拟数据
                })

        return json.dumps({"available_rooms": available}, ensure_ascii=False)

    @kernel_function(
        name="BookRoom",
        description="预定指定的会议室。"
    )
    def book_room(
        self,
        room_id: Annotated[str, "要预定的会议室ID"],
        date: Annotated[str, "预定日期,格式 YYYY-MM-DD"],
        start_time: Annotated[str, "开始时间 HH:MM"],
        end_time: Annotated[str, "结束时间 HH:MM"]
    ) -> str:
        # 这里应该实现真实的预定逻辑,写入数据库等
        # 现在只是模拟
        if room_id not in self._rooms:
            return json.dumps({"success": False, "error": "会议室不存在"})
        # 检查冲突...
        self._rooms[room_id]["bookings"].append((start_time, end_time))
        return json.dumps({"success": True, "message": f"会议室 {room_id} 预定成功"})

然后,在Kernel中注册这个插件,并让AI代理学会使用它:

async def agent_with_plugin_demo():
    kernel = Kernel()
    # ... 添加AI服务(同上例)

    # 将插件类实例添加到Kernel
    room_plugin = ConferenceRoomPlugin()
    kernel.add_plugin(room_plugin, plugin_name="ConferenceRoom")

    # 现在,我们可以创建一个更智能的代理,它能自动决定何时调用插件
    # 使用SK的Agent框架(更高级的用法)
    from semantic_kernel.agents import ChatCompletionAgent

    agent = ChatCompletionAgent(
        service=chat_service, # 复用之前的chat_service
        name="RoomAssistant",
        instructions="""
        你是一个会议室助手。帮助用户查询和预定会议室。
        当用户想找会议室时,使用GetAvailableRooms工具。
        当用户明确要预定时,使用BookRoom工具。
        工具返回的是JSON数据,请用友好、自然的话总结给用户。
        """,
        kernel=kernel, # 将带有插件的Kernel传给Agent
    )

    # 模拟用户对话
    response = await agent.get_response(messages="今天下午3点,我们需要一个能坐15个人的会议室,开1小时的会。")
    print(f"助手回复: {response.content}")
    # 预期助手会调用 GetAvailableRooms(start_time="15:00", duration_minutes=60, min_capacity=15)
    # 然后根据返回的JSON,组织成自然语言回复,例如:“找到符合您要求的会议室B202,可容纳20人,目前下午3点后可用...”

    # 继续对话
    response = await agent.get_response(messages="好的,就预定B202,日期是2025-10-27,从15:00到16:00。", thread=response.thread)
    print(f"助手回复: {response.content}")
    # 预期助手会调用 BookRoom(room_id="B202", date="2025-10-27", start_time="15:00", end_time="16:00")

通过这个例子,你看到了插件如何将企业内部系统能力“暴露”给AI。AI代理根据你的指令(instructions)和对话上下文,自动规划(Planning) 并决定调用哪个工具,拿到结构化数据后再组织回复。这种“思考-行动”的循环,正是智能代理的核心。

4. 处理多模态数据:让AI看懂图片和听懂声音

现代AI应用早已不限于文本。SK通过集成不同的AI服务,支持多模态(Multimodal) 处理,这意味着你的代理可以同时理解文本、图像甚至音频。

实战场景:构建一个“智能内容审核助手”,它能分析用户上传的图片和文本,判断是否违规。

这里我们需要用到支持图像识别的AI服务,比如Azure OpenAI的GPT-4V模型,或者Azure AI Vision。以下是一个集成示例:

from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
from semantic_kernel.contents import ChatHistory, ImageContent
import base64

async def multimodal_analysis_demo():
    kernel = Kernel()

    # 添加支持多模态的聊天服务(例如GPT-4 Turbo with Vision)
    # 注意:需要确保你的Azure OpenAI部署支持视觉模型
    chat_service = AzureChatCompletion(
        deployment_name="gpt-4-vision-deployment", # 你的视觉模型部署名
        endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"),
        api_key=os.getenv("AZURE_OPENAI_API_KEY"),
        api_version="2024-02-01"
    )
    kernel.add_service(chat_service)

    # 准备图像内容:可以从本地文件读取,也可以来自网络URL
    def encode_image_to_base64(image_path):
        with open(image_path, "rb") as image_file:
            return base64.b64encode(image_file.read()).decode('utf-8')

    # 假设我们有一张本地图片
    image_data = encode_image_to_base64("path/to/user_uploaded_image.jpg")

    # 构建聊天历史,包含图像和文本
    chat_history = ChatHistory()
    # 系统指令
    chat_history.add_system_message("你是一个内容安全审核助手。请分析用户提供的图片和文本,判断是否存在违规内容(如暴力、色情、不当标语等)。只回答‘合规’或‘违规’,并简要说明原因。")

    # 用户消息:混合了文本和图像
    user_content = [
        "请分析这张图片和附带的文字:‘清仓大甩卖!’",
        ImageContent.from_base64(image_data, detail="high") # detail参数控制发送给模型的图像细节程度
    ]
    chat_history.add_user_message(user_content)

    # 调用模型进行分析
    settings = {"max_tokens": 300}
    result = await chat_service.get_chat_message_content(
        chat_history=chat_history,
        settings=settings
    )

    print(f"审核结果:{result.content}")
    # 可能的输出:“违规。原因:图片中包含疑似不雅内容,且促销文字未标明具体商品,可能涉及虚假宣传。”

对于音频处理,思路类似。你可以使用Azure AI Speech等服务先将音频转录成文本,再将文本送入SK的流程中。SK的插件体系允许你轻松集成这些外部服务。关键是设计好工作流:是先语音转文本,还是直接让多模态模型处理音频?SK的任务链(Chain) 或流程框架(Process Framework) 正是用来编排这种复杂多步骤任务的。

5. 构建高可用企业级架构:与Azure云服务深度集成

当你的AI代理从Demo走向生产,高可用、可扩展、可观测、安全就成了必须考虑的问题。SK与Azure云服务的原生集成,让这些变得相对简单。

5.1 部署为Azure Function(无服务器架构)

将你的SK应用部署为Azure Function,可以让你无需管理服务器,按需伸缩,并且通过HTTP触发器轻松提供API服务。

// 这是一个C#的Azure Function示例,展示如何包装一个SK智能代理
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Agents;
using System.Net;

public class AIChatAgentFunction
{
    private readonly IKernel _kernel;
    private readonly ChatCompletionAgent _agent;

    public AIChatAgentFunction(IKernel kernel, ChatCompletionAgent agent)
    {
        _kernel = kernel;
        _agent = agent;
    }

    [Function("Chat")]
    public async Task<HttpResponseData> Run(
        [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req,
        ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");

        // 1. 解析用户请求
        var requestBody = await req.ReadAsStringAsync();
        dynamic data = JsonConvert.DeserializeObject(requestBody);
        string userMessage = data?.message;
        string sessionId = data?.sessionId ?? "default-session";

        if (string.IsNullOrEmpty(userMessage))
        {
            var badResponse = req.CreateResponse(HttpStatusCode.BadRequest);
            await badResponse.WriteStringAsync("Please pass a 'message' in the request body");
            return badResponse;
        }

        // 2. 这里应该根据sessionId从持久化存储(如Azure Cosmos DB)中恢复对话历史
        // 为了简化,我们每次都是新对话
        var chatHistory = new ChatHistory();

        // 3. 调用SK代理获取回复
        var response = await _agent.GetChatMessageContentAsync(userMessage, chatHistory);

        // 4. 将本次对话历史保存回持久化存储(以实现多轮对话记忆)

        // 5. 返回响应
        var okResponse = req.CreateResponse(HttpStatusCode.OK);
        await okResponse.WriteAsJsonAsync(new { reply = response.Content });
        return okResponse;
    }
}

在Startup或Program.cs中,你需要配置依赖注入,创建单例的Kernel和Agent实例,确保Function每次执行时复用它们,避免重复初始化开销。

5.2 利用Azure AI Search实现检索增强生成(RAG)

企业AI应用的核心价值往往在于其独有的知识和数据。SK内置了与Azure AI Search(原名Azure Cognitive Search)等向量数据库的集成,轻松实现RAG模式。

from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchMemoryStore
from semantic_kernel.memory import SemanticTextMemory

async def setup_rag_with_azure_search():
    kernel = Kernel()
    # ... 添加AI服务

    # 1. 初始化Azure AI Search记忆存储
    memory_store = AzureAISearchMemoryStore(
        vector_size=1536, # 通常对应text-embedding-ada-002的维度
        search_endpoint=os.getenv("AZURE_AI_SEARCH_ENDPOINT"),
        admin_key=os.getenv("AZURE_AI_SEARCH_ADMIN_KEY"),
        index_name="company-knowledge-base"
    )

    # 2. 创建语义文本记忆,并绑定一个文本嵌入生成服务
    from semantic_kernel.connectors.ai.open_ai import AzureTextEmbedding
    embedding_gen = AzureTextEmbedding(
        deployment_name="text-embedding-ada-002-deployment",
        endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
        api_key=os.environ["AZURE_OPENAI_API_KEY"]
    )
    kernel.add_service(embedding_gen)

    memory = SemanticTextMemory(storage=memory_store, embeddings_generator=embedding_gen)

    # 3. 假设我们已经提前将公司文档切片并存储到了索引中
    # memory.save_information(collection="handbook", id="doc1", text="公司年假政策是...")

    # 4. 在代理或函数中使用记忆进行检索
    # 定义一个语义函数,其提示词中包含从记忆检索的步骤
    prompt = """
    基于以下公司知识库内容回答问题。
    [知识库内容开始]
    {{recall $query}}
    [知识库内容结束]

    问题:{{$query}}
    答案:
    """
    qa_function = kernel.create_function_from_prompt(prompt)

    # 调用时,SK会自动执行“recall”操作,从memory中搜索与$query相关的片段,并注入到提示词中
    arguments = kernel.create_new_arguments()
    arguments["query"] = "请问年假有多少天?"
    # 需要将memory实例与函数调用关联(具体API可能随版本变化)
    # result = await kernel.invoke(function=qa_function, arguments=arguments, memory=memory)

这样,当员工询问公司政策时,代理的回答不再是基于模型的通用知识,而是精准地从你上传的内部手册中检索并生成,极大提高了准确性和可靠性。

5.3 实现可观测性与监控

在生产环境中,你需要知道AI代理的表现:它调用了哪些函数?耗时多久?消耗了多少Token?是否触发了敏感内容过滤器?

SK提供了过滤器(Filters) 和遥测(Telemetry) 支持。你可以为函数调用、提示词渲染、模型调用等环节添加前置和后置钩子。

// C# 示例:创建一个日志过滤器
public class LoggingFilter : IFunctionInvocationFilter
{
    private readonly ILogger _logger;

    public LoggingFilter(ILoggerFactory loggerFactory)
    {
        _logger = loggerFactory.CreateLogger<LoggingFilter>();
    }

    public async Task OnFunctionInvocationAsync(FunctionInvocationContext context, Func<FunctionInvocationContext, Task> next)
    {
        _logger.LogInformation($"开始调用函数: {context.Function.Name}");
        var startTime = DateTimeOffset.UtcNow;

        // 调用下一个过滤器或实际函数
        await next(context);

        var duration = DateTimeOffset.UtcNow - startTime;
        _logger.LogInformation($"函数调用完成: {context.Function.Name}, 耗时: {duration.TotalMilliseconds}ms");
    }
}

// 在Kernel构建时注册过滤器
var kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.Services.AddSingleton<IFunctionInvocationFilter, LoggingFilter>();
// ... 添加其他服务
var kernel = kernelBuilder.Build();

结合Azure Application Insights,你可以轻松地将这些日志和指标发送到云端,创建仪表盘,监控成本、延迟和错误率。

6. 避坑指南:从开发到部署的常见问题

在我实际的项目交付过程中,总结了一些容易踩坑的地方,希望能帮你少走弯路。

1. 插件设计要“原子化”且描述清晰 插件的函数应该职责单一。GetUserProfile 就比 GetAndUpdateUserData 要好。同时,description 参数至关重要,这是AI决定是否调用该函数的主要依据。描述要像给一个实习生写说明书一样清晰,说明输入是什么、输出是什么、这个函数是干什么的。

2. 管理好对话状态(记忆) 对于多轮对话应用,必须持久化对话历史。简单的场景可以用ChatHistory对象并自己存到数据库。复杂的场景可以考虑SK的ChatCompletionAgent及其线程管理,它会自动维护对话上下文。注意,无服务器环境(如Azure Function)下,需要将会话状态外置到Cosmos DB或Redis中。

3. 处理AI的“不确定性” AI模型可能拒绝回答、产生幻觉或调用错误的工具。一定要在关键业务路径上设置人工审核回退机制。例如,在客服场景中,当AI置信度低或涉及退款等敏感操作时,自动转交人工坐席。

4. 成本与性能优化

  • 缓存:对频繁且结果不变的AI调用(如某些内容总结)进行缓存。
  • 限制Token:在提示词中明确限制输出长度,在调用模型时设置max_tokens参数。
  • 模型选择:不是所有任务都需要GPT-4。文本分类、简单提取可以用更便宜、更快的模型(如GPT-3.5 Turbo)。SK的模型无关性让你可以轻松配置多个模型,并根据任务路由。

5. 版本升级 SK目前迭代较快,API可能会有变动。建议在项目中锁定主要的版本号(如semantic-kernel==1.*),并在升级前仔细阅读发行说明。将SK相关的代码进行良好封装,有助于降低升级成本。

从我个人的经验来看,Semantic Kernel最大的优势在于它提供了一套统一的、企业级的抽象,让你能专注于业务逻辑和AI能力的设计,而不是陷入底层的通信、编排和运维细节。它可能不是最简单的入门工具,但绝对是构建复杂、可靠、可维护的企业AI应用时最有力的框架之一。当你需要将AI从演示玩具变成生产系统中的一个核心部件时,SK的价值就会真正凸显出来。

完整指南:从基础到高级使用 Semantic Kernel 通过本文的学习,你已经掌握了从基础到高级的使用方法。安装并配置。使用简单的文本生成和自然语言处理任务。利用任务链和工具扩展构建复杂的工作流。通过记忆管理上下文,创建更智能的应用。扩展多模态处理能力,集成图像和音频分析。将应用部署到云端,并通过 Azure Functions 提供智能服务。无论是构建简单的对话应用,还是创建多模态智能服务,都提供了强大的工具和灵活的扩展机制。希望这篇文章能帮助你更好地理解并运用这个框架,构建出更加智能和高效的应用。 阅读详情

相关推荐

深度解析Semantic Kernel:高效构建企业级AI应用的核心框架

Semantic Kernel(语义内核)是一款专为开发者设计的开源框架,旨在快速、轻松地将前沿大型语言模型(LLM)技术集成到各类应用程序中。该框架通过模块化设计、插件化架构和智能编排能力,为企业级AI应用开发提供了完整的解决方案,显著降低了大模型集成的技术门槛和开发成本。 ## AI应用开发的常见挑战与痛点 在当今AI技术快速发展的背景下,企业开发者面临着一系列严峻挑战。传统的大模型集成方

gitblog_01189的博客 901

Semantic Kernel人工智能开发 - 第一章:Semantic Kernel框架概览——开启智能应用开发之门

Semantic Kernel作为连接传统编程与AI智能的桥梁,为开发者提供了构建下一代智能应用的强大工具。其模块化设计、企业级特性和丰富的功能集,使其成为LangChain等框架的有力替代品。随着AI技术的不断发展,Semantic Kernel也在持续进化。未来,我们可以期待更多高级特性,如更强大的多代理协作策略、更丰富的插件生态和更深入的行业解决方案。无论你是AI新手还是资深开发者,Semantic Kernel都值得一试,它将帮助你在AI时代保持竞争力。

黄明基的博客 926

本地化AI代理开发:C#与Semantic Kernel实战指南

本地化AI代理系统通过将大语言模型(如Gemma 3)部署在本地环境,解决了数据隐私和云服务依赖等企业级痛点。其核心技术原理基于Semantic Kernel的任务编排框架,实现自然语言指令到原子任务的自动分解与执行。这种架构在金融、医疗等敏感行业具有特殊价值,既能确保数据不出域,又能通过模块化设计灵活扩展业务功能。典型应用场景包括销售报告自动生成、智能客服工单处理等流程自动化任务。本文以C#技术栈为例,详细演示如何利用Ollama工具链在Windows环境构建高可用的本地AI代理,其中Gemma 3模型在

weixin_30856725的博客 493

AI原生应用开发框架比较:LangChain vs Semantic Kernel

想象一下,你想做一个"智能旅行助手":它能根据用户偏好生成行程,调用地图API查路线,连接天气服务提醒带伞,甚至用邮件自动发送方案。如何让LLM理解用户需求并拆分任务?如何安全调用外部工具(如地图API)?如何记住用户之前说过的话(比如"讨厌爬山")?如何处理多轮对话中的错误(比如LLM胡编乱造路线)?这些问题单靠"调API+写提示词"很难解决。于是,AI原生应用开发框架应运而生——它们像"AI应用的脚手架",帮我们快速组装LLM、工具、记忆和逻辑,让开发更高效、可靠。维度。

Java大师兄的博客 944

状态估计【扩展卡尔曼滤波算法的神经网络训练】BP神经网络、扩展卡尔曼滤波EKF+BP、粒子滤波PF轨迹估计研究(Matlab代码实现)

内容概要:本文围绕状态估计与神经网络融合技术展开研究,重点介绍了扩展卡尔曼滤波(EKF)与BP神经网络的联合算法(EKF+BP)以及粒子滤波(PF)在轨迹估计中的应用。资源基于Matlab/Simulink平台,提供了BP神经网络、EKF+BP融合算法和PF的完整代码实现,旨在通过仿真手段提升非线性系统的状态估计精度。文中不仅涵盖了卡尔曼滤波系列(如UKF、EKF、PF)的基本原理与实现方法,还展示了其在风电预测、电池寿命预测、无人机状态估计、雷达跟踪等领域的广泛应用,突出其在复杂动态系统建模与轨迹预测中的实用价值。; 适合人群:具备一定Matlab编程基础,从事自动化、控制工程、电气工程、人工智能及相关领域的研究生、科研人员和工程技术人员。; 使用场景及目标:①深入理解并掌握扩展卡尔曼滤波与BP神经网络融合的建模机制与实现流程;②开展非线性系统的状态估计与动态轨迹跟踪仿真研究;③应用于无人机导航、机器人定位、电力系统状态监测、信号处理等领域的算法开发与系统优化。; 阅读建议:本资源以Matlab代码为核心,建议读者结合提供的仿真模型与参考文献动手实践,重点关注EKF与BP网络的参数配置、融合策略设计及滤波性能对比,通过比较UKF、EKF与PF等不同滤波算法的估计效果,深化对状态估计算法优劣与适用场景的理解。

技术速递|使用 Semantic Kernel 和 Foundry Local 构建企业级本地 RAG 应用

作者:卢建晖 - 微软高级云技术布道师排版:Alan Wang在当今由 AI 驱动的环境中,组织越来越希望在维护数据隐私和降低运营成本的同时,使用大语言模型。Microsoft Foundry Local 是一款免费的工具,允许开发者完全在设备上运行生成式 AI 模型 —— 无需 Azure 订阅,无需网络连接,且数据不会离开你的笔记本或桌面设备。将它与微软的 Semantic Kernel 框架结合,能构建出一个强大的本地 Retrieval-Augmented Generation(RAG)应用。

MicrosoftReactor的博客 1003

机器视觉检测到底怎么做,经验分享

笔者做机器视觉检测已经有五六年了,也算是对机器视觉的检测技术有了一定的掌握。总的来说,基于机器视觉的检测技术主要包含三个部分:视觉采集模块、后台分析模块和动作决策模块。这几个分类,跟教科书上的有较大差异,很多同学觉得我在杜撰。笔者也不作反驳,因为这是笔者这些年工作经验的总结,自然区别于教科书。下面我们分开来讲这几个模块,同时会把笔者之前的论文做个推荐总结。 所有文章均可在博主的主页中找到,若无法找到,可以用搜索工具。博主的主页: https://blog.youkuaiyun.com/Aoulun 第..

Aoulun的博客 8679

企业级AI Agents,从入门到精通!微软AutoGen+Semantic Kernel合体,看这篇就够了!

人工智能正在迅速从简单的聊天机器人发展为更强大的自主代理(Autonomous Agents),它们具备推理、协调和执行复杂任务的能力。微软最近将 **Agent Framework** 作为开源 SDK 和运行时公开发布(公开预览版),旨在简化**多代理系统**的编排。对于采用代理式 AI 的企业来说,这是向前迈出的重要一步,它能缓解工具碎片化的问题,并在实验性研究与生产级部署之间架起一座桥梁。

m0_59235245的博客 1450

《遥感大模型生产级实战:从数据到决策的端到端AI工程》系列第一部分:AI遥感工程师的基础设施与工具链-文章 4:传统遥感分析与机器学习基线

本章将系统性地介绍经典遥感分析工作流,从数据预处理到多维度特征工程,再到如何利用经典的机器学习模型(如随机森林、支持向量机)进行监督与非监督学习。我们将通过一个完整的“智慧农业作物分类”项目实战,展示如何利用我们之前构建的数据湖和工具链,从原始数据到最终的分析结果,构建一个性能可靠、可解释性强的基线系统。更重要的是,我们将深入剖析这种传统方法的局限性,从而为后续章节引入遥感大模型的必要性提供强有力的论证。

panshengwu的博客 707

Latex下使用JabRef添加参考文献

文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 Latex可以手动添加参考文献,但文献过多时,使用JabRef软件相对方便。 提示:以下是本篇文章正文内容,下面案例可供参考 一、JabRef安装 网址:http://www.jabref.org 打开网址后,点击“Download” 进入如下页面后,选择 portable (便携版,无需安装),下载后是一压缩包,打开即可使用。 二、使用 1.创建库 ...

sz3076799的博客 3468

代理入门:Semantic Kernel代理开发基础教程

还在为如何构建智能AI助手而烦恼?Semantic Kernel(SK)代理框架为你提供了企业级的AI代理开发解决方案。无论你是想构建简单的聊天机器人还是复杂的多代理协作系统,SK都能提供所需的工具和灵活性。 通过本教程,你将掌握: - ✅ Semantic Kernel代理框架的核心概念 - ✅ 如何创建和配置不同类型的AI代理 - ✅ 代理与插件(Plugin)的集成方法 - ✅ 多代理协...

gitblog_00301的博客 1036

SpringBoot与锐浪报表服务器深度整合实战指南

本文详细介绍了SpringBoot与锐浪报表服务器的深度整合实战指南,包括环境准备、Windows/Linux系统配置、核心功能实现代码解析及常见问题解决方案。通过具体案例和代码示例,帮助开发者高效完成报表系统的集成与部署,提升企业级应用的报表处理能力。

weixin_29238147的博客 370

革命性AI编排框架Semantic Kernel:微软开源的多代理系统开发神器

还在为AI应用开发中的复杂集成问题头疼吗?面对大语言模型(LLM)的快速迭代,你是否遇到过以下挑战: - **模型切换成本高**:每次更换LLM供应商都需要重写大量代码 - **多代理协调困难**:构建复杂的多代理系统时,代理间通信和协作成为噩梦 - **工具集成复杂**:将外部API、数据库和业务逻辑无缝集成到AI流程中困难重重 - **缺乏企业级特性**:生产环境需要的监控、安全、可靠性保障...

gitblog_00786的博客 1261

论文阅读: SIGIR 2025 ID-Free Not Risk-Free: LLM-Powered Agents Unveil Risks in ID-Free Recommender Syste

咱们平时用的推荐系统(比如购物APP推商品、视频APP推剧),大多是“有ID”的——每个用户、每个商品都有个专属ID,系统靠这些ID记录你的浏览、购买历史,再给你推喜欢的东西。但这种方式有个大问题:新用户、新商品刚上线时没有ID历史数据,系统没法精准推荐,这就是“冷启动”难题。后来人们搞出了“无ID推荐系统”:不用ID了,改成直接分析商品的文字信息(比如商品标题、描述),靠大语言模型(LLM,类似ChatGPT的技术)把文字转成“语义代码”,再通过这些“代码”判断你可能喜欢什么。

CSPhD-winston的博客 977

YOLO26 网络结构逐模块解析:Backbone/Neck/Head

本文解析了YOLO26目标检测网络的架构设计,重点介绍其在Backbone、Neck和Head三个核心组件的创新优化。Backbone采用改进的CSP模块与轻量级注意力机制,提升特征提取效率;Neck使用改进的BiFPN结构实现高效多尺度特征融合;Head采用完全解耦设计简化回归流程。文章详细分析了各模块的技术演进、实现细节和设计思想,通过流程图和代码示例展示了YOLO26的整体架构和关键组件实现。该研究对模型优化、定制开发和硬件部署具有重要指导意义。

一键难忘的博客 1248

Semantic Kernel 快速入门

Semantic Kernel 是一款开放源代码工具,允许开发人员在应用程序中无缝集成和管理人工智能。它提供了一种统一的方式来处理各种 AI 模型,无论是大型语言模型、图像生成器还是其他类型的人工智能。Semantic Kernel 是一款强大的工具,它简化了 AI 在应用中的集成和管理。

qq_40600379的博客 1472

抖音移动端Web用户主页视频列表爬虫实战:逆向加密参数与高频采集方案

App端Hook/抓包:需要安卓逆向、Xposed或Frida,门槛高且容易被风控。官方开放API:限制极多,几乎不开放用户级视频列表。PC端Web:页面加载方式繁杂,且大量依赖懒加载与内部状态。移动端Web(:接口相对稳定,加密逻辑集中,且适合使用Requests/HTTPSession模拟,无需渲染引擎。本文聚焦于移动端Web下的用户主页视频列表爬取,采用Python 3.11 + httpx + PyExecJS + 正则/JSON解析的组合,破解X-Bogus签名和_signature。

2201_76125261的博客 858

AI工具链与代理:从LangChain到Semantic Kernel的深度解析

打造自定义工具如同精心雕琢一件艺术品,需遵循一系列 “黄金法则”,方能使其具备强大的功能、高度的可靠性且易于使用。清晰的工具定义:工具的名称应直观反映其功能,做到见名知意。描述要详尽、具体,精确阐述工具的作用及适用场景。输入参数的定义务必清晰明确,最好借助 JSON Schema 或 Pydantic 模型进行结构化处理,确保数据格式的严谨性和规范性。例如,一个用于图片处理的工具,名称可定义为 “ImageResizerTool”,描述为 “该工具用于调整图片的尺寸大小。

QiqiisnotQiqi的博客 1098

【Transformer】小白入门指南

Transformer是起源于NLP领域,然后在图像、视频、声音等领域都得到了广泛应用的基础架构,是继MLP、CNN、RNN’后的公认的第四大基础模型结构。Transformer技术凭借其卓越的表现和广泛的应用前景,已经成为了机器学习领域的一个关键技术。自从2017年Google提出》一文以来,Transformer架构的出现彻底改变了机器学习和深度学习的格局,尤其是在处理语言模型、生成模型以及多模态学习等领域,Transformer几乎成为了不可或缺的技术基石。

图挖掘领域,新晋砖家 ☞ 未来可期,欢迎和静静一起学习交流吖 2523

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Bedrock代理频道:Semantic Kernel与AWS的频道集成

还在为AI应用集成而头疼?面对AWS Bedrock的强大模型能力,却苦于复杂的集成流程?Semantic Kernel的Bedrock代理频道为您提供了一站式解决方案,让您轻松将AWS Bedrock的先进AI能力无缝集成到应用中。 读完本文,您将获得: - ✅ Bedrock代理频道的核心架构解析 - ✅ 多模型供应商的统一接入方案 - ✅ 实战代码示例与最佳实践 - ✅ 流式响应与函数调用...

gitblog_00164的博客 781

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Bedrock代理:Semantic Kernel与AWS Bedrock深度集成

在当今AI驱动的应用开发中,企业面临着模型选择多样性、成本控制和部署复杂性的三重挑战。你是否还在为不同AI服务的API集成而头疼?是否希望在一个统一的框架中无缝切换各种大语言模型?Semantic Kernel与AWS Bedrock的深度集成为你提供了革命性的解决方案。 通过本文,你将掌握: - AWS Bedrock在Semantic Kernel中的完整集成方案 - 多模型代理系统的构建...

gitblog_00031的博客 1016

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

终极指南:AutoGen vs Semantic Kernel vs Azure AI Agent Service 主流AI代理框架全面对比

AI代理框架正在重塑软件开发的未来,选择合适的工具能让你的项目效率提升10倍!本文将深入对比当前最热门的三大AI代理框架——AutoGen、Semantic Kernel和Azure AI Agent Service,帮助你根据项目需求做出最佳选择。无论你是初学者还是有经验的开发者,这份指南都能为你提供清晰的框架特性分析和实用的选型建议。 ## 框架概述:三大主流AI代理技术解析 🚀 ###

gitblog_00886的博客 519

OpenAI响应代理:Semantic Kernel与OpenAI Responses集成

在AI应用开发中,你是否遇到过这样的痛点:传统的聊天完成API虽然强大,但在处理复杂对话、多轮交互和工具调用时显得力不从心?OpenAI Responses API的出现彻底改变了这一局面,而Semantic Kernel作为企业级AI编排框架,提供了无缝的集成体验。 通过本文,你将掌握: - ✅ OpenAI Responses API的核心优势与特性 - ✅ Semantic Kernel中...

gitblog_00422的博客 777

OpenAI助手代理:Semantic Kernel与OpenAI Assistants集成

在现代AI应用开发中,开发者经常面临一个关键挑战:如何将强大的语言模型能力与企业级应用需求无缝集成?传统的方法往往需要复杂的API调用、状态管理和错误处理逻辑。这正是Semantic Kernel与OpenAI Assistants集成解决方案的价值所在。 通过Semantic Kernel的OpenAI助手代理功能,开发者可以: - **简化复杂工作流**:将多步骤的AI交互封装为可重用的代...

gitblog_01150的博客 806

顺序选择策略:Semantic Kernel中的轮询代理选择机制

在现代AI应用开发中,多代理系统(Multi-Agent Systems)已成为构建复杂智能应用的核心架构。然而,当多个AI代理需要协同工作时,一个关键问题随之而来:**如何公平、高效地分配任务执行权?** Semantic Kernel作为微软推出的企业级AI编排框架,提供了强大的顺序选择策略(Sequential Selection Strategy)——一种基于轮询(Round-Robin...

gitblog_01090的博客 1104
上一篇: Ubuntu 启动黑屏与 recovering journal 故障:GRUB 配置与显卡驱动的终极修复指南
下一篇: 中科蓝讯蓝牙:DownLoader可视化配置工具进阶指南,如何高效管理多方案配置
code8
博客等级 码龄17年 65粉丝 1720原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值