SuperAPI AI 工具集

dotnet-semantic-kernel

智能体与模型

查看项目

更新于 10-16 10:20

技能介绍

用途

dotnet-semantic-kernel 用于在 .NET 应用中集成 AI/LLM 能力,基于 Microsoft Semantic Kernel 进行 AI 与 LLM 编排。资料说明其涵盖内核设置与配置、插件/函数调用、提示词模板(Handlebars 与 Liquid 语法)、内存与向量存储集成、规划器、智能体(agents)框架,以及与 Azure OpenAI、OpenAI 和本地模型的集成。

主要能力

内核设置(Kernel Setup)

Kernel 是 Semantic Kernel 的核心对象,负责管理 AI 服务连接、插件与函数调用。资料给出的相关包包括:

  • Microsoft.SemanticKernel:核心内核、函数调用、提示词模板
  • Microsoft.SemanticKernel.Connectors.AzureOpenAI:Azure OpenAI 聊天/嵌入/图像服务
  • Microsoft.SemanticKernel.Connectors.OpenAI:OpenAI 聊天/嵌入/图像服务
  • Microsoft.SemanticKernel.Connectors.Ollama:Ollama 本地模型集成
  • Microsoft.SemanticKernel.Plugins.Core:内置插件(时间、数学、文本)
  • Microsoft.SemanticKernel.Agents.Core:智能体框架(聊天智能体、群聊)
  • Microsoft.Extensions.VectorData.Abstractions:向量存储抽象层
  • Microsoft.SemanticKernel.Connectors.Qdrant:Qdrant 向量存储连接器
  • Microsoft.SemanticKernel.Connectors.AzureAISearch:Azure AI Search 向量存储连接器

基本配置示例(Azure OpenAI):

using Microsoft.SemanticKernel;

var builder = Kernel.CreateBuilder();

// Azure OpenAI
builder.AddAzureOpenAIChatCompletion(
    deploymentName: "gpt-4o",
    endpoint: Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT")!,
    apiKey: Environment.GetEnvironmentVariable("AZURE_OPENAI_API_KEY")!);

var kernel = builder.Build();

ASP.NET Core DI 集成示例:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddKernel();

builder.Services.AddAzureOpenAIChatCompletion(
    deploymentName: builder.Configuration["AI:DeploymentName"]!,
    endpoint: builder.Configuration["AI:Endpoint"]!,
    apiKey: builder.Configuration["AI:ApiKey"]!);

// Register plugins
builder.Services.AddSingleton<OrderPlugin>();
builder.Services.AddSingleton(sp =>
{
    var kernel = sp.GetRequiredService<Kernel>();
    kernel.Plugins.AddFromObject(sp.GetRequiredService<OrderPlugin>());
    return kernel;
});

支持注册多个 AI 服务并通过 service ID 选择,以及在调用时通过 PromptExecutionSettings 指定 ServiceId。本地模型可使用 Ollama(示例标注 Ollama 连接器为实验性,需 #pragma warning disable SKEXP0070)。

插件与函数调用

插件把 .NET 方法暴露为 AI 模型可调用的函数,这是让 LLM 响应基于真实数据与操作的主要机制。资料示例使用 [KernelFunction] 与 [Description] 特性标注方法,并支持从对象实例、类型或函数直接注册插件:

kernel.Plugins.AddFromObject(new OrderPlugin(orderRepo), "Orders");
kernel.Plugins.AddFromType<TimePlugin>("Time");
kernel.Plugins.AddFromFunctions("Math", [ ... ]);

自动函数调用通过 FunctionChoiceBehavior.Auto() 在聊天过程中启用;函数过滤器(IFunctionInvocationFilter)可在执行前后拦截,用于日志、授权或修改。

提示词模板

支持内联提示、Handlebars 模板(条件、循环、函数调用)与 YAML 提示配置。内联示例:

var result = await kernel.InvokePromptAsync(
    "Summarize the following text in {{$style}} style:\n\n{{$input}}",
    new KernelArguments { ["input"] = articleText, ["style"] = "concise bullet points" });

YAML 提示支持 name、description、template_format、template、input_variables、execution_settings(如 temperature、max_tokens),可通过 kernel.CreateFunctionFromPromptYaml(yamlContent) 加载。

内存与向量存储

提供向量存储抽象,用于检索增强生成(RAG)。记录模型使用 [VectorStoreRecordKey]、[VectorStoreRecordData]、[VectorStoreRecordVector] 等特性标注;连接器示例包括 Qdrant(builder.Services.AddQdrantVectorStore("localhost", 6334))。RAG 模式流程为:生成问题嵌入 → 向量检索 → 拼接上下文 → 携带上下文生成回答;另提供文档写入(Ingest)示例。

智能体框架

支持构建多智能体系统。ChatCompletionAgent 需通过线程调用(智能体不接受裸字符串),示例使用 ChatHistoryAgentThread。AgentGroupChat 可让多个智能体在终止条件下协作(如 ApprovalTerminationStrategy、MaximumIterations)。OpenAIAssistantAgent 面向有状态对话与内置工具(代码解释器、文件搜索),使用 builder 模式创建,并在 finally 中删除。资料注明智能体框架为实验性(SKEXP0110),API 在版本间变动频繁。

流式响应

资料在“Streaming Responses”一节开头给出了获取 IChatCompletionService 与 ChatHistory 的代码,用于逐 token 流式返回聊天响应;该节内容在提供资料中未完整展开。

使用方式

以 C# 代码为主:通过 NuGet 引入 Microsoft.SemanticKernel 及所需连接器/插件/智能体包,使用 Kernel.CreateBuilder() 或 ASP.NET Core 依赖注入注册 AI 服务与插件,通过 KernelArguments、PromptExecutionSettings、ChatHistory 等对象调用聊天、嵌入、函数调用与智能体。

适用场景

在 .NET/ASP.NET Core 应用中接入 Azure OpenAI、OpenAI 或本地模型(Ollama),实现插件化函数调用、结构化提示词、基于向量存储的 RAG,以及单/多智能体协作等 AI 功能。

限制

资料明确将以下主题列为范围之外(Out of scope):通用 async/await 模式与取消令牌传播(见 dotnet-csharp-async-patterns)、DI 容器机制与服务生命周期管理(见 dotnet-csharp-dependency-injection)、HTTP 客户端弹性与重试策略(见 dotnet-resilience)、配置绑定(选项模式、密钥)(见 dotnet-csharp-configuration)。此外,智能体框架(SKEXP0110)与 Ollama 连接器(SKEXP0070)为实验性,API 可能随 Semantic Kernel 版本变化,采用时需对照最新示例核验方法签名。关于该技能的收费、价格、平台支持范围与具体使用效果,资料未提供。