如何快速构建AI驱动的向量数据库应用:Gemini API与Weaviate集成开发完全指南

【免费下载链接】cookbook A collection of guides and examples for the Gemini API. 【免费下载链接】cookbook 项目地址: https://gitcode.com/GitHub_Trending/coo/cookbook

GitHub推荐项目精选(coo/cookbook)是一个汇集Gemini API指南和示例的开源项目,旨在帮助开发者快速掌握AI驱动的应用开发。本文将详细介绍如何利用Gemini API与Weaviate向量数据库构建强大的AI应用,从环境搭建到实际案例实现,让你轻松上手向量数据库开发。

向量数据库与AI集成:为什么选择Gemini API和Weaviate?

在当今AI驱动的应用开发中,向量数据库扮演着至关重要的角色。它们能够高效存储和检索高维向量数据,为语义搜索、推荐系统等应用提供强大支持。Gemini API作为谷歌推出的先进AI模型,具备强大的文本生成和理解能力,而Weaviate作为开源向量数据库,拥有出色的性能和灵活性。两者的结合,为构建智能应用提供了理想的技术栈。

ESP32语音LED控制器接线图

图: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
        }
    )

通过这种方式,可以为不同的用户角色生成个性化的产品描述,提高用户体验和转化率。

项目实战:构建智能产品推荐系统

结合上述所有功能,我们可以构建一个智能产品推荐系统。该系统能够根据用户的偏好和产品的特性,提供个性化的产品推荐。

系统架构

  1. 数据层:使用Weaviate存储产品数据和用户角色数据。
  2. 向量层:利用Gemini API生成产品和用户的向量表示。
  3. 搜索层:通过Weaviate的向量搜索和混合搜索功能,找到与用户兴趣匹配的产品。
  4. 生成层:使用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驱动的向量数据库应用。从环境搭建、数据模型设计到高级搜索和个性化推荐,我们覆盖了构建此类应用的关键步骤。

进一步学习资源

扩展方向

  • 多模态数据处理:结合图像、音频等多模态数据,构建更丰富的应用。
  • 实时数据更新:实现数据的实时更新和索引,提高应用的时效性。
  • 分布式部署:将Weaviate部署到分布式环境,提高系统的可扩展性和可靠性。

通过不断探索和实践,你可以构建出更加强大和智能的AI应用,为用户提供更好的体验。祝你在AI驱动的向量数据库开发之路上取得成功!

【免费下载链接】cookbook A collection of guides and examples for the Gemini API. 【免费下载链接】cookbook 项目地址: https://gitcode.com/GitHub_Trending/coo/cookbook

Logo

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

更多推荐