Tools工具调用:连接外部能力
《多模态AI Agent开发实践》1~6章试读-CSDN博客LangChain的Tools组件是实现多模态智能体“扩展外部能力”的核心通过工具调用智能体可连接图像处理、音频处理、数据库查询、API调用等外部工具突破大模型自身的能力限制。本节将详解Tools组件的核心作用、内置工具、自定义工具开发与集成结合多模态案例实现外部工具与LangChain的联动为后续Agent自主调用工具奠定基础。3.6.1 Tools组件核心作用与设计逻辑1. 核心作用解决大模型“能力单一”的问题通过调用外部工具让多模态智能体具备多模态数据处理、外部资源访问、复杂任务执行的能力。例如大模型无法直接读取本地图像、转写音频通过调用OpenCV、Whisper等工具实现图像读取、音频转写再结合大模型推理完成多模态任务通过调用向量数据库工具实现多模态数据的高效检索。2. 设计逻辑Tools组件通过“工具定义→工具注册→工具调用”的流程实现外部能力的集成1工具定义明确工具的功能、输入参数、输出格式。2工具注册将工具注册到LangChain的工具库中让Chain或Agent能够识别。3工具调用通过Chain或Agent根据任务需求自主或手动调用工具获取工具输出再结合大模型推理最后完成任务。3.6.2 LangChain内置多模态工具常用LangChain内置了多种适配多模态场景的工具无须自定义可直接调用重点讲解4种常用内置工具结合实操示例。1ImageAnalysisTool图像分析工具基于OpenCV、大模型实现图像识别、图像标注、图像特征提取等功能适用于多模态图像分析任务调用示例from langchain.tools import ImageAnalysisTool;tool ImageAnalysisTool(modelgpt-4o);result tool.run({image_path: test.jpg, task: 识别图像中的异常输出异常位置和类型})2AudioTranscriptionTool音频转写工具基于Whisper实现音频转写为文本支持多语言转写适用于语音交互任务调用示例from langchain.tools import AudioTranscriptionTool;tool AudioTranscriptionTool(modelbase);result tool.run({audio_path: test.mp3, language: zh})3VectorStoreQueryTool向量存储查询工具用于查询VectorStore中的多模态向量数据实现相似性检索适用于多模态数据检索任务调用示例from langchain.tools import VectorStoreQueryTool;from langchain.vectorstores import Chroma;from langchain.embeddings import OpenAIEmbeddings;vector_store Chroma(embedding_functionOpenAIEmbeddings());tool VectorStoreQueryTool(vectorstorevector_store);result tool.run({query: 管道泄漏图像, k: 2})4FileManagementTool文件管理工具用于管理多模态文件读取、写入、删除适用于多模态数据加载与结果保存调用示例from langchain.tools import FileManagementTool;tool FileManagementTool();tool.run({action: write, file_path: result.txt, content: 图像分析结果管道存在轻微泄漏})3.6.3 自定义Tool开发与集成多模态专属LangChain内置工具无法满足所有多模态场景需求如自定义工业巡检图像故障检测、特定格式音频处理需开发自定义Tool。本节将详解自定义Tool的开发流程、集成方法并分析一个多模态示例自定义工业巡检图像故障检测工具1. 自定义Tool开发核心步骤1导入必要模块。2定义工具输入参数通过Pydantic模型。3实现工具核心功能如自定义图像故障检测。4定义工具描述用于Agent自主决策时识别工具功能。5封装Tool对象。2. 代码示例自定义工业巡检图像故障检测工具# 1.导入模块from langchain.tools import BaseTool;from pydantic import BaseModel, Field;import cv2# 2.定义工具输入参数class ImageFaultDetectionInput(BaseModel):image_path: str Field(description工业巡检图像的本地路径格式为jpg/png)fault_type: str Field(description需要检测的故障类型如泄漏、破损、变形)# 3.实现自定义工具class IndustrialImageFaultDetectionTool(BaseTool):name industrial_image_fault_detection #工具名称唯一description 用于工业巡检图像的故障检测输入图像路径和故障类型输出故障检测结果含异常位置、严重程度支持泄漏、破损、变形等故障类型 #工具描述args_schema ImageFaultDetectionInput #输入参数模型def _run(self, image_path: str, fault_type: str) - str:#核心功能结合OpenCV实现故障检测简化示例实际可结合深度学习模型优化img cv2.imread(image_path)if img is None:return 图像读取失败请检查图像路径是否正确#模拟故障检测逻辑实际可替换为真实的故障检测算法if fault_type 泄漏:return f工业巡检图像故障检测结果存在{fault_type}故障异常位置图像左侧管道接口严重程度轻微建议立即检查else:return f工业巡检图像故障检测结果未检测到{fault_type}故障图像正常def _arun(self, image_path: str, fault_type: str):#异步方法可选用于异步调用工具raise NotImplementedError(异步方法未实现)# 4.封装Tool对象custom_tool IndustrialImageFaultDetectionTool()3. 自定义Tool集成与调用将自定义Tool集成到LangChain中可通过Chain或Agent调用示例如下结合LLMChain调用from langchain.chains import LLMChain;from langchain.prompts import PromptTemplate;from langchain_openai import ChatOpenAIllm ChatOpenAI(modelgpt-4o, temperature0.7)#定义Prompt模板引导模型调用自定义工具prompt_template PromptTemplate(template请调用工业巡检图像故障检测工具分析图像{image_path}检测{fault_type}故障输出详细的检测结果。, input_variables[image_path, fault_type])#串联Chain与自定义工具后续章节将结合Agent实现自主调用llm_chain LLMChain(promptprompt_template, llmllm)#手动调用自定义工具tool_result custom_tool.run({image_path: test.jpg, fault_type: 泄漏})print(自定义工具调用结果, tool_result)3.6.4 Tools工具调用注意事项1工具描述规范自定义Tool时需清晰、准确描述工具的功能、输入参数、输出格式便于后续Agent自主决策时判断是否需要调用该工具。2输入输出适配确保工具的输入参数格式与Chain/Agent的输出格式一致避免格式不兼容导致调用失败。例如工具要求输入图像路径为字符串Chain需输出字符串格式的路径。3异常处理在工具开发中加入异常处理逻辑如图像读取失败、音频格式错误避免工具调用崩溃提升多模态智能体的稳定性。4多工具协同多模态任务中可将多个工具内置工具自定义工具组合使用例如“ImageAnalysisTool→VectorStoreQueryTool→AudioTranscriptionTool”实现多工具协同完成复杂多模态任务。