多模态AIAgent开发实践 邓立国、周驰岷、邓淇等 清华大学出版社【行情 报价 价格 评测】-京东
《多模态AI Agent开发实践》1~6章试读-CSDN博客
多模态特征向量的高效存储与快速访问,依赖于向量数据库。本节将重点讲解LangChain与三种主流向量数据库(Chroma、Pinecone、Milvus)的集成方法,结合多模态特征向量,实现特征存储、批量插入、数据查询等核心操作,适配qwen-vl-plus大模型的多模态推理需求,所有案例均适配指定依赖版本。
说明:Chroma为本地向量数据库(无须部署,适合开发测试),Pinecone、Milvus为云端/分布式向量数据库(适合生产环境,需提前注册账号并获取API密钥)。
1. 额外依赖安装(针对三种向量数据库)
pip install chromadb pinecone-client pymilvus #分别对应三种向量数据库
2. Pinecone云端数据库配置
1)注册Pinecone账号
#访问官网:https://app.pinecone.io;
#使用邮箱注册账号(支持免费套餐);
#登录控制台,进入API Keys页面;
#创建新的API Key,复制保存(仅显示一次)。
2)通过控制台创建Pinecone索引
#登录Pinecone控制台
点击Indexes→Create Index
#填写以下信息:
Name:如my-index
Dimension:向量维度(如1536,需与embedding模型匹配)
Metric:相似度度量(如cosine)
Pod Type:如p1.x1(免费层可用)
Replicas:1(默认)
#点击创建,等待状态变为Ready
或者通过Python SDK创建Pinecone索引:
from pinecone import Pinecone
pc = Pinecone(api_key="YOUR_API_KEY")
pc.create_index(
name="my-index",
dimension=1024,
metric="cosine",
spec={"serverless": {"cloud": "aws", "region": "us-east-1"}}
)
3)配置Pinecone的.env文件
# Pinecone配置
PINECONE_API_KEY=your_api_key_here
PINECONE_ENV=your_env
PINECONE_ENVIRONMENT=us-east-1
PINECONE_INDEX_NAME=my-index
PINECONE_DIMENSION=1024
3. Milvus云端数据库配置
1)注册/登录Zilliz Cloud账号
#访问官网:
#国际版:https://cloud.zilliz.com
#中国版:https://cloud.zilliz.com.cn
#注册/登录:
#使用邮箱或GitHub/Google账号注册。
#完成邮箱验证。
#选择套餐:
#新用户通常有Serverless免费额度(推荐开发测试使用)。
#进入控制台后,选择Serverless或Dedicated集群类型。
2)获取URI、Token,写入.env文件
MILVUS_URI=your_uri; MILVUS_TOKEN=your_token
3)创建集群与集合(Collection)
Milvus的层级结构为:集群(Cluster)→数据库(Database)→集合(Collection)。注意:Pinecone的"Index"对应Milvus的"Collection"。
访问控制台,点击 Create Cluster创建集群:
#配置选项:
Region:选择离你应用服务器最近的区域(如aws-us-west-2)。
Type:选择Serverless(免运维,按量付费/免费额度)。
Name:输入集群名称,如my-milvus-cluster。
点击Create,等待状态变为Running。
你可以通过控制台UI或代码创建集合。推荐首次使用代码创建,以便自动化。
#若需在UI创建:
#进入集群详情页,点击Connect获取连接信息。
#使用Attu (可视化工具)或代码创建Collection。
#设置向量维度(Dimension)和相似度度量(Metric Type)。
4)获取API密钥与连接信息
在Zilliz Cloud控制台集群详情页获取以下信息:
Public Endpoint(URI):
位置:Cluster Details → Public Endpoint。
格式:https://in01-xxxxx.api.gcp-us-west1.zillizcloud.com
API Key(Token):
位置:Cluster Details → API Key标签页。
操作:点击Generate API Key,复制保存(仅显示一次)。
Database Name:
默认为default,也可自定义。
5)Milvus .env文件配置
# Milvus连接配置
MILVUS_URI=https://in01-xxxxx.api.gcp-us-west1.zillizcloud.com
MILVUS_TOKEN=your_zilliz_api_key_here
MILVUS_DATABASE=default
#业务配置
MILVUS_COLLECTION_NAME=my_rag_collection
MILVUS_VECTOR_DIMENSION=1536
MILVUS_METRIC_TYPE=COSINE
#应用通用配置
APP_ENV=development
DEBUG=True
4. 基础数据准备
承接5.2节的数据分割与特征提取结果,使用text_chunks(文本分割片段)、text_embeddings(文本特征向量)、img_embedding(图片特征向量)、audio_embeddings(音频特征向量)。
Chroma是轻量级本地向量数据库,无须部署,可直接集成到LangChain,适合多模态智能体开发测试,代码示例:
# Chroma向量数据库集成(多模态特征存储与查询):
from langchain.vectorstores import Chroma
from langchain_community.embeddings import QwenEmbeddings
#初始化嵌入模型与Chroma数据库
embeddings = QwenEmbeddings(api_key=os.getenv("QWen_API_KEY"))
# 1.创建/加载Chroma数据库(persist_directory为本地存储路径)
chroma_db = Chroma(
embedding_function=embeddings,
persist_directory="./chroma_multimodal_db", #本地存储目录
collection_name="multimodal_collection" #集合名称(用于区分多模态数据)
)
# 2.批量插入多模态特征向量与对应数据
#插入文本数据(特征向量+文本片段)
chroma_db.add_texts(texts=text_chunks, embeddings=text_embeddings, metadatas=[{"type": "text"} for _ in text_chunks])
#插入图片数据(特征向量+图片描述)
chroma_db.add_texts(texts=[img_description], embeddings=[img_embedding], metadatas=[{"type": "image", "image_path": "industrial_test.jpg"}])
#插入音频数据(特征向量+音频转写文本)
chroma_db.add_texts(texts=audio_chunks, embeddings=audio_embeddings, metadatas=[{"type": "audio"} for _ in audio_chunks])
#持久化数据库(确保数据保存到本地)
chroma_db.persist()
print("Chroma数据库集成完成,已插入多模态特征向量")
# 3.多模态特征查询(以文本查询为例,检索相似的多模态数据)
query = "工业巡检管道泄漏检测方法"
query_embedding = embeddings.embed_query(query)
#检索Top3相似数据
results = chroma_db.similarity_search_by_vector(query_embedding, k=3)
print("\nChroma查询结果(Top3):")
for i, result in enumerate(results, 1):
print(f"{i}.数据类型:{result.metadata['type']},内容:{result.page_content[:100]}...")
5.3.3 Pinecone云端向量数据库集成(生产环境适配)
Pinecone是云端向量数据库,支持大规模多模态特征存储与高速检索,适合生产环境,代码示例如下:
# Pinecone云端向量数据库集成
from langchain.vectorstores import Pinecone
from langchain_community.embeddings import QwenEmbeddings
import pinecone
# 1.加载Pinecone API密钥与环境(从.env文件读取)
pinecone_api_key = os.getenv("PINECONE_API_KEY")
pinecone_env = os.getenv("PINECONE_ENV")
# 2.初始化Pinecone客户端
pinecone.init(api_key=pinecone_api_key, environment=pinecone_env)
# 3.连接已创建的索引(需提前在Pinecone控制台创建,维度与特征向量一致)
index_name = "multimodal-index"
# 4.初始化Pinecone向量数据库
pinecone_db = Pinecone.from_existing_index(
index_name=index_name,
embedding=embeddings
)
# 5.批量插入多模态特征向量
#插入文本数据
pinecone_db.add_texts(texts=text_chunks, embeddings=text_embeddings, metadatas=[{"type": "text"} for _ in text_chunks])
#插入图片数据
pinecone_db.add_texts(texts=[img_description], embeddings=[img_embedding], metadatas=[{"type": "image", "image_path": "industrial_test.jpg"}])
print("Pinecone数据库集成完成,已插入多模态特征向量")
# 6.多模态查询
query = "工业巡检图像异常检测"
results = pinecone_db.similarity_search(query, k=2)
print("\nPinecone查询结果(Top2):")
for i, result in enumerate(results, 1):
print(f"{i}.数据类型:{result.metadata['type']},内容:{result.page_content[:100]}...")
5.3.4 Milvus分布式向量数据库集成(大规模数据适配)
Milvus是分布式向量数据库,支持海量多模态特征存储与并行检索,适合大规模多模态智能体生产环境,代码示例:
# Milvus分布式向量数据库集成
from langchain.vectorstores import Milvus
from langchain_community.embeddings import QwenEmbeddings
# 1.加载Milvus配置(从.env文件读取)
milvus_uri = os.getenv("MILVUS_URI")
milvus_token = os.getenv("MILVUS_TOKEN")
# 2.初始化Milvus向量数据库(创建/连接集合)
milvus_db = Milvus(
embedding_function=embeddings,
connection_args={"uri": milvus_uri, "token": milvus_token},
collection_name="multimodal_collection",
drop_old=True #开发测试时可设置为True,删除旧集合
)
# 3.批量插入多模态特征向量
milvus_db.add_texts(texts=text_chunks, embeddings=text_embeddings, metadatas=[{"type": "text"} for _ in text_chunks])
milvus_db.add_texts(texts=[img_description], embeddings=[img_embedding], metadatas=[{"type": "image", "image_path": "industrial_test.jpg"}])
milvus_db.add_texts(texts=audio_chunks, embeddings=audio_embeddings, metadatas=[{"type": "audio"} for _ in audio_chunks])
print("Milvus数据库集成完成,已插入多模态特征向量")
# 4.多模态查询
query = "音频转写的工业巡检报告"
results = milvus_db.similarity_search(query, k=2)
print("\nMilvus查询结果(Top2):")
for i, result in enumerate(results, 1):
print(f"{i}.数据类型:{result.metadata['type']},内容:{result.page_content[:100]}...")
(1)维度匹配:确保多模态特征向量的维度与向量数据库索引的维度一致(如QwenEmbeddings生成的向量为768维,索引需设置为768维)。
(2)元数据规范:为不同类型的多模态数据添加明确的元数据(如type: text/image/audio),便于后续检索时筛选数据类型。
(3)云端数据库管控:Pinecone/Milvus需注意API密钥安全(通过.env文件管理),控制数据插入量,避免超出额度。
(4)性能适配:开发测试用Chroma,生产环境根据数据量选择Pinecone(中小规模)或Milvus(大规模、分布式)。
(5)数据持久化:Chroma需调用persist()方法实现数据持久化,而Pinecone/Milvus云端数据库自动持久化,无须额外操作。