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

能否将StructuredTool与任意Agent(如ZeroShotAgent)配合使用?

解决LangChain中StructuredTool与Agent的兼容性问题

针对你遇到的StructuredTool无法直接传入ZeroShotAgent等接受Tool[]类型参数的Agent的问题,有以下几种可行方案:

1. 类型断言快速绕过类型检查

如果你的StructuredTool在运行时已经具备Tool的核心接口(name、description、call方法),可以直接用TypeScript类型断言强制转换,快速解决类型不兼容问题:

export class SupabaseToolkit extends Toolkit {
    tools: Tool[];
    cli: SupabaseClient
    dialect = "supabase"

    constructor(cli: SupabaseClient) {
        super()
        this.cli = cli
        this.tools = [
            new QuerySupabaseTool(cli),
            new ListTablesSupabaseTool(cli),
            new ListFieldsSupabaseTool(cli),
            // 类型断言转换
            new QuerySpecificFieldSupabaseTool(cli) as Tool,
        ]
    }
}

2. 手动包装StructuredTool为标准Tool

如果需要更严谨的适配,可通过Tool.fromFunction将结构化工具的逻辑包装为标准Tool,同时处理输入字符串到结构化参数的解析:

import { Tool } from "langchain/tools";
import { StructuredTool } from "langchain/tools/structured";

// 定义通用包装函数
function wrapStructuredTool(structuredTool: StructuredTool): Tool {
  return Tool.fromFunction({
    name: structuredTool.name,
    description: structuredTool.description,
    func: async (input: string) => {
      // 将Agent传递的字符串输入解析为结构化参数(通常为JSON格式)
      const params = JSON.parse(input);
      return structuredTool.call(params);
    },
  });
}

export class SupabaseToolkit extends Toolkit {
    tools: Tool[];
    cli: SupabaseClient
    dialect = "supabase"

    constructor(cli: SupabaseClient) {
        super()
        this.cli = cli
        this.tools = [
            new QuerySupabaseTool(cli),
            new ListTablesSupabaseTool(cli),
            new ListFieldsSupabaseTool(cli),
            // 使用包装后的工具
            wrapStructuredTool(new QuerySpecificFieldSupabaseTool(cli)),
        ]
    }
}

3. 更换为原生支持结构化工具的Agent

ZeroShotAgent这类传统Agent设计更偏向单输入工具,推荐换用OpenAIFunctionsAgent这类原生支持多输入结构化工具的Agent类型,无需额外转换即可直接使用StructuredTool:

import { OpenAIFunctionsAgent } from "langchain/agents";
import { ChatOpenAI } from "langchain/chat_models/openai";

// 初始化大模型
const llm = new ChatOpenAI({ modelName: "gpt-3.5-turbo-16k" });
// 初始化你的Toolkit
const toolkit = new SupabaseToolkit(supabaseClient);
// 创建支持结构化工具的Agent
const agent = OpenAIFunctionsAgent.fromLLMAndTools(llm, toolkit.tools);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:12:15