想利用大模型驱动真实业务系统?基于Semantic Kernel 接入讯飞星火 Function Call 调用本地方法!...

继续上周末基于 Semantic Kernel 对接星火大模型之后,我还想继续对接它的function call能力。而我们作为大模型应用开发者,最核心的需求就是将大模型应用到我们的日常业务场景中,参与到企业应用的方方面面。

而大模型的function call能力就是实现这一目标的关键。本文将介绍利用Sk和星火大模型的function call调用C#的本地方法(注意这里说的“本地”是跟“远程”区分。不是指只C#的本地函数特性,而是委托或者方法都支持)。

function call的原理就是在给大模型发送消息时,带上可调用的函数描述,包括函数名和描述、参数名、描述和是否必须,返回值名和描述,然后大模型会根据提问和上下文分析是否匹配某个函数,匹配后参数是否满足,如果满足了就会在响应里返回函数名和参数值,否则就会再次跟用户提问缺少的参数。

于是我在我的应用本地写了这样一个简单的方法,传入一个整型订单ID,返回拼好的订单信息字符串,并且加上了注释。最后为了精确找到这个方法,加了个自定义特性AntSkFunction。

ca128745cdf418dcead6445dd4ad722e.png

然后我写了个方法查询,就是普通的扫描程序集的类和方法。然后从xml读取注释,获得这个方法和参数的描述。

b921c44bb6bf9d050d951ed636f8cbe2.png

简单的扫描程序集寻找要调用的方法以及读取注释

然后在构建kernel实例时,构建KernelFunction 为SK插件,可以CreateFunctionFromMethod 方法传入MethodInfo,这里也能直接传委托。下文能看到如何调用。

c8d9b23f3089cf944d549ab4d4ca259e.png

到构建星火大模型客户端的地方,发送请求前从kernel.Plugins.GetFunctionMetadata()方法能获取所有配置的sk function,通过前面导入时的命名,找到我们的本地方法,构建星火sdk的函数参数。

953e76a27f5d91f97edba3a36ef9a790.png

接着,在模型的响应中获取被识别的函数,并解析参数,然后传入sk的函数调用方法。调用是利用SkFunction.InvokeAsync方法。待获得结果后,重新组织一次消息,发送给大模型,最后把结果反馈到UI。

e23393f99bf2d93f498c837960bae2ab.png

可以看到这里有个递归,这是因为我是在IAsyncEnumerable也就是流式响应的类型中处理的。星火响应了function call之后,流就结束了,但是函数调用的结果是需要返回给大模型的。返回的方式就是在对话历史记录中,最后多加一个记录把函数结果告知,等它组织好语言再返回内容。所以这里是需要递归,组装好方法的执行结果后,把前面的流程再走一遍。

最终的效果如下:

a0a075e91ae281e97d9d16e40cd9ed2f.png

可以看到连贯的两次对话,第一句是调了我们开头所说的本地方法,对比我们返回的参数,能看到答复是经过整理的。而且要知道这个过程向大模型调用过两次。而第二句则让它从历史记录中提取信息再根据自己的训练数据生成答案。

这里是最基本的实现用大模型调c#本地方法,我们还需要兼容sk的其他sdk,如openai,azure 的,还有sk自带的插件。

下一步我想就可以在这个方法中调用UI元素,在与大模型的交流中呈现不同的交互,这才是Blazor在大模型应用的优势啊。

dae82afd2cd1be53a48e36f793f02d19.png

星火模型是一个基于深度学习的自然语言处理模型,可以用于文本分类、情感分析、命名实体识别等任务。接入星火模型到Vue前端页面的步骤如下: 1. 准备工作:首先,你需要在开放平台注册账号并创建应用,获取到API Key和API Secret。 2. 安装依赖:在Vue项目中,你需要安装axios库来发送HTTP请求,可以使用以下命令进行安装: ``` npm install axios ``` 3. 创建API请求:在Vue项目中,你可以创建一个API请求的函数,使用axios发送POST请求到星火模型的API接口。在请求中,你需要设置请求头部的Authorization字段为API Key和API Secret的Base64编码。示例代码如下: ```javascript import axios from 'axios'; const apiKey = 'YOUR_API_KEY'; const apiSecret = 'YOUR_API_SECRET'; const base64Auth = btoa(apiKey + ':' + apiSecret); async function callXunfeiAPI(text) { const url = 'https://api.xunfei.cn/v1/aiui/v1/text_semantic'; const headers = { 'Content-Type': 'application/json', 'Authorization': 'Basic ' + base64Auth }; const data = { text: text }; try { const response = await axios.post(url, data, { headers }); return response.data; } catch (error) { console.error(error); return null; } } ``` 4. 在Vue组件中使用API请求:在Vue组件中,你可以调用上述的API请求函数,并处理返回的结果。示例代码如下: ```javascript <template> <div> <input v-model="inputText" type="text" /> <button @click="sendRequest">发送请求</button> <div>{{ response }}</div> </div> </template> <script> import { callXunfeiAPI } from '@/api/xunfei'; export default { data() { return { inputText: '', response: null }; }, methods: { async sendRequest() { this.response = await callXunfeiAPI(this.inputText); } } }; </script> ``` 这样,你就可以在Vue前端页面中接入星火模型,并通过发送API请求来获取模型的结果了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值