- APP神圣官网 > 计划生活 > 正文
发送邮件学习资料AI(编辑器发送邮件邮件用户晚宴)「发送邮件api」
创建一个控制台的项目打开Visual Studio 2022
,然后创建一个名称为4_Chat_Prompts
的控制台项目然后复制以下代码到4_Chat_Prompts
项目文件中<Project Sdk=\"Microsoft.NET.Sdk\"><PropertyGroup><OutputType>Exe</OutputType><TargetFramework>net8.0</TargetFramework><RootNamespace>_4_Chat_Prompts</RootNamespace><ImplicitUsings>enable</ImplicitUsings><able>enable</able></PropertyGroup><ItemGroup><PackageReference Include=\"Microsoft.SemanticKernel\" Version=\"1.12.0\" /></ItemGroup></Project>
由于SK默认的限制并没有提供直接修改地址的接口,所以我们需要自定义HttpClientHandler
,下面我们创建一个OpenAIHttpClientHandler.cs
,然后提供以下实现public class OpenAIHttpClientHandler : HttpClientHandler {private readonly string _uri;public OpenAIHttpClientHandler(string uri) => _uri = uri.TrimEnd('/');protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { UriBuilder uriBuilder;if (request.RequestUri?.LocalPath == \"/v1/chat/completions\") { uriBuilder = new UriBuilder(_uri + \"/v1/chat/completions\"); request.RequestUri = uriBuilder.Uri; }else if (request.RequestUri?.LocalPath == \"/v1/embeddings\") { uriBuilder = new UriBuilder(_uri + \"/v1/embeddings\"); request.RequestUri = uriBuilder.Uri; }return await base.SendAsync(request, cancellationToken); } }
利用prompt进行发送邮件在实际的开发中,我们经常会遇到发送邮件的需求,下面我们通过一个案例来了解如何利用Prompt
来发送邮件实现发送邮件的功能复制以下代码到Program.cs
文件中using System.ComponentModel;using ConsoleApp1;using Microsoft.SemanticKernel;using Microsoft.SemanticKernel.ChatCompletion;using Microsoft.SemanticKernel.Connectors.OpenAI;var kernel = Kernel.CreateBuilder() .AddOpenAIChatCompletion( modelId: \"gpt-4\", apiKey: \"这里填写在https://api.token-ai.cn/创建的令牌\", httpClient: new HttpClient(new OpenAIHttpClientHandler(\"https://api.token-ai.cn/\"))) .Build();var emailPrompt =@\"## 需求:- 我需要解决用户发送邮件问题,邮件参数包含以下参数 - 收件人邮箱 - required - email - 邮件主题 - required - 长度限制 100 - title - 邮件内容 - content - required - 在上面的参数如果是required则是必须的,如果用户没有提供那么你需要提示用户缺少哪些参数- 如果用户提供了参数,您需要提示不合法的参数,你不要提供测试用例,你需要提示用户哪些参数不合法- 上面要求都满足以后,需要提问用户是否确认发送,如果用户确认发送,那么你需要调用发送邮件\";kernel.Plugins.AddFromType<EmailTools>();var chatHistory = new ChatHistory();while (true){ Console.Write(\"User > \");var input = Console.ReadLine(); chatHistory.AddUserMessage(input);var chatResult = await kernel.GetRequiredService<IChatCompletionService>() .GetChatMessageContentAsync(chatHistory, new OpenAIPromptExecutionSettings() { ChatSystemPrompt = emailPrompt, MaxTokens = 500, Temperature = 0.5, TopP = 1, ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions }, kernel);if(string.IsOrEmpty(chatResult?.Content)) {break; } Console.Write($\"\nAssistant > {chatResult}\n\"); chatHistory.AddAssistantMessage(chatResult.Content);if (chatResult.Content.Contains(\"邮件发送成功\")) {break; }}public class EmailTools{ [KernelFunction, Description(\"发送邮件\")]public string SendEmail([Description(\"接收人\")] string email, [Description(\"邮件主题\")] string title, [Description(\"邮件内容\")] string? content) { Console.WriteLine($\"发送邮件给 {email} 主题:{title} 内容:{content}\");// Send emailreturn \"邮件发送成功\"; }}
启动项目然后运行项目,您会看到输出结果为:User > 发邮件给239573049@qq.comAssistant > 你需要提供邮件的主题和内容User > 邮件主题 参加晚宴Assistant > 你还需要提供邮件的内容User > 邮件内容 今晚上参加李白的晚宴Assistant > 好的,我收到了你的邮件信息:- 收件人: 239573049@qq.com- 邮件主题: 参加晚宴- 邮件内容: 今晚上参加李白的晚宴请确认是否发送邮件?User > 确认发送发送邮件给 239573049@qq.com 主题:参加晚宴 内容:今晚上参加李白的晚宴Assistant > 邮件已成功发送给239573049@qq.com
实现结论在上面我们实现了通过prompt进行多轮对话然后发送邮件给指定的邮箱,并且对于用户的输入进行了校验,如果用户输入不合法,那么我们会提示用户输入不合法的参数,如果用户输入合法,那么我们会提示用户是否确认发送邮件,如果用户确认发送,那么我们会调用发送邮件的方法,然后发送邮件这一个案例对于AI的要求是非常高的,因为我们需要对用户的输入进行校验,然后对用户的输入进行处理,然后再进行发送邮件,这个案例是一个比较复杂的案例,但是也是一个比较实用的案例,很多模型多无法达到我们的要求,所以我们需要对模型进行调整,让模型更好的适应我们的需求免费开放的SK AI教程站点:https://docs.token-ai.cn/OpenAI官方API价格的六折站点:https://api.token-ai.cn/ AI学习qq交流群:961090189
联系我们
在线咨询:
0 评论