当前位置: 首页 > news >正文

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”,实现多工具协同完成复杂多模态任务。

http://www.cnnetsun.cn/news/3233747.html

相关文章:

  • 基于UKF+SRCKF分布式驱动车辆偏角、速度估计车辆状态估计、横摆角速度,质心侧偏角估计联合仿真
  • 长期投流素材容易重复,用AI批量生成新分镜能防限流吗
  • 基于51/STM32单片机宠物自动喂食器设计 定时提醒 喂食系统32(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • 如何利用内部开发者平台(IDP)实现开发者自助服务?
  • AAAI 2026 | 蚂蚁虽小也能搬山:西南科大提出 AIDFusion 让轻量融合网络不再 “躺平”
  • 2026年新手必看!生辰八字排盘应用推荐:真太阳时、AI提示词和命盘复盘怎么选?
  • HTML5+CSS3 个人主页实战:5个页面布局与JS轮播特效实现
  • npm 安全审计与依赖风险排查:5步构建供应链安全防线
  • AnythingLLM 与 Ollama 集成:3种本地LLM模型性能与成本对比评测
  • 终极指南:如何5分钟搭建网易云音乐永久直链解析API服务器
  • 高精度ADC与ARM MCU构建的数据采集系统设计
  • 5类概念漂移检测方法对比:从统计检验到深度学习模型的适用场景与性能权衡
  • ncmdumpGUI:3步解锁网易云NCM加密音乐,让音乐随处播放
  • LTC1864与PIC32MX的高精度ADC系统设计与优化
  • 汽车电子辅助电机系统解析:从 EPS 到 EPB 的 5 种底盘车身电机控制原理
  • “肥料袋定制攻略:盛军塑业如何破解农资包装痛点“
  • Python 的基本数据类型及其转换 整数的进制转换
  • Python入门必看!数据类型+进制转换+类型函数,这一篇就够了!
  • AIGC Agent技术架构解析与开发实战:从原理到企业级应用
  • Git文件“消失“了?别慌,这篇指南帮你捞回来
  • 雀魂牌谱分析终极指南:如何通过数据驱动提升麻将水平
  • 曲辕RPA-停止监听网页请求
  • AURIX TC4xx支持AB SWAP硬件升级
  • 动态规划完整讲解
  • 导师反馈“AI痕迹明显”,有哪些真正实测靠谱的的降AI率平台推荐?
  • Code Combat | 极客战记 攻略【Kithgard地牢篇 25/42】迷失在书库中
  • 国产球拍质检大揭秘:千万企业注意的冲击试验机密
  • 设计模式工厂模式解析
  • Vite自定义插件开发:把重复的构建步骤自动化完整指南
  • 利用协调服务实现分布式应用配置统一管理