Semantic Kernel/C#:一種通用的Function Calling方法,文末附經測試可用的大模型

mingupupup發表於2024-08-29

Funcion Calling介紹

函式呼叫允許您將模型如gpt-4o與外部工具和系統連線起來。這對於許多事情都很有用,比如為AI助手賦能,或者在你的應用程式與模型之間建立深度整合。

如果您瞭解或者使用過Semantic Kernel可能會發現除了OpenAI支援Function Calling的模型之外,自動函式呼叫好像並不好用,國產大模型幾乎都不能使用,由於想解決這個問題,在GitHub上找到了一個大佬的方法。

GitHub地址:https://github.com/Jenscaasen/UniversalLLMFunctionCaller

大佬是透過提示工程與Semantic Kernel中呼叫本地函式的原理來做的,我看了大佬的程式碼,將提示詞改為了中文,可能會更適用於國產大模型。

之前寫了一篇文章:如何讓其他模型也能在SemanticKernel中呼叫本地函式介紹了這個方法。

但是當時自己並沒有開源專案,感興趣的朋友,沒有辦法快速地上手體驗,只能自己重新來一遍,現在已將這部分內容整合到我的開源專案SimpleRAG中,感興趣的朋友只需填入自己的API Key即可快速體驗,也可以方便地檢視程式碼了。

GitHub地址:https://github.com/Ming-jiayou/SimpleRAG

一種通用的Function Calling方法

在開始介紹之前,先看一下效果:

Semantic Kernel/C#:一種通用的Function Calling方法,文末附經測試可用的大模型

對比一下不使用FunctionCalling的效果:

image-20240828162455519

再來一個示例:

Semantic Kernel/C#:一種通用的Function Calling方法,文末附經測試可用的大模型

對比不使用Function Calling的效果:

image-20240828162754671

具體程式碼可在GitHub中檢視,這裡重點介紹一下實現的過程。

這裡以Qwen2-7B-Instruct為例。

首先建立一個Kernel:

image-20240828163952619

在Kernel中匯入外掛:

image-20240828164048682

以上只是用於測試的模擬函式。

只需這樣寫即可:

image-20240828165221419

現在探究一下里面的過程。

首先將外掛轉化為文字:

image-20240828165354209

image-20240828165413278

在對話歷史中加入示例:

image-20240828165513048

image-20240828165557673

在對話歷史中加入一個指令:

image-20240828165704135

image-20240828165801213

將所有可用的函式嵌入到這個Prompt中了,如下所示:

image-20240828165901365

將指令加入到對話歷史中了,如下所示:

image-20240828170031287

讓LLM根據任務選擇應該先呼叫哪個函式或者不用呼叫函式:

image-20240828170139513

LLM返回完成這個任務需要呼叫的函式:

image-20240828170317084

驗證這個函式:

image-20240828170348135

呼叫外掛中的函式:

image-20240828170514946

image-20240828170607398

image-20240828170626711

第一個函式返回的結果:

image-20240828170658135

再向LLM傳送請求,現在該呼叫哪個函式,LLM的返回如下所示:

image-20240828170756097

同樣執行外掛中的第二個函式:

image-20240828170846964

第二個函式的返回:

image-20240828170917273

然後再向LLM傳送請求:

image-20240828171024714

呼叫的函式名為Finished,表示流程已完成,可以跳出來了,如下所示:

image-20240828171128972

獲得了最後的資訊:

image-20240828171224711

結果如下所示:

image-20240828171253353

以上就是這個方法的大概流程,具體實現可以看GitHub開源的程式碼。

經過測試這種方法可用的LLM

平臺可用模型
矽基流動 Llama-3.1-405/70/8B、Llama-3-70/8B-Instruct、DeepSeek-V2-Chat、deepseek-llm-67b-chat、Qwen2-72/57/7/1.5B-Instruct、Qwen2-57B-A14B-Instruct、Qwen1.5-110/32/14B-Chat、Qwen2-Math-72B-Instruct、Yi-1.5-34/9/6B-Chat-16K、internlm2_5-20/7b-chat
訊飛星火 Spark Lite、Spark Pro-128K、Spark Max、Spark4.0 Ultra
零一萬物 yi-large、yi-medium、yi-spark、yi-large-rag、yi-large-fc、yi-large-turbo
月之暗面 moonshot-v1-8k、moonshot-v1-32k、moonshot-v1-128k
智譜AI glm-4-0520、glm-4、glm-4-air、glm-4-airx、glm-4-flash、glm-4v、glm-3-turbo
DeepSeek deepseek-chat、deepseek-coder
階躍星辰 step-1-8k、step-1-32k、step-1-128k、step-2-16k-nightly、step-1-flash
Minimax abab6.5s-chat、abab5.5-chat
阿里雲百鍊 qwen-max、qwen2-math-72b-instruct、qwen-max-0428、qwen2-72b-instruct、qwen2-57b-a14b-instruct、qwen2-7b-instruct

以上不一定完備,還有一些模型沒測,歡迎大家繼續補充。

相關文章