.NET 9实战|最新C# AI Agent开发,Semantic Kernel+OpenClaw双剑合璧
写到这儿,说实话我有点感慨。以前总觉得搞AI是Python的天下,C#只能做做后台。但.NET 9的性能提升(特别是GC和AOT编译优化),加上Semantic Kernel这种第一方SDK的成熟,咱们C#开发者现在完全有能力在AI Agent这个赛道分一杯羹。OpenClaw这类工具的出现,更是打破了"AI只能聊天"的局限。当SK的编排能力遇上OpenClaw的执行能力,C#不仅能写AI应用,还
文章目录
目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步,增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow,教程通俗易懂,高中生都能看懂,还有各种段子风趣幽默,从深度学习基础原理到各领域实战应用都有讲解,我22年的AI积累全在里面了。注意,教程仅限真正想入门AI的朋友,否则看看零散的博文就够了。
别再用Python写Agent了,C#也能整!
说实话,最近AI Agent火得有点离谱。打开GitHubTrending,满屏的Python项目,搞得咱们.NET开发者心里直痒痒,但又有点慌——难道C#真就只能在旁边看热闹?
答案是:扯淡!.NET 9正式发布之后,配合微软的Semantic Kernel和最近爆火的OpenClaw框架,咱们用C#写AI Agent不仅行,而且行得很爽。今天这篇文章,我就手把手教你如何把这两把"瑞士军刀"和"万能机械手"组合起来,打造一个能自己上网查资料、写代码、甚至操作浏览器的真·AI Agent。
不搞那些虚的,直接上代码,看完你就能跑起来。
先搞明白:Semantic Kernel和OpenClaw到底是个啥?
很多兄弟一上来就被这两个名词整懵了。别急,我用大白话给你翻译翻译。
Semantic Kernel(简称SK) 你可以理解成AI界的乐高积木。它是微软官方出的SDK,专门用来给大模型(GPT-4、Claude、Qwen都行)编排"技能"。你想让AI干啥?查天气?写邮件?操作数据库?在SK里,这些都叫"Plugin"(插件)。SK负责把这些插件串起来,让AI自己决定先干啥后干啥,就像给AI配了个聪明的大脑。
OpenClaw 呢?这玩意儿最近火得一塌糊涂,简单来说它是Agent界的"万能机械手"。OpenClaw基于Claude的Computer Use能力开源实现,能让AI真正操控你的电脑——打开浏览器、点击按钮、下载文件、运行终端命令。以前AI只能"嘴上说说",有了OpenClaw,它真能"动手动脚"。
为啥要"双剑合璧"?因为SK管"想",OpenClaw管"做"。SK负责编排逻辑,OpenClaw负责落地执行。这俩一组合,你的C#程序就能从一个简单的聊天机器人进化成能独立干活的"数字实习生"。
环境准备:.NET 9装起来,5分钟搞定
工欲善其事,先利其器。咱们先把开发环境整利索。
首先,确保你装了**.NET 9 SDK**(2024年11月发布的LTS版本,稳得很)。命令行跑一下:
dotnet --version
显示 9.0.xxx 就对了。
然后新建个项目,咱们搞个控制台应用就行:
dotnet new console -n CSharpAgentDemo
cd CSharpAgentDemo
接下来装NuGet包。Semantic Kernel现在最新稳定版是1.6+,直接拉满:
dotnet add package Microsoft.SemanticKernel --version 1.6.0
dotnet add package Microsoft.SemanticKernel.Plugins.Web --version 1.6.0
还需要一个HTTP客户端来调用OpenClaw(因为OpenClaw通常以Docker服务或本地API形式部署):
dotnet add package System.Net.Http.Json --version 9.0.0
搞定!现在打开 Program.cs,咱们开始写真家伙。
第一招:Semantic Kernel基础,先把AI大脑接进来
SK的核心概念就三个:Kernel(内核)、Plugin(插件)、Function(函数)。别被名词吓到,说白了就是你教AI几项技能,然后让它自己用。
先整个简单的,让AI能说话,还能查个天气(模拟的):
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
// 配置你的API Key,这里以OpenAI为例,Claude的API也类似
var builder = Kernel.CreateBuilder();
builder.AddOpenAIChatCompletion(
modelId: "gpt-4",
apiKey: "your-api-key-here"
);
var kernel = builder.Build();
// 定义一个简单的插件,假装查天气
public class WeatherPlugin
{
[KernelFunction, Description("获取指定城市的天气")]
public string GetWeather([Description("城市名")] string city)
{
// 实际项目中这里应该调真实API,咱们先模拟
return $"{city}今天晴,25度,适合写代码";
}
}
// 把插件注册给Kernel
kernel.Plugins.AddFromType<WeatherPlugin>();
// 试试效果
var chat = kernel.GetRequiredService<IChatCompletionService>();
var history = new ChatHistory();
history.AddUserMessage("北京今天天气怎么样?");
var result = await chat.GetChatMessageContentAsync(history, kernel);
Console.WriteLine(result); // AI会调用插件并告诉你天气
看到没?这就是SK的精髓。你把工具(Plugin)准备好,AI会根据用户的话自己判断该用哪个工具。这不是简单的if-else,而是大模型在理解语义后做出的决策。
第二招:接入OpenClaw,让AI真正能"动手"
好了,现在AI有脑子了,但还缺双手。OpenClaw就是来干这个脏活累活的。
通常OpenClaw会跑在Docker里,暴露一个HTTP API(默认可能是http://localhost:8080)。咱们需要在SK里创建一个Plugin,专门用来调用OpenClaw的服务。
using System.Net.Http.Json;
using System.Text.Json;
using Microsoft.SemanticKernel;
public class OpenClawPlugin
{
private readonly HttpClient _httpClient;
public OpenClawPlugin()
{
_httpClient = new HttpClient { BaseAddress = new Uri("http://localhost:8080") };
}
[KernelFunction, Description("让AI操作浏览器执行任务,比如搜索资料、下载文件")]
public async Task<string> ExecuteTask(
[Description("要执行的具体任务描述,越详细越好")] string task)
{
try
{
// 调用OpenClaw的API创建任务
var response = await _httpClient.PostAsJsonAsync("/api/tasks", new
{
instruction = task,
timeout = 300 // 5分钟超时
});
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadFromJsonAsync<OpenClawResult>();
return $"任务执行完成:{result?.Output ?? "无输出"}";
}
catch (Exception ex)
{
return $"执行失败:{ex.Message}";
}
}
private class OpenClawResult
{
public string Output { get; set; }
public string Status { get; set; }
}
}
这段代码干啥的?其实就是给SK包了一层壳,让SK能通过调用 OpenClawPlugin.ExecuteTask 来使唤OpenClaw。比如AI想"帮我查一下.NET 9的新特性并保存到文件",它就会调用这个函数,把任务发给OpenClaw,OpenClaw真的打开Chrome,上微软官网,把内容扒下来存好。
实战:双剑合璧,打造一个自动研究员
现在咱们把两者合起来,搞个有点用的东西:自动研究员。你告诉它一个主题,它自己去网上查资料,然后整理成Markdown文档。
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.OpenAI;
// 初始化Kernel,这次加上两个插件
var builder = Kernel.CreateBuilder();
builder.AddOpenAIChatCompletion("gpt-4", "your-key");
builder.Plugins.AddFromType<WeatherPlugin>(); // 之前定义的天气插件,可有可无
builder.Plugins.AddFromType<OpenClawPlugin>(); // 咱们的OpenClaw神器
var kernel = builder.Build();
// 设置执行策略,允许自动调用插件
var executionSettings = new OpenAIPromptExecutionSettings
{
ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions
};
var chatService = kernel.GetRequiredService<IChatCompletionService>();
var chatHistory = new ChatHistory();
Console.WriteLine("=== C# AI Agent 启动 ===");
Console.WriteLine("请输入研究主题(比如'.NET 9新特性'):");
var topic = Console.ReadLine();
chatHistory.AddSystemMessage("""
你是一个专业的技术研究员。你的任务是:
1. 使用OpenClaw工具搜索相关资料
2. 整理成结构化的技术报告
3. 保存到本地文件
注意:如果搜索失败,请告诉用户具体原因。
""");
chatHistory.AddUserMessage($"请帮我研究一下:{topic},并写一份简短的技术总结保存到桌面");
// 开始执行,AI会自动决策调用哪些工具
var response = await chatService.GetChatMessageContentAsync(
chatHistory,
executionSettings,
kernel
);
Console.WriteLine("\n=== Agent执行结果 ===");
Console.WriteLine(response.Content);
// 如果AI调用了OpenClaw,它真的会在后台开浏览器去查资料
// 然后把结果写回对话,最后生成总结
看到这段代码的威力没?你啥都没硬编码,就给了AI一个目标和一套工具,它自己就能规划:“哦,用户要查.NET 9,我需要调用OpenClaw去搜微软文档,然后整理成Markdown”。这就是真正的Agent行为,不是简单的问答机器人。
踩坑实录:这些坑我替你踩过了
说实话,第一次把这俩框架捏一块儿的时候,我也被坑得不要不要的。给你列几个常见的,省得你半夜 Debugging:
1. 异步地狱要当心
SK和OpenClaw全是异步操作,async/await 用得不对直接死锁。.NET 9虽然优化了性能,但异步逻辑还是得老老实实写。记住:别在异步方法里混用 .Result,不然分分钟教做人。
2. OpenClaw的Docker网络问题
如果你把OpenClaw跑在Docker里,localhost可能访问不到。得把容器网络模式设为host(Linux)或者映射端口时仔细配置。我当初就是没注意这个,AI一直报"连接失败",查了半天才发现是Docker网络隔离的问题。
3. Token消耗像个黑洞
让AI自动决策意味着可能会多次调用大模型。SK默认的AutoInvoke模式虽然爽,但一不小心就烧掉几百Tokens。建议加个预算控制,或者在System Prompt里限制思考步骤:“最多思考3步,别瞎折腾”。
4. JSON序列化的大小写
OpenClaw的API可能用camelCase,C#默认PascalCase,.PostAsJsonAsync 有时候对不齐。建议显式设置 JsonSerializerOptions:
var options = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
};
进阶玩法:让Agent更聪明
基础跑通之后,你可以整点花的:
- 记忆功能:用SK的Memory或者接个向量数据库(比如Qdrant、Milvus),让Agent记得你上周让它查过啥,避免重复劳动。
- 多Agent协作:建好几个Kernel实例,一个专门搜索,一个专门写代码,一个专门测试,然后用SK的Agent功能(1.5+版本支持)让它们协作,像个小团队一样干活。
- 本地化部署:不想用OpenAI API?把模型换成Ollama本地跑的Llama 3.2或者Qwen 2.5,配合OpenClaw的本地版本,整套东西完全离线运行,数据隐私稳得一批。
结语:C#的AI时代真的来了
写到这儿,说实话我有点感慨。以前总觉得搞AI是Python的天下,C#只能做做后台。但.NET 9的性能提升(特别是GC和AOT编译优化),加上Semantic Kernel这种第一方SDK的成熟,咱们C#开发者现在完全有能力在AI Agent这个赛道分一杯羹。
OpenClaw这类工具的出现,更是打破了"AI只能聊天"的局限。当SK的编排能力遇上OpenClaw的执行能力,C#不仅能写AI应用,还能写真正能改变物理世界(或者说数字世界)的智能体。
别再观望了,把代码clone下来跑一跑。说不定下一个爆款AI工具,就是你用.NET 9写的。
目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步,增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow,教程通俗易懂,高中生都能看懂,还有各种段子风趣幽默,从深度学习基础原理到各领域实战应用都有讲解,我22年的AI积累全在里面了。注意,教程仅限真正想入门AI的朋友,否则看看零散的博文就够了。

更多推荐

所有评论(0)