多模态AIAgent开发实践 邓立国、周驰岷、邓淇等 清华大学出版社【行情 报价 价格 评测】-京东
《多模态AI Agent开发实践》1~6章试读-CSDN博客
LangChain与通义千问Qwen-VL-Plus的集成方法是通过ChatOpenAI类配合阿里云DashScope兼容接口(compatible-mode/v1)实现API调用,分别使用LangChain的ChatPromptTemplate构建多模态消息、PydanticOutputParser实现结构化输出解析,完成端到端的多模态推理任务。本节将以“工业巡检图片异常检测”为实战场景,演示完整集成流程。
(1)本地图片预处理:通过Base64编码将图片转换为data:image/jpeg;base64,...内联格式,避免HTTP多部分传输兼容性问题,显著降低请求超时概率。
(2)结构化输出约束:基于Pydantic模型定义检测字段(异常类型、位置、处理建议),结合 OutputParser 自动解析JSON响应,确保结果可直接对接业务系统。
(3)兼容模式配置:正确设置base_url="https://dashscope.aliyuncs.com/compatible-mode/v1" 与DASHSCOPE_API_KEY,复用LangChain原生OpenAI接口规范,降低迁移成本。
(4)鲁棒性增强:配置request_timeout=180适配多模态推理耗时,结合temperature=0.3控制输出稳定性,满足工业场景对确定性的要求。
通过上述设计,开发者可以快速构建“图片输入→多模态理解→结构化结果输出”的自动化巡检流水线,同时为后续扩展(如批量处理、异步调用、领域微调)预留标准化接口。
【示例7.1】本示例通过LangChain集成Qwen-VL-Plus,加载工业巡检图片,检测设备异常,输出结构化分析结果(异常类型、异常位置、处理建议)。
1. 创建.env配置文件
#通义千问qwen-vl-plus配置
DASHSCOPE_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx
DASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
QWEN_VL_MODEL=qwen-vl-plus
# GPT-4V备用配置(可选)
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
OPENAI_BASE_URL=https://api.openai.com/v1
2. 代码实现
# Practical_Integration_Case_of_LangChain_and_qwen-vl-plus.py
# -*- coding: utf-8 -*-
# LangChain集成qwen-vl-plus终极版(适配固定依赖·本地图片·不超时)
from dotenv import load_dotenv
import os
import base64
from langchain_community.chat_models import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import PydanticOutputParser
from pydantic import BaseModel, Field
#加载环境变量
load_dotenv()
# =====================本地图片转Base64(必须,解决超时核心)=====================
def encode_image(image_path):
with open(image_path, "rb") as f:
return base64.b64encode(f.read()).decode("utf-8")
#你的本地图片(直接放在同级目录)
image_path = "industrial_test.jpg"
base64_image = encode_image(image_path)
image_url = f"data:image/jpeg;base64,{base64_image}"
# =====================结构化输出(低版本兼容)=====================
class IndustrialResult(BaseModel):
scene_description: str = Field(description="场景描述")
abnormal_type: str = Field(description="异常类型")
abnormal_position: str = Field(description="异常位置")
processing_suggestion: str = Field(description="处理建议")
parser = PydanticOutputParser(pydantic_object=IndustrialResult)
format_instructions = parser.get_format_instructions()
escaped_format = format_instructions.replace("{", "{{").replace("}", "}}")
# ===================== qwen-vl-plus官方兼容配置(最稳,不超时)=====================
llm = ChatOpenAI(
model="qwen-vl-plus",
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
temperature=0.3,
max_tokens=1500,
request_timeout=180, #超长时间
)
# =====================多模态Prompt =====================
prompt = ChatPromptTemplate.from_messages([
("user", [
{"type": "image_url", "image_url": {"url": image_url}},
f"""你是专业工业巡检分析师。严格按以下格式返回:
{escaped_format}
"""
])
])
# =====================运行=====================
chain = prompt | llm | parser
if __name__ == "__main__":
print("✅本地图片工业巡检启动...\n")
try:
result = chain.invoke({})
print("="*60)
print("📊检测结果")
print("="*60)
print(f"场景描述:{result.scene_description}")
print(f"异常类型:{result.abnormal_type}")
print(f"异常位置:{result.abnormal_position}")
print(f"处理建议:{result.processing_suggestion}")
except Exception as e:
print(f"错误:{str(e)}")
运行输出:
✅本地图片工业巡检启动...
============================================================
📊检测结果
============================================================
场景描述:两名穿着蓝色工作服和安全帽的工人在工业设施内进行巡检,周围布满了管道、阀门和电机等设备。
异常类型:无明显异常
异常位置:未发现异常位置
处理建议:继续按照标准巡检流程进行检查,确保所有设备运行正常。
3. 代码解析
本代码实现了基于LangChain框架调用阿里云Qwen-VL-Plus多模态模型,完成工业巡检图片的结构化异常检测。以下从6个核心维度进行技术拆解:
1)整体架构设计(Chain流水线)
[本地图片] → [Base64编码] → [多模态Prompt] → [ChatOpenAI(qwen-vl-plus)] → [Pydantic解析] → [结构化结果]。
2)本地图片处理机制
def encode_image(image_path):
with open(image_path, "rb") as f:
return base64.b64encode(f.read()).decode("utf-8")
image_url = f"data:image/jpeg;base64,{base64_image}"
技术要点:
- Base64内联传输:将图片编码为data:image/jpeg;base64,...格式,避免HTTP多部分传输的兼容性问题。
- 本地预编码:提前在客户端完成编码,减少模型端解码压力,降低请求超时概率。
- 格式兼容:Qwen-VL-Plus的OpenAI兼容接口原生支持该格式,无须额外转换。
3)结构化输出解析(Pydantic+OutputParser)
class IndustrialResult(BaseModel):
scene_description: str = Field(description="场景描述")
abnormal_type: str = Field(description="异常类型")
# ...
parser = PydanticOutputParser(pydantic_object=IndustrialResult)
format_instructions = parser.get_format_instructions()
escaped_format = format_instructions.replace("{", "{{").replace("}", "}}")
技术要点:
- Pydantic模型定义:用类型注解与Field描述约束输出字段,实现“代码即文档”。
- OutputParser自动解析:将模型返回的JSON字符串自动转换为Python对象,避免手动 json.loads。
- 转义处理:{{}}转义防止Prompt模板引擎误解析JSON Schema中的{},保障格式指令完整传递。
4)Qwen-VL-Plus兼容配置(DashScope适配)
llm = ChatOpenAI(
model="qwen-vl-plus",
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", #🔑关键
temperature=0.3,
max_tokens=1500,
request_timeout=180, #🔑多模态需长超时
)
技术要点:
- base_url:指向阿里云OpenAI兼容接口,必须使用compatible-mode/v1路径。
- api_key:鉴权凭证,从DASHSCOPE_API_KEY环境变量读取。
- request_timeout=180:防止图片解析超时,多模态推理耗时较长,建议≥120s。
- temperature=0.3:控制输出随机性,工业场景需稳定性,建议0.1~0.3。
- max_tokens=1500:限制输出长度,预留足够空间容纳结构化JSON。
5)多模态Prompt工程
prompt = ChatPromptTemplate.from_messages([
("user", [
{"type": "image_url", "image_url": {"url": image_url}}, #🖼图片输入
f"""你是专业工业巡检分析师。严格按以下格式返回:
{escaped_format}""" #📝文本指令
])
])
技术要点:
- 多模态消息列表:LangChain支持image_url类型消息,自动识别并传递给支持多模态的模型。
- 角色设定:“专业工业巡检分析师”激活模型领域知识,提升检测准确性。
- 格式强约束:将JSON Schema指令嵌入Prompt,引导模型输出合规结构。
- 指令前置:格式要求放在图片之后,符合Qwen-VL的“图文交错”理解偏好。
6)链式执行与错误处理
chain = prompt | llm | parser #构建执行链
try:
result = chain.invoke({}) #同步调用
#输出结果...
except Exception as e:
print(f"❌错误:{str(e)}")
技术要点:
- invoke({}):统一入口执行,支持后续扩展异步/批处理。
- 异常捕获:捕获网络超时、JSON解析失败、API限流等常见错误。
集成说明:本实战案例实现了通义千问Qwen-VL-Plus与LangChain的高效集成,通过 ChatOpenAI兼容接口与PydanticOutputParser结构化解析方案,将多模态推理结果(工业巡检图片)转换为标准化的结构化数据(异常类型、位置、处理建议),可直接对接智能体决策引擎或业务工单系统。与GPT-4V集成方案相比,Qwen-VL-Plus在中文工业术语理解、本地化部署合规性、调用成本方面具备显著优势,更适合国内制造业场景;而GPT-4V在复杂场景泛化能力与跨语言推理上略有领先,适合对全球多语言支持或极端长尾缺陷识别要求极高的场景。