谷歌官网出了一套API, 可以直接让谷歌去负责文档的嵌入和存储
- 嵌入时候的费用
- 存储的费用
- 提问问题的向量化
以上都是都是免费的 只对检索到的文档按照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
如果有使用中的问题 欢迎评论交流一起学习