Senparc.AI 系列教程(二):配置大模型,开始开发应用

Senparc.AI 系列教程(二):配置大模型,开始开发应用

上一篇《Senparc.AI 系列教程(一):概要》中简要介绍了 Senparc.AI 所支撑的底层能力,本篇将介绍如何使用 Senparc.AI 打通 AI 算力,使用不同类型的大模型完成对话或者文本生成任务。

准备工作

Senparc.AI 已经全部开源,地址:https://github.com/Senparc/Senparc.AI,相关的程序包已经全部打包到 Nuget,因此只需要引用相关包即可接通基础能力。

为了方便大家学习和应用,在源码中我们已经提供了基于命令行的演示(相关方法同样适用于网站等任何其他系统),代码位置位于 /Samples/Senparc.AI.Samples.Consoles,打开 Senparc.AI.sln 解决方案也可以直接看到响应示例和所有源码:

运行后即可测试大模型对话、补全、图片生成、向量化、RAG、function-calling、MCP 等常见功能:

例如进行 Chat 对话(可以通过不同颜色区分 Stream 流式输出过程中的 Token):

可以看到 AI 回答问题还是有幻觉的问题(如 GitHub 地址有错误)。

开始创建应用

第一步:创建一个空项目

为了方便演示和更直观地查看原始输出内容,我们使用 Console 项目,您也可以举一反三使用 MVC、RazorPage、WPF、Blazor、WinForm 等其他类型项目。

使用 VS / VS Code 创建一个 Console 空项目,或使用命令行:

复制代码

dotnet new console -n SenparcAiTest

第二步:设置 appsettings.json

创建或修改 appsettings.json 文件:

复制代码

{

"Logging": {

"IncludeScopes": false,

"LogLevel": {

"Default": "Warning"

}

},

//CO2NET 设置

"SenparcSetting": {

"IsDebug": true,

},

//Senparc.AI 设置

"SenparcAiSetting": {

"IsDebug": true,

"AiPlatform": "DeepSeek", //注意修改为自己平台对应的枚举值

"VectorDB": {

"Type": "InMemory",

"ConnectionString": ""

},

"DeepSeekKeys": {

"Endpoint": "https://api.deepseek.com",

"ApiKey": "",

"ModelName": {

"Chat": "deepseek-chat",

"TextCompletion": "deepseek-chat"

}

}

}

}

上述配置以 DeepSeek 为例,AiPlatform 为默认选用大模型平台,DeepSeekKeys 节点中配置 DeepSeek 模型信息,其中 ModelName 中指定同一个平台下不同类型大模型所对应的模型名称。

目前还支持的其他类型还包括:

NeuCharAI

OpenAI

AzureOpenAI

HuggingFace

FastAPI

Ollama

DeepSeek

当 AiPlatform 选中了任意一个模型平台,系统会自动从 "**Keys"**名称节点下读取相关配置信息。

第三步:安装 Nuget 依赖包

为了能够读取 appsettings.json,我们需要引用一个官方包:Microsoft.Extensions.Configuration.Json,以及 Senparc.AI 的核心模块包:Senparc.AI.Kernel:

复制代码

dotnet add package Microsoft.Extensions.Configuration.Json

dotnet add package Senparc.AI.Kernel

第四步:配置 Program.cs

清除 Program.cs 原有内容,输入启动准备代码:

复制代码

using Microsoft.Extensions.Configuration;

using Microsoft.Extensions.DependencyInjection;

using Senparc.AI.Kernel;

using Senparc.CO2NET;

using Senparc.CO2NET.RegisterServices;

var configBuilder = new ConfigurationBuilder();

configBuilder.AddJsonFile("appsettings.json", false, false);

Console.WriteLine("完成 appsettings.json 添加");

var config = configBuilder.Build();

Console.WriteLine("完成 ServiceCollection 和 ConfigurationBuilder 初始化");

var services = new ServiceCollection();

services.AddSenparcGlobalServices(config)

.AddSenparcAI(config);

var serviceProvider = services.BuildServiceProvider();

IRegisterService register = RegisterService.Start()

.UseSenparcGlobal()

.UseSenparcAI();

上述代码是使用 Senparc.AI 的通用启动代码,任何系统都只需要完成一次,重点是 AddSenparcAI() 和 UseSenparcAI() 两个方法,将自动完成所有 Senparc.AI 的相关准备工作(包括大模型信息映射)。

第五步:编写 AI 代码

以对话(Chat)为例,最精简的单轮对话(或直接执行任务),可以在 Program.cs 中继续输入以下代码:

复制代码

1 // Chat 对话

2

3 //定义 SemanticAiHandler 实例

4 SemanticAiHandler semanticAiHandler = new SemanticAiHandler(null);

5

6 //配置模型参数

7 var parameter = new PromptConfigParameter()

8 {

9 MaxTokens = 2000,

10 Temperature = 0.7,

11 TopP = 0.5,

12 };

13

14 //获取 IWantToRun 实例

15 var systemMessage = "你是一位专业的AI助手,擅长回答各种问题。请确保你的回答准确且有帮助。";

16 var iWantToRun = semanticAiHandler.ChatConfig(parameter,

17 userId: "Jeffrey",

18 maxHistoryStore: 10,

19 chatSystemMessage: systemMessage);

20

21 Console.WriteLine();

22 Console.WriteLine("==== 对话开始 ====");

23 while (true)

24 {

25 //开始对话

26 Console.WriteLine("人类:");

27 var inputPrompt = Console.ReadLine() ?? "你好";

28

29 var result = await semanticAiHandler.ChatAsync(iWantToRun, inputPrompt);

30

31 Console.WriteLine("AI 回答:\n" + result.OutputString);

32 Console.WriteLine();

33 }

可以看到,核心代码是 16 行(定义 IWantToRun 对象)以及 29 行请求模型结果,非常简洁。

** 运行效果:**

延伸功能

更多延伸功能,可以参考源码中的示例,注释已经比较完整,相关示例包含:

如 Stream(流式)输出

Completion(补全)

RAG / 知识库

向量数据库操作

图片生成(Text to Image)

Planner

Plguin(function-calling 和 MCP)

等等

进阶小贴士

可以通过 Senparc.AI. Config.SenparcAiSetting 获取 appsettings.json 中的 SenparcAiSetting 节点的信息。

可以使用 Senparc.AI. Config.SenparcAiSetting.AiPlatform 可以读取或者设置当前系统默认的模型平台。

如果你想在系统中同时配置和使用多个平台(甚至同一个平台的不同账号或模型配置),可以在 appsettings.json 下 SenparcAiSetting 节点下添加一个 Item 节点,如:

复制代码

1 "Items": {

2 "AzureDallE3": {

3 "AiPlatform": "AzureOpenAI",

4 "AzureOpenAIKeys": {

5 "ApiKey": "",

6 "AzureEndpoint": "",

7 "AzureOpenAIApiVersion": "2022-12-01",

8 "ModelName": {

9 "TextToImage": "dall-e-3"

10 }

11 }

12 },23 "OtherModels": {

24 "AiPlatform": ""

25 //任意数量的 *Keys 配置

26 }

27 }

在代码中索引 Key 的方式找到对应配置,如:

复制代码

var senparcAiSetting = ((SenparcAiSetting)Senparc.AI.Config.SenparcAiSetting)["AzureDallE3"];//获取 AzureDallE3 模型配置

交流群

欢迎加 QQ 群踊跃交流:553198593

如果你希望本博客系列深入讲解哪方面的内容,或对上述内容有任何疑问,也欢迎留言!

相关推荐

【日产GT-R】新尼桑GT-R报价
卡塔尔2019年国际足联俱乐部世界杯会徽正式揭晓
打印如何设置打印区域 详细教程分享