Semantic Kernel开发实践:如何创建并使用语义函数(Semantic Function)(2)

前言

在前一篇里有一个思考:如何创建复用性更好的语义函数?本篇文章,将回答这个问题,是通过结构化处理语义函数(Semantic Function,下文直接称语义函数)的各个部分,来达到复用的效果。

演示案例是C#编写的控制台应用,使用的是.net8.0版本。

LLM服务使用的是Azure OpenAI

结构化语义函数

1、创建Plugins目录,这个目录存放所有的插件,通常会有多个插件,每个插件一个目录,最后一级的目录是特定的函数。

例如下面这个图中,Plugins是所有插件的顶级目录。

ConverterPlugin表示有个"转换插件"。

Json2Model表示在转换插件下有个特定功能的函数,可以把JSON文档转换为特定语言的数据模型。

2、在Json2Model这个函数目录下,创建config.jsonskprompt.txt两个文件

其中config.json的示例代码如下:

json 复制代码
{
  "schema": 1,
  "type": "completion",
  "description": "将JSON文档转换为指定语言的数据模型",
  "execution_settings": {
    "default": {
      "max_tokens": 1200,
      "temperature": 0.8
    }
  },
  "input_variables": [
    {
      "name": "input",
      "description": "用户输入的JSON文档",
      "required": true
    }
  ]
}

type: 提示词类型

description: 描述函数的功能

execution_settings: 模型的参数

input_variables: 定义提示词模板的参数

  • name: 参数名称
  • description: 参数描述

skprompt.txt是提示词模板文件,示例内容如下:

sql 复制代码
担任高级{{$language}}开发人员。将此 JSON 文档转换为 {{$language}} 数据模型。
​
--- 开始 ---
{{$input}}
--- 结束 ---

如果要定义参数,可以使用{{$参数}}定义,参数名称对应input_variables下的name

案例演示

对前一篇示例进行改写。

1、导入插件

ini 复制代码
var skill = kernel.ImportPluginFromPromptDirectory("Plugins/ConverterPlugin");

2、准备用户输入内容

csharp 复制代码
var input = """
            {
              "person": {
                "name": "Alice",
                "age": 28,
                "city": "New York",
                "occupation": "Software Engineer"
              },
              "pets": [
                {
                  "name": "Fluffy",
                  "species": "Cat",
                  "age": 5
                },
                {
                  "name": "Max",
                  "species": "Dog",
                  "age": 3
                }
              ],
              "favorite_foods": ["Sushi", "Pizza", "Chocolate"]
            }
            """;

3、调用函数,获得大模型返回结果

less 复制代码
var result = await kernel.InvokeAsync<string>(skill["Json2Model"],new KernelArguments() { ["input"] = input, ["language"]="java" });
Console.WriteLine(result);

结果示例

总结

本文说明了如何通过对语义函数的配置和提示词模板结构化处理后,可以方便的在不同的应用中使用,以达到复用的目标。

进一步思考

不管是本机函数还是语义函数,都是由程序主动调用的。如果我希望在生产应用中,可以动态的组合函数,交给AI来调用,如何达成这个目标呢?

相关推荐
9i编程1 小时前
四大准则也还是不靠谱啊:定好了铁律,AI 照样偷懒给你看
人工智能·openai·ai编程
yingyuecom3 小时前
Seedance 2.5正式发布:映悦AI迎来“更长、更可控、更极致”的视频生成时代
人工智能·gpt·chatgpt·prompt·aigc
全栈弄潮儿5 小时前
让 AI 解释一段看不懂的代码:学习和接手项目都适用
chatgpt·openai·ai编程
手写码匠5 小时前
华为云Flexus+DeepSeek征文|Dify 多 Agent 故障演练实战:用混沌工程主动“搞破坏“,让智能体系统越炸越稳
人工智能·深度学习·算法·aigc
leeyi6 小时前
Callback 源码:aspect_inject 切面注入(第87篇-E73)
aigc·agent·ai编程
漂流瓶jz7 小时前
一文读懂大模型生态:分类/参数/结构/训练/GPU/评测/排行/社区
人工智能·大模型·llm·openai·nvidia·deepseek·anthropic
牛哇网络工作室16 小时前
UnityHDRP写实数字人全流程基础5—语音输入和语音识别
android·unity·c#·游戏引擎·aigc·语音识别·xcode
怕浪猫17 小时前
DeepSeek Harness 源码实战第2章:Cordis——驱动 dsh 的插件引擎
aigc·openai·agent
王莹月21 小时前
生图API 出问题怎么定位?给调用加 traceId 和结构化日志(nano-banana-pro)
gpt·ai·chatgpt·ai作画·aigc·agi
网易云信1 天前
政企共建!全国首个网易智企 AI OPC 社区落地衢州
aigc·agent