Gemini API FileSearch谷歌RAG接口API教程

70 阅读2分钟

谷歌官网出了一套API, 可以直接让谷歌去负责文档的嵌入和存储

  1. 嵌入时候的费用
  2. 存储的费用
  3. 提问问题的向量化

以上都是都是免费的 只对检索到的文档按照token计费 (每 100 万个令牌 $0.15)

速率限制

为了确保服务稳定性,文件搜索 API 具有以下限制:

文件大小上限 / 每个文档的限制:100 MB
项目文件搜索存储空间总大小(取决于用户层级):
免费:1 GB
1 级:10 GB
第 2 级:100 GB
3 级:1 TB
建议:将每个文件搜索存储空间的大小限制在 20 GB 以下,以确保最佳检索延迟时间。

接口调用

创建知识库空间

from google import genai
from google.genai import types
# 这个clint中有一个api_key参数需要填写, 也可以设置好环境变量, 会自动读取
# 示例 export GEMINI_API_KEY='your-api-key'
client = genai.Client(api_key=?)
# 这一行就是在云端创建一个叫做my-file-search-store的知识库
# 但是他会在后面加上一些随机码, 防止重名
store = client.file_search_stores.create(config={'display_name': 'my-file-search-store'})
# 后续的服务一调用都是根据这个名字的, 所以记得保存!!!
# 后续的服务一调用都是根据这个名字的, 所以记得保存!!!
# 后续的服务一调用都是根据这个名字的, 所以记得保存!!!
print("Store created:", store.name)

上传文件

支持的文件类型 https://ai.google.dev/gemini-api/docs/file-search?hl=zh-cn#text

import time
operation = client.file_search_stores.upload_to_file_search_store(
		#上传文件的路径
   file='path/to/document.pdf', 
   # 知识库空间的名字, 这里注意, 你在创建知识库之后, 会返回一个file_search_stores对象
   #注意是file_search_stores的name, 而不是你取的名字
   # 谷歌会在你的命名后面加上随机字符
   file_search_store_name=store.name,
   # 文档的显示名称, 这个不懂的话, 直接根据项目名称固定就好了
   # 要明确的话可以去google clued控制台去看看就懂了
   config={'display_name': 'research-doc'}
)

while not operation.done:
   time.sleep(5)
   # 可以调用这一行命令获取之前创建的知识库数据, 查看刚刚上传的文件是否解析完成
   operation = client.operations.get(operation)
print("File uploaded and indexed.")

文档召回

response = client.models.generate_content(
   model='gemini-2.5-flash',
   contents="Summarize the research findings",
   #配置RAG工具,并且在工具列表中添加知识库空间的名字
   # 可以添加多个, 以实现多路召回
   config=types.GenerateContentConfig(
       tools=[types.Tool(
           file_search=types.FileSearch(file_search_store_names=[store.name])
       )]
   )
)
print(response.text)

本文结合自己调用经验和参考谷歌的官方文档 https://ai.google.dev/gemini-api/docs/file-search?hl=zh-cn#importing-files 如果有使用中的问题 欢迎评论交流一起学习