构建智能对话机器人:使用gemini Langchain和rag在Google Vertex AI上实现高效集成的5个步骤
配置 Google Vertex AI、利用 Gemini API 并集成知识库以构建智能对话应用程序的逐步指南
照片由 Annie Spratt 拍摄于 Unsplash
简介
AI 无处不在,而 Google 的 Gemini API 和 Vertex AI 使构建智能应用程序变得轻而易举。那么,这两者有什么关系呢?
Gemini API 让你能够访问强大的 AI 模型,这些模型可以聊天、回答问题和创建内容。与此同时,Google Vertex AI 是一个云平台,你可以在上面构建、运行和管理这些模型。可以将 Vertex AI 视为你的工作区,而 Gemini 则是其中的引擎。它们一起帮助你更快、更容易地创建和启动 AI 项目。
在本指南中,我将介绍两个关键部分:
- Google Vertex AI 入门:你将学习如何设置你的 Vertex AI 帐户、管理账单以及使用必要的工具和命令来访问 Gemini 等模型。
- 构建 AI 聊天机器人示例:我将向你展示如何使用 Gemini、LangChain、RAG、Flask 和数据库创建一个聊天机器人,将知识库与矢量嵌入连接起来,以实现快速检索和语义搜索。你还将学习如何使用RAG(检索增强生成)将搜索结果与 Gemini 的响应相结合,以获得准确、上下文相关的答案。
在此过程中,我将详细介绍如何在 LangChain 框架中使用 Gemini,从而轻松地将强大的 AI 模型集成到你的项目中。
到最后,你将知道如何设置 Google Vertex AI 并构建你的第一个 AI 聊天机器人——启动你自己的 AI 项目。
环境设置:Google Vertex AI 入门
让我们熟悉一下 Google Vertex AI,这个平台是所有事情发生的地方。可以将 Vertex AI 视为你的 AI 工作室——你可以在其中构建、训练和运行强大的 AI 模型,包括 Google 的 Gemini 模型。
那么,什么是 Google Vertex AI?
Vertex AI 是 Google Cloud 用于开发和管理 AI 模型的平台。它允许你从头开始构建模型,或使用 Gemini 等预训练模型来执行聊天机器人、图像生成等任务。你无需担心设置服务器或管理复杂的基础设施——Vertex AI 会处理所有这些。
例如,如果你想创建一个聊天机器人,你将使用 Vertex AI 来:
- 存储你的模型和数据。
- 在你的知识库上训练模型。
- 将其部署到实时网站或应用程序。
Vertex AI 提供哪些模型?
Vertex AI 拥有广泛的模型,包括:
- Gemini(用于聊天和内容生成)
- Vision(用于图像分析)
- Speech(用于语音识别)
- Translation(用于多语言任务)
我将重点介绍 Gemini 来为我们的聊天机器人提供支持。
如何开始使用 Vertex AI(逐步指南)
步骤 1:创建 Google Cloud 帐户
如果你还没有帐户,请在此处注册:cloud.google.com。你将获得免费积分以开始使用。
步骤 2:启用 Vertex AI 和 API
- 转到 Google Cloud Console (console.cloud.google.com)。
- 创建一个新项目(例如,MyFirstAIProject)。
- 在左侧菜单中,搜索“API 和服务”→“库”,然后启用:
- Vertex AI API
- Cloud Storage API(用于存储数据)
- AI Platform API
步骤 3:探索 Vertex AI Studio
- 在 Cloud Console 中,转到 Vertex AI → Studio。 Vertex AI Studio 是一个面向初学者的界面,用于测试 AI 模型,无需编写代码。
- 选择“生成式 AI”并单击“提示库”。
步骤 4:使用提示库试用模型
- 在提示库中,选择“文本生成”并键入类似以下内容的内容: “编写一个关于机器人学习情感的短篇故事。”
- 你将看到 Gemini 立即生成响应!
步骤 5:获取 API 生成的代码
- 在试用提示后,单击“查看代码”。
- 你将看到一个示例 Python 代码,用于通过 API 调用 Gemini 模型。你可以复制此代码并在你的项目中运行它。
例如,使用 Vertex AI Studio 中的提示库,你可以生成以下代码来演示 Google Gemini API 如何从用户提示中生成 AI 驱动的内容。它展示了如何与 Gemini 模型交互,以处理文本输入并生成结构化、基于事实的响应。
from google import genai
from google.genai import types
def generate():
"""Generate a summary from a book excerpt using Gemini API with streaming response."""
# Create Gemini client
client = genai.Client(
vertexai=True,
project="chatbotragproject", # Replace with your Project ID
location="us-central1"
)
## Book excerpt (User Input)
book_excerpt = types.Part.from_text(
text="Carl Mohr was born in 1903. By age 7, he spoke 5 languages. He became a Chess Grandmaster at 10 and graduated university at 14."
)
## System instruction (Prompt)
system_instruction = types.Part.from_text(
text="""You are an assistant to a history professor. Create a categorized list of facts about Carl Mohr.
Use these categories:
- Early Life (chronological)
- Notable Accomplishments (brief and factual)
End with a one-sentence objective summary of Carl Mohr’s significance."""
)
## Request Configuration
config = types.GenerateContentConfig(
temperature=0.3,
max_output_tokens=512,
system_instruction=[system_instruction],
)
## Generate streaming response
for chunk in client.models.generate_content_stream(
model="gemini-2.0-flash-001",
contents=[types.Content(role="user", parts=[book_excerpt])],
config=config,
):
print(chunk.text, end="")
if __name__ == "__main__":
generate()
上面的示例模拟了一个 AI 写作助手,帮助历史学教授将书籍内容组织成事实摘要。此类工具可用于:
- 教育:创建学习指南或总结文章。
- 研究协助:将研究结果组织成类别。
- 内容创作:从原始文本生成结构化草稿。
如果运行此代码,你可能会看到类似以下内容:
#### CARL MOHR FACTS
**Early Life:**
- Born in 1903.
- Spoke 5 languages by age 7.
- Became a Chess Grandmaster at 10.
- Graduated university at 14.
**Notable Accomplishments:**
- Known for exceptional academic achievements.
- Youngest Chess Grandmaster in history.
**Summary:** Carl Mohr was a prodigy whose accomplishments in languages, chess, and academics set him apart as a historical figure.
步骤 6:设置账单
- Google 给你免费积分,但你需要启用账单才能在免费积分到期后继续使用 Vertex AI。
- 转到控制台中的“账单”并设置付款方式。别担心——Google 会在收取任何费用之前通知你。
应用程序默认凭据 (ADC) 和 API 密钥
在使用 Gemini API 时,您可以通过两种方式对应用程序进行身份验证:应用程序默认凭据 (ADC) 和 API 密钥。这两种方法都允许您访问和与 Gemini 模型交互,但它们服务于不同的目的,并适用于不同的场景。
1. 应用程序默认凭据 (ADC)
ADC 是一种自动向 Google Cloud 服务提供身份验证的方法。它适用于服务器端应用程序、云部署和企业系统,在这些系统中,安全性是首要任务。ADC 不需要手动提供 API 密钥,而是允许应用程序使用系统上已配置的凭据,从而实现无缝身份验证。
要使用 ADC,您需要使用 gcloud 命令行工具设置身份验证。首先,您必须登录并设置项目:
gcloud auth application-default login
gcloud config set project chatbotragproject
完成身份验证后,您的应用程序可以自动使用存储的凭据。以下是使用 Python 中的 ADC 的示例:
from google import genai
client = genai.Client(
vertexai=True, # Uses Vertex AI
project="chatbotragproject", # Replace with your actual Project ID
location="us-central1" # Region
)
response = client.models.generate_content(
model="gemini-2.0-flash-001",
contents="Explain AI in one sentence."
)
print(response.text)
在这里,客户端不需要 API 密钥,因为它会自动从您的环境中检索凭据。建议在安全的生产级部署中使用此方法,在这种情况下,手动管理 API 密钥并不理想。
2. API 密钥
API 密钥提供了另一种对应用程序进行身份验证的方法。与 ADC 不同,API 密钥是一个静态字符串,用于标识发出请求的项目。它适用于轻量级应用程序、原型设计和 ADC 不可用的环境。
如何在 Google Cloud 中创建 API 密钥:
- 转到 Google Cloud Console:https://console.cloud.google.com/
- 导航到 API 和服务 > 凭据
- 单击“创建凭据”>“API 密钥”
- 复制生成的密钥并在您的应用程序中使用它
以下是如何在 Python 中使用 API 密钥:
from google import genai
client = genai.Client(
api_key='AIzaSyC5elsMMTZmQZ324yabcrRc...' # Replace with your actual API key
)
response = client.models.generate_content(
model="gemini-2.0-flash-001",
contents="Explain AI in one sentence."
)
print(response.text)
这种方法比 ADC 更容易设置,但 API 密钥的安全性较低,因为它们不会过期,如果处理不当,可能会被泄露。为了提高安全性,您可以通过限制对特定 IP 地址、服务或应用程序的访问来限制 API 密钥的使用。
对于生产环境,建议使用 ADC,因为它提供了更好的安全性和自动凭据管理。但是,对于快速测试、原型设计或客户端应用程序,API 密钥可能更方便。
通过了解这两种身份验证方法,您可以根据应用程序的需求、安全要求和部署环境选择正确的方法。
为 Gemini AI 项目选择开发环境
我们应该选择一个开发环境。这将确保系统可以连接到 Google Cloud Vertex AI,进行身份验证,并无缝执行 AI 模型。下面,我们将介绍两个主要的开发环境:
1️⃣ 本地 IDE (Spyder, Jupyter, VS Code, PyCharm)
- 优势:完全控制 - 易于与本地文件和数据库集成,并且没有云费用。
- 缺点:需要本地安装工具,并且某些特定于云的服务(如 Vertex AI 模型)需要额外的配置。
如果您希望在本地计算机上进行开发,请按照以下步骤设置 Google Cloud 访问权限并安装必要的库。
-
安装 Google Cloud SDK
- Google Cloud SDK 提供了命令行工具 (gcloud) 来与 Google Cloud 服务(包括 Vertex AI)交互。
- 从以下位置下载并安装它:Google Cloud SDK 安装指南
-
配置 Google Cloud
安装 SDK 后,打开 PowerShell (Windows) 或终端 (Mac/Linux) 并运行:
gcloud init
- 此命令初始化 Google Cloud SDK,允许您选择 Google Cloud 项目并设置默认配置。
- 按照提示进行身份验证,设置默认区域,并选择您的项目 ID。
-
为 API 访问验证 Google Cloud
在命令提示符 (CMD) 中运行此命令以验证您的本地环境:
gcloud auth application-default login
- 此命令授予您的本地系统访问 Google AI 服务的权限。
- 它会打开一个浏览器,您可以在其中使用 Google Cloud 帐户登录。
- 完成身份验证后,您的本地计算机可以与 Vertex AI、Gemini 和其他 Google Cloud 资源交互。
-
安装所需的库
接下来,安装必要的 Python 包以使用 Gemini 和 LangChain。打开您的 IDE 终端 (Spyder, VS Code 或 PyCharm) 并运行:
pip install --upgrade google-genai langchain
- google-genai:启用与 Gemini 模型的交互。
- langchain:提供用于构建 AI 工作流和基于 RAG 的聊天机器人的工具。
-
验证连接
为了确保您的设置正确,请在您的 IDE 中运行一个简单的 Gemini 查询:
from google import genai ## # Replace with your Project ID client = genai.Client( vertexai=True, project="chatbotragproject", location="us-central1") response = client.models.generate_content( model="gemini-2.0-flash-001", contents="What are the top five major global events of 2024?") print(response.text)
2️⃣ Vertex AI Workbench (托管笔记本) (推荐给 Google Cloud 用户)
- 优点:预配置环境,内置访问 Google Cloud 资源和 Vertex AI 模型的功能。非常适合生产级项目。
- 缺点:需要 Google Cloud 帐户,并且可能产生费用。
如果您更喜欢直接在云端工作,Google Vertex AI Workbench 提供了一个完全托管的类似 Jupyter 的笔记本环境,其中预装了 AI 工具。以下是如何设置它:
-
创建托管笔记本
- 转到 Google Cloud Console:Vertex AI Workbench
- 点击“创建笔记本”→ 选择“托管笔记本”
- 选择机器类型(默认设置现在可以使用)
-
配置您的环境
- 选择 Python 3.x (推荐:Python 3.10)
- 启用 Vertex AI 和 Cloud Storage API
- 在 Google Cloud Console 中,转到 API 和服务 → 库
- 搜索 Vertex AI API 和 Cloud Storage API,然后启用它们。
-
在您的笔记本中安装依赖项
在新的 Jupyter Notebook 单元格中运行这些命令:
!pip install --upgrade google-genai langchain !gcloud auth application-default login
- 这将安装 Google Gemini API 和 LangChain。
- gcloud auth application-default login 确保您的笔记本通过 Google Cloud 进行身份验证。
-
初始化 Vertex AI 客户端
在您的托管笔记本中,运行以下代码以检查连接:
from google import genai client = genai.Client(project="your-project-id", location="us-central1") ## The rest of code: AI writing assistant helping a history professor organize a book...
3️⃣ Google Colab(最适合快速实验,在本指南中忽略)
- 优点:免费、基于云且易于共享。无需设置 — 登录并开始运行代码。
- 缺点:运行时有限,大型项目的性能较慢,并且对依赖项的控制较少。
✅ 现在您已准备好编写代码!
无论您选择本地 IDE 还是 Vertex AI Workbench,您的环境都已准备好使用 LangChain 构建和测试 Gemini API 项目。接下来,我们将逐步介绍编写您的第一个聊天机器人! 🚀
使用 Gemini、LangChain、RAG、向量嵌入和 Flask 开发聊天机器人
在 Google Cloud Storage (GCS) 中存储和管理 RAG 数据
在使用知识库构建聊天机器人之前,我们将RAG 数据 (creditcard_QA.txt
) 上传到 Google Cloud Storage (GCS)。这确保了聊天机器人可以有效地检索相关信息。要在 GCS 中存储和使用 creditcard_QA.txt
,请按照以下步骤操作:
-
在 Google Cloud Console 中启用 Cloud Storage
- 转到 Google Cloud Console。
- 确保为您的项目启用了结算功能。
- 导航到 Cloud Storage 并单击“创建存储分区”。
-
创建存储分区
- 选择一个全局唯一的存储分区名称(例如,
my-chatbot-kb
)。 - 选择一个存储类别(例如,标准)。
- 将位置设置为与您的 Vertex AI 区域匹配(例如,
us-central1
)。 - 单击“创建”。
- 选择一个全局唯一的存储分区名称(例如,
-
上传知识库文件 (
creditcard_QA.txt
)- 打开创建的存储分区。
- 单击“上传文件”并从您的本地驱动器中选择
creditcard_QA.txt
。 - 上传后,记下 GCS 路径(例如,
gs://my-chatbot-kb/creditcard_QA.txt
)。
-
设置权限(可选)
- 在存储分区设置中,转到“权限”。
- 将角色“存储对象查看者”添加到您的帐户。
-
通过命令行验证上传
或者,使用
gcloud
CLI:gcloud storage cp creditcard_QA.txt gs://my-chatbot-kb/
上传后,聊天机器人可以从 GCS 动态检索知识,而不是依赖本地文件。此文件将使用 Google Cloud Storage API 和 FAISS 向量搜索集成到聊天机器人中。
拆解聊天机器人代码
本节将逐步拆解聊天机器人代码,解释每个代码块的关键功能。
1️⃣ 导入和环境设置
第一部分导入必要的库,包括用于 Web 框架的 Flask
、用于会话存储的 sqlite3
、用于访问 Google Cloud Storage (GCS) 中知识库的 google.cloud.storage
,以及用于检索增强生成 (RAG) 的 langchain
组件,如 ChatVertexAI
、FAISS
和 HuggingFaceEmbeddings
。它还使用 dotenv
初始化环境变量。
import os
import sqlite3
from flask import Flask, request, jsonify, render_template
from google.cloud import storage, aiplatform
from langchain_google_vertexai import ChatVertexAI
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
from langchain.text_splitter import CharacterTextSplitter
from langchain.chains import ConversationalRetrievalChain
from langchain.docstore.document import Document
👉 目的:确保加载必要的依赖项,并且 AI 模型可以连接到 Google Vertex AI。
2️⃣ 配置和云存储设置
本节定义了重要的项目详细信息,包括 PROJECT_ID
、BUCKET_NAME
和 GCS_KNOWLEDGE_FILE
。函数 download_knowledge_from_gcs()
从 Google Cloud Storage 检索知识库文件 (creditcard_QA.txt
)。
PROJECT_ID = "chatbotragproject"
BUCKET_NAME = "mybucket"
GCS_KNOWLEDGE_FILE = "creditcard_QA.txt"
def download_knowledge_from_gcs():
storage_client = storage.Client(project=PROJECT_ID)
bucket = storage_client.bucket(BUCKET_NAME)
blob = bucket.blob(GCS_KNOWLEDGE_FILE)
if not blob.exists():
raise FileNotFoundError(f"{GCS_KNOWLEDGE_FILE} not found in gs://{BUCKET_NAME}")
return blob.download_as_text(encoding="utf-8")
👉 目的:从 Google Cloud Storage 动态加载聊天机器人的知识库,而不是本地文件。
3️⃣ 处理知识库并创建向量存储
加载知识库后,文本被分成块并存储在向量数据库 (FAISS) 中。 HuggingFaceEmbeddings
生成向量嵌入,从而实现高效的语义搜索。
kb_content = download_knowledge_from_gcs()
text_splitter = CharacterTextSplitter(separator="\n\n", chunk_size=1000, chunk_overlap=200)
chunks = text_splitter.split_text(kb_content)
documents = [Document(page_content=chunk) for chunk in chunks]
embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
vectorstore = FAISS.from_documents(documents, embeddings)
👉 目的:使用 FAISS 将文本转换为向量嵌入,以进行语义搜索检索。
4️⃣ 初始化 AI 模型和 RAG 管道
聊天机器人通过 ChatVertexAI
使用 Google 的 Gemini 模型来生成响应。 ConversationalRetrievalChain 将 Gemini 与 FAISS 连接起来,从而实现检索增强生成 (RAG)。
llm = ChatVertexAI(
project_id=PROJECT_ID,
location="us-central1",
model_name="gemini-2.0-flash-001",
max_output_tokens=180,
temperature=0.25,
top_p=0.95
)
qa_chain = ConversationalRetrievalChain.from_llm(
llm,
retriever=vectorstore.as_retriever()
)
👉 目的:将 LangChain 的 Conversational RAG 与 Gemini 集成,以生成上下文感知的 AI 响应。
5️⃣ 会话处理 (SQLite)
为了维护聊天记录,聊天机器人将用户对话存储在 SQLite 数据库中。函数 get_conversation_history()
和 add_message_to_history()
管理此历史记录。
def get_conversation_history(user_id, session_id):
conn = sqlite3.connect('conversation_history.db')
c = conn.cursor()
c.execute('CREATE TABLE IF NOT EXISTS conversation_history (user_id TEXT, session_id TEXT, role TEXT, message TEXT, timestamp DATETIME)')
conn.commit()
c.execute('SELECT role, message FROM conversation_history WHERE user_id = ? AND session_id = ? ORDER BY timestamp', (user_id, session_id))
rows = c.fetchall()
conn.close()
return rows
def add_message_to_history(user_id, session_id, role, message):
conn = sqlite3.connect('conversation_history.db')
c = conn.cursor()
c.execute('INSERT INTO conversation_history VALUES (?, ?, ?, ?, ?)', (user_id, session_id, role, message, datetime.utcnow()))
conn.commit()
conn.close()
👉 目的:存储用户交互,以便聊天机器人可以维护对话上下文。
6️⃣ 用于聊天机器人交互的 Flask API
聊天机器人可通过 Flask 访问。 /send
路由处理用户查询,检索相关知识,并返回响应。
@app.route('/send', methods=['POST'])
def send_message():
user_message = request.json.get('message')
user_id = 'unique_user_id'
session_id = 'unique_session_id'
chat_history = get_conversation_history(user_id, session_id)
result = qa_chain({"question": user_message, "chat_history": chat_history})
answer = result.get("answer", "I'm sorry, I couldn't generate an answer.")
add_message_to_history(user_id, session_id, "user", user_message)
add_message_to_history(user_id, session_id, "assistant", answer)
return jsonify({'response': answer})
👉 目的:定义聊天机器人 API 端点,允许用户发送问题并接收 AI 生成的答案。
7️⃣ 运行 Flask 应用程序 该脚本初始化 Flask 并启动聊天机器人服务器。
if __name__ == '__main__':
app.run()
👉 目的:启动聊天机器人,使其可通过 Web 界面访问。
最终总结
- RAG 管道:从 Google Cloud Storage 加载知识库,处理文本,并将向量嵌入存储在 FAISS 中。
- AI 模型:使用 Google Gemini(通过 Vertex AI)进行文本生成。
- Flask Web API:允许用户在浏览器中与 AI 聊天。
- 会话管理:使用 SQLite 维护对话上下文。
- 可扩展的知识库:聊天机器人从 GCS 动态提取知识,使其易于更新。
您可以在 https://github.com/datalev001/gemini_vertex_chatbot 访问数据和代码
结论与最终想法
本文介绍了如何将 Gemini API 与 Vertex AI 和 LangChain 集成,重点是构建一个具有 RAG 的 AI 聊天机器人,用于智能知识检索。我的目标是弄清楚这些工具如何协同工作,并且本指南捕获了我在这个过程中学到的东西。
我开始这项研究是作为使用 Gemini + Vertex AI + LangChain 的实践项目的一部分,探索 API 身份验证、向量搜索和聊天机器人会话处理。通过分享这些见解,我希望帮助其他人从事类似的 AI 项目。
Gemini 正在快速发展,我很高兴看到接下来会发生什么——更强大的 AI、更好的搜索和更智能的应用程序。这仅仅是个开始,敬请期待!🚀