尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

数据湖多模态数据向量化与语义检索实战指南

数据湖多模态数据向量化与语义检索实战指南 数据湖里存储的多模态数据文本、图片、音频、视频往往在入库之后便进入一种沉睡状态。传统的数据目录只能按文件名、时间、标签去检索当文件数量达到百万级别想要匹配一段视频中的画面、一张图片里的场景、一段对话里的意图就只能靠人工打标或者模糊搜索。向量化技术的出现改变了这条路径通过 Embedding 模型把非结构化数据映射成稠密向量再借助向量数据库做相似度检索AI 便能从数据湖中定位真正相关的内容。这篇文章从工程实践角度出发梳理数据湖与向量化的结合方式并给出一个可运行的多模态数据向量化与检索闭环。内容覆盖模型选型、环境搭建、最小代码实现、参数说明、常见排错和生产落地建议适合数据工程师、AI 应用开发者和正在搭建企业知识库或多模态检索系统的同学。1. 数据湖为什么需要向量化以及 AI 理解多模态数据的前提1.1 数据湖的困境非结构化数据不是可检索的数据数据湖的设计初衷是低门槛地保存原始数据。它不会像数据仓库那样在入库前强制约束 schema而是把原文件、半结构化日志、图片、音视频统一保存方便后续挖掘。但这份方便也带来了代价当数据量到达 TB 甚至 PB 级别数据目录只能回答“这个路径下有什么文件”却回答不了“这张图里是否出现过消防车”“这段语音里是否提到了故障工单号”。以交通场景为例数据中心里积压了大量摄像头抓拍图、事故报告文本、路况视频流。传统方式想把“雨天路口的碰撞事故”相关的图片和报告找出来只能靠人工浏览目录、搜索文件名、筛选手工填写的标签。标签体系一旦建设初期没有覆盖到某个概念后续检索就无法命中。更麻烦的是同一个语义可以有很多种表达今天业务方叫“追尾”明天叫“碰撞事故”后天叫“车辆剐蹭”如果只做关键词匹配检索结果会非常不稳定。人工打标的方式在数据量达到一定规模后基本不可维护。主要问题有三个打标成本随数据量线性增长数据一旦持续更新标签很快就过期。人工标签是粗粒度描述无法覆盖图片中的所有物体、场景、人物关系和文字信息。标签检索依赖关键词拼写语义相近但表述不同的数据会被漏掉。向量化解决的是“语义检索”问题。它利用预训练模型把图片、文本、音频片段映射到同一个向量空间语义相近的内容在向量空间里的距离更近。整个过程不需要人工打标模型自动从原始数据中提取语义特征。这是数据湖从“能存”走向“能用”的关键一步。1.2 向量化到底做了什么从语义到向量的映射向量化在工程上通常称为 Embedding。一个文本或图片经过向量化后会变成一个固定长度的数值数组比如 1024 维的[-0.023, 0.18, 0.45, ...]。这个数组不像关键词那样表达“这个文档里有哪几个词”而是表达“这段内容在语义上是什么”。过程可以拆成三步选择一个预训练模型例如 CLIP、SigLIP、BLIP 等多模态模型或者 BGE-M3、text2vec 等文本模型。对原始数据做预处理。文本经过 tokenizer 变成 token 序列图片经过图像处理器缩放、归一化成张量。模型前向计算输出一个固定维度的稠密向量这个向量作为原始内容的语义表示。这里要区分两个容易混淆的概念向量化和向量检索。向量化负责把内容变成向量解决的是“怎么表达语义”向量检索负责在大规模向量中快速找到最近邻解决的是“怎么查得快”。两者需要配合而且选型相互影响。比如模型输出 1024 维向量库的索引配置就要按 1024 维来建模型训练时对齐了文本和图片检索时才能做到用文本搜图片、用图片搜文本。另一个容易误解的点是“向量化之后 AI 就理解了内容”。实际上向量本身只是特征表达真正让 AI “理解”数据的是后续的检索、排序和生成过程。向量化质量越高后续检索到的内容越准确AI 的回答才能有可靠依据。1.3 多模态向量与 AI 理解的关系RAG 管道定位多模态数据向量化之后AI 怎么“理解”目前最实际的做法是把它接入 RAG也就是检索增强生成管道。大模型本身无法直接感知数据湖里的原始文件但可以通过检索模块拿到与用户问题相关的文本片段或图片描述再基于这些上下文生成回答。一个典型的 RAG 流程包含六个环节数据接入从数据湖读取原始文件包括图片、文本、音视频。解析与转换文本分块图片做内容描述或直接向量化音视频做转写或抽帧。向量化用 Embedding 模型生成向量。入库向量和原始元数据一起写入向量数据库。检索用户提问时把问题向量化在向量库中召回 top-k 结果。生成把召回结果交给大模型生成回答或摘要。在这个链路中向量化是承上启下的关键环节。它决定了检索质量的上限。如果模型选错或者分块策略不合理后面无论怎么优化提示词检索回来的内容都不够准确。数据湖中的多模态数据通过这条路径才能变成 AI Agent、智能问答系统真正可以依赖的知识来源。2. 方案与技术选型从数据湖到向量库的关键路径2.1 整体架构与数据流向实际项目中数据湖往往不是单个目录而是存储在对象存储MinIO、S3或 HDFS 上。向量化管道应该把数据源抽象出来统一读取然后经过“解析 - 分块或抽帧 - 向量化 - 写入向量库 - 元数据管理”五个阶段。一个适合中小团队的架构可以这样分层数据源层对象存储、HDFS、本地磁盘、消息队列。处理层Python 脚本、Spark 或 Flink 任务扫描文件并解析格式。模型层Embedding 模型服务可以本地部署也可以通过内部 API 调用。存储层向量数据库保存向量对象存储保存原始文件关系库或元数据目录保存文件标签和分块信息。应用层检索接口、RAG 机器人、多模态问答服务。学习环境可以简化很多数据放在本地目录处理用 Python 脚本向量数据库用 Docker 启动。下面的最小闭环就按照这个简化方案来做。生产环境再在接入层、调度层和监控层补全。2.2 Embedding 模型选型模态、维度、中文效果与部署成本选型时要重点看四个维度模态支持、向量维度、中文效果、部署成本。模型类型代表模型模态支持向量维度常见范围适合场景纯文本模型BGE-M3、text2vec、E5文本768-1024文档检索、知识库图文多模态模型CLIP、SigLIP、BLIP文本、图片512-1152图片检索、图文互相检索视频音频模型VideoCLIP、ImageBind文本、视频、音频512-1024视频摘要、跨模态检索向量维度不是一个可以随意拼凑的数字。它由模型训练时的输出层决定不同模型的维度差异很大。生产中切换模型后已经入库的向量必须重新生成因为两个模型产生的向量不在同一个语义空间无法直接比较相似度。这一点经常被忽视导致上线后检索结果时好时坏。模型部署路径也要提前想清楚。如果数据湖中的内容涉及企业经营数据不能把原始图片和文档直接送到公网 API那就需要本地部署 Embedding 模型。本地部署时要注意显存资源。7B 参数级别的向量模型经过量化后通常需要 6GB 到 10GB 显存具体以实际部署工具的显存占用为准。如果机器只有 CPU可以改为部署 300M 到 500M 参数的小模型语义能力弱一些但吞吐量足够稳定部署也省事。在国产信创环境或 ARM64 硬件上要优先确认 Python 包是否提供对应架构的 wheel 包必要时使用 ONNX Runtime 或 llama.cpp 交叉编译避免在目标机器上现场编译软件包。2.3 向量数据库选型Qdrant、Milvus、Chroma、pgvector 怎么选向量数据库承担向量存储和相似度检索。选择方案时既要考虑当前数据量也要考虑团队运维能力。方案部署方式适合规模特点QdrantDocker 或云服务千万级向量支持 payload 过滤Rust 实现部署简单Milvus集群亿级向量功能全依赖组件多适合大规模场景Chroma嵌入式百万级以下启动简单适合学习和原型验证pgvectorPostgreSQL 插件千万级以下复用现有 PG事务一致但大规模检索能力有限个人建议学习阶段直接选 Chroma 或 Qdrant文档齐全接口直观。中小规模项目优先 Qdrant一个 Docker 容器就能跑起来后续也好迁移到集群。如果团队已经有 PostgreSQL并且数据量不大用 pgvector 起步也合理但到了一定量级后索引构建和查询性能会成为瓶颈。如果数据规模达到亿级再评估 Milvus 或专门的向量数据库集群。3. 环境准备与依赖安装3.1 硬件与系统要求为了让下面的示例能顺利跑通建议准备一台具备 16GB 内存的机器。有 NVIDIA GPU 时可以用 fp16 加速没有 GPU 也能运行小尺寸模型只是推理速度会慢一些。资源学习环境最低配置生产环境参考CPU4 核8 核以上多实例处理内存16GB32GB 以上取决于并发GPU可选生产推荐独立 GPU 或 10GB 以上显存磁盘20GB 可用SSD预留向量索引和日志空间如果是 ARM64 设备或国产信创操作系统要特别注意依赖包是否提供对应架构的安装包。PyTorch、transformers 等大型库通常有官方 wheel但个别小工具包可能需要从源码编译提前在测试环境验证一遍依赖安装流程。3.2 Python 环境与依赖包示例代码基于 Python 3.10 和 PyTorch 构建。先创建虚拟环境再安装依赖。python3 -m venv .venv source .venv/bin/activate pip install --upgrade pip安装核心依赖pip install torch --index-url https://download.pytorch.org/whl/cu121 pip install transformers qdrant-client pillow pyyaml如果使用的是 CPU 环境安装 torch 时不要指定 CUDA index-urlpip install torch依赖清单可以整理成requirements.txttorch2.0 transformers4.41 qdrant-client1.9 pillow10.0 pyyaml6.0这里没有锁定具体版本因为组件更新较快。落地时建议按实际安装环境固定版本号保证可复现。3.3 本地启动 Qdrant使用 Docker 启动 Qdrant 向量数据库并挂载持久化目录mkdir -p ./qdrant_storage docker run -d \ --name qdrant \ -p 6333:6333 \ -p 6334:6334 \ -v ./qdrant_storage:/qdrant/storage \ qdrant/qdrant启动后访问健康检查接口确认服务正常curl http://localhost:6333/healthz正常返回一段 JSON包含status字段。看到status: ok就说明 Qdrant 已经就绪。端口 6333 是 HTTP API6334 是 gRPC本示例只用到 6333。4. 用 SigLIP 和 Qdrant 搭建多模态向量化最小闭环4.1 项目结构与测试数据准备下面用一个最小的本地数据湖示例把图片、文本统一向量化并写入 Qdrant。项目结构如下multimodal-vector-pipeline/ ├── config.yaml ├── requirements.txt ├── data_lake/ │ ├── images/ │ │ ├── traffic_001.jpg │ │ ├── traffic_002.jpg │ │ └── ... │ └── texts/ │ ├── accident_report_01.txt │ └── road_condition_01.txt ├── src/ │ ├── __init__.py │ ├── embed_model.py │ ├── ingest.py │ └── search.py └── logs/embed_model.py负责加载模型和向量化ingest.py负责扫描数据湖并写入向量库search.py负责检索验证。测试数据不需要多准备几张图片和几个文本文件即可。图片可以使用公开可下载的示例图片文本文件可以手动编写重点是把流程跑通。4.2 文本向量化模块embed_model.py中封装模型加载和向量化函数。以下代码以 Hugging Face transformers 的 CLIP/SigLIP 通用接口为例模型 ID 请替换为你实际使用的模型路径或 Hugging Face 模型标识。import torch from transformers import AutoProcessor, AutoModel from PIL import Image from typing import List MODEL_ID your_model_path_or_hf_id DEVICE cuda if torch.cuda.is_available() else cpu MODEL_CACHE ./models processor AutoProcessor.from_pretrained(MODEL_ID, cache_dirMODEL_CACHE) model AutoModel.from_pretrained(MODEL_ID, cache_dirMODEL_CACHE).to(DEVICE) model.eval() def vectorize_texts(texts: List[str]) - List[List[float]]: inputs processor( texttexts, return_tensorspt, paddingTrue, truncationTrue, ).to(DEVICE) with torch.no_grad(): outputs model(**inputs) # 不同模型的输出字段不同实际项目需要按模型卡调整。 # CLIP 系列通常取 text_embeds部分模型使用 last_hidden_state 做 pooling。 text_vectors outputs.text_embeds.cpu().numpy().tolist() return text_vectors这里没有直接把text_embeds字段写死因为不同模型实现差异很大。加载模型后建议先查看模型的输出结构确认字段名再修改这行代码。模型加载完成后自动进入eval模式避免 BatchNorm 和 Dropout 在推理时引入不确定性。4.3 图片向量化模块图片向量化的处理方式类似只是预处理时传入的是图片对象def vectorize_images(image_paths: List[str]) - List[List[float]]: images [Image.open(path).convert(RGB) for path in image_paths] inputs processor( imagesimages, return_tensorspt, paddingTrue, ).to(DEVICE) with torch.no_grad(): outputs model(**inputs) image_vectors outputs.image_embeds.cpu().numpy().tolist() return image_vectors调用方把一批图片路径传进来函数返回对应的向量列表。批量处理可以减少模型前向推理次数在 CPU 环境下尤其重要。4.4 写入向量数据库ingest.py负责扫描数据湖中的文件调用向量化函数并写入 Qdrant。import os import glob import yaml from qdrant_client import QdrantClient from qdrant_client.models import Distance, VectorParams, PointStruct, PayloadSchemaType from embed_model import vectorize_texts, vectorize_images with open(config.yaml, r, encodingutf-8) as f: CONFIG yaml.safe_load(f) QDRANT_URL CONFIG[qdrant][url] COLLECTION_NAME CONFIG[qdrant][collection] VECTOR_SIZE CONFIG[model][vector_size] client QdrantClient(urlQDRANT_URL) def ensure_collection(): if client.collection_exists(COLLECTION_NAME): return client.create_collection( collection_nameCOLLECTION_NAME, vectors_configVectorParams( sizeVECTOR_SIZE, distanceDistance.COSINE, ), ) def ingest_images(image_dir: str): paths glob.glob(os.path.join(image_dir, *.jpg)) glob.glob( os.path.join(image_dir, *.png) ) points [] batch_size CONFIG[processing][batch_size] for i in range(0, len(paths), batch_size): batch_paths paths[i : i batch_size] vectors vectorize_images(batch_paths) for path, vec in zip(batch_paths, vectors): points.append( PointStruct( idabs(hash(path)) % (10**12), vectorvec, payload{ file_path: path, content_type: image, file_name: os.path.basename(path), source: data_lake_images, }, ) ) client.upsert(collection_nameCOLLECTION_NAME, pointspoints) print(fingested {len(points)} image records)abs(hash(path)) % (10**12)是一个简化做法只是为了在示例中避免重复 point ID。生产环境建议使用文件的 MD5、UUID或者由元数据模块统一生成 ID避免哈希冲突。文本写入的逻辑类似def ingest_texts(text_dir: str): paths glob.glob(os.path.join(text_dir, *.txt)) for path in paths: with open(path, r, encodingutf-8) as f: raw_text f.read() chunks split_text(raw_text, chunk_sizeCONFIG[processing][chunk_size]) vectors vectorize_texts(chunks) points [] for idx, (chunk, vec) in enumerate(zip(chunks, vectors)): points.append( PointStruct( idabs(hash(f{path}-{idx})) % (10**12), vectorvec, payload{ file_path: path, content_type: text, chunk_index: idx, chunk_text: chunk, source: data_lake_texts, }, ) ) client.upsert(collection_nameCOLLECTION_NAME, pointspoints) print(fingested text files from {text_dir})文本分块函数这里先不做展开实际项目中要根据语义边界、段落大小和上下文重叠来设计。最简单的做法是按固定字符数截断同时保留一定重叠避免把一句话从中间切断。4.5 检索与验证检索时需要把查询文本转换为向量再调用 Qdrant 的query_points接口from qdrant_client.models import Filter, FieldCondition, MatchValue from embed_model import vectorize_texts def search(query_text: str, top_k: int 5, content_type: str None): query_vector vectorize_texts([query_text])[0] query_filter None if content_type: query_filter Filter( must[ FieldCondition( keycontent_type, matchMatchValue(valuecontent_type), ) ] ) results client.query_points( collection_nameCOLLECTION_NAME, queryquery_vector, limittop_k, query_filterquery_filter, ) for point in results.points: print(fscore{point.score:.4f}, path{point.payload[file_path]}) if chunk_text in point.payload: print(fchunk{point.payload[chunk_text]})query_filter参数非常有用。当数据湖中既有图片又有文本时可以通过content_type限定检索范围只搜索图片或只搜索文本。5. 关键参数详解与向量化性能优化5.1 模型侧参数batch_size、精度与缓存模型向量化涉及几个重要参数直接影响吞吐率和显存占用。参数含义常见取值注意事项batch_size每次前向推理处理的样本数8-64显存不足时调小CPU 环境建议 8-16fp16使用半精度推理True / FalseGPU 支持时开启显存占用减半cache_dir模型缓存目录本地磁盘路径提前下载模型避免上线时拉取失败max_length文本最大 token 长度64-512超过长度会被截断注意语义损失device计算设备cpu / cuda自动判断也可手动配置模型加载后是否启用 fp16可以参考下面的写法import torch model AutoModel.from_pretrained(MODEL_ID, cache_dirMODEL_CACHE) if DEVICE cuda: model model.half() model model.to(DEVICE) model.eval()fp16 能显著降低显存占用但 CPU 环境不要使用 fp16CPU 上 fp16 推理通常没有性能优势。5.2 向量库参数距离函数、索引与 payloadQdrant 建集合时需要指定向量的维度、距离函数和索引类型。参数说明推荐值备注size向量维度模型输出维度要和 Embedding 模型对齐distance距离函数Cosine文本图片检索常用 Cosineon_disk索引是否落盘False小数据量保持内存大数据量用磁盘hnsw_mHNSW 图节点连接数16-64越大检索越准但内存和构建时间越高hnsw_ef_construct建索引时搜索宽度100-200影响索引质量距离函数的选择要结合模型使用场景。大多数 Embedding 模型在训练时都推荐 Cosine 距离因为向量通常做了归一化Cosine 与内积等价但数值更稳定。只有明确使用内积训练的模型才选 Dot。payload 过滤也不要忽略。Qdrant 支持对 payload 字段建索引比如content_type、source、date这样检索时可以快速过滤出特定类型的数据。client.create_payload_index( collection_nameCOLLECTION_NAME, field_namecontent_type, field_schemaPayloadSchemaType.KEYWORD, )没有 payload 索引时过滤条件会扫描大量点查询耗时可能从毫秒级涨到秒级。5.3 大批量数据向量化的性能优化策略示例代码适合验证流程不适合直接压到生产。数据量达到十万级以后至少要关注四个优化方向。第一分批处理。在一个 for 循环里把文件全部加载到内存是不可行的必须按 batch 扫描、推理、写入。建议把扫描逻辑改成生成器每次处理一个目录或一批文件。第二并行推理。图片推理可以拆成多个 worker每个 worker 持有一个模型副本通过队列分发任务。要特别注意显存或内存是否足够CPU 场景下多进程并行通常比多线程更有效。第三避免重复向量化。文件入库前记录文件 MD5已经处理过的文件直接跳过。增量更新时只处理新增和变更的文件。第四向量索引参数要按数据量调整。百万级以下默认 HNSW 参数可以接受。千万级以上需要做索引调优和分片规划建议先做压测再上线。6. 运行验证与效果分析6.1 验证流程跑通最小闭环后按下面顺序验证启动 Qdrant确认健康检查返回ok。运行数据入库脚本观察日志中的 ingested 数量。用一条业务相关的查询调用检索函数确认返回结果包含预期文件。检查向量库中的 point 数量使用 Qdrant 的集合信息接口确认。curl http://localhost:6333/collections/multimodal_data_lake返回 JSON 中points_count应等于入库数据总数。如果小于预期说明部分文件向量化失败或写入时出现异常。6.2 预期输出示例文本入库脚本运行后预期输出类似ingested 12 image records ingested 8 text records执行查询python src/search.py 雨天路口发生的车辆碰撞预期输出类似score0.8612, pathdata_lake/texts/accident_report_01.txt chunk事故发生时路面湿滑车辆未保持安全距离导致追尾 score0.8034, pathdata_lake/images/traffic_003.jpg score0.7541, pathdata_lake/texts/road_condition_01.txtscore是向量相似度数值越接近 1 表示语义越接近。如果查询“雨天碰撞”能召回对应的图片和事故报告文本说明图文向量化已经对齐。6.3 如何判断检索效果检索效果不能只看单条结果。建议准备一个小的评测集包含 20 到 50 条查询每条查询人工标注期望召回的文件列表然后计算召回率、准确率和平均排序位置。如果发现查询结果不理想先按顺序排查查询语句是否太短或太口语化模型对短文本的语义捕获能力有限。文本分块是否把核心语义切断。图片分辨率是否过低模型是否无法识别关键物体。是否所有数据都已经成功向量化并写入向量库。检索距离函数和数据预处理方式是否一致。7. 常见问题与排查路径7.1 问题现象与处理速查表问题现象可能原因检查方式处理建议模型加载时报 OOM显存或内存不足查看 nvidia-smi 或 free -g换小模型开启量化降低 batch_size入库时向量维度报错模型输出维度与集合 size 不一致打印向量长度查看模型 config修改 Qdrant 集合 size或者重建集合检索结果为空query 向量维度错误或集合为空检查集合 points_count确认入库成功统一向量生成模型中文检索效果差模型对中文支持不足用中英双语测试集评估换中文效果更好的模型或增加同义改写处理速度太慢CPU 推理且串行处理观察 CPU 占用率和耗时开启批量推理多进程并行增量数据没有检索到没有触发增量入库任务检查文件 MD5 和任务日志建立增量调度监听文件事件多个模型向量混用仓库中存在两套 Embedding 向量查看向量来源字段按模型版本分集合或重建索引7.2 三个容易踩的坑第一个坑是向量维度不一致。很多项目初期用文本模型生成向量建了一个 768 维的集合后来希望支持图片检索换了多模态模型输出变成 1024 维直接写入就报错。必须在建集合前确认模型的输出维度换模型时重新建集合并重新向量化全部数据。第二个坑是文本分块把语义切断。固定字符数分块在中文语境下很容易把一句话从中间截断。比如“该路段禁止货车通行”被切成了“该路段禁止货车”和“通行”检索“货车禁行”时就可能召回不完全。建议按段落或句子边界分块同时保留 chunk 之间的重叠。第三个坑是没有检查模型的输出字段。不同版本的 transformers 对 CLIP、SigLIP 模型的输出字段命名可能不同有的叫text_embeds有的要用last_hidden_state做平均池化。拿到模型后先打印outputs的结构再决定取哪个字段。7.3 重点排查步骤详解当检索结果明显不对时不要一开始就怀疑模型先做最小化排查。第一步检查入向量库的数据是否完整。用 Qdrant 的集合统计接口确认 point 数量再随机抽样几个 point看看 payload 中的file_path和content_type是否符合预期。第二步检查查询向量和库内向量是否来自同一个模型。可以取出某个图片向量和查询向量做一次内积如果数值几乎为 0说明两个模型没有对齐检索结果自然不可靠。第三步检查预处理逻辑。图片是否做了统一格式转换文本是否统一大小写和编码这些细节都会影响向量相似度。8. 生产环境落地与扩展方向8.1 从演示到生产还需要补什么最小闭环跑通只是开始。进入生产环境前还要补全几个工程能力。配置外置化把模型路径、向量库地址、数据湖路径从代码中抽到环境变量或配置中心避免修改代码重启服务。日志与监控记录入库任务耗时、失败文件列表、向量库查询延迟设置告警。权限管理数据湖中的文件可能包含敏感信息向量库访问要加认证反查原始文件时要校验权限。回滚方案模型升级后检索效果可能下降需要保留上一版向量库快照或集合版本方便回滚。数据质量检查定期检查向量库中是否有空 payload、乱码文本、损坏图片避免脏数据影响检索。8.2 增量更新与调度设计数据湖是动态增长的不可能每次全量扫描。生产环境应该设计增量更新机制。推荐的方案是双轨并行定时任务通过 Airflow、DolphinScheduler 或 Crontab每天扫描新增文件计算 MD5跳过已处理文件。事件监听对象存储或 HDFS 产生文件新增事件时通知处理服务实时向量化。增量任务需要记录处理进度。建议维护一张元数据表字段包括file_path、file_md5、vector_status、vector_model_version、idx_created_time。每次任务开始时先查这张表避免重复处理。8.3 从检索到 AI Agent 的扩展向量化闭环解决的是“找到相关内容”的问题。再往前一步可以把它封装成 AI Agent 的工具。比如一个多模态问答助手用户上传图片或输入文本问题Agent 先调用检索工具从向量库召回相关数据再把召回内容拼接成上下文交给大模型生成回答。这种架构下向量库就是 Agent 的记忆系统。模型选型、向量化质量、检索质量会直接影响 Agent 的可靠性。对一个企业级系统来说与其一开始追求复杂的 Agent 编排不如先把数据湖多模态向量化这条链路做扎实。数据不准确再强的提示词也没有用。下一步可以扩展的方向包括引入重排序模型对召回结果二次精排、加入混合检索关键词 向量提升精确匹配能力、把视频分帧后与音频转写结果对齐、以及按业务域拆分多个向量集合并统一查询路由。每一条都建立在本文的数据湖向量化管道之上。
返回列表