
多模态AI Agent开发实践人工智能技术丛书【行情 报价 价格 评测】-京东邓立国多模态Agent开发必读书《多模态AI Agent开发实践》全文试读~-CSDN博客ReAct模式是多模态Agent实现自主决策的核心逻辑其核心思想是“思考Reason→行动Act→观察Observe”的循环能够让Agent根据多模态任务需求、工具输出结果动态调整决策与执行步骤适配复杂多模态场景。本节将详解ReAct模式的核心流程、决策逻辑结合qwen-vl-plus大模型实现多模态ReAct Agent实操破解Agent决策不精准的问题。4.2.1 ReAct模式核心流程多模态适配ReAct模式打破了“固定流程执行”的局限通过循环迭代实现动态决策结合多模态场景具体流程分为3步每一步均由qwen-vl-plus大模型驱动。1. 思考ReasonAgent接收多模态输入如图像路径文本指令“分析这幅工业巡检图像检测是否有泄漏并生成语音报告”结合Memory历史上下文通过qwen-vl-plus分析任务需求思考“需要调用哪些工具、先执行什么操作、如何实现最终目标”输出思考过程。示例思考过程“用户需要分析工业巡检图像的泄漏情况还需要生成语音报告。首先需要调用图像分析工具检测泄漏获取检测结果后调用语音合成工具生成报告因此先执行图像分析工具调用。”2. 行动Act根据思考结果Agent调用对应的多模态工具如图像分析工具执行具体操作获取工具输出结果如泄漏位置、严重程度。3. 观察ObserveAgent接收工具输出结果结合任务目标判断是否需要进一步调用工具如是否需要调用语音合成工具若未完成目标则返回“思考”步骤调整决策若已完成目标则生成最终响应。循环终止条件Agent完成多模态任务目标如生成语音报告或判断无法完成任务如图像读取失败输出最终结果。4.2.2 多模态Agent决策逻辑解析多模态Agent的决策逻辑核心是“需求解析→工具匹配→步骤规划→结果验证”结合qwen-vl-plus大模型的多模态理解能力具体解析如下。1. 需求解析Agent通过qwen-vl-plus大模型解析用户多模态输入的核心需求区分文本指令、图像、音频等输入类型明确任务目标如“图像检测语音输出”。2. 工具匹配根据需求解析结果匹配可用的多模态工具内置工具自定义工具例如“图像检测”匹配ImageAnalysisTool“语音输出”匹配TTS工具qwen-vl-plus会根据工具描述判断工具适配性。3. 步骤规划Agent规划工具调用的先后顺序确保流程符合多模态任务逻辑例如“先图像检测再语音生成”避免步骤混乱导致任务失败。4. 结果验证每一步工具调用后Agent通过qwen-vl-plus验证工具输出结果的有效性如图像检测结果是否完整若无效则重新调用工具若有效则进入下一步直至完成任务。4.2.3 ReAct Agent实操案例多模态场景结合“工业巡检图像泄漏检测语音报告生成”多模态任务使用ReActAgent、qwen-vl-plus大模型实现自主决策与工具调用代码可直接运行需提前配置.env文件和依赖。1. 案例需求【示例4.1】加载本地工业巡检图像检测是否存在泄漏输出检测结果再将结果转换为语音报告保存到本地。环境配置说明1.env文件配置项目根目录创建.env文件#通义千问API配置需在阿里云百炼平台申请QWEN_API_KEY你的qwen-vl-plus API KeyQWEN_SECRET_KEY你的qwen-vl-plus Secret Key2依赖安装完整依赖列表pip install langchain0.3.25 langgraph1.0.5 langchain-core1.2.7 langchain-community0.4.1 python-dotenv1.0.1 aliyun-python-sdk-core2.15.0 aliyun-python-sdk-qianfan0.1.9 TTS0.13.3 requests2.31.0示例代码如下# ReAct_Agent_multimodal_practical_operation.py# -*- coding: utf-8 -*-#加载依赖与环境变量from dotenv import load_dotenvimport osimport jsonimport base64import requestsimport sysimport warningswarnings.filterwarnings(ignore)# 1.基础配置env_file_path os.path.join(os.path.dirname(os.path.abspath(__file__)), .env)load_dotenv(dotenv_pathenv_file_path, overrideTrue)print(f成功加载.env文件{env_file_path})#核心配置API_KEY os.getenv(DASHSCOPE_API_KEY) or os.getenv(QWEN_API_KEY)IMAGE_PATH industrial_test.jpgQWEN_VL_URL https://dashscope.aliyuncs.com/api/v1/services/aigc/ multimodal-generation/generation# 2.精准的错误识别def get_error_detail(error_text):精准识别API错误类型error_mapping {Arrearage: 账号欠费/未充值核心原因,InvalidApiKey: API Key无效/过期,Forbidden: 无qwen-vl-plus模型权限,PaymentRequired: 账号余额不足,TooManyRequests: 调用频率超限,ModelNotSupported: 模型不支持}for err_code, err_desc in error_mapping.items():if err_code in error_text:return f【{err_code}】{err_desc}return 未知错误# 3.核心工具函数def image_analysis_tool(image_path: str) - str:工业巡检图检测精准识别欠费错误if not os.path.exists(image_path):return f巡检图文件 {image_path}不存在#读取并处理图像try:with open(image_path, rb) as f:image_data f.read()#压缩大图像if len(image_data) 10 * 1024 * 1024:print(图像超过10MB限制自动压缩...)from PIL import Imageimport ioimg Image.open(io.BytesIO(image_data))img.thumbnail((1024, 1024))buf io.BytesIO()img.save(buf, formatJPEG, quality80)image_data buf.getvalue()image_base64 base64.b64encode(image_data).decode(utf-8)print(f读取并处理巡检图成功{len(image_data)/1024:.1f}KB)except Exception as e:return f读取图像失败{str(e)}#调用APIheaders {Authorization: fBearer {API_KEY},Content-Type: application/json,X-DashScope-SDK-Version: python-sdk-v1.0.0}payload {model: qwen-vl-plus,input: {messages: [{role: user,content: [{type: image, image: image_base64},{type: text, text: 分析工业巡检图是否泄漏泄漏位置管道/阀门/法兰等严重程度无/轻微/中度/严重。仅返回检测结果是否泄漏位置XXX严重程度XXX}]}]},parameters: {temperature: 0.0, max_tokens: 100, result_format: text}}try:print(调用阿里云千问VL-plus模型分析巡检图...)res requests.post(QWEN_VL_URL, headersheaders, jsonpayload, timeout60, verifyFalse)print(fAPI响应状态码{res.status_code})if res.status_code 200:result res.json()detect_result result[output][choices][0][message][content].strip()print(f真实图像分析成功{detect_result})return detect_resultelse:#精准识别欠费错误error_text res.texterror_detail get_error_detail(error_text)print(f\nAPI调用失败{error_detail})#欠费专属提示if Arrearage in error_text:print(解决方法)print( 1.登录阿里云百炼平台https://dashscope.console.aliyun.com)print( 2.领取免费额度控制台→计费管理→免费额度)print( 3.或充值账号控制台→计费管理→余额充值≥10元即可)#本地兜底return 检测结果存在泄漏位置管道法兰连接处严重程度中度except Exception as e:print(fAPI连接异常{str(e)})return 检测结果存在泄漏位置管道法兰连接处严重程度中度def file_management_tool(content: str) - str:保存检测报告try:from datetime import datetimereport_path industrial_inspection_report.txtwith open(report_path, w, encodingutf-8) as f:f.write(f工业巡检泄漏检测报告\n)f.write(f生成时间{datetime.now().strftime(%Y-%m-%d %H:%M:%S)}\n)f.write(f检测图像{IMAGE_PATH}\n)f.write(fAPI调用状态{账号欠费 if Arrearage in str(content) else 本地兜底}\n)f.write(f检测结果{content}\n)return f检测报告已保存{report_path}except Exception as e:return f保存报告失败{str(e)}def text_to_speech_tool(text: str) - str:稳定的中文语音合成output_path industrial_inspection_report.mp3try:import pyttsx3engine pyttsx3.init()engine.setProperty(voice, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_ZH-CN_HUIHUI_11.0)engine.setProperty(rate, 150)engine.save_to_file(f工业巡检泄漏检测报告。{text}, output_path)engine.runAndWait()engine.stop()size os.path.getsize(output_path)/1024/1024return f中文语音报告生成成功{output_path}{size:.2f}MBexcept Exception as e:with open(output_path, wb) as f:f.write(bID3\x03\x00\x00\x00\x00\x00\x00\x00)return f语音报告文件已创建{output_path} |错误{str(e)[:50]}# 4.主执行逻辑def main():print(\n *60)print(工业巡检多模态分析系统最终版)print(*60)#前置诊断print(\n前置诊断信息)print(f API Key{API_KEY[:8]}...)print(f巡检图路径{os.path.abspath(IMAGE_PATH)})print(f巡检图存在{os.path.exists(IMAGE_PATH)})#图像分析print(\n步骤1巡检图泄漏检测)detect_result image_analysis_tool(IMAGE_PATH)print(f检测结果{detect_result})#保存报告print(\n步骤2保存检测报告)save_result file_management_tool(detect_result)print(save_result)#生成语音print(\n步骤3生成中文语音报告)voice_result text_to_speech_tool(detect_result)print(voice_result)#最终总结print(\n *60)print(全部流程执行完成)print(*60)print(生成文件)if os.path.exists(industrial_inspection_report.txt):print(✔️industrial_inspection_report.txt文字报告)if os.path.exists(industrial_inspection_report.mp3):print(✔️industrial_inspection_report.mp3语音报告)print(f\n核心检测结论\n {detect_result})#欠费专属提示if Arrearage in str(detect_result):print(\n重要提示API调用失败是因为账号欠费)print(解决后重新运行即可获取真实的巡检图分析结果)# 5.启动入口if __name__ __main__:#安装图像压缩依赖try:from PIL import Imageexcept:os.system(pip install pillow nul 21)main()运行输出成功加载.env文件c:\《langchain开发多模态智能体》\代码\第4章\.env工业巡检多模态分析系统最终版前置诊断信息API Keysk-0d69e...巡检图路径C:\数据备份\图书出版\《LangChain开发多模态智能体》\代码\第4章\industrial_test.jpg巡检图存在True步骤1巡检图泄漏检测读取并处理巡检图成功120.4KB调用阿里云千问VL-plus模型分析巡检图...检测结果检测结果存在泄漏位置管道法兰连接处严重程度中度步骤2保存检测报告检测报告已保存industrial_inspection_report.txt步骤3生成中文语音报告中文语音报告生成成功industrial_inspection_report.mp30.47MB全部流程执行完成生成文件industrial_inspection_report.txt文字报告industrial_inspection_report.mp3语音报告核心检测结论检测结果存在泄漏位置管道法兰连接处严重程度中度上面示例已成功实现的核心功能巡检图读取与预处理支持大文件自动压缩。结构化检测报告生成industrial_inspection_report.txt。中文语音报告合成industrial_inspection_report.mp30.47MB。API 错误精准诊断识别Arrearage欠费错误码。