让大模型不仅能聊天,还能做事的Function Calling
记得大模型刚出来,绝对是惊艳到我了,这简直就是我摸鱼偷懒的神器呀,但过了几天,感觉他还是无法满足贪婪的我。别光跟我聊天呀,你也给我干点活呀,和我一起做牛马
但问题是,大模型人家本身是个语言模型呀,肯定不能像我们一样,执行函数呀~~~~
笑话,如此智慧的大模型都让我搞出来了,让他执行函数,这不简单吗,程序监听大模型的输出,当检测到大模型说【调用函数A】,我后台就执行相应的函数就好了,原理就这么简单。
像极了
我说麦芽糖三个字,你就要照我说的去做~~~

简单体验
- 让他执行函数,肯定要现有函数,设置一个脑残计算器,让他计算
1+1=3
int ErrorMechineAdd(int a ,int b) => a+b+1;
- 要让大模型认识这个函数,要给这个函数加一些解释的,我们后面详细说明要有哪些解释,这里用
Microsoft.Extensions.AI封号好的接口,一键就可以实现
AIFunction tool = AIFunctionFactory.Create(ErrorMechineAdd);
- 跟之前文章说的一样,获得一个
IChatClient,跟普通聊天不一样的是,加上.UseFunctionInvocation()
1 | OpenAIClientOptions clientOptions = new OpenAIClientOptions(); |
- 聊天就可以了,聊到计算他就会自动调用了
1 | var messages = new List<ChatMessage> |
不出所料,它计算出1+1=3,肯定是调用了我的函数。

原理解析
直接上流程图,可以看出,几个步骤:

- 你把提示词和函数列表给大模型
- 大模型理解后反给你的程序一些内容
- 你的程序来解析返回的内容,可定有要执行的函数等等,让后你的程序负责执行
- 你执行完成后,把执行结果,以及上面你和大模型的聊天历史,一并再给大模型
- 大模型在分析所有的上下文后,给出最终的答案
数据详览
下面看一看,每一步,到底都发送了哪些属性,
步骤1
可以看到有个tools列表,里面有对函数的解释,包括参数的解释

步骤2
大模型返回的一些数据,我们重点看tool_calls节点下的内容,里面有它 用到的函数名、以及参数等

步骤3
这一步骤不需要给大模型传递啥东西,主要是你的程序运行
步骤4
没啥稀奇的,基本和步骤1的数据一样,就是多了点东西,一个assistant,一个tool
![]() | ![]() |
|---|
步骤5
得到最终的答案,直接上图

下节详细讲一下Microsoft.Extensions.AI,中Function Calling的详细使用
未完待续…
让大模型不仅能聊天,还能做事的Function Calling



