【pydantic】详解pydantic用法:从json格式转换为标准类
摘要:本文介绍了如何将MCP提供的JSON参数转换为Pydantic模型。通过解析JSON参数结构,提取字段类型和必填属性,动态创建对应的Pydantic模型类。示例演示了处理字符串、整数、布尔等基本类型,并根据required字段设置必选参数,最终生成类似"class MyToolArgs(BaseModel)"的模型类,便于在MCP工具中规范参数传递。核心代码展示了如何实现
·
我们在进行mcp与agent交互的时候,经常发现他们的语言不通,agent需要一个Tool来进行调用,而这个tool是需要参数(传进传出)的,而这个参数也不是随便一个参数就ok的,需要生成一个pydantic类进行传入,那么问题来了
怎么样把mcp提供的json转换为pydanic模呢?
解析
首先我们假设mcp提供的参数的json格式如下
schema = {
"properties": {
"csv_data": {"type": "string"},
"method": {"type": "string"}
},
"required": ["csv_data"]
}
model_name = "MyToolArgs"
对于这个json格式我们一步步进行转换
pydantic需要我们准备两样东西,一样是参数,一样是名字
def jsonTopydantic(scheme:dict,model_name:str) -> Type[baseTool]
fileld = {}
## 获取参数和必须要的参数
properties = schema.get('properties', {})
required_fields = schema.get('required', [])
## 转换为列表
for name,sheme in properties.items
## 默认为fileld_type
## 转换为class处理的了的参数格式
field_type: Type[Any] = str
if prop_schema.get('type') == 'integer':
field_type = int
elif prop_schema.get('type') == 'number':
field_type = float
elif prop_schema.get('type') == 'boolean':
field_type = bool
# 如果需要的参数存在于require中,就不为none
if prop_name in required_fields:
fields[prop_name] = (field_type, ...)
else:
fields[prop_name] = (field_type, None)
return creat_model(model_name,**fileld)
经过一系列的创建,就会变成
class PerformCausalAnalysisArgs(BaseModel):
csv_data: str
method: Optional[str] = None
至此,我们就创建了一个 Pydantic 模型,接下来就可以在mcptool中进行传入了
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐

所有评论(0)