我们在进行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中进行传入了

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐