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