多模态AIAgent开发实践 邓立国、周驰岷、邓淇等 清华大学出版社【行情 报价 价格 评测】-京东

《多模态AI Agent开发实践》1~6章试读-CSDN博客

多模态数据加载是数据处理的第一步,核心是将不同格式、不同来源的多模态数据(本地文件、网络资源)统一转换为LangChain可识别的格式,为后续分割、特征提取及存储奠定基础。本节将基于LangChain 0.3.x版本,详解图片、音频、视频、文本四种核心多模态数据的加载方法,结合qwen-vl-plus大模型的多模态理解能力,实现标准化加载,所有案例均适配指定依赖与.env配置。

5.1.1  依赖确认与环境准备

本章延续前文指定依赖配置,无须额外安装新依赖,若未完成安装,则执行以下命令(与第4章一致):

pip install langchain==0.3.25 langgraph==1.0.5 langchain-core==1.2.7 langchain-community==0.4.1 python-dotenv

大模型API调用仍采用.env文件配置,确保qwen-vl-plus正常调用,基础配置代码(本章案例均需提前执行):

from dotenv import load_dotenv; import os; load_dotenv()  # 加载.env文件(QWen_API_KEY=your_key

from langchain_community.llms import QwenVLPlus

llm = QwenVLPlus(api_key=os.getenv("QWen_API_KEY"), model="qwen-vl-plus", temperature=0.7)

补充依赖说明:视频加载需要依赖opencv-python(第2章已配置)、音频加载依赖whisper(第3章已配置),无须重复安装。

5.1.2  四大类多模态数据加载实操

结合langchain-community 0.4.1版本的Document Loader组件,针对四种核心多模态数据,提供标准化加载方法,每个案例均包含代码实现与效果说明,可直接运行。

5.1.2.1  图片数据加载(JPG/PNG/GIF)

采用LangChain内置的ImageLoader与OpenCVLoader,支持本地图片加载,可直接适配qwen-vl-plus的图像分析需求,代码示例:

# 图片数据加载(本地文件)

    from langchain.document_loaders import ImageLoader, OpenCVLoader

# 方法1ImageLoader(基础加载,转换为LangChain Document格式)

    img_loader1 = ImageLoader("industrial_test.jpg")

    img_doc1 = img_loader1.load()

    print("ImageLoader加载结果(Document格式):", img_doc1[0].page_content)  # 输出图像基础信息

# 方法2OpenCVLoader(结合OpenCV,支持初步预处理)

    img_loader2 = OpenCVLoader("industrial_test.jpg")

    img_doc2 = img_loader2.load()

# 补充:图像尺寸调整(预处理)

    import cv2

    img = cv2.imread("industrial_test.jpg")

    img_resized = cv2.resize(img, (640, 480))  # 适配qwen-vl-plus图像分析尺寸

    cv2.imwrite("industrial_resized.jpg", img_resized)

    print("OpenCVLoader加载并预处理完成,图像尺寸:", img_resized.shape)

说明:加载后的图片数据将转换为LangChain Document格式,可直接传入qwen-vl-plus进行图像分析,也可结合后续特征提取步骤处理。

5.1.2.2  音频数据加载(MP3/WAV)

采用WhisperLoader,结合whisper模型实现音频加载与转写,将音频数据转换为文本格式,适配qwen-vl-plus的文本推理需求,代码示例:

# 音频数据加载与转写

    from langchain.document_loaders import WhisperLoader

# 加载音频文件(支持MP3/WAV格式),转写为文本

    audio_loader = WhisperLoader("industrial_voice.mp3", model="base", language="zh")

    audio_doc = audio_loader.load()

# 输出转写文本(可直接传入qwen-vl-plus进行推理)

    audio_text = audio_doc[0].page_content

    print("音频转写文本:", audio_text)

# 补充:将转写文本存入临时变量,用于后续处理

    with open("audio_transcript.txt", "w", encoding="utf-8") as f:

        f.write(audio_text)

说明:WhisperLoader可自动完成音频加载与转写,支持多语言,转写后的文本可直接用于Agent决策、Prompt构建,适配多模态交互场景。

5.1.2.3  视频数据加载(MP4/AVI)

视频数据加载需结合OpenCV与LangChain自定义加载逻辑,将视频拆分为帧图像(图片),再进行后续处理,代码示例:

# 视频数据加载(拆分为帧图像)

    import cv2

    from langchain.document_loaders import ImageLoader

    from langchain_core.documents import Document

    # 自定义视频加载函数,拆分为帧图像

    def video_loader(video_path, frame_interval=10):

        cap = cv2.VideoCapture(video_path)

        frames = []

        frame_count = 0

        while cap.isOpened():

            ret, frame = cap.read()

            if not ret:

                break

            # 每隔frame_interval帧保存一幅图像

            if frame_count % frame_interval == 0:

                frame_path = f"video_frame_{frame_count}.jpg"

                cv2.imwrite(frame_path, frame)

                # 加载帧图像,转换为Document格式

                img_loader = ImageLoader(frame_path)

                img_doc = img_loader.load()[0]

                frames.append(Document(page_content=img_doc.page_content, metadata={"frame_num": frame_count, "frame_path": frame_path}))

            frame_count += 1

        cap.release()

        return frames

    # 调用自定义视频加载函数

    video_docs = video_loader("industrial_video.mp4", frame_interval=10)

    print(f"视频加载完成,共提取{len(video_docs)}帧图像")

    print("第一帧图像信息:", video_docs[0].metadata)

说明:视频数据通过拆分为帧图像,转换为LangChain Document格式,可适配qwen-vl-plus的图像分析能力,用于视频异常检测、场景识别等多模态任务。

5.1.2.4  文本数据加载(TXT/PDF/Markdown)

采用LangChain内置的TextLoader、PyPDFLoader、UnstructuredMarkdownLoader,加载不同格式文本数据,统一转换为Document格式,代码示例:

# 文本数据加载(多格式适配)

    from langchain.document_loaders import TextLoader, PyPDFLoader, UnstructuredMarkdownLoader

# 1. TXT文件加载

    txt_loader = TextLoader("industrial_report.txt", encoding="utf-8")

    txt_doc = txt_loader.load()

    print("TXT文件加载内容:", txt_doc[0].page_content[:100] + "...")

# 2. PDF文件加载(提取文本)

    pdf_loader = PyPDFLoader("industrial_manual.pdf")

    pdf_docs = pdf_loader.load()  # 按页码拆分,每一页为一个Document

    print(f"PDF文件加载完成,共{len(pdf_docs)}")

# 3. Markdown文件加载

    md_loader = UnstructuredMarkdownLoader("industrial_guide.md")

    md_doc = md_loader.load()

    print("Markdown文件加载内容:", md_doc[0].page_content[:100] + "...")

说明:文本数据是多模态智能体的核心指令与辅助信息来源,加载后可直接用于Prompt构建、Memory存储,适配qwen-vl-plus的文本推理需求。

5.1.3  多模态数据加载注意事项

1. 格式适配

确保加载的多模态文件格式与Loader匹配(如ImageLoader仅支持图片格式),避免加载失败。

2. 路径规范

所有本地文件路径需使用绝对路径或相对路径(确保代码可访问),避免路径错误导致加载失败。

3. 性能优化

视频、大型PDF等数据加载时,可通过设置间隔(如视频帧间隔)、分页加载(如PDF),减少资源占用。

4. 数据备份

加载过程中避免修改原始文件,可将预处理后的文件(如resize后的图片、转写后的文本)保存到指定目录,便于后续复用。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐