找回密码
 立即注册
首页 业界区 业界 Senparc.AI 系列教程(二):配置大模型,开始开发应用 ...

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

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

  Senparc.AI 已经全部开源,地址:https://github.com/Senparc/Senparc.AI,相关的程序包已经全部打包到 Nuget,因此只需要引用相关包即可接通基础能力。
  为了方便大家学习和应用,在源码中我们已经提供了基于命令行的演示(相关方法同样适用于网站等任何其他系统),代码位置位于 /Samples/Senparc.AI.Samples.Consoles,打开 Senparc.AI.sln 解决方案也可以直接看到响应示例和所有源码:
1.png

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

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

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

第一步:创建一个空项目
  为了方便演示和更直观地查看原始输出内容,我们使用 Console 项目,您也可以举一反三使用 MVC、RazorPage、WPF、Blazor、WinForm 等其他类型项目。
  使用 VS / VS Code 创建一个 Console 空项目,或使用命令行:
  1. dotnet new console -n SenparcAiTest
复制代码
 
第二步:设置 appsettings.json
  创建或修改 appsettings.json 文件:
  1. {
  2.   "Logging": {
  3.     "IncludeScopes": false,
  4.     "LogLevel": {
  5.       "Default": "Warning"
  6.     }
  7.   },
  8.   //CO2NET 设置
  9.   "SenparcSetting": {
  10.     "IsDebug": true,
  11.   },
  12.   //Senparc.AI 设置
  13.   "SenparcAiSetting": {
  14.     "IsDebug": true,
  15.     "AiPlatform": "DeepSeek", //注意修改为自己平台对应的枚举值
  16.     "VectorDB": {
  17.       "Type": "InMemory",
  18.       "ConnectionString": ""
  19.     },
  20.     "DeepSeekKeys": {
  21.       "Endpoint": "https://api.deepseek.com",
  22.       "ApiKey": "<Your DeepSeek Key>",
  23.       "ModelName": {
  24.         "Chat": "deepseek-chat",
  25.         "TextCompletion": "deepseek-chat"
  26.       }
  27.     }
  28.   }
  29. }
复制代码
  上述配置以 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:
  1. dotnet add package Microsoft.Extensions.Configuration.Json
  2. dotnet add package Senparc.AI.Kernel
复制代码
 
第四步:配置 Program.cs
  清除 Program.cs 原有内容,输入启动准备代码:
  1. using Microsoft.Extensions.Configuration;
  2. using Microsoft.Extensions.DependencyInjection;
  3. using Senparc.AI.Kernel;
  4. using Senparc.CO2NET;
  5. using Senparc.CO2NET.RegisterServices;
  6. var configBuilder = new ConfigurationBuilder();
  7. configBuilder.AddJsonFile("appsettings.json", false, false);
  8. Console.WriteLine("完成 appsettings.json 添加");
  9. var config = configBuilder.Build();
  10. Console.WriteLine("完成 ServiceCollection 和 ConfigurationBuilder 初始化");
  11. var services = new ServiceCollection();
  12. services.AddSenparcGlobalServices(config)
  13.         .AddSenparcAI(config);
  14. var serviceProvider = services.BuildServiceProvider();
  15. IRegisterService register = RegisterService.Start()
  16.               .UseSenparcGlobal()
  17.               .UseSenparcAI();
复制代码
  上述代码是使用 Senparc.AI 的通用启动代码,任何系统都只需要完成一次,重点是 AddSenparcAI() 和 UseSenparcAI() 两个方法,将自动完成所有 Senparc.AI 的相关准备工作(包括大模型信息映射)。
 
第五步:编写 AI 代码
  以对话(Chat)为例,最精简的单轮对话(或直接执行任务),可以在 Program.cs 中继续输入以下代码:
  1. 1 // Chat 对话
  2. 2
  3. 3 //定义 SemanticAiHandler 实例
  4. 4 SemanticAiHandler semanticAiHandler = new SemanticAiHandler(null);
  5. 5
  6. 6 //配置模型参数
  7. 7 var parameter = new PromptConfigParameter()
  8. 8 {
  9. 9     MaxTokens = 2000,
  10. 10     Temperature = 0.7,
  11. 11     TopP = 0.5,
  12. 12 };
  13. 13
  14. 14 //获取 IWantToRun 实例
  15. 15 var systemMessage = "你是一位专业的AI助手,擅长回答各种问题。请确保你的回答准确且有帮助。";
  16. 16 var iWantToRun = semanticAiHandler.ChatConfig(parameter,
  17. 17                                 userId: "Jeffrey",
  18. 18                                 maxHistoryStore: 10,
  19. 19                                 chatSystemMessage: systemMessage);
  20. 20
  21. 21 Console.WriteLine();
  22. 22 Console.WriteLine("==== 对话开始 ====");
  23. 23 while (true)
  24. 24 {
  25. 25     //开始对话
  26. 26     Console.WriteLine("人类:");
  27. 27     var inputPrompt = Console.ReadLine() ?? "你好";
  28. 28
  29. 29     var result = await semanticAiHandler.ChatAsync(iWantToRun, inputPrompt);
  30. 30
  31. 31     Console.WriteLine("AI 回答:\n" + result.OutputString);
  32. 32     Console.WriteLine();
  33. 33 }
复制代码
  可以看到,核心代码是 16 行(定义 IWantToRun 对象)以及 29 行请求模型结果,非常简洁。
 
  运行效果:
4.png

 
延伸功能

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

  • 如 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. 1     "Items": {
    2. 2       "AzureDallE3": {
    3. 3         "AiPlatform": "AzureOpenAI",
    4. 4         "AzureOpenAIKeys": {
    5. 5           "ApiKey": "<My AzureOpenAI Keys>",
    6. 6           "AzureEndpoint": "<My AzureOpenAI DallE3 Endpoint>",
    7. 7           "AzureOpenAIApiVersion": "2022-12-01",
    8. 8           "ModelName": {
    9. 9             "TextToImage": "dall-e-3"
    10. 10           }
    11. 11         }
    12. 12       },23       "OtherModels": {
    13. 24         "AiPlatform": ""
    14. 25         //任意数量的 *Keys 配置
    15. 26       }
    16. 27     }
    复制代码
    在代码中索引 Key 的方式找到对应配置,如:
    1. var senparcAiSetting = ((SenparcAiSetting)Senparc.AI.Config.SenparcAiSetting)["AzureDallE3"];//获取 AzureDallE3 模型配置
    复制代码
     
交流群

  欢迎加 QQ 群踊跃交流:553198593
  如果你希望本博客系列深入讲解哪方面的内容,或对上述内容有任何疑问,也欢迎留言!
-->
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册