如何快速构建AI驱动的向量数据库应用:Gemini API与Weaviate集成开发完全指南
GitHub推荐项目精选(coo/cookbook)是一个汇集Gemini API指南和示例的开源项目,旨在帮助开发者快速掌握AI驱动的应用开发。本文将详细介绍如何利用Gemini API与Weaviate向量数据库构建强大的AI应用,从环境搭建到实际案例实现,让你轻松上手向量数据库开发。## 向量数据库与AI集成:为什么选择Gemini API和Weaviate?在当今AI驱动的应用开发
如何快速构建AI驱动的向量数据库应用:Gemini API与Weaviate集成开发完全指南
GitHub推荐项目精选(coo/cookbook)是一个汇集Gemini API指南和示例的开源项目,旨在帮助开发者快速掌握AI驱动的应用开发。本文将详细介绍如何利用Gemini API与Weaviate向量数据库构建强大的AI应用,从环境搭建到实际案例实现,让你轻松上手向量数据库开发。
向量数据库与AI集成:为什么选择Gemini API和Weaviate?
在当今AI驱动的应用开发中,向量数据库扮演着至关重要的角色。它们能够高效存储和检索高维向量数据,为语义搜索、推荐系统等应用提供强大支持。Gemini API作为谷歌推出的先进AI模型,具备强大的文本生成和理解能力,而Weaviate作为开源向量数据库,拥有出色的性能和灵活性。两者的结合,为构建智能应用提供了理想的技术栈。
图:ESP32语音LED控制器接线图,展示了硬件与软件结合的实际应用场景,类比向量数据库与AI模型的协同工作方式。
Gemini API与Weaviate的核心优势
- Gemini API:提供多模态理解与生成能力,支持文本、图像等多种输入类型,能够生成高质量的自然语言描述和代码。
- Weaviate:开源向量数据库,支持向量搜索、混合搜索、自动截断等高级功能,具备良好的可扩展性和易用性。
快速入门:环境搭建与依赖安装
要开始使用Gemini API和Weaviate构建应用,首先需要搭建开发环境并安装必要的依赖。以下是详细的步骤:
安装Weaviate客户端和Gemini API库
使用pip命令安装Weaviate客户端和Google Generative AI库:
pip install weaviate-client==4.7.1
pip install -U -q "google-genai>=1.0.0"
这些库将帮助你连接Weaviate数据库并与Gemini API进行交互。
连接Weaviate数据库
Weaviate提供多种部署方式,包括嵌入式、云端和本地Docker部署。对于快速开发和测试,推荐使用嵌入式Weaviate:
import weaviate
from weaviate.embedded import EmbeddedOptions
client = weaviate.WeaviateClient(
embedded_options=EmbeddedOptions(
version="1.25.10",
additional_env_vars={
"ENABLE_MODULES": "text2vec-palm, generative-palm"
}),
additional_headers={
"X-Google-Studio-Api-Key": GEMINI_API_KEY
}
)
client.connect()
这段代码将启动一个嵌入式Weaviate实例,并启用与Gemini API集成所需的模块。
数据模型设计:定义Weaviate模式
在Weaviate中,数据模型通过模式(Schema)定义。一个良好的模式设计对于高效的数据存储和检索至关重要。以下是一个示例模式定义,用于存储产品数据:
定义产品和用户角色集合
from weaviate.classes.config import Configure, Property, DataType
# 产品集合
client.collections.create(
name="Products",
vectorizer_config=Configure.Vectorizer.text2vec_palm(
project_id="",
api_endpoint="generativelanguage.googleapis.com",
model_id="text-embedding-004"
),
generative_config=Configure.Generative.palm(
project_id="",
api_endpoint="generativelanguage.googleapis.com",
model_id="gemini-3-flash-preview"
),
properties=[
Property(name="product_id", data_type=DataType.TEXT),
Property(name="title", data_type=DataType.TEXT),
Property(name="category", data_type=DataType.TEXT),
Property(name="description", data_type=DataType.TEXT),
Property(name="brand", data_type=DataType.TEXT),
Property(name="generated_description", data_type=DataType.TEXT),
]
)
# 用户角色集合
client.collections.create(
name="Personas",
vectorizer_config=Configure.Vectorizer.text2vec_palm(
project_id="",
api_endpoint="generativelanguage.googleapis.com",
model_id="text-embedding-004"
),
generative_config=Configure.Generative.palm(
project_id="",
api_endpoint="generativelanguage.googleapis.com",
model_id="gemini-3-flash-preview"
),
properties=[
Property(name="name", data_type=DataType.TEXT),
Property(name="description", data_type=DataType.TEXT),
]
)
这个模式定义了两个集合:Products和Personas,分别用于存储产品信息和用户角色信息。每个集合都配置了向量化器和生成模型,以便利用Gemini API的能力。
数据导入与管理:批量导入与更新
定义好模式后,下一步是将数据导入Weaviate。Weaviate提供了批量导入功能,可以高效地导入大量数据。以下是一个示例,展示如何导入产品数据:
批量导入产品数据
import requests
import json
# 从URL获取产品数据
url = 'https://raw.githubusercontent.com/bkauf/next-store/main/first_99_objects.json'
response = requests.get(url)
data = json.loads(response.text)
# 获取Products集合
products = client.collections.get("Products")
# 批量导入数据
with products.batch.dynamic() as batch:
for item in data:
batch.add_object(
properties={
"product_id": item['product_id'],
"title": item['title'],
"category": item['category'],
"description": item['description'],
"brand": item['brand']
}
)
这段代码从指定URL获取产品数据,并使用批量导入功能将数据添加到Products集合中。批量导入可以显著提高数据导入的效率,特别是当数据量较大时。
高级搜索功能:向量搜索与混合搜索
Weaviate提供了强大的搜索功能,包括向量搜索、混合搜索等。这些功能可以帮助你构建更智能、更精准的搜索体验。
向量搜索
向量搜索是Weaviate的核心功能,它基于向量相似度来检索数据。以下是一个向量搜索的示例:
response = products.query.near_text(
query="travel mug",
return_properties=["title", "description", "link"],
limit=3
)
for product in response.objects:
print(json.dumps(product.properties, indent=2))
这段代码将搜索与"travel mug"语义相似的产品,并返回前3个结果。向量搜索能够理解文本的语义含义,从而提供更相关的搜索结果。
混合搜索
混合搜索结合了向量搜索和关键词搜索的优点,可以进一步提高搜索的准确性。以下是一个混合搜索的示例:
response = products.query.hybrid(
query="dishwasher safe container",
alpha=0.75, # 0.75表示75%向量搜索,25%关键词搜索
return_properties=["title", "description", "link"],
limit=3
)
for product in response.objects:
print(json.dumps(product.properties, indent=2))
通过调整alpha参数,可以控制向量搜索和关键词搜索的权重,以获得最佳的搜索效果。
生成式反馈循环:利用Gemini API增强数据
生成式反馈循环是指利用AI模型生成新的内容,并将其存储回数据库中,以增强数据的价值。以下是一个示例,展示如何使用Gemini API生成产品描述并存储回Weaviate:
生成产品描述并更新数据库
import google.generativeai as genai
# 配置Gemini API
genai.configure(api_key=GEMINI_API_KEY)
model = genai.GenerativeModel('gemini-2.5-flash')
# 搜索产品
response = products.query.near_text(
query="travel jacket",
return_properties=["title", "description", "link"],
limit=1
)
# 为每个产品生成描述
for product in response.objects:
prompt = f"Write a short Facebook ad about this product: {product.properties['description']}"
generated_description = model.generate_content(prompt).text
# 更新产品描述
products.data.update(
uuid=product.uuid,
properties={"generated_description": generated_description}
)
这段代码使用Gemini API为产品生成Facebook广告描述,并将生成的描述存储回Weaviate数据库中。这种方式可以丰富产品信息,提高数据的可用性。
个性化推荐:基于用户角色的内容生成
Weaviate支持跨引用(Cross-references),可以建立不同集合之间的关系。利用这一特性,可以实现基于用户角色的个性化内容推荐。
创建个性化描述集合
# 创建Personalized集合,用于存储个性化描述
client.collections.create(
name="Personalized",
vectorizer_config=Configure.Vectorizer.text2vec_palm(
project_id="",
api_endpoint="generativelanguage.googleapis.com",
model_id="text-embedding-004"
),
generative_config=Configure.Generative.palm(
project_id="",
api_endpoint="generativelanguage.googleapis.com",
model_id="gemini-3-flash-preview"
),
properties=[
Property(name="description", data_type=DataType.TEXT),
],
references=[
ReferenceProperty(name="ofProduct", target_collection="Products"),
ReferenceProperty(name="ofPersona", target_collection="Personas")
]
)
生成个性化描述
# 获取用户角色
personas = client.collections.get("Personas")
# 为每个用户角色生成个性化产品描述
for persona in personas.iterator():
# 生成个性化描述
prompt = f"Create a product description for {persona.properties['name']} based on their preferences: {persona.properties['description']}"
generated_description = model.generate_content(prompt).text
# 存储个性化描述
personalized.data.insert(
properties={"description": generated_description},
references={
"ofProduct": product.uuid,
"ofPersona": persona.uuid
}
)
通过这种方式,可以为不同的用户角色生成个性化的产品描述,提高用户体验和转化率。
项目实战:构建智能产品推荐系统
结合上述所有功能,我们可以构建一个智能产品推荐系统。该系统能够根据用户的偏好和产品的特性,提供个性化的产品推荐。
系统架构
- 数据层:使用Weaviate存储产品数据和用户角色数据。
- 向量层:利用Gemini API生成产品和用户的向量表示。
- 搜索层:通过Weaviate的向量搜索和混合搜索功能,找到与用户兴趣匹配的产品。
- 生成层:使用Gemini API为用户生成个性化的产品描述和推荐理由。
核心代码示例
# 1. 导入数据
# (省略数据导入代码,参考前面的数据导入部分)
# 2. 生成用户向量
# (省略用户向量生成代码,参考前面的向量生成部分)
# 3. 搜索相关产品
response = products.query.near_object(
near_object=user_vector,
return_properties=["title", "description", "generated_description"],
limit=5
)
# 4. 生成个性化推荐
for product in response.objects:
prompt = f"Recommend this product to {user_name}: {product.properties['generated_description']}"
recommendation = model.generate_content(prompt).text
print(recommendation)
这个示例展示了如何将Weaviate和Gemini API结合,构建一个端到端的智能推荐系统。
总结与扩展
通过本文的介绍,你已经了解了如何使用Gemini API和Weaviate构建AI驱动的向量数据库应用。从环境搭建、数据模型设计到高级搜索和个性化推荐,我们覆盖了构建此类应用的关键步骤。
进一步学习资源
- 官方文档:examples/weaviate/personalized_description_with_weaviate_and_gemini_api.ipynb
- Weaviate文档:Weaviate官方文档
- Gemini API文档:Google Gemini API文档
扩展方向
- 多模态数据处理:结合图像、音频等多模态数据,构建更丰富的应用。
- 实时数据更新:实现数据的实时更新和索引,提高应用的时效性。
- 分布式部署:将Weaviate部署到分布式环境,提高系统的可扩展性和可靠性。
通过不断探索和实践,你可以构建出更加强大和智能的AI应用,为用户提供更好的体验。祝你在AI驱动的向量数据库开发之路上取得成功!
更多推荐




所有评论(0)