news 2026/7/9 3:25:28

Tools工具调用:连接外部能力

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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”,实现多工具协同完成复杂多模态任务。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/9 3:25:00

长期投流素材容易重复,用AI批量生成新分镜能防限流吗

一、发现问题:长期投流素材高度雷同,频繁触发平台限流掉量长期深耕抖音、千川、小红书短视频投流的商家和运营团队,几乎都会遇到同一个顽固问题:素材越投越重复,流量越投越差。很多团队前期积累了大量实拍素材、直播切…

作者头像 李华
网站建设 2026/7/9 3:24:47

基于51/STM32单片机宠物自动喂食器设计 定时提醒 喂食系统32(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

基于51/STM32单片机宠物自动喂食器设计 定时提醒 喂食系统32(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_ 版本四:喂食声光提醒5个定时自动/手动模式LCD1602液晶显示年,月,日,十,分…

作者头像 李华
网站建设 2026/7/9 3:23:15

如何利用内部开发者平台(IDP)实现开发者自助服务?

摘要: 内部开发者平台,即 IDP,是一种面向开发团队的自助服务平台,能够帮助企业统一环境管理、CI/CD、应用配置、基础设施编排、部署管理和访问控制。通过建设内部开发者平台,组织可以降低开发团队认知负荷,…

作者头像 李华
网站建设 2026/7/9 3:21:28

2026年新手必看!生辰八字排盘应用推荐:真太阳时、AI提示词和命盘复盘怎么选?

很多人搜索“生辰八字排盘应用推荐”,真正想解决的不是简单排出一个盘,而是希望出生信息填对、四柱排得清楚,后面还能看懂十神、五行和大运流年。 生辰八字排盘和普通查日期不一样。它会涉及出生日期、出生时间、出生城市、真太阳时、早晚子…

作者头像 李华