谷歌开发者

【GDE 分享】Gemma 2 + RAG: 打造个人 AI 文档问答系统

Image

本文作者 / 谷歌开发者专家曹江岚

示例效果

Image
Image

写在前面

"这份 200 页的技术文档,能帮我总结一下核心内容吗?"
"刚收到客户 100 页的需求文档,有办法快速理解吗?"
"团队的知识库太庞大了,想问个问题都要翻半天..."

是不是经常会遇到这样的困扰?今天,我们将利用下面两个技术为自己定制一个本地的 ChatFile 的 AI 问答系统:

1. Google 最新开源的生成式 AI 模型: Gemma 2

2. 检索增强生成技术: RAG (Retrieval - Augmented Generation)

Gen AI 技术发展

LLM 技术生态全景

Image

Google 生成式 AI

Image

Google 在 AI 领域采取了双轨制战略:

  1. 闭源商业模型
    1. Gemini 系列 (1.0/1.5 Flash/1.5 Pro/2.0 等) - 语言文本模型/多模态模型
    2. Imagen 系列 - 文生图模型
    3. Embedding Models - 文本 embedding/多模态 embedding
  2. 开放模型
    1. Gemma 系列 (Gemma 1|2, Code Gemma, Pali Gemma 等)

Gemma 是 Google 的一系列轻量级开放模型,继承了 Gemini 的核心技术。其中 Gemma 2 是截止目前最新的模型版本。

Gemma 2 提供了三个不同规模的版本:
  • 2B 参数版本: 适合边缘计算场景

  • 9B 参数版本: 平衡性能和资源需求

  • 27B 参数版本: 提供最佳性能

快速了解 RAG

Image

△ Comparison between the three paradigms of RAG

(来源: https://arxiv.org/abs/2312.10997v5)

Image

RAG 通过几个主要步骤来帮助增强生成式 AI 输出:
  • 检索和预处理: RAG 利用强大的搜索算法查询外部数据,例如网页、知识库和数据库。检索完毕后,相关信息会进行预处理,包括标记化、词干提取和停用词移除。

  • 生成: 经过预处理的检索到的信息接着会无缝整合到预训练的 LLM 中。此整合增强了 LLM 的上下文,使其能够更全面地理解主题。这种增强的上下文使 LLM 能够生成更精确、更翔实且更具吸引力的回答。

RAG 的运行方式是: 首先, 使用 LLM 生成的查询从数据库中检索相关信息。然后, 将这种检索到的信息整合到 LLM 的查询输入中,使其能够生成更准确且与上下文更相关的文本

实战从 0-1 构建智能文档助手

在本教程中,我们将带您了解如何设置和使用一个命令行工具,通过它您可以使用最先进的语言模型 Gemma 2 与您的 PDF 文件进行对话交互。

公开源代码

https://github.com/Julian-Cao/chat-file-with-gemma.git

项目概述

我们将构建一个 Python 的命令行应用程序,实现:

1. PDF 文本提取

2. 文本向量化

3. 智能问答生成

系统模块

Image

前置条件

在开始之前,请确保您已准备:

1. Python 3.7 或更高版本

2. 系统已安装 Git

3. 用于 Vertex AI 的 Google Cloud 账号

4. 申请用于访问 Gemma 2 的 Groq API 密钥

5. 安装 Python Typer 库命令行应用程序构建工具

步骤 1: 环境设置

首先,让我们克隆代码仓库并设置环境:
# Clone the repositorygit clone https://github.com/Julian-Cao/chat-file-with-gemma.gitcd chat-file-with-gemma# Create and activate a virtual environmentpython -m venv venvsource venv/bin/activate # On Windows, use `venv\Scripts\activate`# Install the required dependenciespip install -r requirements.txt

步骤 2: 配置

在项目根目录创建 config.json 文件,包含您的 Google Cloud 和 Groq API 凭证:

{"project_id": "your-google-cloud-project-id","region": "your-google-cloud-region","groq_key": "your-groq-api-key"}

步骤 3: 了解项目结构

项目的主要组件包括:

1. chat.py: 包含文本处理和交互的核心功能

2. requirements.txt: 列出所有 Python 依赖

3. demo.pdf: 示例 PDF 文件 — Attention Is All You Need

4. config.json: 存储你的 API 凭证 (需要自行创建)

5. README.md

  • Attention Is All You Need

    https://arxiv.org/abs/1706.03762

步骤 4: 工作原理

让我们来分析 chat.py 文件的关键组件:
  1. 文本提取:应用程序使用 PyMuPDF (以 fitz 导入) 从 PDF 文件中提取文本并将其分割成可管理的块。
  2. 文本嵌入:使用 Vertex AI 的文本嵌入模型为文本块创建向量表示。这使得后续可以进行高效的相似度搜索。
  3. 相似度搜索:当你提出问题时,应用程序通过比较问题的嵌入向量与文档块的嵌入向量找到最相关的内容。
  4. 响应生成:通过 Groq API 使用 Gemma 2 基于相关上下文和你的问题生成响应。

步骤 5: 运行你的 ChatFile 应用程序

现在你可以运行应用程序:

python chat.py

应用程序会提示你提供 PDF 文件路径。处理完文档后,你就可以开始询问关于其内容的问题。

开始使用

  1. 根据提示,输入 PDF 文件的路径。

  2. 应用程序将处理文档,这可能需要一些时间,具体取决于文件大小。

  3. 处理完成后,你就可以开始询问文档相关的问题。

  4. 输入你的问题并按回车。应用程序将根据文档内容提供答案。

  5. 要切换到不同的文档,在提示输入问题时输入 **'c'**。

  6. 要退出应用程序,在提示输入问题时输入 **'q'**。

示例交互

> python chat.pyPlease enter the path to your file (or 'q' to quit): /path/to/your/document.pdfInitializing with file: /path/to/your/document.pdfExtracting text chunks…Processing chunks…Embedded all chunksSaved embedded chunks to embedded_chunks_1234567890abcdef.jsonInitialization complete. You can now start asking questions.Enter your question below(or 'q' to quit, 'c' to change file)Question: What is the main topic of this document?[Answer will appear here]- -Enter your question below(or 'q' to quit, 'c' to change file)Question: qThank you for using the Interactive File Q&A System. Goodbye!

最后

恭喜!你已经设置并使用了由 Gemma 2 驱动的本地 ChatFile 应用。这个工具让你能够以对话方式与 PDF 文档交互。

此工具实现包含以下特性:
  • 缓存嵌入,使用相同文档时能更快地运行

  • 具有丰富文本格式的交互式命令行界面

  • 无需重启应用程序即可在不同文档之间切换
Image
Image
Image
Image

谷歌开发者特别招募活动进行中

诚邀热爱技术的你加入

通过多种形式 (文章/视频/coding 等) 创作与 Google 技术相关的讲解分享、实践案例或活动感受等内容,以及分享您应用 AI 技术的故事经历与成果。我们将为您提供平台和资源,助力您在分享中提升技能。更有惊喜权益等您领取,快来报名参与吧!


Image

Image

Image