以下是基于 Microsoft.Extensions.AI 的保姆级教程,结合官方文档及实践案例整理而成:

一、环境准备与安装

创建项目

新建一个 .NET 控制台应用(建议使用 .NET 8 或更高版本):

dotnet new console -n AIDemo 
cd AIDemo 

安装依赖包

安装核心库及 OpenAI 兼容扩展(以国内兼容 OpenAI 的模型为例):

dotnet add package Microsoft.Extensions.AI.Abstractions 
dotnet add package Microsoft.Extensions.AI.OpenAI 

二、基础配置与 API 调用

配置模型参数

在 appsettings.json 中添加模型配置(以 DeepSeek 为例):

{
  "ModelSettings": {
    "ApiKey": "your-api-key",
    "ModelId": "deepseek-r1-7b",
    "Endpoint": "https://api.siliconflow.cn/v1" 
  }
}

初始化服务

在 Program.cs 中注入 AI 服务:

using Microsoft.Extensions.AI;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

var builder = new ConfigurationBuilder().AddJsonFile("appsettings.json"); 
var config = builder.Build();

var services = new ServiceCollection();
services.AddAiClient(config.GetSection("ModelSettings"));
var serviceProvider = services.BuildServiceProvider();
var chatClient = serviceProvider.GetRequiredService<IChatClient>();

实现简单对话

调用模型生成回答:

var response = await chatClient.CompleteAsync("用一句话解释量子计算");
Console.WriteLine(response.Message); // 输出模型响应 

三、函数调用(Function Calling)

定义插件类

创建一个处理文件的插件,例如 FileProcessorPlugin:

public class FileProcessorPlugin 
{
    [Description("读取PDF内容并返回文本")]
    public string ReadPdf(string filePath)
    {
        // 实现PDF解析逻辑 
        return "PDF内容文本...";
    }

    [Description("保存Markdown笔记到指定路径")]
    public void SaveMarkdown(string path, string content)
    {
        File.WriteAllText(path, content);
    }
}

注入插件并调用

在服务配置中启用函数调用:

services.AddAiClient(config.GetSection("ModelSettings"))
        .UseFunctionInvocation()
        .AddPlugin<FileProcessorPlugin>();

触发函数

调用通过自然语言指令触发:

var result = await chatClient.CompleteAsync(
    "请读取 /data/report.pdf  并保存摘要到 /notes/summary.md"); 
// 模型会自动调用插件中的函数 

四、多模型混合配置

若需同时使用多个模型(如对话用 Qwen,数据处理用 DeepSeek):

Csharp复制services.AddAiClient("QwenClient", config.GetSection("QwenSettings"))
        .AddAiClient("DeepSeekClient", config.GetSection("DeepSeekSettings"));
 
// 按需获取不同客户端 
var qwenClient = serviceProvider.GetRequiredService<IChatClient>("QwenClient");
var deepseekClient = serviceProvider.GetRequiredService<IChatClient>("DeepSeekClient");

五、调试与优化

  • 日志与监控
    启用内置日志记录:
services.AddLogging(logging => logging.AddConsole());
  • 性能优化
    通过 ChatOptions 控制响应参数:
var options = new ChatOptions { Temperature = 0.7, MaxTokens = 500 };
var response = await chatClient.CompleteAsync("提问内容", options);

六、学习资源推荐

官方文档

实践案例

社区支持


注意事项

  • 当前 Microsoft.Extensions.AI 仍处于预览阶段,API 可能有变动,建议定期检查更新 6
  • 国内模型服务需确保 API 端点兼容 OpenAI 格式(如阿里云 DashScope、DeepSeek 等)29
  • 本地部署模型可结合 Ollama 工具(教程参考 8),但需较高硬件配置。