You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为LangChain的SQL Agent扩展SQLDatabaseToolkit自定义工具?

为SQL Agent添加自定义工具的正确实现步骤
  • 确保自定义工具符合LangChain标准
    自定义工具必须遵循LangChain的BaseTool规范,不能直接传入普通函数。推荐两种实现方式:

    from langchain.tools import BaseTool, tool
    
    # 方式1:使用@tool装饰器快速定义
    @tool
    def custom_sql_preprocessor(query: str) -> str:
        """对SQL查询语句进行预处理,比如替换特殊占位符、校验语法"""
        # 这里编写你的工具逻辑
        processed_query = query.replace("{{USER_INPUT}}", "valid_value")
        return processed_query
    
    # 方式2:继承BaseTool类实现更复杂的工具
    class CustomDataAnalyzer(BaseTool):
        name = "custom_data_analyzer"
        description = "用于分析SQL查询返回的结果,生成统计摘要或可视化描述"
    
        def _run(self, result_data: str) -> str:
            # 核心执行逻辑
            return f"数据统计摘要:共{len(result_data.split())}条记录"
    
        async def _arun(self, result_data: str) -> str:
            # 异步执行逻辑(可选,若不需要可省略)
            return self._run(result_data)
    
    # 组装工具列表
    custom_tool_list = [custom_sql_preprocessor, CustomDataAnalyzer()]
    
  • 校验agent_type与参数的兼容性
    你使用的AgentType.OPENAI_FUNCTIONS要求工具适配OpenAI函数调用规范:

    • 工具的name必须是英文小写,不含特殊字符
    • description要清晰说明工具的用途和适用场景,帮助LLM判断何时调用
    • 函数参数的注释要明确,LangChain会自动生成符合JSON Schema的参数定义
  • 优化suffix引导Agent使用工具
    自定义suffix需要明确告知Agent可以调用额外工具,示例:

    custom_suffix = """
    当遇到需要预处理SQL语句或分析查询结果的需求时,你可以调用提供的custom_sql_preprocessor或custom_data_analyzer工具。
    最终回答用户的问题前,确保已完成必要的工具调用。
    """
    
  • 验证工具加载状态
    创建Agent后,打印工具列表确认自定义工具是否被正确加载:

    print([tool.name for tool in agent.tools])
    

    如果自定义工具未出现在列表中,检查工具定义是否符合BaseTool规范。

  • 通过日志排查调用问题
    开启verbose=True后,观察控制台输出:

    • 若Agent未调用自定义工具,说明工具的description不够精准,或prompt未明确引导,需优化描述或调整prompt内容
    • 若调用工具时报错,检查工具的输入参数是否与Agent传递的参数匹配

内容的提问来源于stack exchange,提问作者lauther27

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 09:57:24