探究Semantic Plugins:敞开大模型的技术之门
前语
在之前的章节中咱们或多或少的现已触摸到了 Semantic Kernel
的 Plugins
,本章咱们讲具体介绍怎么运用插件。
Semantic Kernel
的一大特点是具有强壮的插件,经过结合自界说/预界说的插件处理智能事务的问题。让传统的代码和智能插件一同作业灵敏地接入到运用场景简化传统运用向智能化转型的进程。
什么是Plugins
?
咱们知道LLMs
(大模型)的练习数据和咱们运用之间有时间差,还有一个问题 LLMs
对自己企业化内的常识认知有缺点。OpenAI
经过插件将ChatGPT
和第三方的运用程序之间进行衔接,这些插件使 ChatGPT
能够与开发人员界说的 API
进行交互,然后增强 ChatGPT
的功用并答应有更广泛的操作,如:
检索实时信息
,例如,体育赛事比分、股票价格、最新新闻等。检索常识库信息
, 例如,公司文档、个人笔记等。帮忙用户进行相关操作
,例如,预订航班、公司内预订会议、订餐等。
Semantic Kernel
遵从 OpenAI
的插件的插件标准,能够很方便地接入和导出插件(如根据 Bing, Microsoft 365
, OpenAI
的插件),这样能够让开发人员很简单地调用不同的插件服务。除了兼容 OpenAI
的插件外,Semantic Kernel
内也有归于自己插件界说的办法。不只能够在规矩模版格局上界说 Plugins
, 更能够在函数内界说 Plugins
.
从高层次上了解插件是一组能够公开给 AI
运用程序和服务的功用。
插件要提供在语义上描绘其行为办法的具体信息,从函数的输入、输出到副作用,一切都需求以 AI
能够了解的办法进行描绘.
界说插件
在 Semantic Kernel 中界说 Plugins 插件有两种办法,第一种是经过模版界说插件也叫Semantic Plugins
(语义插件),第二种是经过函数创立插件也叫 Native Plugins
(本地插件)
Sermantic Plugins
经过模版界说插件
咱们知道能够经过Prompts
(提示词工程)能够和LLMs
进行对话,咱们在处理一系列特定事务进程中,或许不止一个Prompts
,或许是一组Prompts
的调集。咱们能够把这些针对事务才能的Prompts
调集放到Semantic Kernel
的插件调集内。
模版格局
在 Semantic Kernel
模版界说格局有固定的格局,Prompts
(提示词)都放在 skprompt.txt
文件内,而相关参数设置都放在 config.json
文件内,文件结构参阅如下图
const string ConfigFile = "config.json";
const string PromptFile = "skprompt.txt";
这些都是在 SK
写死的装备,所以插件内的命名一定要遵从这个规矩!
|-plugins
|-Prompts
|-Translator
|-skprompt.txt
|-config.json
|-WriterPlugins
|-Joke
|-skprompt.txt
|-config.json
|-ShortPoem
|-skprompt.txt
|-config.json
skprompt.txt
咱们先来看看 skprompt.txt
的界说,这儿一般是放置和事务相关的 Prompt
,能够支撑多个参数,每个参数都放置在 {{$参数名}}
内,如以下格局:
Translate {{$input}} into {{$language}}
在之前的章节咱们介绍过这是SK
里 TemplateFormat
的默许格局"semantic-kernel"
config.json
这是装备相关的内容,随了设置和 LLMs
相关的参数外,你也能够设定输入的参数以及相关描绘
{
"schema": 1,
"description": "Translate sentenses into a language of your choice",
"execution_settings": {
"default": {
"max_tokens": 2000,
"temperature": 0.7,
"top_p": 0.0,
"presence_penalty": 0.0,
"frequency_penalty": 0.0,
"stop_sequences": ["[done]"]
}
},
"input_variables": [
{
"name": "input",
"description": "sentense to translate",
"default": ""
},
{
"name": "language",
"description": "Language to translate to",
"default": ""
}
]
}
这其实便是对PromptTemplateConfig
提示词模版装备类的 json
数据,最终在 SK
内会被反序列化到目标内。
// Load prompt configuration. Note: the configuration is optional.
var configPath = Path.Combine(functionDirectory, ConfigFile);
var promptConfig = File.Exists(configPath) ?
PromptTemplateConfig.FromJson(File.ReadAllText(configPath)) :
new PromptTemplateConfig();
之前咱们对PromptTemplateConfig
类进行过具体的解说,不熟悉的能够看看深化学习 Semantic Kernel:创立和装备 prompts functions。
从处理方案的视点看一下装备的目录图
注册 Semantic Plugins
要从 Semantic Kernel
中要完成Semantic Plugins
模板化插件的注册,需求KernelExtensions
类中的CreatePluginFromPromptDirectory
扩展办法。
再开端之前在咱们代码的处理方案Plugins
文件夹下对每一个skprompt.txt
和config.json
进行生成设置
中心代码
var kernel = Kernel.CreateBuilder()
.AddAzureOpenAIChatCompletion(config.ModelId, endpoint: config.Endpoint, apiKey: config.ApiKey)
.Build();
//注册插件
string folder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plugins");
kernel.ImportPluginFromPromptDirectory(folder);
string[] pluginNames = ["Prompts", "WriterPlugins"];
foreach (var pluginName in pluginNames)
{
kernel.ImportPluginFromPromptDirectory(Path.Combine(folder, pluginName));
}
//测验从插件取得funciton
var jokeKernelFunction = kernel.Plugins.GetFunction("Prompts", "Translator");
Console.WriteLine("System: 请输入要翻译的内容");
var userResuest = Console.ReadLine();
Console.WriteLine("System: 请输入要翻译的言语语种");
var language = Console.ReadLine();
var results = await jokeKernelFunction.InvokeAsync(kernel, new KernelArguments()
{
{"input", userResuest},
{"language", language}
});
Console.WriteLine($"Assistant: {results.ToString()}");
插件称号约好
ImportPluginFromPromptDirectory
这个办法在注册插件进程中假如没有指定插件姓名会默许用文件夹称号
pluginName ??= new DirectoryInfo(pluginDirectory).Name;
输出
System: 请输入要翻译的内容
User: 那么近那么美周末去河北
System: 请输入要翻译的言语语种
User: 英文
Assistant: So close, so beautiful, go to Hebei for the weekend.
最终
本章咱们具体介绍了怎么运用 Semantic Kernel
的插件功用,包含插件的概念、界说插件的两种办法(Semantic Plugins 和 Native Plugins)、以及怎么注册和调用 Semantic Plugins。经过插件,咱们能够扩展 ChatGPT
的功用,使其能够与第三方运用程序进行衔接,完成更广泛的操作和服务。
经过注册插件并调用相应函数,咱们能够完成比如翻译、笑话生成等功用。鄙人一篇中,咱们将重视 Native Plugins
原生函数插件的介绍。
参阅文献
- 敞开大模型的技术之门 - Plugins
- Understanding AI plugins in Semantic Kernel
示例代码
本文源代码