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

大家好,欢迎来到 Senparc.AI 系列教程的第二篇。在上一篇中,我们介绍了 Senparc.AI 的基本概念和安装步骤。今天,我们将正式进入实战环节——配置大模型,并开始编写第一个 AI 应用。很多初学者在接触 AI 开发时,最头疼的问题就是“模型怎么配置?”、“API 密钥放哪里?”、“为什么代码调不通?”。别担心,这篇文章会手把手带你解决这些问题。我们将以 OpenAI 的 GPT 模型为例,演示如何在 Senparc.AI 中完成配置并实现一个简单的对话功能。## 准备工作:获取 API 密钥在开始之前,你需要有一个大模型服务的 API 密钥。如果你使用的是 OpenAI,可以去 platform.openai.com 注册并获取 API Key。如果你更想使用国内模型(如通义千问、文心一言等),Senparc.AI 也提供了扩展支持,但本篇以 OpenAI 为例。拿到密钥后,请把它保存在一个安全的地方,比如环境变量或配置文件里。千万不要把密钥硬编码到代码中并上传到公开仓库!## 第一步:配置 Senparc.AI 大模型Senparc.AI 的设计哲学是“配置驱动”——你只需要告诉框架你要用哪个模型、密钥是什么,剩下的工作(如请求封装、响应解析、错误重试等)都由框架自动完成。### 1.1 安装必要的 NuGet 包如果你还没安装 Senparc.AI,请在项目根目录执行以下命令:bashdotnet add package Senparc.AIdotnet add package Senparc.AI.OpenAI````Senparc.AI` 是核心库,`Senparc.AI.OpenAI` 是 OpenAI 模型的适配器。如果你用其他模型,需要安装对应的适配包。### 1.2 在 appsettings.json 中配置模型信息打开你的 `appsettings.json` 文件,添加以下内容:json{ “SenparcAiSetting”: { “OpenAI”: { “ApiKey”: “sk-你的密钥”, “Model”: “gpt-3.5-turbo”, “Endpoint”: “https://api.openai.com/v1” } }}这里的关键字段说明:- `ApiKey`:你的 OpenAI API 密钥- `Model`:模型名称,如 `gpt-3.5-turbo` 或 `gpt-4`- `Endpoint`:API 地址,如果你使用代理或国内镜像,可以修改这里**注意**:对于生产环境,建议将 API 密钥存储在环境变量或密钥管理服务中,而不是直接写在配置文件里。## 第二步:编写第一个 AI 对话代码配置完成后,我们就可以写代码了。下面是一个最简单的对话示例,它向 GPT 发送一条消息并打印回复。### 2.1 代码示例:基础对话csharpusing Senparc.AI;using Senparc.AI.OpenAI;using Microsoft.Extensions.DependencyInjection;// 1. 创建服务容器,并注册 Senparc.AI 服务var services = new ServiceCollection();services.AddSenparcAiServices(); // 自动读取 appsettings.json 中的配置var serviceProvider = services.BuildServiceProvider();// 2. 获取 AI 对话客户端var aiClient = serviceProvider.GetRequiredService();// 3. 定义对话消息var messages = new List{ new ChatMessage(“user”, “你好,请用中文介绍一下你自己。”)};// 4. 发送请求并获取回复var response = await aiClient.ChatAsync(messages);// 5. 输出结果Console.WriteLine(“AI 回复:”);Console.WriteLine(response.Choices[0].Message.Content);**代码解释**:- `AddSenparcAiServices()` 会从配置文件读取模型信息,并注入 `IAiClient` 服务。- `ChatMessage` 对象代表一条对话消息,参数分别是角色(`user` 或 `assistant`)和内容。- `ChatAsync` 方法异步发送请求,返回包含多个候选回复的响应对象。运行这段代码,你会在控制台看到类似这样的输出:AI 回复:你好!我是 OpenAI 开发的 GPT 模型,可以帮你回答问题、写作、编程等等。有什么我可以帮你的吗?## 第三步:实现多轮对话实际应用中,我们经常需要让 AI 记住上下文。Senparc.AI 支持多轮对话,你只需要把历史消息一起发送即可。### 3.1 代码示例:带上下文的多轮对话csharpusing Senparc.AI;using Senparc.AI.OpenAI;using Microsoft.Extensions.DependencyInjection;var services = new ServiceCollection();services.AddSenparcAiServices();var serviceProvider = services.BuildServiceProvider();var aiClient = serviceProvider.GetRequiredService();// 第一轮对话:用户提问var messages = new List{ new ChatMessage(“user”, “告诉我一个有趣的数学事实。”)};var response1 = await aiClient.ChatAsync(messages);Console.WriteLine( " 用户:告诉我一个有趣的数学事实。 " ) ; C o n s o l e . W r i t e L i n e ( "用户:告诉我一个有趣的数学事实。");Console.WriteLine( "用户:告诉我一个有趣的数学事实。");Console.WriteLine(“AI:{response1.Choices[0].Message.Content}\n”);// 将 AI 的回复添加到消息列表中,保持上下文messages.Add(response1.Choices[0].Message); // 添加 AI 的回复messages.Add(new ChatMessage(“user”, “再讲一个,但这次关于几何的。”));// 第二轮对话:基于上下文继续提问var response2 = await aiClient.ChatAsync(messages);Console.WriteLine( " 用户:再讲一个,但这次关于几何的。 " ) ; C o n s o l e . W r i t e L i n e ( "用户:再讲一个,但这次关于几何的。");Console.WriteLine( "用户:再讲一个,但这次关于几何的。");Console.WriteLine(“AI:{response2.Choices[0].Message.Content}”);**代码解释**:- 在第二轮对话前,我们把上一轮 AI 的回复也加入 `messages` 列表。这样 GPT 就能“记住”之前说过什么。- 注意 `response1.Choices[0].Message` 本身就是一个 `ChatMessage` 对象(角色为 `assistant`),直接添加到列表即可。运行结果示例:用户:告诉我一个有趣的数学事实。AI:你知道吗?0.999…(无限循环)实际上等于 1。这是一个经典的数学悖论。用户:再讲一个,但这次关于几何的。AI:好!在欧几里得几何中,三角形的内角和总是 180 度。但在非欧几何中,这个和可以大于或小于 180 度。## 常见问题与调试技巧### 问题 1:报错“401 Unauthorized”- 原因:API 密钥错误或未配置。- 解决:检查 `appsettings.json` 中的 `ApiKey` 是否正确,或尝试在环境变量中设置。### 问题 2:返回内容为空或乱码- 原因:模型名称输入错误,或网络连接问题。- 解决:确认 `Model` 字段值(如 `gpt-3.5-turbo`)无误;检查 `Endpoint` 是否能正常访问。### 问题 3:如何切换模型?只需修改 `appsettings.json` 中的 `Model` 字段,比如改成 `gpt-4`,然后重启程序即可。Senparc.AI 会自动适配。### 小技巧:使用日志查看请求详情在 `Program.cs` 中添加日志配置,可以查看 Senparc.AI 发送的原始 HTTP 请求,方便调试:csharpservices.AddLogging(builder => builder.AddConsole().SetMinimumLevel(LogLevel.Debug));```## 总结通过本文,你应该已经掌握了:1. 如何配置 Senparc.AI 的大模型(以 OpenAI 为例)2. 如何编写基础的单轮对话代码3. 如何实现带上下文的多轮对话Senparc.AI 的强大之处在于,它把复杂的 API 调用、请求签名、错误处理等细节都封装好了,让你只需关心业务逻辑。下一篇教程中,我们将探讨如何集成自定义函数(Function Calling),让 AI 能够调用你的业务代码,实现更智能的自动化应用。如果你在配置过程中遇到任何问题,欢迎在评论区留言。我们下期再见!

更多推荐