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

一日一技:如何快速生成大模型工具調(diào)用的JSON Schema

人工智能
在使用大模型的工具調(diào)用時(shí),我們需要編寫JSON Schema,例如下圖的tools字段的值:這個(gè)Schema寫起來非常麻煩,括號(hào)太多了,看著眼花。不信你肉眼看看,你需要幾秒鐘才能分清楚type: "object"跟哪個(gè)字段在同一層級(jí)?這個(gè)Schema有沒有什么辦法自動(dòng)生成呢?

在使用大模型的工具調(diào)用時(shí),我們需要編寫JSON Schema,例如下圖的tools字段的值:

圖片圖片

這個(gè)Schema寫起來非常麻煩,括號(hào)太多了,看著眼花。不信你肉眼看看,你需要幾秒鐘才能分清楚type: "object"跟哪個(gè)字段在同一層級(jí)?這個(gè)Schema有沒有什么辦法自動(dòng)生成呢?

LangChain提供了一個(gè)@tool裝飾器來簡化工具調(diào)用的JSON Schema,直接裝飾函數(shù)就能使用了。例如:

import json
from langchain_core.tools.convert import tool


@tool(parse_docstring=True)
def parse_user_info(name: str, age: int, salary: float) -> bool:
    """
    保存用戶的個(gè)人信息
 
    Args:
        name: 用戶名
        age: 用戶的年齡
        salary: 用戶的工資
    """
    return True

然后,我們可以通過打印函數(shù)名的.args_schema.model_json_schema()來獲取到類似于Tool Calling的JSON Schema,如下圖所示:

圖片圖片

這種方式有兩個(gè)問題:

1. Tool Calling需要的JSON Schema中,參數(shù)名對應(yīng)的字段應(yīng)該是name,但這里導(dǎo)出來的是title。

2. 函數(shù)的docstring使用的是Google Style,跟Python的不一樣。

在Python里面,我們寫docstring時(shí),一般這樣寫::param 參數(shù)名: 參數(shù)解釋,例如下面這樣:

import json
from langchain_core.tools.convert import tool


@tool
def parse_user_info(name: str, age: int, salary: float) -> bool:
    """
    保存用戶的個(gè)人信息
 
    :param name: 用戶名 
    :param age: 用戶的年齡
    :param salary: 用戶的工資
    :return: bool,成功返回True,失敗返回False
    """
    return True

schema = parse_user_info.args_schema.model_json_schema()
print(json.dumps(schema, ensure_ascii=False, indent=2))

但使用這種方式定義的時(shí)候,@tool裝飾器不能加參數(shù)parse_docstring=True,否則會(huì)報(bào)錯(cuò)。可如果不加,提取的信息里面,字段沒有描述。效果如下圖所示:

圖片圖片

這兩個(gè)問題,其實(shí)有一個(gè)通用的解決辦法,那就是直接使用`Pydantic`。實(shí)際上,LangChain本身使用的也是Pydantic。如下圖所示:

圖片圖片

我之前寫過一篇文章:一日一技:如何使用大模型提取結(jié)構(gòu)化數(shù)據(jù),介紹了一個(gè)第三方庫,名叫`instructor`。它本質(zhì)上就是把Pydantic定義的類轉(zhuǎn)成Tool Calling需要的JSON Schema,然后通過大模型的Tool Calling來提取參數(shù)。使用使用它,我們可以非常容易的實(shí)現(xiàn)本文的目的。

使用Pydantic定義我們要提取的數(shù)據(jù)并轉(zhuǎn)換為JSON Schema格式:

import json
from pydantic import BaseModel, Field

class UserInfo(BaseModel):
    """
    用戶個(gè)人信息
    """
    name: str = Field(..., descriptinotallow='用戶的姓名')
    age: int = Field(default=None, descriptinotallow='用戶的年齡')
    salary: float = Field(default=None, descriptinotallow='用戶的工資')

schema = UserInfo.model_json_schema()
print(json.dumps(schema, indent=2, ensure_ascii=False))

Field的第一個(gè)參數(shù)如果是三個(gè)點(diǎn)...,表示這個(gè)字段是必填字段。如果想把一個(gè)字段設(shè)定為可選字段,那么Field加上參數(shù)default=None。

運(yùn)行效果如下圖所示:

圖片圖片

參數(shù)描述直接寫到參數(shù)字段定義里面,根本不需要擔(dān)心注釋格式導(dǎo)致參數(shù)沒有描述,管他是Google Style還是Python Style。

接下來,我們要把Pydantic輸出的這個(gè)格式轉(zhuǎn)換為Tool Calling需要的JSON Schema格式。我們來看一下Instructor的源代碼:

圖片圖片

把他這個(gè)代碼復(fù)制出來,用來處理剛剛Pydantic生成的JSON Schema:

from docstring_parser import parse


def generate_tool_calling_schema(cls):
    schema = cls.model_json_schema()
    docstring = parse(cls.__doc__ or'')
    parameters = {
        k: v for k, v in schema.items() if k notin ("title", "description")
    }
    for param in docstring.params:
        if (name := param.arg_name) in parameters["properties"] and (
            description := param.description
        ):
            if"description"notin parameters["properties"][name]:
                parameters["properties"][name]["description"] = description
    
    parameters["required"] = sorted(
        k for k, v in parameters["properties"].items() if"default"notin v
    )
    
    if"description"notin schema:
        if docstring.short_description:
            schema["description"] = docstring.short_description
        else:
            schema["description"] = (
                f"Correctly extracted `{cls.__name__}` with all "
                f"the required parameters with correct types"
            )
    
    return {
        "name": schema["title"],
        "description": schema["description"],
        "parameters": parameters,
    }

這里依賴一個(gè)第三方庫,叫做docstring_parser,這個(gè)庫的原理非常簡單,就是正則表達(dá)處理docstring而已。大家甚至可以看一下他的源代碼然后自己實(shí)現(xiàn)。

運(yùn)行以后效果如下圖所示。

圖片圖片

注意在參數(shù)信息里面,會(huì)有'default': null和title字段,這兩個(gè)字段即使傳給大模型也沒有關(guān)系,它會(huì)自動(dòng)忽略。如果大家覺得他們比較礙眼,也可以改動(dòng)一下代碼,實(shí)現(xiàn)跟Tool Calling 的JSON Schema完全一樣:

from docstring_parser import parse


def generate_tool_calling_schema(cls):
    schema = cls.model_json_schema()
    docstring = parse(cls.__doc__ or'')
    parameters = {
        k: v for k, v in schema.items() if k notin ("title", "description")
    }
    for param in docstring.params:
        if (name := param.arg_name) in parameters["properties"] and (
            description := param.description
        ):
            if"description"notin parameters["properties"][name]:
                parameters["properties"][name]["description"] = description

    parameters["required"] = sorted(
        k for k, v in parameters["properties"].items() if"default"notin v
    )

    for prop_name, prop_schema in parameters["properties"].items():
        prop_schema.pop("default", None)
        prop_schema.pop('title', None)

    if"description"notin schema:
        if docstring.short_description:
            schema["description"] = docstring.short_description
        else:
            schema["description"] = (
                f"Correctly extracted `{cls.__name__}` with all "
                f"the required parameters with correct types"
            )

    # 按 Tool Calling 規(guī)范封裝:
    return {
        "type": "function",
        "function": {
            "name": schema["title"],
            "description": schema["description"],
            "parameters": parameters,
        }
    }

運(yùn)行效果如下圖所示:

圖片圖片

最后給大家出個(gè)思考題:如果函數(shù)的參數(shù)包含嵌套參數(shù),應(yīng)該怎么處理?

責(zé)任編輯:武曉燕 來源: 未聞Code
相關(guān)推薦

2024-02-20 22:13:48

Python項(xiàng)目Java

2024-08-27 22:08:13

2024-05-24 09:07:06

JSONprint字符串

2021-09-13 20:38:47

Python鏈?zhǔn)?/a>調(diào)用

2021-03-12 21:19:15

Python鏈?zhǔn)?/a>調(diào)用

2021-10-15 21:08:31

PandasExcel對象

2021-07-27 21:32:57

Python 延遲調(diào)用

2022-06-28 09:31:44

LinuxmacOS系統(tǒng)

2022-03-12 20:38:14

網(wǎng)頁Python測試

2025-05-28 03:15:00

Scrapy數(shù)據(jù)sleep

2021-04-27 22:15:02

Selenium瀏覽器爬蟲

2023-10-28 12:14:35

爬蟲JavaScriptObject

2024-07-30 08:11:16

2024-07-30 08:16:18

Python代碼工具

2024-10-16 21:47:15

2024-11-11 00:38:13

Mypy靜態(tài)類型

2021-05-08 19:33:51

移除字符零寬

2022-03-07 09:14:04

Selenium鼠標(biāo)元素

2021-02-14 22:22:18

格式圖片 HTTP

2022-06-09 21:34:41

Python代碼函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲免费av在线| 欧美美女性生活视频| 国产在线拍揄自揄拍无码视频| 国产99re66在线视频| 亚洲亚洲免费| 一区二区三区欧美| 国产一区二区三区久久精品| 午夜啪啪福利视频| 无码日韩精品一区二区| 日韩中文字幕| 国产精品三级在线观看| 97久久精品国产| 污污视频在线免费| 高清国产福利在线观看| 国产视频一区三区| 欧美成人乱码一区二区三区| 亚洲国产一区二区在线 | 亚洲天堂2014| 国产精品一区二区3区| 老熟妇精品一区二区三区| 黄色网页网址在线免费| 奇米色一区二区| 亚洲精品综合久久中文字幕| 国产黄页在线观看| 欧美熟妇另类久久久久久不卡| 真实国产乱子伦精品一区二区三区| 日本精品一级二级| 欧美精品七区| 51国产偷自视频区视频| 日韩深夜影院| 精品国产鲁一鲁一区二区张丽 | 久久精品色综合| 亚洲一二三区在线观看| 91精品黄色| 蜜臀久久精品久久久用户群体| 亚洲伦理一区二区| 国产精品毛片久久久久久久| 精品乱码一区二区三区| 日韩av一二三区| 欧美日韩直播| 欧美午夜美女看片| 欧美在线3区| 伊人影院中文字幕| 国产精品久久天天影视| 欧美日本在线观看| www.午夜色| 精品国产av鲁一鲁一区 | www国产亚洲精品久久网站| 无需播放器的av| 在线观看免费版| 国产精品小仙女| 久久99视频免费| 美女又爽又黄免费| 911精品国产| 日韩欧美在线免费观看| 丰满爆乳一区二区三区| 天天操天天操天天| 久久午夜影视| 久久精品欧美视频| 欧美一区二区高清在线观看| 97人妻人人澡人人爽人人精品 | 国产一级片免费视频| 图片区亚洲欧美小说区| 中文字幕在线看视频国产欧美| 极品粉嫩美女露脸啪啪| 欧美人与性动交α欧美精品图片| 91麻豆精品一区二区三区| 国产精品欧美日韩| 国产在线视频卡一卡二| 韩日精品视频| 中文字幕欧美日韩| 国产免费嫩草影院| 欧美三级午夜理伦三级在线观看| 亚洲国产精品成人va在线观看| jizz欧美性11| а√在线天堂官网| 亚洲国产高清在线观看视频| 国产精品伊人日日| 最近中文字幕在线观看| 91久久亚洲| 日韩亚洲欧美成人| 亚洲人与黑人屁股眼交| 色88888久久久久久影院| 亚洲欧美国产一本综合首页| 中文字幕伦理片| 天天操综合520| 中文日韩在线视频| 国产精品老熟女一区二区| 成人久久电影| 亚洲精品久久久久久下一站| 91精品国产三级| 91久久久久久白丝白浆欲热蜜臀| 精品久久久久久久久久久| 久久午夜夜伦鲁鲁一区二区| av资源新版天堂在线| 亚洲品质自拍视频| 欧美色图另类小说| 亚洲国产91视频| 欧美日韩三级视频| 精品人妻二区中文字幕| av在线播放一区二区| 精品欧美一区二区久久| 日本高清www| 亚州精品视频| 美女精品久久久| 91香蕉一区二区三区在线观看| 欧美日韩国产探花| 欧美另类精品xxxx孕妇| 午夜影院免费在线观看| 手机精品视频在线观看| 99视频免费观看蜜桃视频| 国产区精品在线| 狠狠色综合日日| 国产欧美最新羞羞视频在线观看| 波多野结衣绝顶大高潮| 粉嫩aⅴ一区二区三区四区| 超碰97在线播放| 国产98在线| 亚洲成人在线网站| 欧美一区二区三区爽大粗免费| 四虎国产精品永久在线国在线| 亚洲国产精品成人精品| 国产精品免费人成网站酒店| 欧美精品三区| 国产精品自产拍在线观看中文| 国产wwwwwww| 国产高清在线观看免费不卡| 岛国一区二区三区高清视频| 高h调教冰块play男男双性文| www.欧美精品一二区| 激情一区二区三区| 污污的网站在线免费观看| 一区二区三区成人| 97超碰成人在线| 涩涩屋成人免费视频软件| 亚洲视屏在线播放| 国产黄色大片免费看| 日韩免费看片| 美女啪啪无遮挡免费久久网站| 无码人妻一区二区三区线| 91片在线免费观看| 日韩精品―中文字幕| a级日韩大片| 亚洲视频精品在线| 中文字幕在线观看视频网站| 日本一不卡视频| 欧美婷婷久久| 成人看片网站| 91精品中文字幕一区二区三区 | 91在线视频在线| 青青影院一区二区三区四区| 中文字幕在线直播| 欧美日韩精品电影| www.99热| 麻豆精品一区二区av白丝在线| 91丝袜脚交足在线播放| 国产写真视频在线观看| 欧美一区二区在线看| 你懂的在线观看网站| 国产成人av| 欧美精品在线网站| www.蜜臀av.com| 夜夜揉揉日日人人青青一国产精品| 深夜做爰性大片蜜桃| 欧美日韩精品一本二本三本| 国产精品xxxx| 无码小电影在线观看网站免费| 亚洲欧洲日产国产网站| 中文字幕一级片| 亚洲视频你懂的| 深夜视频在线观看| 亚洲欧美清纯在线制服| 91精品天堂| av漫画网站在线观看| 亚洲精品一区二区三区不| 免费高清在线观看电视| 国产成人久久精品77777最新版本| 女人帮男人橹视频播放| 日韩成人在线电影| 美日韩精品免费观看视频| 丰满熟妇人妻中文字幕| 欧美性猛交xxxx久久久| 久久久久亚洲AV成人无在| 国产一区二区在线观看视频| 欧洲精品在线一区| 久久亚洲精品人成综合网| 精品无码久久久久久国产| 国产精品成人无码| 亚洲欧美日韩成人高清在线一区| www.啪啪.com| 欧美黄免费看| 成人福利免费观看| 成人不用播放器| 色素色在线综合| 99久久99久久精品国产| 99re6这里只有精品视频在线观看| 亚洲成色www.777999| 亚洲精品观看| 国产精品扒开腿做爽爽爽的视频| 日韩中文字幕综合| 欧美中文字幕一区| 欧美成人午夜精品免费| 国产真实精品久久二三区| 逼特逼视频在线| 午夜性色一区二区三区免费视频| 欧美日韩免费精品| 天堂av一区| 国产精品美女久久久久久免费 | 一级中文字幕一区二区| 免费看污片网站| 国产精品毛片在线| 国产树林野战在线播放| 欧美色女视频| 激情小说网站亚洲综合网 | 日日欢夜夜爽一区| 免费不卡亚洲欧美| 新版的欧美在线视频| 久久国产精品首页| 91网在线播放| 亚洲精品在线不卡| 农村少妇久久久久久久| 在线不卡中文字幕| 青青草原在线免费观看| 日本一区二区视频在线| 免费一区二区三区在线观看| 国产欧美日韩一区二区三区在线| 青青草免费在线视频观看| 一区二区三区四区精品视频| 国产日韩综合一区二区性色av| 黄色在线观看www| 欧美国产高跟鞋裸体秀xxxhd| 黄色av网站免费在线观看| 欧美日韩一区二区三区高清| 99久久99久久精品国产| 欧美国产精品久久| 国产又粗又猛又爽又黄av| 久久综合五月天婷婷伊人| 成人亚洲视频在线观看| 久久亚洲美女| www一区二区www免费| 一区二区三区精品视频在线观看| 欧美日韩高清在线一区| 欧美做受69| 精品中文字幕一区| 久久99国产精品久久99大师| 国产亚洲精品自在久久| 最新欧美电影| 欧美中文字幕在线| 日本最新在线视频| 日韩欧美123| 日本一区二区免费电影| 日韩欧美中文第一页| 天堂а√在线中文在线新版| 懂色av中文一区二区三区天美| 久久日免费视频| 中文字幕欧美日韩一区| 少妇愉情理伦三级| 国产精品妹子av| 国产在线一卡二卡| 亚洲永久免费av| 欧美一二三区视频| 亚洲日本中文字幕区| jizz亚洲少妇| 亚洲一区二区三区免费视频| 天天操天天射天天爽| 午夜精品一区二区三区免费视频| 麻豆一区在线观看| 亚洲天堂精品在线观看| 欧美精品99久久久| 国产精品伦一区| 国产女片a归国片aa| 天天色图综合网| 天天爱天天做天天爽| 欧美日本视频在线| 午夜精品一区二区三| 日韩av综合网站| 精品人妻无码一区二区三区蜜桃一| 日韩午夜精品视频| 国产一区二区自拍视频| 狠狠躁夜夜躁人人躁婷婷91| 波多野结衣电影在线播放| 欧美高清激情brazzers| 亚洲成人精品女人久久久| 欧美久久久久久久久| 亚洲第一天堂在线观看| 亚洲欧美精品一区| 麻豆视频在线观看免费| 国产一区二区三区视频在线观看 | 看欧美ab黄色大片视频免费 | 在线观看的日韩av| 亚洲欧洲精品在线观看| 搞av.com| 亚洲美女91| 日韩一级片播放| 国产激情偷乱视频一区二区三区| 精品夜夜澡人妻无码av| av在线播放网| 666av成人影院在线观看| 国产精品电影观看| 91九色鹿精品国产综合久久香蕉| 日本不卡二区| 韩日成人av| 九九热免费在线观看| 99久久99精品久久久久久| 小嫩苞一区二区三区| 欧美日韩激情美女| av 一区二区三区| 国产一区二区久久精品| av蜜臀在线| 成人午夜小视频| 午夜先锋成人动漫在线| 乱熟女高潮一区二区在线| 日韩视频在线观看| 国产爆乳无码一区二区麻豆| 国模一区二区三区| 久久久久久久久久久久91| 波多野结衣一区二区三区| 少妇一级淫片免费放播放| 国产精品九色蝌蚪自拍| 亚洲一级二级片| 色综合天天综合网国产成人综合天| 欧美一区二区激情视频| 日韩一区二区在线观看视频播放| 高清福利在线观看| 热久久视久久精品18亚洲精品| 99re热精品视频| 国产奶头好大揉着好爽视频| 亚洲精品一区二区妖精| 黄色网zhan| 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产精品夜夜夜爽阿娇| 在线亚洲+欧美+日本专区| 午夜影院免费体验区| 国产精品一级片| 91在线免费看片| 蜜臀91精品国产高清在线观看| 久久久久久精| 国产成人手机高清在线观看网站| 男人添女人荫蒂免费视频| 国产一区不卡视频| 国产三级精品三级观看| 欧美日韩高清一区二区三区| 国产三级在线免费观看| 日本91av在线播放| 色综合综合网| 99免费视频观看| 欧美韩国日本一区| 久久久999久久久| 中日韩美女免费视频网站在线观看| 国产成人精品一区二三区在线观看| 91嫩草在线视频| 天海翼亚洲一区二区三区| 激情深爱综合网| 久久99精品国产麻豆婷婷| 男男一级淫片免费播放| 亚洲成精国产精品女| 人妻无码一区二区三区久久99| 久久久久久亚洲精品不卡| 欧美三区四区| 日韩一本精品| 亚洲精品偷拍| 亚洲最大av网站| 一级片在线观看视频| 伊人久久久久久久久久久| 男女在线观看视频| 国产视频一区二区三区四区| 国产日韩一区二区三区在线播放| 野花社区视频在线观看| 色菇凉天天综合网| 日本电影在线观看网站| 亚洲综合日韩在线| 99亚洲视频| 懂色av蜜臀av粉嫩av永久| 日韩精品一区二区三区四区视频| 俺来俺也去www色在线观看| 免费av在线一区二区| 美国av一区二区| 青娱乐国产精品| 亚洲另类欧美自拍| 亚洲精品一区二区在线播放∴| 国产传媒久久久| 久久精品一区蜜桃臀影院| 国产一级在线免费观看| 日韩大片免费观看视频播放| 欧美暴力调教| 伊人久久在线观看| 2021中文字幕一区亚洲| 97在线播放免费观看| 97精品视频在线播放| 大色综合视频网站在线播放| 亚洲911精品成人18网站| 国产精品久久久久aaaa| 亚洲国产www| 国产精品国产亚洲伊人久久| 欧美日本亚洲韩国国产| 亚欧洲乱码视频| 日韩免费看网站| 成人亚洲免费| 欧美极品欧美精品欧美| 亚洲视频一区在线观看|