Dify中通过自定义工具执行HTTP请求时,查询对象参数未展平

Dify中通过自定义工具执行HTTP请求时,查询对象参数未展平

3 回复

这是常见问题,检查输入格式是否正确,确保参数是展平的键值对形式。


确保在配置自定义工具时,正确设置了参数映射,特别是对象参数需要按层级展开为key-value形式。

在Dify中,如果你通过自定义工具执行HTTP请求时,发现查询对象参数未展平,可以通过以下方式来处理:

  1. 手动展平查询参数:你可以在发送请求之前,手动将查询对象展平为键值对的形式。例如:

    import requests
    
    def flatten_params(params):
        flat_params = {}
        for key, value in params.items():
            if isinstance(value, dict):
                for sub_key, sub_value in value.items():
                    flat_params[f"{key}[{sub_key}]"] = sub_value
            else:
                flat_params[key] = value
        return flat_params
    
    query_params = {
        "filter": {
            "status": "active",
            "category": "tech"
        },
        "sort": "date"
    }
    
    flat_params = flatten_params(query_params)
    response = requests.get("https://api.example.com/data", params=flat_params)
    

    在这个例子中,flatten_params函数将嵌套的查询对象展平为键值对,然后通过requests.get发送请求。

  2. 使用库自动展平参数:你也可以使用一些库来自动处理参数的展平,例如requests_toolbelt中的MultipartEncoderurllib.parse中的urlencode

    from urllib.parse import urlencode
    
    query_params = {
        "filter[status]": "active",
        "filter[category]": "tech",
        "sort": "date"
    }
    
    encoded_params = urlencode(query_params)
    response = requests.get(f"https://api.example.com/data?{encoded_params}")
    

    这种方法可以直接将参数编码为URL查询字符串,方便快捷。

通过以上方法,你可以确保在Dify中通过自定义工具执行HTTP请求时,查询对象参数能够正确地展平并发送。

回到顶部