新闻详情

新闻详情

首页 / 资讯中心 / 详情

Gemini API Cookbook 实战:使用 Gemini Embedding 与 ChromaDB 构建向量数据库实现文档问答

发布时间:2026/10/1 21:57:07来源:尧图网络
Gemini API Cookbook 实战:使用 Gemini Embedding 与 ChromaDB 构建向量数据库实现文档问答
示例工程人工智能大模型【免费下载链接】cookbookExamples and guides for using the Gemini API项目地址https://gitcode.com/GitHub_Trending/coo/cookbook点击查看免费下载本指南基于当前仓库中的 examples/chromadb/README.md 及其配套教程 Vectordb_with_chroma.ipynb系统讲解如何用 Gemini API 生成文本嵌入Embedding、借助开源 Python 工具 ChromaDB 创建向量数据库并实现先检索最相关文档、再交给生成模型作答的文档问答链路。读完本文你将掌握自定义 ChromaDB Embedding 函数、批量写入文档向量、近邻检索相关段落以及将检索结果注入 Prompt 完成 RAG检索增强生成问答的完整实战能力。一、整体思路Embedding 向量数据库 生成式问答本教程的核心目标是用 Gemini API 创建一个向量数据库并从中检索出与问题最相关的答案。这里选用的向量数据库是 ChromaDB——一个开源的 Python 工具专门用于创建嵌入数据库。根据教程 Vectordb_with_chroma.ipynb 的 Overview 说明ChromaDB 支持存储嵌入向量及其元数据对文档与查询进行嵌入Embedding在嵌入数据库中进行语义检索。整个流程可以拆解为三步先用 Gemini Embedding 模型把文档转换成向量并写入 ChromaDB再用同样的模型把用户问题向量化通过近邻搜索找出最相关的文档片段最后把检索到的片段作为上下文注入 Prompt交给生成模型产出自然语言答案。这就是典型 RAG 的最小可运行实现。注意教程开头明确提示本 Notebook 需要付费档位的速率限制rate limits才能顺利运行并且当前 Gemini API 仅在部分区域可用。二、环境准备安装依赖与导入模块首先安装 ChromaDB 与 Gemini API 的 Python 库google-genai SDK。教程使用%pip魔法命令在 Jupyter/Colab 环境中安装%pip install -U -q google-genai2.9.0 chromadb随后导入本教程所需的模块import textwrap import chromadb import numpy as np import pandas as pd from IPython.display import Markdown from chromadb import Documents, EmbeddingFunction, Embeddings这里Documents、Embeddings、EmbeddingFunction都来自chromadb它们是后续自定义嵌入函数时使用的类型标注而numpy与pandas分别用于向量运算和以表格形式查看数据库内容。三、配置 API Key 与初始化客户端使用 Gemini API 前必须先取得 API Key可通过 Google AI Studio 一键创建。在 Colab 中把 Key 添加到左侧面板的 Secrets 管理器命名为GEMINI_API_KEY。将 Key 交给 SDK 有两种方式把 Key 写入GEMINI_API_KEY环境变量SDK 会自动读取显式传给genai.Client(api_key...)。本教程采用 Colab 的userdata读取 Secret 并初始化客户端from google import genai from google.colab import userdata GEMINI_API_KEY userdata.get(GEMINI_API_KEY) client genai.Client(api_keyGEMINI_API_KEY)选择嵌入模型的关键原则教程强调一个关键点任何嵌入模型都可以用于本教程但在真实应用中一定要选定一个具体模型并持续使用。因为不同模型的输出向量互不兼容混合使用会导致检索质量不可控。在google-genaiSDK 中可以通过列出模型并过滤支持embedContent操作的模型来查看可用的嵌入模型for m in client.models.list(): if embedContent in m.supported_actions: print(m.name)教程运行输出的可用嵌入模型包括models/embedding-001models/text-embedding-004models/gemini-embedding-exp-03-07models/gemini-embedding-expmodels/gemini-embedding-001仓库中的 quickstarts/Embeddings.ipynb 还提到最新的gemini-embedding-2是多模态嵌入模型可把文本、图片、视频、音频、PDF 映射到同一嵌入空间而文本场景下gemini-embedding-001仍然可用。本教程的示例采用gemini-embedding-001。四、准备测试文档数据教程准备了一小组Google 汽车使用说明书风格的文档用来构建嵌入数据库。三份文档分别介绍车内气候控制系统温度、气流、风扇、模式旋钮、大尺寸触摸屏导航、娱乐、气候控制、自动挡换挡Park / Reverse / Neutral / Drive / Low。完整内容可直接在 Vectordb_with_chroma.ipynb 中查看随后将三份文档组装成列表documents [DOCUMENT1, DOCUMENT2, DOCUMENT3]这类语料的特点是主题集中、句式规整非常适合用来直观验证语义相近的查询能命中对应文档。五、创建嵌入数据库自定义 Embedding 函数ChromaDB 支持自定义嵌入函数custom embedding function教程据此实现了一个调用 Gemini API 的GeminiEmbeddingFunction。5.1 关于 gemini-embedding-001 的新参数在调用gemini-embedding-001时需要了解两个新增参数task_type任务类型以及仅当task_typeRETRIEVAL_DOCUMENT时才有效的可选title。这两个参数只适用于最新的嵌入模型task_type的取值与含义如下表Task Type说明RETRIEVAL_QUERY指定给定文本是搜索/检索场景中的查询queryRETRIEVAL_DOCUMENT指定给定文本是搜索/检索场景中的文档SEMANTIC_SIMILARITY指定嵌入将用于语义文本相似度STS计算CLASSIFICATION指定嵌入将用于分类任务CLUSTERING指定嵌入将用于聚类任务补充说明在 quickstarts/Embeddings.ipynb 的 Using task_type 章节中明确指出task_type参数仅对gemini-embedding-001生效对于gemini-embedding-2该参数不受支持文本场景下应把任务指令直接写进 prompt。5.2 实现 GeminiEmbeddingFunction自定义函数继承自 ChromaDB 的EmbeddingFunction实现__call__方法接收Documents类型的输入并返回Embeddings向量列表from google.genai import types class GeminiEmbeddingFunction(EmbeddingFunction): def __call__(self, input: Documents) - Embeddings: EMBEDDING_MODEL_ID gemini-embedding-001 # param [text-embedding-004, gemini-embedding-001] {allow-input: true, isTemplate: true} title Custom query response client.models.embed_content( modelEMBEDDING_MODEL_ID, contentsinput, configtypes.EmbedContentConfig( task_typeretrieval_document, titletitle ) ) return response.embeddings[0].values代码要点client.models.embed_content是 google-genai SDK 的嵌入调用入口configtypes.EmbedContentConfig(...)用来携带task_type与title文档写入场景使用retrieval_document任务类型让模型生成的向量针对文档入库进行优化返回response.embeddings[0].values即该批次文档对应的嵌入向量值。顺带一提教程的运行输出中出现了 ChromaDB 的弃用警告DeprecationWarningGeminiEmbeddingFunction没有实现__init__这在未来版本中将成为必需。这意味着在升级 ChromaDB 后建议在类中显式补充__init__方法以保证兼容性。5.3 创建 collection 并写入文档接下来编写create_chroma_db函数实例化一个 Chroma 客户端通过create_collection创建集合collection——collection 就是存放嵌入、文档和任意元数据的地方前面定义的嵌入函数作为embedding_function参数传入随后用add方法逐条写入文档def create_chroma_db(documents, name): chroma_client chromadb.Client() db chroma_client.create_collection( namename, embedding_functionGeminiEmbeddingFunction() ) for i, d in enumerate(documents): db.add( documentsd, idsstr(i) ) return db调用该函数创建名为google-car-db的数据库# Set up the DB db create_chroma_db(documents, google-car-db)这里ids使用字符串形式的序号0、1、2作为每条文档的唯一标识。5.4 验证数据是否写入成功用db.get(include[documents, embeddings])取回已入库的内容并用 pandas 展示嵌入向量截断显示以免输出过长sample_data db.get(include[documents, embeddings]) df pd.DataFrame({ IDs: sample_data[ids][:3], Documents: sample_data[documents][:3], Embeddings: [str(emb)[:50] ... for emb in sample_data[embeddings][:3]] # Truncate embeddings }) df输出结果是一张三行三列的表格IDs / Documents / Embeddings可以看到每条文档都对应一段浮点数向量例如[ 0.00971627 -0.00177013 0.00590323 ...]证明嵌入已成功生成并入库。六、语义检索找出与问题最相关的文档db是 Chroma 的 collection 对象可以直接对它调用query方法执行近邻搜索nearest neighbors search找出与查询语义最接近的嵌入或文档。教程封装了get_relevant_passage函数def get_relevant_passage(query, db): passage db.query(query_texts[query], n_results1)[documents][0][0] return passagen_results1表示只返回最相似的一条结果[documents][0][0]则依次取出第一条结果、第一个文档列表中的第一项。用查询touch screen features测试# Perform embedding search passage get_relevant_passage(touch screen features, db) Markdown(passage)返回的正是介绍触摸屏功能的 DOCUMENT2——注意查询文本并没有包含导航音乐等原文关键词却能命中语义相关的文档这正是向量检索相对关键词匹配的优势所在。七、构造 Prompt 并调用生成模型回答找到相关段落之后下一步就是把它做成 Prompt 交给 Gemini 生成模型。make_prompt函数负责把检索到的段落清洗去除引号与换行后嵌入到一段固定的指令模板中def make_prompt(query, relevant_passage): escaped relevant_passage.replace(, ).replace(, ).replace(\n, ) prompt ( You are a helpful and informative bot that answers questions using text from the reference passage included below. Be sure to respond in a complete sentence, being comprehensive, including all relevant background information. However, you are talking to a non-technical audience, so be sure to break down complicated concepts and strike a friendly and converstional tone. If the passage is irrelevant to the answer, you may ignore it. QUESTION: {query} PASSAGE: {relevant_passage} ANSWER: ).format(queryquery, relevant_passageescaped) return prompt模板的设计思路很明确让模型只用参考段落作答、面向非技术读者给出完整而友好的解释同时允许在段落与问题无关时忽略它。传入示例问题并生成完整 Promptquery How do you use the touchscreen in the Google car? prompt make_prompt(query, passage) Markdown(prompt)最后用generate_content方法让模型基于该 Prompt 生成回答MODEL_ID gemini-3.8-flash # param [gemini-3.1-pro-preview, gemini-3.8-flash, gemini-3.7-flash, gemini-3.6-flash, gemini-3.5-flash-lite, gemini-2.5-pro] {allow-input: true, isTemplate: true} answer client.models.generate_content( model MODEL_ID, contents prompt ) Markdown(answer.text)教程中的实际输出演示了完整的 RAG 效果模型基于检索到的触摸屏段落用通俗、友好的口吻解释了轻触图标即可使用导航、音乐、气候控制等功能——既没有照搬原文也没有超出检索上下文编造内容。八、深入学习与仓库内相关资源本教程展示了把 Embedding 应用于向量数据库的典型模式。如果想继续深入了解仓库中还有大量相关资源quickstarts/Embeddings.ipynbEmbedding 入门指南涵盖多模态嵌入文本/图片/音频/视频/PDF、批量嵌入、output_dimensionality降维、基于余弦相似度的句子相似度分析以及用task_type构建 RAG 的完整示例find_best_passage 生成式回答examples/Talk_to_documents_with_embeddings.ipynb 与 examples/document_search.ipynb文档级问答与搜索实践examples/Search_reranking_using_embeddings.ipynb用 Embedding 对 Wikipedia 搜索结果重排序examples/Anomaly_detection_with_embeddings.ipynb用 Embedding 检测数据集中的离群点examples/Classify_text_with_embeddings.ipynb基于 Embedding 训练文本分类器向量数据库生态示例examples/langchain、examples/llamaindex、examples/qdrant、examples/weaviate。九、小结本文完整复现了 ChromaDB 与 Gemini API 组合构建向量数据库问答系统的最小闭环安装依赖 → 配置 Key → 定义自定义嵌入函数 → 创建 collection 入库 → 近邻检索 → 构造 Prompt → 生成回答。需要记住的实践要点包括选定并固定一个嵌入模型、文档入库使用retrieval_document任务类型、查询向量化后通过db.query做近邻搜索、最终回答严格锚定检索上下文。这套模式可以直接迁移到 FAQ 机器人、企业知识库问答等真实场景是上手 RAG 的最佳起点。赞分享示例工程人工智能大模型【免费下载链接】cookbookExamples and guides for using the Gemini API项目地址https://gitcode.com/GitHub_Trending/coo/cookbook点击查看免费下载相关推荐Gemini API 文本与多模态 Embedding 实战指南基于 gemini-api Skill 构建跨模态语义搜索Gemini API 文本与多模态 Embedding 实战指南基于 gemini api Skill 构建跨模态语义搜索 导读 本文以开源仓库 skillsAI 技能人工智能大模型LiteDB 向量搜索演示工具实战基于 Gemini Embedding 的文档摄取与语义检索LiteDB 向量搜索演示工具实战基于 Gemini Embedding 的文档摄取与语义检索 导读 LiteDB.Demo.Tools.VectorSear嵌入式数据库文档数据库使用 Gemini 多模态 API 构建视频 RAG 对话应用video-rag-gemini 实战指南使用 Gemini 多模态 API 构建视频 RAG 对话应用video rag gemini 实战指南 本指南围绕 ai engineering hub 仓示例工程上一篇深度解析Windows防撤回神器5步实现微信QQ消息永久保留下一篇如何快速实现React Spectrum与React Router的无缝整合完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

自适应遗传算法在配电网DG选址定容中的Matlab复现与调试 2026/10/1 22:55:29

自适应遗传算法在配电网DG选址定容中的Matlab复现与调试

第一次拿到这个课题,我的第一反应是:这不就是把遗传算法套到配电网DG选址定容上,换个自适应算子,然后在IEEE33和IEEE118上各跑一遍的事儿吗?等我真正动手复现才发现,细节远比想象中多。今天这篇就把整个复现…

阅读更多 →
智能表单实战:Schema 建模、条件显隐、校验时机与自动填充 2026/10/1 22:55:29

智能表单实战:Schema 建模、条件显隐、校验时机与自动填充

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
PVE服务器硬件监控:CPU温度、硬盘温度与UPS状态集成指南 2026/10/1 22:55:28

PVE服务器硬件监控:CPU温度、硬盘温度与UPS状态集成指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
DevHub深度拆解:AI一键生成应用与成本账本的设计之道 2026/10/1 22:55:21

DevHub深度拆解:AI一键生成应用与成本账本的设计之道

写这篇稿子之前,我先说明一下背景。最近我在产品的选型阶段,密集接触了一批"AI一键生成应用"的工具,其中一个让我印象特别深的就是 DevHub。它的起点其实很简单——你在输入框里用自然语言描述一个想要的东西,比如"…

阅读更多 →
TestableMock自定义Mock处理器:从字节码增强到测试替身实战 2026/10/1 22:55:21

TestableMock自定义Mock处理器:从字节码增强到测试替身实战

我刚开始用TestableMock那阵子,一直把它当Mockito的“平替”来用——写个MockMethod,把外部依赖替换掉,省去一堆when().thenReturn()的样板代码。直到有个老项目里的一个静态工具类怎么都Mock不生效,我才开始认真翻它的源码&#…

阅读更多 →
Gin中间件详解:从执行链路原理到工程落地实践 2026/10/1 22:55:21

Gin中间件详解:从执行链路原理到工程落地实践

在Go的Web开发圈子里,Gin早就是事实上的标配框架了。很多人用它写接口,Handler里塞满了一坨一坨的重复逻辑:接口要不要登录、要不要打日志、要不要捕获panic、要不要做跨域……刚开始不觉得,等业务长起来,每个接口都来…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉