精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

都在搞MCP,但是我還是要講一下大模型的函數調用

發布于 2025-6-19 07:16
瀏覽
0收藏


都在搞MCP,但是我還是要講一下大模型的函數調用-AI.x社區

函數調用(function calling)是一種機制,允許大語言模型(LLM)通過調用外部函數或 API 執行特定的、預定義的任務。可以將其視為一種功能,讓 LLM 將它無法獨立完成的工作“委托”出去。

例如,假設您向 LLM 發送以下提示:“特斯拉當前的股價是多少?”

沒有函數調用的基本 LLM 可能會根據其訓練數據中的模式“幻覺”出一個答案,例如“可能在 200 美元左右”。經過 RLHF 優化的模型可能會更誠實地說:“我沒有實時數據,所以無法告訴你。”

讓我們用 Qwen2.5 0.5B Instruct 快速嘗試一下:

from transformers importAutoTokenizer,AutoModelForCausalLM


model_name ="Qwen/Qwen2.5-0.5B-Instruct"


model =AutoModelForCausalLM.from_pretrained(model_name)
tokenizer =AutoTokenizer.from_pretrained(model_name)


prompt ="特斯拉當前的股價是多少?"


inputs = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=30, do_sample=True)
print(tokenizer.decode(outputs[0]))

輸出:

特斯拉當前的股價是多少?
抱歉,作為一個 AI 語言模型,我無法訪問實時金融數據。特斯拉的股價可能會快速變化。

正如預期,Qwen 表示它不知道,這與任何優秀的指令模型一致。

但通過函數調用,LLM 可以識別對實時股價數據的需求,觸發對金融服務的 API 調用,然后生成類似“截至此刻,特斯拉的股價為 279.24 美元”的回答。

顯然,函數調用是釋放 LLM 全部潛力的關鍵功能,了解如何使用它至關重要。

現在,像 OpenAI GPT-4 這樣的專有模型通過 OpenAI API 原生支持函數調用。它們使用起來更簡單,因為一切都在 OpenAI 生態系統中處理。

Mistral AI 的許多模型(如 Mistral Small 或 Mistral Nemo)也是如此,這些模型是開源的,但也通過 API 提供。

讓我展示一個使用最新 Mistral Small 的函數調用示例。您需要一個 Mistral API 密鑰來運行此示例。

順便說一句,Mistral 的模型被嚴重低估。只要用幾次,你就會發現它們有多優秀。

首先,安裝 Mistral AI 的 Python 客戶端:

pip3 install mistralai
pip3 list | grep mistralai

輸出:

mistralai  1.6.0

接下來,我們需要一個 LLM 可以調用的函數。我將使用 Flask 將該函數作為 REST 端點提供,該函數僅列出本地文件系統中指定目錄的所有文件。

from flask importFlask, request
from os import path, listdir


app =Flask(__name__)


@app.route('/files')
def list_files():
    directory = request.args.get('directory','.')
    files =(
[{'name': f}for f in listdir(directory)
if path.isfile(path.join(directory, f))
]
)
return files


if __name__ =='__main__':
    app.run(host='0.0.0.0', port=8000)

您可以使用 curl 從命令行測試此端點,或者使用您喜歡的瀏覽器。

curl "http://localhost:8000/files?directory=/tmp"

輸出:

[{"name":"api.py"}]

現在,我們需要告訴 LLM 這個函數存在,并且在適當的時候使用它。因為我們仍在使用 Mistral LLM(目前是 mistral-small-2503),這相當簡單。您只需以 LLM 能理解的格式描述該函數。對于大多數 LLM,格式如下:

available_functions =[
{
"type":"function",
"function":{
"name":"files",
"description":"列出目錄中的文件",
"parameters":{
"type":"object",
"properties":{
"directory":{
"type":"string",
"description":"目錄的絕對路徑"
},
},
"required":["directory"]
}
}
}
]

當然,函數描述越詳細、信息量越大,效果越好。

此時,您只需將 ??available_functions?? 數組與提示一起傳遞給客戶端。

from mistralai importMistral
api_key ="..."
model ="mistral-small-2503"


mistral =Mistral(api_key)
response = mistral.chat.complete(
    model = model,
    messages =[
{
"role":"user",
"content":"列出 /tmp 目錄中的所有文件。"
}
],
    tools = available_functions,
    tool_choice ="any"
)


print(response.choices[0].message.tool_calls[0])

輸出:

function=FunctionCall(
  name='files',
  arguments='{"directory": "/tmp"}'
)
id='12bc4' type=None index=0

如您所見,Mistral Small 成功根據給定的提示推斷出需要調用 ??files??? 函數,并使用參數 ??/tmp??。

不過,它不會自己調用函數。這是我們需要做的事情。因此,我們檢查 ??tool_calls?? 數組,如果它不為空,我們就運行 Mistral 希望我們運行的函數。

在我們的例子中,因為我們有一個 REST 端點,我們可以使用 ??requests?? 庫進行 GET 請求。

import json
import requests


if response.choices[0].message.tool_calls:
    tool_call = response.choices[0].message.tool_calls[0]
if tool_call.function.name =="files":
        output = requests.get(
"http://localhost:8000/files?directory="+
            json.loads(
                tool_call.function.arguments
)["directory"]
).json()
print(output)

輸出:

[{'name':'qq1.html'}]

請注意,參數目前是以字符串形式到達,我們需要先將其轉換為 JSON。這就是代碼中包含 ??json.loads()?? 的原因。

還值得注意的是,LL彼此之間,LLM 在這里沒有生成文本。輸出到標準輸出(stdout)應該是您的函數。

很好,現在我們知道如何使用通過 API 訪問的 LLM 進行函數調用。

在本文的其余部分,我們將使用可以本地運行的開源模型。許多這些模型支持函數調用,但使用該功能需要額外步驟。您會發現,這些模型照常生成 token,作為開發者的您需要解析、解釋并使用這些 token 來觸發函數。

讓我們看看是否可以直接將 ??available_functions?? 數組傳遞給 Llama 3.2–1B Instruct 以使其調用我們的函數。

我們首先加載模型:

from transformers importAutoTokenizer,AutoModelForCausalLM


model_name ="meta-llama/Llama-3.2-1B-Instruct"
model =AutoModelForCausalLM.from_pretrained(model_name)
tokenizer =AutoTokenizer.from_pretrained(model_name)

接下來,我們需要將提示包裝在聊天模板中,而不是直接傳遞給模型。聊天模板應包含 ??available_functions?? 數組,以指定模型可以使用的工具。

messages =[
{"


role": "system", "content": "你是一個有用的助手。"},
{"role":"user","content":"/tmp 目錄中有哪些文件?"},
]
template= tokenizer.apply_chat_template(
    messages, tools=available_functions,
    tokenize=False
)

最后,我們對模板進行 token 化,并將其作為輸入傳遞給模型。

inputs = tokenizer(template, return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=30, do_sample=True)
print(tokenizer.decode(outputs[0]))

輸出:

...
...
<|python_tag|>
{"type":"function","function":"files",
"parameters":{"directory":"/tmp"}}
<|eom_id|>

看起來 Llama 3.2 也成功識別了函數調用。這很好!但函數調用目前只是一個(JSON 格式的)字符串,被 ??<|python_tag|>??? 和 ??<|eom_id|>??? 包裹。??eom_id?? 只是一個特殊的消息結束 token。

提取模型輸出的函數調用有很多方法。我將保持簡單,使用正則表達式。

import json
import re
generated_text = tokenizer.decode(outputs[0])


matched = re.search(
    r"<\|python_tag\|>(.*?)<\|eom_id\|>",
    generated_text, re.DOTALL
)
function_call = json.loads(matched.group(1).strip())
print(function_call)

輸出:

{'type':'function','function':'files',
'parameters':{'directory':'/tmp'}}

現在您知道如何使用 Llama 進行函數調用。

如果從 Llama 切換到 Qwen,變化不大。但 Qwen 使用一組不同的 token 來包裹函數調用。以下是 Qwen 的輸出:

<|im_start|>assistant
<tool_call>
{"name":"files","arguments":{"directory":"/tmp"}}
</tool_call><|im_end|>

因此,您的正則表達式需要稍作調整以處理這種新格式。

本文轉載自????PyTorch研習社????,作者:PyTorch研習社

收藏
回復
舉報
回復
相關推薦
91嫩草国产线观看亚洲一区二区| 国产免费av在线| 精品成人久久| 国产视频一区在线| 在线观看亚洲色图| av大片在线| 99久久免费精品高清特色大片| 欧美性做爰毛片| 一级二级黄色片| 日韩成人精品| 一本到高清视频免费精品| 一道精品一区二区三区 | 欧美久久免费观看| www插插插无码免费视频网站| 亚洲 欧美 激情 另类| 喷水一区二区三区| 久久久亚洲国产天美传媒修理工| 瑟瑟视频在线观看| 日韩一区二区三区在线看| 色婷婷久久久久swag精品| 99亚洲国产精品| 国产中文字幕在线看| 国产成人精品网址| 91高清免费在线观看| 欧美风情第一页| 欧美一区二区三区红桃小说| 欧美日韩国产电影| 97av视频在线观看| 91精品久久| 欧美高清在线精品一区| 精品免费二区三区三区高中清不卡| 最新在线中文字幕| 99国产精品久久久久久久成人热| 日韩视频在线观看免费| 30一40一50老女人毛片| 欧洲一区在线| 欧美精品久久99久久在免费线| 国产精品秘入口18禁麻豆免会员| h视频在线免费观看| 国产欧美一区二区精品婷婷| 国模精品一区二区三区| aaa一区二区| 蜜桃视频第一区免费观看| 欧美一性一乱一交一视频| 国产性生活网站| 中文字幕人成人乱码| 在线播放国产精品| 丰满少妇高潮一区二区| 女仆av观看一区| 欧美精品一区二区三区在线播放 | 欧美一级大片| 五月激情综合网| 99久久久精品视频| av香蕉成人| 亚洲视频1区2区| 亚洲一区三区| 9色在线视频| 久久精品夜夜夜夜久久| 欧美日韩无遮挡| 欧美美乳在线| 久久精品视频一区二区三区| 蜜桃久久影院| 欧美日本网站| 久久精品视频在线看| 欧美不卡三区| 国产美女视频一区二区三区| 久久久久亚洲蜜桃| 青青草原亚洲| 成人免费一区二区三区视频网站| 久久精品亚洲一区二区三区浴池| 秋霞毛片久久久久久久久| 黄色软件在线观看| 国产精品福利一区二区三区| 国产精品美女在线播放| 色呦呦在线看| 午夜av一区二区三区| 116极品美女午夜一级| 精品无人乱码一区二区三区| 欧美三级视频在线观看| 爱爱爱爱免费视频| 日韩欧洲国产| 日韩高清人体午夜| 久久久视频6r| 午夜精品久久久久久久四虎美女版| 久久亚洲精品国产亚洲老地址| 欧美日韩一级大片| 99人久久精品视频最新地址| 日韩男女性生活视频| 91黄色在线视频| 国产成人午夜99999| 久精品国产欧美| 国产在线超碰| 亚洲猫色日本管| 尤物av无码色av无码| 国产精品久久久久久久久免费高清 | 99久久精品网| 欧美激情视频一区| 五月天婷婷导航| 激情图片小说一区| 国产一区二区三区高清| av中文天堂在线| 亚洲一区二区视频| 午夜dv内射一区二区| 精品视频一二| 亚洲色图激情小说| 九九九在线视频| 日韩综合一区二区| 波多野结衣精品久久| 九色在线播放| 一区二区在线观看视频| 亚洲欧美另类动漫| 国产伦理久久久久久妇女| 中文字幕在线视频日韩| 日韩大片免费在线观看| 九色|91porny| 免费在线成人av电影| bt在线麻豆视频| 欧美在线你懂的| 中国免费黄色片| 97在线精品| 欧美在线观看网址综合| 精品人妻少妇AV无码专区| 久久久精品tv| 日日橹狠狠爱欧美超碰| 欧美日本三级| 日韩在线小视频| 手机在线看片1024| 国产精品77777| 亚洲一区二区精品在线| 涩涩视频在线播放| 精品国产污网站| www.av免费| 久久精品国产网站| 婷婷久久五月天| 国产精品av一区二区三区| 亚洲精品一区二区精华| 久久久久久久久久久久久久久久久| 日本午夜一本久久久综合| 精品国产一区二区三区麻豆免费观看完整版 | 欧美午夜免费影院| 成人免费观看网址| av播放在线| 欧洲中文字幕精品| 欧美偷拍一区二区三区| 久久一本综合频道| 欧美日韩免费高清| 亚洲男人av| 亚洲国产成人一区| 国产精品成人久久| www.在线欧美| 国产成a人亚洲精v品在线观看| 亚洲伊人伊成久久人综合网| 综合av色偷偷网| 国产精品午夜一区二区| 国产女同互慰高潮91漫画| wwwxxx黄色片| 精品国产一区一区二区三亚瑟 | 久久网一区二区| 国产成人午夜99999| www.av91| 欧美毛片免费观看| 欧美与欧洲交xxxx免费观看| 天堂中文资源在线| 色网综合在线观看| 在线免费观看视频| 久草在线在线精品观看| 成人性做爰片免费视频| 久久综合给合| 久久久久久亚洲精品中文字幕| 亚洲精品视频网| 亚洲午夜国产一区99re久久| 一级黄色片毛片| 午夜一区不卡| 日本一区二区三区www| 成人18视频在线观看| 俺去了亚洲欧美日韩| 国产男男gay体育生白袜| 亚洲专区一二三| av免费观看不卡| 玖玖玖国产精品| 亚洲欧美久久234| 97色婷婷成人综合在线观看| 欧美日韩电影在线观看| 亚洲 欧美 激情 另类| 欧美中文字幕亚洲一区二区va在线| 国产一二三四区在线| 国产一区二三区| 大j8黑人w巨大888a片| 波多野结衣在线播放一区| 96国产粉嫩美女| 免费看男女www网站入口在线 | 亚洲av成人片色在线观看高潮| 久久av最新网址| 亚洲视频在线二区| 国产精品久久久久久久久久白浆| 欧洲日韩成人av| 日本电影在线观看网站| 亚洲成人中文字幕| a片在线免费观看| 一区二区在线观看av| 女~淫辱の触手3d动漫| 国产一本一道久久香蕉| 激情六月丁香婷婷| 欧美激情综合色综合啪啪| 热re99久久精品国99热蜜月| 欧美视频精品全部免费观看| 日韩美女免费观看| 色在线视频网| 日韩在线免费视频| 三级在线观看| 欧美xingq一区二区| 中文字幕久久久久| 无码av免费一区二区三区试看 | 国产精品美女久久久久久2018 | 久久伊人影院| 国产精品久久激情| 性欧美18xxxhd| 欧美高清videos高潮hd| 免费黄色电影在线观看| 亚洲精品视频在线观看视频| 国内精品久久久久久久久久久| 91成人国产精品| 91香蕉在线视频| 亚洲精品水蜜桃| 免费看的黄色录像| 国产午夜精品美女毛片视频| 成人免费看片载| 国产综合久久久久久久久久久久| 国产激情在线观看视频| 一本久道综合久久精品| 菠萝蜜视频在线观看入口| 91麻豆精品国产91久久久平台 | 自拍偷自拍亚洲精品播放| 国产中年熟女高潮大集合| jiyouzz国产精品久久| 少妇欧美激情一区二区三区| 另类调教123区| 妓院一钑片免看黄大片| 久久精品五月| 欧美三级一级片| 日韩午夜电影| 成人一区二区免费视频| 欧美精品1区| 成年丰满熟妇午夜免费视频| 综合视频在线| 老汉色影院首页| 欧美一区高清| mm131午夜| 欧美1区3d| 日本老太婆做爰视频| 亚洲高清资源在线观看| 美女在线免费视频| 欧美日本二区| 阿v天堂2018| 亚洲福利电影| 菠萝蜜视频在线观看入口| 国内一区二区三区| 日韩精品一区在线视频| 亚洲人成久久| 国产在线青青草| 久久都是精品| 亚洲一级片免费| 老司机精品视频一区二区三区| www.com黄色片| 黑人精品欧美一区二区蜜桃| 天美一区二区三区| 国产精品一区三区| 欧美xxxxx精品| 久久久久国产成人精品亚洲午夜| 一级片视频免费看| 中文字幕一区二| 久草视频免费在线播放| 欧美日韩国产在线播放| 无码人妻av免费一区二区三区 | 免费欧美网站| 国产精品区一区二区三含羞草| 国产乱人伦精品一区| 久久爱av电影| 成人激情电影在线| 狠狠干视频网站| 国产精品久久久亚洲一区| 国产精品无码专区av在线播放| 美女视频一区二区| 亚洲成人福利视频| 久久亚洲影视婷婷| 婷婷社区五月天| 午夜欧美在线一二页| 国产美女www爽爽爽| 日韩免费性生活视频播放| 美国成人毛片| 久久久国产影院| sm性调教片在线观看 | 菠萝蜜视频在线观看入口| 亚洲欧美高清| 涩多多在线观看| 99riav一区二区三区| 欧美xxxooo| 亚洲成人激情自拍| 亚洲影视一区二区| 欧美精品一区男女天堂| 91caoporn在线| 久久久久久一区二区三区| 99久久精品一区二区成人| 国产欧美日韩亚洲| 亚洲精品久久久| 男人天堂网视频| 国产河南妇女毛片精品久久久 | 国产成人无码精品久久久性色| 久久精品国产精品亚洲红杏 | 日本精品在线观看| 日本成人三级| 激情欧美一区| 免费网站在线观看黄| 91丨porny丨蝌蚪视频| 午夜国产福利一区二区| 日本精品视频一区二区三区| www.国产三级| 日韩中文字幕网址| 美女100%一区| 国产欧美一区二区三区不卡高清| 91视频综合| 欧美一级黄色片视频| 成人午夜免费视频| 日韩一区二区不卡视频| 欧美在线免费播放| 日韩欧美亚洲系列| 久久人91精品久久久久久不卡| 伊人久久一区| 亚洲最新在线| 日欧美一区二区| 精品人妻无码一区二区三区| 亚洲成a人v欧美综合天堂下载 | 国产亚洲精品久久久久久豆腐| 欧美日韩性视频| 亚洲奶汁xxxx哺乳期| 欧美成年人视频| 亚洲精品aaa| 色女孩综合网| 日韩高清在线不卡| www.狠狠爱| 色欧美片视频在线观看在线视频| 日韩一级中文字幕| 欧美激情一二三| 在线精品自拍| 国产青草视频在线观看| 国产精品一色哟哟哟| 麻豆成人在线视频| 日韩欧美久久一区| 污视频在线看网站| 粉嫩av免费一区二区三区| 国产精品黄色| 国产一精品一aⅴ一免费| 夜夜嗨av一区二区三区中文字幕| 精品国产av一区二区三区| 大量国产精品视频| 日韩在线亚洲| 欧美久久久久久久久久久久久 | 色哟哟一区二区在线观看| 嫩草在线播放| 国产成人精品综合| 成人中文视频| 成人黄色一级大片| 亚洲精品中文字幕乱码三区| 精品国产av一区二区| 欧美极品少妇xxxxⅹ免费视频| 国产 日韩 欧美 综合 一区| 欧美精品久久久久久久自慰| 99久久久无码国产精品| 高清乱码免费看污| 国产午夜精品一区二区三区 | 亚洲成在人线免费| 日韩欧美亚洲系列| 国产精品一区二区在线| 午夜免费一区| 日韩精品人妻中文字幕有码| 日韩欧美国产骚| av播放在线| 成人在线免费观看一区| 亚洲欧美春色| 多男操一女视频| 精品国产一二三区| 成人在线爆射| 在线观看成人免费| 91麻豆高清视频| 中文字字幕在线观看| 色综合久久久888| 日本在线中文字幕一区| 天堂网在线免费观看| 一区二区欧美视频| 男人天堂亚洲二区| 亚洲一区二区日本| 亚洲欧美日韩视频二区| 超薄肉色丝袜一二三| 日韩限制级电影在线观看| 中文在线中文资源| 麻豆一区二区三区在线观看| 91蝌蚪porny成人天涯| 国产精品嫩草影院精东| 欧洲美女7788成人免费视频| 亚洲电影影音先锋|