当前位置:首页 > AI > 正文内容

探究Semantic Kernel内置插件:深化了解ConversationSummaryPlugin的使用

邻居的猫1个月前 (12-09)AI1112

前语

经过前几章的学习咱们现已了解了Semantic Kernel 插件的概念,以及依据Prompts结构的Semantic Plugins和依据本地办法构建的Native Plugins。本章咱们来解说一下在Semantic Kernel 中内置的一些插件,让咱们防止重复造轮子。

内置插件

Semantic Kernel 有非常多的预界说插件,作为处理通用事务的相关才能。Plugins 地址

image

这里边每一个类库都是一组相关功用的插件SDK,其间Plugins.Core 里边供给的使咱们高频运用的插件调集。

Plugins.Core

image

能够看到Plugins.Core 内有以下几个插件:

  • ConversationSummaryPlugin: 对话总结插件
  • FileIOPlugin: 读写文件插件
  • HttpPluginHttp恳求功用的插件
  • MathPluginMath 核算插件
  • TextPlugin:字符串操作插件
  • TimePlugin:获取当时时刻和日期插件
  • WaitPluginWaitPlugin供给了一组函数,在进行其他操作之前等候。

实战

咱们来对Semantic Kernel中供给的内置插件来做一个实战操练

第一步需求装置Nuget

NuGet\Install-Package Microsoft.SemanticKernel.Plugins.Core -Version 1.14.1-alpha

该包现在只要预览版别,假如用 VS 的包办理器装置,那需求勾选包含预览发行版

ConversationSummaryPlugin

这是一个对话总结插件,以提示词结构的Semantic Plugins,插件内界说了三个Kernel Function分别是:

  • SummarizeConversation :给定一段长的对话记载,总结说话内容
  • GetConversationActionItems:给定一段长的对话记载,辨认出其间的举动项。
  • GetConversationTopics:给定一段长的对话记载,辨认出值得记住的主题
SummarizeConversation

咱们先界说一个对话用户咱们测验的对话数据


string chatTranscript = @"
A: 你好,最近作业很繁忙,咱们需求组织下周的会议时刻,你觉得周几比较适宜?
B: 嗯,我了解,作业的确很忙。周三或周四应该比较适宜,由于那时候咱们的日程相对闲暇一些。
A: 好的,周三或周四都能够,咱们再承认一下其他搭档的时刻表。
B: 对,最好再和咱们核实一下,以免呈现时刻抵触。
A: 我今日会发邮件问询咱们的定见,然后咱们再做终究决议。
B: 好的,我也会在群里提示咱们留心邮件。

A: 咱们好,关于下周的会议组织,我主张定在周四下午两点,在会议室A举办,咱们觉得怎么样?
C: 周四下午两点能够,我在日历上现已标示了。
D: 对不住,周四下午我有其他组织,能否改到周三下午呢?
A: 好的,咱们尽量照料咱们的时刻,那就改到周三下午两点吧,地址仍然是会议室A。
B: 没问题,我会告诉其他搭档,让咱们知道时刻的变化。

";

Kernel注册插件:

var conversationSummaryPlugin = kernel.ImportPluginFromType<ConversationSummaryPlugin>();

总结会话内容

Console.WriteLine("SamplePlugins - Conversation Summary Plugin - Summarize");
{
    FunctionResult summary = await kernel.InvokeAsync(
        conversationSummaryPlugin["SummarizeConversation"], new() { ["input"] = chatTranscript });

    Console.WriteLine($"Generated Summary:{summary.ToString()}");
}

OutPut:

Generated Summary:In the conversation, A and B discuss scheduling a meeting for the following week, considering Wednesday or Thursday as potential dates due to lighter schedules. A decides to send an email to confirm the availability of all colleagues. Later, A proposes holding the meeting on Thursday at 2 PM in Conference Room A, but D requests a change due to a scheduling conflict. A agrees to reschedule the meeting to Wednesday at 2 PM in the same room, and B confirms that they will inform the rest of the team about the change.

Semantic Kernel的这个插件我用了GPT-4oKimi都回复的是英文,我感觉这个内置的这个Semantic Kernel 插件仍是不行完善。

咱们能够看一下SummarizeConversation办法的Prompts界说

BEGIN CONTENT TO SUMMARIZE:
{{$INPUT}}

END CONTENT TO SUMMARIZE.

Summarize the conversation in 'CONTENT TO SUMMARIZE', identifying main points of discussion and any conclusions that were reached.
Do not incorporate other general knowledge.
Summary is in plain text, in complete sentences, with no markup or tags.

BEGIN SUMMARY:

扼要了解一下这个提示词:

  • 开端符号:BEGIN CONTENT TO SUMMARIZE: 这个符号明晰地指示了摘要内容的开端。

  • 输入占位符:{{$INPUT}} 这是一个占位符,用于刺进需求被摘要的对话或文本内容。

  • 完毕符号:END CONTENT TO SUMMARIZE. 这个符号相同明晰地指示了摘要内容的完毕。

  • 摘要辅导:供给了对摘要的具体要求,包含辨认对话的首要讨观点和定论,而且着重不要包含外部的一般常识。

  • 格局要求:指出摘要应该是纯文本,用完好的语句表达,不包含任何符号或标签。

  • 摘要开端符号:BEGIN SUMMARY: 这个符号指示了摘要部分的开端。

针对上述咱们发现的问题:会话摘要全部是中文的问题 我觉得能够进行提示词的优化

优化的第一点内容是:总结应挑选最切合内容的言语in the language that best fits the content.

@"BEGIN CONTENT TO SUMMARIZE:
{{$INPUT}}

END CONTENT TO SUMMARIZE.

Please summarize the conversation, highlighting the main points and any conclusions reached, in the language that best fits the content. Do not incorporate any external general knowledge. The summary should be in plain text, in complete sentences, without any markup or tags.

BEGIN SUMMARY:

咱们自界说一个插件测验一下,创立一个CustomConversationSummaryPlugin的插件,这个和原生SummarizeConversation插件只要Prompts有差异

    private const int MaxTokens = 1024;

    private readonly KernelFunction _summarizeConversationFunction;
    public CustomConversationSummaryPlugin()
    {


        PromptExecutionSettings settings = new()
        {
            ExtensionData = new Dictionary<string, object>()
            {
                { "Temperature", 0.1 },
                { "TopP", 0.5 },
                { "MaxTokens", MaxTokens }
            }
        };

        this._summarizeConversationFunction = KernelFunctionFactory.CreateFromPrompt(
            CustomConversationSummaryPlugin.SummarizeConversationDefinition,
            description: "Given a section of a conversation transcript, summarize the part of the conversation.",
            executionSettings: settings);
    }

    /// <summary>
    /// Given a long conversation transcript, summarize the conversation.
    /// </summary>
    /// <param name="input">A long conversation transcript.</param>
    /// <param name="kernel">The <see cref="Kernel"/> containing services, plugins, and other state for use throughout the operation.</param>
    [KernelFunction, Description("Given a long conversation transcript, summarize the conversation.")]
    public Task<string> SummarizeConversationAsync(
        [Description("A long conversation transcript.")] string input,
        Kernel kernel) =>
        ProcessAsync(this._summarizeConversationFunction, input, kernel);
    private static async Task<string> ProcessAsync(KernelFunction func, string input, Kernel kernel)
    {
        List<string> lines = TextChunker.SplitPlainTextLines(input, MaxTokens);
        List<string> paragraphs = TextChunker.SplitPlainTextParagraphs(lines, MaxTokens);

        string[] results = new string[paragraphs.Count];

        for (int i = 0; i < results.Length; i++)
        {
            // The first parameter is the input text.
            results[i] = (await func.InvokeAsync(kernel, new() { ["input"] = paragraphs[i] }).ConfigureAwait(false))
                .GetValue<string>() ?? string.Empty;
        }

        return string.Join("\n", results);
    }

Kernel目标注册自界说插件

var customCustomConversationSummaryPlugin = kernel.ImportPluginFromType<CustomConversationSummaryPlugin>();

新跑一边测验一下:

Generated Summary:在这段对话中,A和B评论了组织下周会议的时刻。B主张周三或周四比较适宜,由于那时咱们的日程相对闲暇。A决议经过邮件问询其他搭档的定见,然后做出终究决议 。在邮件中,A提议将会议组织在周四下午两点,地址是会议室A。但是,D表明周四下午有其他组织,恳求将会议改到周三下午。A赞同了D的恳求,将会议时刻调整为周三下午两点,地址仍然是会议室A。B表明会告诉其他搭档关于时刻变化的状况。

能够看到满意咱们的需求了,依据咱们输入生成的摘要信息没有问题了。

这个插件关于咱们的谈天会话也是非常有用,对话历史记载跟着不断谈天,音讯越来越多,那每次对话耗费的 token 也是不断添加,此刻 ConversationSummaryPlugin 插件的就能够协助咱们对谈天记载进行摘要总结,进步谈天功率。

提取会话举动项

辨认对话记载中的动作项(action items)是一种重要的交流技巧,它有助于进步功率、保证使命的完结和促进团队协作。

运用场景包含:

  • 会议记载:在会议完毕后,快速生成包含一切动作项的摘要,便于团队成员履行和盯梢。
  • 项目办理:在项目评论中,辨认和记载要害的里程碑和使命,保证项目准时发展。
  • 客户服务:在客户交流中,记载客户的恳求和需求采纳的举动,以供给更好的服务和支撑。
  • 团队协作东西:集成到团队协作平台中,协助团队成员同享和协调使命。
  • 个人生产力:个人运用该插件来办理自己的使命和待办事项,进步个人功率。
  • 法令和合规性:在需求保证对话内容契合特定法规或规范的状况下,辨认必要的举动以保证合规。

要完结这个需求用到ConversationSummaryPlugin插件的GetConversationActionItems办法

Console.WriteLine("======== SamplePlugins - Conversation Summary Plugin - Action Items ========");
{

    FunctionResult summary = await kernel.InvokeAsync(
        conversationSummaryPlugin["GetConversationActionItems"], new() { ["input"] = chatTranscript });

    Console.WriteLine($"Generated Action Items:{summary.ToString()}");
    Console.WriteLine(summary.GetValue<string>());

}

输出:

{
    "actionItems": [
        {
            "owner": "A",
            "actionItem": "发邮件问询咱们的定见",
            "dueDate": "",
            "status": "Open",
            "notes": "今日会发"
        },
        {
            "owner": "B",
            "actionItem": "在群里提示咱们留心邮件",
            "dueDate": "",
            "status": "Open",
            "notes": ""
        },
        {
            "owner": "B",
            "actionItem": "告诉其他搭档时刻的变化",
            "dueDate": "",
            "status": "Open",
            "notes": "让咱们知道时刻的变化"
        }
    ]
}

提取会话的主题

用于对话摘要的东西或插件,它的作用是协助用户快速辨认和总结对话中的首要论题。

运用场景或许包含但不限于:

  • 企业内部会议的快速摘要和信息收拾。
  • 客户服务对话的剖析,以辨认服务改善点。
  • 交际媒体或论坛评论的监控和摘要。
  • 教育环境中的讲堂评论摘要。
  • 法令咨询或案子评论的记载和检查。

要完结这个功用需求用到ConversationSummaryPlugin插件的GetConversationTopics办法

运用:

    Console.WriteLine("======== SamplePlugins - Conversation Summary Plugin - Topics ========");

    FunctionResult summary = await kernel.InvokeAsync(
        conversationSummaryPlugin["GetConversationTopics"], new() { ["input"] = chatTranscript });

    Console.WriteLine($"Generated Topics:{summary.ToString()}");

输出:

Generated Topics:
{
  "topics": [
    "Work busy",
    "Schedule meeting",
    "Wednesday or Thursday",
    "Confirm colleagues' availability",
    "Email for opinions",
    "Meeting reschedule",
    "Thursday 2 PM",
    "Change to Wednesday 2 PM",
    "Notify colleagues"
  ]
}

最终

剩余的插件咱们后续章节在解说吧,本章要点解说了ConversationSummaryPlugin 会话总结插件的运用。

示例代码

本文源代码

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=389

标签: dotNetAI
分享给朋友:

“探究Semantic Kernel内置插件:深化了解ConversationSummaryPlugin的使用” 的相关文章

orange图像识别

orange图像识别

试验介绍: 图画辨认是人工智能的重要范畴 怎样辨认图画呢? 人眼辨认人的性别 看头发长度,身型,穿衣装扮这些特征,比方:长发是女孩,短发是男孩。 运用神经网络算法就能够主动学习特征并用于分类等使命。 一:神经网络 比方辨认手写数字,假如一个像素一个像素地辨认,那么核算量很大很杂乱。假如总结出数字的特...

AI综合,AI技术浪潮下的数字化转型与未来展望

AI综合,AI技术浪潮下的数字化转型与未来展望

1. 技术层面:包括机器学习、深度学习、自然语言处理、计算机视觉、语音识别、强化学习等核心技术。这些技术是AI综合的基础,它们的发展和应用推动了AI领域的进步。2. 应用层面:AI综合涵盖了AI技术在各个领域的应用,如智能制造、智慧城市、自动驾驶、医疗健康、金融科技、教育、娱乐等。这些应用展示了AI...

机器学习 简历,如何让你的简历在众多候选人中脱颖而出

撰写机器学习相关的简历时,你需要突出你的技术技能、项目经验、教育背景以及任何相关的成就。以下是一个基本的机器学习简历示例,你可以根据自己的情况进行调整: | | 个人简介经验丰富的机器学习工程师,具备扎实的数学基础和编程技能,擅长使用机器学习算法解决实际问题。具备优秀的团队合作精神和良好的沟通能力...

机器学习算法决策树

机器学习算法决策树

决策树(Decision Tree)是一种非常流行的机器学习算法,它通过一系列规则对数据进行分类或回归。决策树是一种监督学习算法,这意味着它需要训练数据来学习如何对数据进行分类或回归。决策树的工作原理如下:1. 首先,选择一个特征作为根节点,该特征将数据分为两个或多个子集。2. 对每个子集重复上述过...

二蛋学习机器人,智能教育新伙伴

二蛋学习机器人,智能教育新伙伴

功能1. 语音交互:二蛋机器人搭载了科大讯飞的语音识别系统,可以通过语音唤醒和交互。2. 教育内容:机器人可以播放儿歌、古诗和英语,帮助孩子学习。3. 互动功能:具备微聊键,可以实现二蛋与手机端的双向对话互动;收藏键可以将机器人正在播放的内容收藏到TF卡中,以便在脱离WiFi的情况下播放。4. 算...

ai写作生成器,革新写作方式,助力内容创作

ai写作生成器,革新写作方式,助力内容创作

AI写作生成器是一种基于人工智能技术的工具,它可以帮助用户快速生成文本内容。这种工具通常使用自然语言处理(NLP)和机器学习算法来分析用户输入的关键词或句子,然后根据这些信息生成相应的文本。AI写作生成器可以用于多种场景,如文章写作、广告文案、社交媒体内容等。它们可以帮助用户节省时间,提高写作效率,...