在 ADK Python 中集成 Langchain YouTubeSearchTool 构建视频搜索 Agent

在 ADK Python 中集成 Langchain YouTubeSearchTool 构建视频搜索 Agent 在 ADK Python 中集成 Langchain YouTubeSearchTool 构建视频搜索 Agent【免费下载链接】adk-pythonAn open-source, code-first Python toolkit for building, evaluating, and deploying sophisticated AI agents with flexibility and control.项目地址: https://gitcode.com/GitHub_Trending/ad/adk-python本文以 adk-python 仓库中的langchain_youtube_search_agent示例为主线讲解如何把 Langchain 社区生态的YouTubeSearchTool无缝接入 ADKAgent Development Kit的LlmAgent使其具备询问歌手名与搜索数量、自动调用工具检索 YouTube 视频的能力。读完本文你将掌握 Langchain 工具在 ADK 中的标准接入方式、LangchainTool适配器的工作原理并能把这个模式复用到 DuckDuckGo 搜索等其它 Langchain 工具上。示例概览一个可运行的最小 Agent示例位于 contributing/samples/integrations/langchain_youtube_search_agent目录结构如下contributing/samples/integrations/langchain_youtube_search_agent/ ├── README.md # 示例说明 ├── __init__.py # 包入口导入 agent 模块 ├── agent.py # Agent 定义与工具接线 └── requirements.txt # 依赖清单从功能上看这个 Agent 承担的是YouTube 视频搜索助手它先向用户询问歌手singer名字和期望搜索的视频数量然后调用YouTubeSearchTool完成检索最终把结果写入名为youtube_search_output的输出键。整个示例只有几十行代码却完整展示了 ADK 集成第三方工具生态的典型链路实例化一个 Langchain 工具YouTubeSearchTool用LangchainTool适配器把它包装成 ADK 可识别的工具把包装后的工具挂载到LlmAgent.tools上交给模型按需调用。环境准备与依赖安装官方 README 给出的依赖安装命令为uv pip install youtube_search对应的依赖清单见 contributing/samples/integrations/langchain_youtube_search_agent/requirements.txt其中只声明了一个运行时依赖youtube_search即YouTubeSearchTool所在的第三方包。需要注意的是LangchainTool适配器本身位于 ADK 的google.adk.integrations.langchain模块使用前还需确保环境中安装了 ADK 主包及其 Langchain 集成相关依赖仓库内约束文件如 constraints-3.12.txt可以帮你锁定兼容的版本组合。若使用 uv 管理环境直接在项目根目录执行uv pip install youtube_search即可完成示例依赖的补充。代码拆解agent.py 全流程完整的示例代码见 contributing/samples/integrations/langchain_youtube_search_agent/agent.py下面按步骤逐段解读。第一步导入所需模块from google.adk.agents.llm_agent import LlmAgent from google.adk.integrations.langchain import LangchainTool from langchain_community.tools.youtube.search import YouTubeSearchTool三个导入分别对应三层职责LlmAgentADK 的 LLM Agent 基座负责对话调度与工具调用LangchainToolADK 提供的 Langchain 工具适配器位于 src/google/adk/integrations/langchain/langchain_tool.py把 Langchain 工具转换为 ADK / Google GenAI 函数调用格式YouTubeSearchToolLangchain 社区提供的 YouTube 搜索工具。第二步实例化并包装工具# Instantiate the tool langchain_yt_tool YouTubeSearchTool() # Wrap the tool in the LangchainTool class from ADK adk_yt_tool LangchainTool( toollangchain_yt_tool, )LangchainTool构造函数接收一个 Langchain 工具实例。从源码看它对传入工具有明确的类型校验langchain_tool.py传入对象必须继承langchain_core.tools.BaseTool含StructuredTool或者拥有run/_run方法否则会抛出ValueError提示Tool must be a Langchain tool, have a run or _run method.。包装时适配器会按优先级确定工具的名称与描述显式传入的name/description参数优先其次取 Langchain 工具自带的name/description最后才回落到FunctionTool的默认值。YouTubeSearchTool自带名称与描述因此示例中直接透传即可。第三步组装 LlmAgentroot_agent LlmAgent( nameyoutube_search_agent, instruction Ask customer to provide singer name, and the number of videos to search. , descriptionHelp customer to search for a video on Youtube., tools[adk_yt_tool], output_keyyoutube_search_output, )关键配置项说明nameAgent 标识建议使用语义化名称这里是youtube_search_agentinstruction系统提示词明确告诉模型交互流程——先向客户索取歌手名与视频数量再触发工具搜索descriptionAgent 的功能描述供上层路由或其它 Agent 识别调用场景tools挂载的工具列表将包装后的adk_yt_tool注册给模型output_keyyoutube_search_output声明该 Agent 的输出键名便于在流程中读取搜索结果。深度原理LangchainTool 适配器如何工作LangchainTool继承自 ADK 的FunctionTool其核心职责是把 Langchain 工具翻译成 Google GenAI 的函数调用声明。理解这一点就能明白为什么任意符合规范的 Langchain 工具都可以一行接入 ADK。同步与异步执行LangchainTool在初始化时根据工具类型选择底层调用函数langchain_tool.py对StructuredTool优先取func若为异步工具且func为空则回退到coroutine对其它带run/_run的工具取对应的_run或run方法。这一点在 tests/unittests/integrations/langchain/test_langchain_tool.py 中有直接验证test_raw_async_function_works与test_raw_sync_function_works分别用异步、同步StructuredTool包装后调用run_async均返回正确结果。同时Langchain 工具参数中常见的run_manager会被自动加入忽略列表避免干扰声明构建。函数声明Schema生成调用时模型需要知道工具的入参结构。LangchainTool覆写了_get_declarationlangchain_tool.py若包装的是LangchainBaseTool且带有args_schema则复用其 Pydantic Schema通过_automatic_function_calling_util.build_function_declaration_for_langchainsrc/google/adk/tools/_automatic_function_calling_util.py把属性结构转换为FunctionDeclaration.parameters否则走FunctionTool的默认声明逻辑并覆写name与description因为 Langchain 原始函数名通常是.run描述也可能不满足业务需要。Schema 转换的内部实现build_function_declaration_util会把 Pydantic 类型映射为 GenAI Schema 类型并提取required字段最终构造出模型的工具声明。return_direct 与结果摘要控制部分 Langchain 工具声明了return_directTrue表示其结果应直接返回给用户、不再交给模型二次摘要。LangchainTool会读取该标志并在run_async中通过tool_context.actions.skip_summarization True跳过摘要langchain_tool.py。测试用例也覆盖了边界情况当工具因缺少参数而返回error时结果必须保持可摘要让模型看到错误后自行重试见test_return_direct_leaves_skip_summarization_on_error。配置化接入通过 YAML 声明 Langchain 工具除了代码直接构造LangchainTool还支持通过配置声明方式创建。其配套的LangchainToolConfiglangchain_tool.py包含三个字段字段类型说明toolstr必填Langchain 工具实例的完全限定路径fully qualified pathnamestr默认工具名称覆盖descriptionstr默认工具描述覆盖LangchainTool.from_config会解析配置中的完全限定名得到工具实例再走与代码构造相同的包装流程。这意味着在声明式 Agent 配置中也能直接引用任意 Langchain 工具适合需要集中管理工具清单的团队。运行与验证示例包通过init.py 导出agent模块因此在 ADK Runner 中可以直接把root_agent作为入口 Agent 运行。仓库中也有大量LlmAgent 工具的端到端测试可作为验证参考例如 tests/integration/test_tools.py 与 tests/integration/test_single_agent.py它们展示了如何用测试 Runner 驱动 Agent 并断言工具调用行为。启动前请确认已安装 ADK 主包、langchain-community与youtube_search依赖并按需配置好 LLM 模型凭据。运行后对话交互大致为Agent 询问歌手名与视频数量 → 模型触发YouTubeSearchTool→ 返回搜索结果 → 结果写入youtube_search_output。扩展把同样的模式用于其它 Langchain 工具LangchainTool适配器的设计是通用的不限于 YouTube 搜索。以适配器文档中的示例为例DuckDuckGo 搜索工具同样可以两行接入from langchain.tools import DuckDuckGoSearchTool from google.adk.integrations.langchain import LangchainTool search_tool DuckDuckGoSearchTool() wrapped_tool LangchainTool(search_tool)随后把wrapped_tool放进任意LlmAgent的tools列表即可。凡是符合继承BaseTool或拥有run/_run方法这一契约的 Langchain 工具都能复用本示例的接线方式这正是 ADK 保持开放生态的关键设计。【免费下载链接】adk-pythonAn open-source, code-first Python toolkit for building, evaluating, and deploying sophisticated AI agents with flexibility and control.项目地址: https://gitcode.com/GitHub_Trending/ad/adk-python创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考