AI框架SemanticKernel系列随笔(2) -- Semantic Function

Semantic Kernel中,Function作为核心的功能,主要分为Semantic Function和Native Function。 其中,Semantic Function是由Prompt形成的Function,提供了访问大模型并输出响应的功能。而Native Function是由本地原生代码组成,提供了让AI调度本地功能完成复杂任务的能力。可以说,大模型作为AI的大脑,Semantic Function则是大脑要处理的问题的反射弧,而Native Function则是大模型的手脚,去实现具体的业务功能。这篇中,主要包含Semantic Function的创建和使用.

函数管理和创建

在Semantic Kernel中,既支持常规的直接由PromptString来创建Prompt,也支持使用文件夹管理的方式进行。通常有几种方式来创建Prompt: 直接创建,文件导入或者自定义创建方式。

直接创建

直接由Prmopt创建的方式如下:

using Microsoft.SemanticKernel.SemanticFunctions;

var prompt = 
"""
[SUMMARIZATION RULES]
DONT WASTE WORDS
USE SHORT, CLEAR, COMPLETE SENTENCES.
DO NOT USE BULLET POINTS OR DASHES.
USE ACTIVE VOICE.
MAXIMIZE DETAIL, MEANING
FOCUS ON THE CONTENT
 
[BANNED PHRASES]
This article
This document
This page
This material
[END LIST]
 
Summarize:
Hello how are you?
+++++
Hello
 
Summarize this
{
   
   {
   
   $input}}
+++++
""";
var summaryFunction = kernel.CreateSemanticFunction(prompt,new PromptTemplateConfig());

从文件夹导入

而使用文件夹管理则是将Prompt存放在skprompt.txt中,并将配置文件放在同级目录的config.json中

再使用Semantic提供的Import功能来导入

  _kernel.ImportPluginFromPromptDirectory(directoryName);
  var func = _kernel.Plugins.GetFunction("PluginName", "FunctionName");

扩展创建方式

使用文件夹导入或直接创建Prompt需要在代码里直接写入prompt,我们也可以使用数据库等方式来管理我们的Prompt。

首先我们定义一个包含了Prompt设置的对象类型:

    /// <summary>
    /// 函数描述
    /// </summary>
    public interface IFunctionDescriptor
    {
   
   
        /// <summary>
        /// 插件名称
        /// </summary>
        public string PluginName {
   
    get; }
        /// <summary>
        /// 函数名称
        /// </summary>
        public string FunctionName {
   
    get; }
        /// <summary>
        /// 描述
        /// </summary>
        public string FunctionDescription {
   
    get; }
        /// <summary>
        /// model设置,json格式
        /// 例:<br/>
        /// {<br/>
        ///     "schema": 1,<br/>
        ///     "description": "description",<br/>
        ///     "type": "completion",<br/>
        ///     "completion": {<br/>
        ///     "max_tokens": 100,<br/>
        ///     "temperature": 0.1,<br/>
        ///     "top_p": 1.0,<br/>
        ///     "presence_penalty": 0.0,<br/>
        ///     "frequency_penalty": 0.0<br/>
        /// }
        /// </summary>
        public string PromptConfig {
   
    get; }
        /// <summary>
        /// 提示词
        /// </summary>
        public string Prompt {
   
    get; }
    }

然后我们根据这个类型定义一个导入方法:

public static class FunctionDescImporter
{
   
   
    /// <summary>
    /// create plugin from specific descriptors
    /// </summary>
    /// <param name="functionDescriptors">descriptors of plugins and functions</param>
    /// <param name="promptTemplateFactory">
    /// The <see cref="IPromptTemplateFactory"/> to use when interpreting discovered prompts into <see cref="IPromptTemplate"/>s.
    /// If null, a default factory will be used.
    /// </param>
    /// <returns></returns>
    public static List<KernelPlugin> CreatePluginsFromDescriptors(List<IFunctionDescriptor> functionDescriptors, IPromptTemplateFactory promptTemplateFactory = null,
    IServiceProvider services = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌新上路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值