上一篇《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": "<Your DeepSeek Key>",
"ModelName": {
"Chat": "deepseek-chat",
"TextCompletion": "deepseek-chat"
}
}
}
}

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

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

  • NeuCharAI
  • OpenAI
  • AzureOpenAI
  • HuggingFace
  • FastAPI
  • Ollama
  • DeepSeek

  当 AiPlatform 选中了任意一个模型平台,系统会自动从 “<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)
  • 等等

进阶小贴士

  1. 可以通过 Senparc.AI.Config.SenparcAiSetting 获取 appsettings.json 中的 SenparcAiSetting 节点的信息。
  2. 可以使用 Senparc.AI.Config.SenparcAiSetting.AiPlatform 可以读取或者设置当前系统默认的模型平台。
  3. 如果你想在系统中同时配置和使用多个平台(甚至同一个平台的不同账号或模型配置),可以在 appsettings.json 下 SenparcAiSetting 节点下添加一个 Item 节点,如:
     1     "Items": {
    2 "AzureDallE3": {
    3 "AiPlatform": "AzureOpenAI",
    4 "AzureOpenAIKeys": {
    5 "ApiKey": "<My AzureOpenAI Keys>",
    6 "AzureEndpoint": "<My AzureOpenAI DallE3 Endpoint>",
    7 "AzureOpenAIApiVersion": "2022-12-01",
    8 "ModelName": {
    9 "TextToImage": "dall-e-3"
    10 }
    11 }
    12 },23 "OtherModels": {
    24 "AiPlatform": "<AiPlatform>"
    25 //任意数量的 *Keys 配置
    26 }
    27 }

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

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

交流群

  欢迎加 QQ 群踊跃交流:553198593

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

Senparc.AI 系列教程(二):配置大模型,开始开发应用的更多相关文章

  1. C#微信公众号开发系列教程二(新手接入指南)

    http://www.cnblogs.com/zskbll/p/4093954.html 此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可 ...

  2. Android Studio系列教程二--基本设置与运行

    Android Studio系列教程二--基本设置与运行 2014 年 11 月 28 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处! 上面一篇博客,介绍了Studio的 ...

  3. JVM 系列(二)内存模型

    02 JVM 系列(二)内存模型 一.JVM 内存区域 JVM 会将 Java 进程所管理的内存划分为若干不同的数据区域.这些区域有各自的用途.创建/销毁时间: 一. 线程私有区域 线程私有数据区域生 ...

  4. CRL快速开发框架系列教程二(基于Lambda表达式查询)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  5. 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级) 本章介绍的是企业库加密应用程序模块 ...

  6. 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (初级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (初级) 企业库加密应用程序模块提供了2种方 ...

  7. Fastify 系列教程二 (中间件、钩子函数和装饰器)

    Fastify 系列教程: Fastify 系列教程一 (路由和日志) Fastify 系列教程二 (中间件.钩子函数和装饰器) 中间件 Fastify 提供了与 Express 和 Restify ...

  8. webpack4 系列教程(二): 编译 ES6

    今天介绍webpack怎么编译ES6的各种函数和语法.敲黑板:这是webpack4版本哦, 有一些不同于webpack3的地方. >>> 本节课源码 >>> 所有课 ...

  9. Fastify 系列教程二 (中间件、钩子函数和装饰器)

    Fastify 系列教程: Fastify 系列教程一 (路由和日志) Fastify 系列教程二 (中间件.钩子函数和装饰器) Fastify 系列教程三 (验证.序列化和生命周期) Fastify ...

  10. WPF系列教程——(二)使用Prism实现MVVM设计模式 - 简书

    原文:WPF系列教程--(二)使用Prism实现MVVM设计模式 - 简书 本文假设你已经知道MVVM设计模式是什么,所以直接进入正题,今天我们就用Prism来实现WPF的MVVM设计模式,百度上关于 ...

随机推荐

  1. ShadowSql.net之正确使用方式

    ShadowSql是面向接口模块化可插拔可扩展的工具 ShadowSql不是全家桶 不把所有功能都做一个项目里面就是为了大家不一次引用所有的nuget包 大家可以先判断需要哪些功能,再引用对应的nug ...

  2. Git镜像网站和Git网站提速方法

    最近开始学习使用git,但是因为git是国外的网站,所以基本就是无法访问.如下图: 通过在网上查找资料,我发现了几个访问git的方法. 方法一.通过镜像网站 镜像网站一: https://github ...

  3. OceanBase 中的身外身法 —— Auto DOP(自适应并行)使用技巧分享

    首先为大家推荐这个 OceanBase 开源负责人老纪的公众号 "老纪的技术唠嗑局",会持续更新和 OceanBase 相关的各种技术内容.欢迎感兴趣的朋友们关注! Part 1 ...

  4. solana杂谈(1)

    solana杂谈(1) 本文适用于"只需大致了解 Solana"的读者,部分说法可能不够准确或不够深入.如需详细了解,建议阅读 Solana 的官方文档:https://solan ...

  5. Fluent Reader - 现代化的桌面RSS阅读器

    项目标题与描述 Fluent Reader 是一款现代化的桌面 RSS 阅读器应用,采用 Fluent Design 设计语言,支持全黑暗模式.该项目基于 Electron 构建,提供了跨平台的 RS ...

  6. C# 选择文件保存路径

    public static string SetSaveFilePath(string filterType= "所有文件|*.*",string fileName="我 ...

  7. java--泛型加强、注解、日志组件

    泛型 概述 泛型是JDK1.5以后才有的, 可以在编译时期进行类型检查,且可以避免频繁类型转化! 声明泛型集合,集合两端类型必须一致 运行时期异常 @Test public void testGene ...

  8. Milvus 使用

    Milvus记录:1.安装Python: $ pip install -U pymilvus #pymilvus 中包含的一个 python 库,可以嵌入到客户端应用程序中 $ pip install ...

  9. 【工厂和策略设计模式妙用】解决接口选择与多重if-else 问题

    利用工厂和策略模式解决接口选择与多重if-else问题 在软件开发中,我们经常会遇到需要根据不同的条件选择不同实现的情况.传统的if-else或switch-case方式虽然直观,但随着业务逻辑复杂度 ...

  10. 前端开发系列124-进阶篇之html-parser

    本文简单研究 html标签的编译过程,模板的编译是前端主流框架中的基础部分,搞清楚这块内容对于理解框架的工作原理.`virtual-DOM` 有诸多益处 ,因限于篇幅所以本文将仅仅探讨把 html 字 ...