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种常用内置工具,结合实操示例。
(1)ImageAnalysisTool(图像分析工具):基于OpenCV、大模型,实现图像识别、图像标注、图像特征提取等功能,适用于多模态图像分析任务,调用示例:
from langchain.tools import ImageAnalysisTool;
tool = ImageAnalysisTool(model="gpt-4o");
result = tool.run({"image_path": "test.jpg", "task": "识别图像中的异常,输出异常位置和类型"})
(2)AudioTranscriptionTool(音频转写工具):基于Whisper,实现音频转写为文本,支持多语言转写,适用于语音交互任务,调用示例:
from langchain.tools import AudioTranscriptionTool;
tool = AudioTranscriptionTool(model="base");
result = tool.run({"audio_path": "test.mp3", "language": "zh"})
(3)VectorStoreQueryTool(向量存储查询工具):用于查询VectorStore中的多模态向量数据,实现相似性检索,适用于多模态数据检索任务,调用示例:
from langchain.tools import VectorStoreQueryTool;
from langchain.vectorstores import Chroma;
from langchain.embeddings import OpenAIEmbeddings;
vector_store = Chroma(embedding_function=OpenAIEmbeddings());
tool = VectorStoreQueryTool(vectorstore=vector_store);
result = tool.run({"query": "管道泄漏图像", "k": 2})
(4)FileManagementTool(文件管理工具):用于管理多模态文件(读取、写入、删除),适用于多模态数据加载与结果保存,调用示例:
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 ChatOpenAI
llm = ChatOpenAI(model="gpt-4o", temperature=0.7)
#定义Prompt模板,引导模型调用自定义工具
prompt_template = PromptTemplate(template="请调用工业巡检图像故障检测工具,分析图像{image_path},检测{fault_type}故障,输出详细的检测结果。", input_variables=["image_path", "fault_type"])
#串联Chain与自定义工具(后续章节将结合Agent实现自主调用)
llm_chain = LLMChain(prompt=prompt_template, llm=llm)
#手动调用自定义工具
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”,实现多工具协同完成复杂多模态任务。
