想利用大模型驱动真实业务系统?基于Semantic Kernel 接入讯飞星火 Function Call 调用本地方法!...
内容提要
本文介绍了利用Semantic Kernel和星火大模型的function call能力调用C#的本地方法的实现方法。通过在消息中带上可调用的函数描述,大模型可以根据上下文分析是否匹配某个函数,并返回函数名和参数值。作者在本地写了一个简单的方法,并通过自定义特性AntSkFunction精确找到该方法。然后通过扫描程序集和读取注释获取方法和参数的描述。在构建Kernel实例时,可以使用CreateFunctionFromMethod方法传入MethodInfo或委托来构建KernelFunction。在构建星火大模型客户端时,可以通过kernel.Plugins.GetFunctionMetadata()方法获取所有配置的sk function,并构建星火sdk的函数参数。最后,通过SkFunction.InvokeAsync方法调用sk的函数,并将结果反馈到UI。作者还提到了递归的处理方式,以及下一步的计划。
关键要点
-
本文介绍了利用Semantic Kernel和星火大模型的function call能力调用C#的本地方法。
-
大模型的function call能力是将大模型应用到企业业务场景中的关键。
-
function call的原理是发送消息时带上可调用的函数描述,大模型根据上下文分析匹配函数。
-
作者在本地实现了一个简单的方法,传入订单ID返回订单信息,并加上注释和自定义特性AntSkFunction。
-
通过扫描程序集和读取xml注释获取方法和参数的描述。
-
在构建kernel实例时,可以使用CreateFunctionFromMethod方法传入MethodInfo或委托。
-
构建星火大模型客户端时,通过kernel.Plugins.GetFunctionMetadata()获取所有配置的sk function。
-
在模型响应中获取识别的函数,解析参数并调用sk的函数,使用SkFunction.InvokeAsync方法。
-
处理过程中涉及递归,以便将函数调用结果反馈给大模型。
-
最终实现了用大模型调C#本地方法的基本功能,计划兼容其他sdk并在UI中呈现交互。
延伸问答
如何利用Semantic Kernel调用C#的本地方法?
可以通过在消息中带上可调用的函数描述,使用CreateFunctionFromMethod方法构建KernelFunction,并通过SkFunction.InvokeAsync方法调用本地方法。
大模型的function call能力有什么重要性?
大模型的function call能力是将大模型应用到企业业务场景中的关键,能够使其参与到日常业务中。
在实现过程中如何处理函数参数?
通过扫描程序集和读取xml注释获取方法和参数的描述,并在模型响应中解析参数。
如何在构建星火大模型客户端时获取函数元数据?
可以通过kernel.Plugins.GetFunctionMetadata()方法获取所有配置的sk function,以找到本地方法并构建函数参数。
在调用本地方法时,如何处理递归?
在流式响应中处理递归,以便将函数调用结果反馈给大模型,并在对话历史中记录结果。
未来的计划是什么?
计划兼容其他sdk,如openai和azure,并在UI中呈现与大模型的交互。