目前国内还是很缺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的朋友,否则看看零散的博文就够了。

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐