
Semantic Kernel Agents 框架设计与实战基于 ADR-0032 的通用 Agent 抽象、Group Chat 与双语言实现【免费下载链接】semantic-kernelIntegrate cutting-edge LLM technology quickly and easily into your apps项目地址: https://gitcode.com/GitHub_Trending/se/semantic-kernel本文以 Semantic Kernel 仓库中 ADR-0032docs/decisions/0032-agents.md为蓝本系统讲解 Semantic Kernel 通用 Agent 框架的高层设计、核心抽象Agent/AgentChannel/AgentChat、两类具体实现ChatCompletionAgent与OpenAIAssistantAgent、策略驱动的AgentGroupChat以及AggregatorAgent聚合模式并配套给出 .NET 与 Python 双语言的完整使用示例。读完本文你将掌握如何基于 Semantic Kernel 搭建单 Agent 直接调用与多 Agent 群聊协作的完整技术方案并理解这些能力在仓库源码中的具体落点。关联文档ADR-0032 SK Agents Overview and High Level Design状态为experimental最早提出于 2024-01-24由 Semantic Kernel 核心团队deciders: markwallace-microsoft, matthewbolanos审定是当前Agents命名空间下所有 Agent 能力的设计源头。背景与决策动机为什么需要一个通用 Agent 框架Semantic Kernel 对 Agent 的支持最初来自对 OpenAI Assistant API 的实验性支持即*.Assistants包后更名为*.Agents。但最初的 Assistants 工作从未打算演变为通用 Agent 框架——它只面向单一托管服务。ADR-0032 正是在这个背景下正式定义了 Semantic Kernel 的通用 Agent 框架Agent Framework目标是让开发者能够基于任意 LLM API 构建 Agent并自由组合多个 Agent 完成复杂对话任务。该框架预期支撑两种交互模式直接调用Direct InvocationNo Chat调用方无需任何中间机制直接调用任意单个 Agent。若要让多个 Agent 在同一对话中轮流发言调用方需要在每一轮显式调用对应的 Agent跨 Agent 类型的协调也必须由调用方自行管理。Agent Chat群聊调用方将多个 Agent 组装进一场持续对话围绕某个具体目标通常由初始或迭代输入驱动协同工作。一旦接入Agent 即可在多轮交互中轮流参与对话。Agent 核心特征与模态Modalities三个基本特征从根本上说一个 Agent 具备以下特征Identity身份使每个 Agent 可以被唯一标识。Behavior行为Agent 参与对话的方式。Interaction交互Agent 的行为是对其他 Agent 或输入的响应。在这些基础之上不同 Agent 还可以特化出更多能力System Instructions系统指令一组引导 Agent 行为方向的指令集。Tools/Functions工具/函数使 Agent 能执行具体任务或动作。Settings设置Agent 专属设置。对 chat-completion 类 Agent通常对应 LLM 设置例如 Temperature、TopP、StopSequence 等。Agent 模态Modality一个 Agent 可以是多种模态中的一种。模态之间在能力与约束上是不对称的asymmetrical这意味着不同模态的 Agent 不能假设彼此具备相同的能力。ADR 中列举的模态包括| 模态 | 说明 | |-|-| | SemanticKernel – ChatCompletion | 完全基于 Semantic Kernel 的 chat-completion 能力如 .NET 的IChatCompletionService构建的 Agent | | OpenAI Assistants | 基于 OpenAI Assistant APIOpenAI 与 Azure OpenAI的托管式 Agent 方案 | | Custom | 通过扩展 Agent 框架开发的自定义 Agent | | Future | 尚未公布的新模态例如 HuggingFace Assistant API其已有 assistants 能力但尚未发布 API |这一模态抽象正是任何模态的 Agent 都能与任何其他模态的 Agent 交互这一决策驱动力的直接体现详见下文决策驱动力。决策驱动力Decision DriversADR-0032 为框架设计定下了明确约束它们是后续所有抽象设计的评判标准框架必须提供足够抽象使构建的 Agent 能利用任意 LLM API框架必须提供足够抽象和构建块覆盖最常见的 Agent 协作类型并易于随新协作方式扩展框架必须提供修改 Agent 输入/输出的构建块覆盖各种自定义场景框架必须与 Semantic Kernel 既有模式对齐tools、DI、plugins、function-calling 等框架必须可扩展允许其他库构建自己的 Agent 和聊天体验框架必须尽量简单以利于扩展框架应将复杂度封装在实现细节中而不是调用模式中Agent 抽象必须支持不同模态见上文 Agent Modalities任何模态的 Agent 都必须能与其他任何模态的 Agent 交互Agent 必须能支持自身的模态需求特化Agent 的输入和输出必须与 SK 内容类型ChatMessageContent对齐。最后一条约束极其重要它保证了无论 Agent 底层是什么模态在 Semantic Kernel 体系中对外暴露的消息模型统一为ChatMessageContent从而让不同模态的 Agent 可以无缝进入同一个群聊。高层设计Agent、Conversation 与 Channel 三角模型ADR 的分析阶段从一个朴素的观察开始Agent 参与对话通常是对用户输入或环境输入的响应。从这一模式中提炼出三个核心概念Agent对话的参与者。Conversation对话Agent 一系列交互发生的上下文。Channel通信路径Agent 与单个对话交互所关联的状态与协议。Channel 概念的正式化为不同模态的 Agent 自由满足自身模态需求提供了天然载体。例如对基于 chat-completion 的 Agent 而言Channel 意味着拥有并管理一组特定的聊天消息chat-history并与 chat-completion API/endpoint 通信对基于 OpenAI Assistant API 的 Agent 而言Channel 意味着定义一个特定的thread并将 Assistant API 作为远程服务来通信。这三个概念概括为如下模式经过团队多轮迭代后这一概括转化为以下高层定义| 类名 | 父类 | 角色 | 模态 | 说明 | |-|-|-|-|-| |Agent| - | Agent | 抽象 | 根 Agent 抽象 | |KernelAgent|Agent| Agent | 抽象 | 包含Kernel服务与插件 | |AgentChannel| - | Channel | 抽象 | Agent 参与聊天的通道 | |AgentChat| - | Chat | 抽象 | 提供 Agent 交互的核心能力 | |AgentGroupChat|AgentChat| Chat | 工具 | 基于策略的聊天 |源码佐证这一抽象在仓库中的落点位于 .NET 侧 dotnet/src/Agents/AbstractionsAgent.cs、AgentChannel.cs、AgentChat.cs等与 Python 侧 python/semantic_kernel/agentsagent.py、channels/、group_chat/等。抽象层设计详细类定义ADR 进一步枚举了高层模式下的详细类定义并引入了为优化ChatHistory管理而新增的实体IChatHistoryHandler、ChatHistoryKernelAgent和ChatHistoryChannel。这些实体消除了基于本地托管ChatHistory实例工作的 Agent相对于由远程托管框架管理的 Agent自行实现AgentChannel的需求。详细类表如下| 类名 | 父类 | 角色 | 模态 | 说明 | |-|-|-|-|-| |Agent| - | Agent | 抽象 | 根 Agent 抽象 | |AgentChannel| - | Channel | 抽象 | Agent 参与AgentChat的通道 | |KernelAgent|Agent| Agent | 抽象 | 定义Kernel服务与插件 | |ChatHistoryChannel|AgentChannel| Channel | 抽象 | 基于本地 chat-history 的 Agent 参与聊天的通道 | |IChatHistoryHandler| - | Agent | 抽象 | 定义使用ChatHistoryChannel的 Agent 的公共部分 | |ChatHistoryKernelAgent|KernelAgent| Agent | 抽象 | 任何使用ChatHistoryChannel的KernelAgent的公共定义 | |AgentChat| - | Chat | 抽象 | 提供多轮 Agent 对话的核心能力 |源码级印证抽象类的核心职责Agent.NET 实现见 Agent.cs除身份与描述性元数据外必须定义其通信协议AgentChannel。其公开属性包括Id默认随机 GUID、Name、Description、Instructions、Kernel默认空 Kernel可覆盖、Arguments含PromptExecutionSettings、LoggerFactory以及实验性的UseImmutableKernel默认false开启后在调用时克隆内核实例与Template基于指令的提示词模板若设置则通过RenderInstructionsAsync渲染。核心行为是若干InvokeAsync/InvokeStreamingAsync重载接受无消息、字符串消息、ChatMessageContent或消息集合可附带AgentThread与AgentInvokeOptions以及受保护的CreateChannelAsync/RestoreChannelAsync/GetChannelKeys——后者说明两个同类型的特定 Agent 可能需要各自独立的 Channel例如两个指向不同 Azure OpenAI endpoint 的 Assistant Agent因此仅有 Channel 类型不足以区分还需要额外的 key。AgentChannelAgentChannel.cs定义了单类型 Agent 的通信协议抽象方法包括ReceiveAsync接收对话消息、InvokeAsync单个 Agent 与AgentChat之间的一次离散增量交互返回(bool IsVisible, ChatMessageContent Message)元组用于区分是否需要向用户展示、InvokeStreamingAsync流式版本、GetHistoryAsync获取该 Channel 专属的消息历史与Serialize/ResetAsync状态序列化与重置。AgentChatAgentChat.cs是多个 Agent 交互的场所维护内部ChatHistory通过字典管理Agent → Channel-hash映射并公开Agents、IsActive不支撑并发调用并发活动会抛异常、InvokeAsync、InvokeStreamingAsync、GetChatMessagesAsync(agent: null)主历史与GetChatMessagesAsync(agent)Agent 专属历史是主历史的适配视图。具体实现一ChatCompletionAgent基于本地 chat-history框架中第一个具体 Agent 是ChatCompletionAgent它能够与任意IChatCompletionService实现集成。由于IChatCompletionService直接作用于ChatHistory这恰好演示了ChatHistoryKernelAgent可以多么简单地被实现。Agent 的行为自然受限于具体IChatCompletionService的行为——例如一个不支持 function-calling 的连接器同样不会作为 Agent 执行任何KernelFunction。| 类名 | 父类 | 角色 | 模态 | 说明 | |-|-|-|-|-| |ChatCompletionAgent|ChatHistoryKernelAgent| Agent | SemanticKernel | 基于本地 chat-history 的具体 Agent |源码佐证.NET 实现见 ChatCompletionAgent.cs。它继承自ChatHistoryAgent可从PromptTemplateConfig构造自动填充Name/Description/Instructions/Arguments/Template也可通过对象初始化器配置。其InstructionsRole属性默认AuthorRole.System且源码注释特别提醒某些 O* 系列深度推理模型要求指令以 developer 角色提供某些版本两者都不支持此时 Agent 功能完全由插件决定。注意源码注释要求要启用 Agent 插件需要设置PromptExecutionSettings.FunctionChoiceBehavior通过Agent.Arguments传入。Python 对应实现见 chat_completion_agent.py其配套的ChatHistoryAgentThread在本地维护ChatHistory线程 ID 形如thread_uuid。具体实现二OpenAI Assistant Agent基于远程 thread第二个具体 Agent 是OpenAIAssistantAgent。它基于 OpenAI Assistant API并实现了自己的 Channel——因为聊天历史由远程的 assistantthread管理。| 类名 | 父类 | 角色 | 模态 | 说明 | |-|-|-|-|-| |OpenAIAssistantAgent|KernelAgent| Agent | OpenAI Assistant | 基于 OpenAI Assistant API 的功能型 Agent | |OpenAIAssistantChannel|AgentChannel| Channel | OpenAI Assistant | 与OpenAIAssistantAgent关联的 Channel | |OpenAIAssistantDefinition| - | Config | OpenAI Assistant | 枚举托管 Agent 定义时使用的定义类 |由于每一个 Assistant 操作本质上都是对 REST endpoint 的调用OpenAIAssistantAgent的顶层操作通过静态异步工厂方法实现见下文使用模式包括CreateAsync创建、RetrieveAsync检索既有定义、ListDefinitionsAsync枚举定义。源码佐证Python 实现见 openai_assistant_agent.py它依赖 OpenAI SDK 的AsyncOpenAI客户端支持code_interpreter、file_search等工具类型并通过AssistantThreadActions与远程 thread 交互对应 Channel 为 open_ai_assistant_channel.py。.NET 侧对应实现位于 dotnet/src/Agents/OpenAI。具体实现三AgentGroupChat 与选择/终止策略AgentGroupChat是AgentChat的具体实现其行为由各种策略Strategies定义。| 类名 | 父类 | 角色 | 模态 | 说明 | |-|-|-|-|-| |AgentGroupChat|AgentChat| Chat | 工具 | 基于策略的聊天 | |AgentGroupChatSettings| - | Config | 工具 | 定义影响AgentGroupChat行为的策略 | |SelectionStrategy| - | Config | 工具 | 决定Agent实例参与AgentGroupChat的顺序 | |TerminationStrategy| - | Config | 工具 | 决定AgentGroupChat对话何时允许终止无需再选择另一个Agent |源码级印证默认策略与迭代上限.NET 侧AgentGroupChatSettingsAgentGroupChatSettings.cs默认SelectionStrategy SequentialSelectionStrategy按加入顺序轮询默认TerminationStrategy DefaultTerminationStrategy其MaximumIterations 1且永不主动终止而TerminationStrategy基类TerminationStrategy.cs定义了常量DefaultMaximumIterations 99并提供MaximumIterations、AutomaticReset、Agents策略适用范围默认评估所有 Agent等配置项。AgentGroupChatAgentGroupChat.cs的InvokeAsync()循环执行用SelectionStrategy选出下一个 Agent → 调用该 Agent → 用TerminationStrategy判断是否终止并在无SelectionStrategy时不调用任何 AgentInvokeAsync(agent)则显式让指定 Agent 加入并发言随后更新IsComplete。Python 侧AgentGroupChatagent_group_chat.py同样提供add_agent、invoke_single_turn等方法DefaultTerminationStrategydefault_termination_strategy.pymaximum_iterations默认为5且永不终止TerminationStrategy基类termination_strategy.py默认maximum_iterations99、automatic_resetFalse并支持通过agents列表限定评估范围。SequentialSelectionStrategysequential_selection_strategy.py实现了 round-robin 轮询并避免同一 Agent 连续发言两次。仓库还内置了若干现成策略可供直接使用.NET 见 dotnet/src/Agents/Core/ChatSequentialSelectionStrategy、KernelFunctionSelectionStrategy用 KernelFunction 选择下一个 Agent、KernelFunctionTerminationStrategy用 KernelFunction 判定终止、RegExTerminationStrategy用正则匹配判定终止、AggregatorTerminationStrategy。Python 对应策略位于 python/semantic_kernel/agents/strategies。具体实现四AggregatorAgent聚合 Agent为了支撑复杂调用模式AggregatorAgent使参与某个AgentChat的一个或多个 Agent能够对外呈现为单个逻辑 Agent。| 类名 | 父类 | 角色 | 模态 | 说明 | |-|-|-|-|-| |AggregatorAgent|Agent| Agent | 工具 | 将AgentChat适配为Agent| |AggregatorChannel|AgentChannel| Channel | 工具 |AggregatorAgent使用的AgentChannel| |AggregatorMode| - | Config | 工具 | 定义AggregatorAgent的聚合模式 |源码佐证.NET 实现见 AggregatorAgent.cs。AggregatorMode枚举包含两个值Flat被聚合聊天平铺嵌入另一聊天与Nested被聚合聊天嵌套嵌入另一聊天默认Flat。AggregatorAgent通过构造函数接收一个FuncAgentChat工厂方法每次创建新的AgentChat实例且不同AggregatorAgent实例永远不会共享同一个 ChannelGetChannelKeys中额外加入Name/Id作为 key。使用模式一ChatCompletionAgent 实例化创建ChatCompletionAgent的方式与在 Agent 框架之外定义一个带IChatCompletionService的Kernel对象几乎一致只需额外提供 Agent 专属的指令Instructions与身份Name。.NETC#:// Start with the Kernel IKernelBuilder builder Kernel.CreateBuilder(); // Add any IChatCompletionService builder.AddOpenAIChatCompletion(...); // Include desired plugins / functions builder.Plugins.Add(...); // Include desired filters builder.Filters.Add(...); // Create the agent ChatCompletionAgent agent new() { Instructions instructions, Name name, Kernel builder.Build() };Python:# Start with the Kernel kernel Kernel() # Add any ChatCompletionClientBase kernel.add_service(AzureChatCompletion(service_idagent, ...)) # Include desired plugins / functions kernel.add_plugin(...) # Include desired filters (via kernel.filter decorator) # Create the agent agent ChatCompletionAgent(service_idagent, kernelkernel, namename, instructionsinstructions)要点Kernel 是 Agent 的服务与插件容器Agent 框架完全复用了 Semantic Kernel 的 DI、plugins、filters 体系对应 ADR 决策驱动力与 Semantic Kernel 模式对齐Python 侧service_id必须与add_service注册时的service_id一致Agent 调用时按此 ID 解析ChatCompletionClientBase。使用模式二OpenAIAssistantAgent 生命周期管理由于 Assistant 的每个操作都是 REST 调用OpenAIAssistantAgent的顶层操作全部通过静态异步工厂方法完成。创建Create—— .NET// Start with the Kernel IKernelBuilder builder Kernel.CreateBuilder(); // Include desired plugins / functions builder.Plugins.Add(...); // Create config and definition OpenAIServiceConfiguration config new(apikey, endpoint); OpenAIAssistantDefinition definition new() { Instructions instructions, Name name, Model gpt-4, }; // Create the agent OpenAIAssistantAgent agent OpenAIAssistantAgent.CreateAsync( builder.Build(), config, definition);创建Create—— Python# Start with the Kernel kernel Kernel() # Include desired plugins / functions kernel.add_plugin(...) # Create config and definition config OpenAIServiceConfiguration(apikey, endpoint) definition OpenAIAssistantDefinition(instructionsinstructions, namename, modelgpt-4) agent OpenAIAssistantAgent.create(kernelkernel, configconfig, definitiondefinition)检索Retrieval—— 基于已有 definition 恢复 Agent// .NET Kernel kernel ...; OpenAIServiceConfiguration config new(apikey, endpoint); OpenAIAssistantAgent agent OpenAIAssistantAgent.RetrieveAsync(kernel, config, agent-id);# Python kernel Kernel() config OpenAIServiceConfiguration(apikey, endpoint) agent OpenAIAssistantAgent.retrieve(kernel kernel, configconfig, agentidagent-id)检查Inspection—— 枚举服务端已定义的 Agent// .NET OpenAIServiceConfiguration config new(apikey, endpoint); // Enumerate defined agents IAsyncEnumerableOpenAIAssistantDefinition definitions OpenAIAssistantAgent.ListDefinitionsAsync(config);# Python config OpenAIServiceConfiguration(apikey, endpoint) # Enumerate defined agents definitions await OpenAIAssistantAgent.list_definitions(configconfig)说明以上OpenAIServiceConfiguration/OpenAIAssistantDefinition均直接取自 ADR 原文示例。若使用 Azure OpenAI endpoint应使用对应的AzureOpenAIServiceConfiguration与 Azure 版 Agent仓库中相应实现见 dotnet/src/Agents/AzureAI 与 Python 的 azure_assistant_agent.py。创建 Agent 后可通过调用 AssistantThreadActions 管理的 thread 来维护远程会话历史。使用模式三Agent Chat 显式驱动在AgentGroupChat中可以显式指定某个 Agent 发言。这种模式下不同模态的 Agent如ChatCompletionAgent与OpenAIAssistantAgent可以同场对话这正是任何模态的 Agent 都能与任何其他模态的 Agent 交互决策驱动力的直接应用。.NET:// Define agents ChatCompletionAgent agent1 ...; OpenAIAssistantAgent agent2 ...; // Create chat AgentGroupChat chat new(); // Provide input for chat ChatMessageContent input new (AuthorRole.User, input); await WriteMessageAsync(input); chat.AddChatMessage(input); // First invoke one agent, then the other, display each response. await WriteMessagesAsync(chat.InvokeAsync(agent1)); await WriteMessagesAsync(chat.InvokeAsync(agent2)); // The entire history may be accessed. // Agent specific history is an adaptaton of the primary history. await WriteMessagesAsync(chat.GetHistoryAsync()); await WriteMessagesAsync(chat.GetHistoryAsync(agent1)); await WriteMessagesAsync(chat.GetHistoryAsync(agent2));Python:# Define agents agent1 ChatCompletionAgent(...) agent2 OpenAIAssistantAgent.create(...) # Create chat chat AgentGroupChat() # Provide input for chat input ChatMessageContent(AuthorRole.User, input) await write_message(input) chat.add_chat_message(input) # First invoke one agent, then the other, display each response. await write_message(chat.invoke(agent1)) await write_message(chat.invoke(agent2)) # The entire history may be accessed. # Agent specific history is an adaptaton of the primary history. await write_message(chat.get_history()) await write_message(chat.get_history(agent1)) await write_message(chat.get_history(agent2))关键点调用chat.InvokeAsync(agent)会让指定 Agent 加入聊天并发言GetHistoryAsync()返回整个对话的主历史而GetHistoryAsync(agent)返回该 Agent 视角下的适配历史在源码中体现为AgentChat.GetChatMessagesAsync(agent)通过SynchronizeChannelAsync同步并读取该 Agent 对应 Channel 的历史。使用模式四Agent Chat 多轮协作策略驱动Agent 还可以围绕一个目标进行多轮协作直到满足终止条件。.NET:// Define agents ChatCompletionAgent agent1 ...; OpenAIAssistantAgent agent2 ...; ChatCompletionAgent agent3 ...; // Create chat with two agents. AgentGroupChat chat new(agent1, agent2) { ExecutionSettings { // Chat will continue until it meets the termination criteria. TerminationStrategy new MyTerminationStrategy(), } }; // Provide input for chat ChatMessageContent input new(AuthorRole.User, input); await WriteMessageAsync(input); chat.AddChatMessage(input); // Agent may be added to an existing chat chat.AddAgent(agent3); // Execute the chat until termination await WriteMessagesAsync(chat.InvokeAsync());Python:# Define agents agent1 ChatCompletionAgent(...) agent2 OpenAIAssistantAgent.create(...) agent3 ChatCompletionAgent(...) # Create chat with two agents. chat AgentGroupChat( agents[agent1, agent2], termination_strategyMyTerminationStrategy(), ) # Provide input for chat input ChatMessageContent(AuthorRole.User, input) await write_message(input) chat.add_chat_message(input) # Agent may be added to an existing chat chat.add_agent(agent3) # Execute the chat until termination await write_message(chat.invoke())说明ADR 原文的 Python 示例使用了 C# 风格的属性初始化语法本文已按 Python 实际 API 规整为AgentGroupChat(agents[...], termination_strategy...)的构造方式与 agent_group_chat.py 的__init__签名一致。未配置SelectionStrategy时AgentGroupChat.InvokeAsync()不会调用任何 Agent.NET 源码注释明确说明因此多轮模式必须配置策略自定义MyTerminationStrategy需继承TerminationStrategy并实现ShouldAgentTerminateAsync.NET/should_agent_terminatePython返回true表示该轮后终止。此外.NET默认终止策略最多迭代 1 次、基类上限 99 次Python 默认策略最多迭代 5 次请按需在自定义策略中设置MaximumIterations/maximum_iterations。从 ADR 到落地实现对照速查ADR 中的每个设计概念都能在当前仓库中找到对应实现便于读者按图索骥| ADR 概念 | .NET 实现 | Python 实现 | |-|-|-| |Agent| dotnet/src/Agents/Abstractions/Agent.cs | python/semantic_kernel/agents/agent.py | |AgentChannel| dotnet/src/Agents/Abstractions/AgentChannel.cs | python/semantic_kernel/agents/channels/agent_channel.py | |AgentChat| dotnet/src/Agents/Abstractions/AgentChat.cs | python/semantic_kernel/agents/agent_chat.py | |ChatCompletionAgent| dotnet/src/Agents/Core/ChatCompletionAgent.cs | python/semantic_kernel/agents/chat_completion/chat_completion_agent.py | |AgentGroupChat| dotnet/src/Agents/Core/AgentGroupChat.cs | python/semantic_kernel/agents/group_chat/agent_group_chat.py | |SelectionStrategy/TerminationStrategy| dotnet/src/Agents/Core/Chat | python/semantic_kernel/agents/strategies | |OpenAIAssistantAgent| dotnet/src/Agents/OpenAI | python/semantic_kernel/agents/open_ai/openai_assistant_agent.py | |AggregatorAgent| dotnet/src/Agents/Abstractions/AggregatorAgent.cs | Python 侧对应实现见agents包内聚合相关模块 |此外仓库还提供了丰富的实战样例可进一步参考.NET 侧 dotnet/samples/GettingStartedWithAgents含 OpenAI Assistant、Azure AI Agent、Orchestration、Plugins、多 Agent 声明式编排等逐步教程与 dotnet/samples/Concepts/AgentsPython 侧 python/samples/getting_started_with_agents 与 python/samples/concepts/agents。总结ADR-0032 为 Semantic Kernel 的 Agent 能力奠定了完整的设计基石以Agent身份、行为、交互为根抽象以AgentChannel承载不同模态的状态与协议差异以AgentChat/AgentGroupChat组织多 Agent 协作并通过SelectionStrategy与TerminationStrategy灵活控制对话节奏再以AggregatorAgent支持复杂调用模式。这一设计严格遵循与 Semantic Kernel 既有模式对齐复杂度封装在实现细节中输入输出统一为ChatMessageContent等决策驱动力使得任何模态的 Agent 都能与其他模态的 Agent 自由协作。当前该框架在仓库中处于实验阶段.NET 侧标注[Experimental(SKEXP0110)]API 可能随版本演进调整建议在动手集成前查阅对应语言的样例与源码以确认最新用法。【免费下载链接】semantic-kernelIntegrate cutting-edge LLM technology quickly and easily into your apps项目地址: https://gitcode.com/GitHub_Trending/se/semantic-kernel创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考