Gemini API, Dosya Arama aracıyla almayla artırılmış üretim ("RAG") sağlar. Dosya Arama, kullanıcının istemine göre alakalı bilgilerin hızlıca alınmasını sağlamak için verilerinizi içe aktarır, parçalara ayırır ve dizine ekler. Bu bilgiler daha sonra modele bağlam olarak sağlanır ve modelin daha doğru ve alakalı yanıtlar vermesine olanak tanır.
Mevcut bir dosyayı doğrudan dosya arama mağazanıza yüklemek için uploadToFileSearchStore API'yi kullanabilir veya dosyayı aynı anda oluşturmak istiyorsanız dosyayı ayrı olarak yükleyip içe aktarabilirsiniz.
Doğrudan dosya arama mağazasına yükleme
Bu örnekte, bir dosyanın doğrudan dosya deposuna nasıl yükleneceği gösterilmektedir:
Python
from google import genai
from google.genai import types
import time
client = genai.Client()
# Create the file search store with an optional display name that shows in the grounding metadata
file_search_store = client.file_search_stores.create(config={'display_name': 'your-fileSearchStore-name'})
# Upload and import a file into the file search store, supply a unique file name which will be visible in citations
operation = client.file_search_stores.upload_to_file_search_store(
file='path/to/your/file.txt',
file_search_store_name='unique_file_name'
)
# Wait until import is complete
while not operation.done:
time.sleep(5)
operation = client.operations.get(operation)
# Ask a question about the file
response = client.models.generate_content(
model="gemini-2.5-flash",
contents="""Can you tell me about Robert Graves""",
config=types.GenerateContentConfig(
tools=[
file_search=(
file_search_store_names=[file_search_store.name]
)
]
)
)
print(response.text)
Dosyaları içe aktarma
Alternatif olarak, mevcut bir dosyayı yükleyip dosya deponuza aktarabilirsiniz:
Python
from google import genai
from google.genai import types
import time
client = genai.Client()
# Upload the file using the Files API, supply a unique file name which will be visible in citations
sample_file = client.files.upload(file='sample.txt', config={'name': 'unique_file_name'})
# Create the file search store with an optional display name that shows in the grounding metadata
file_search_store = client.file_search_stores.create(config={'display_name': 'your-fileSearchStore-name'})
# Import the file into the file search store
operation = client.file_search_stores.import_file(
file_search_store_name=file_search_store.name,
file_name=sample_file.name
)
# Wait until import is complete
while not operation.done:
time.sleep(5)
operation = client.operations.get(operation)
# Ask a question about the file
response = client.models.generate_content(
model="gemini-2.5-flash",
contents="""Can you tell me about Robert Graves""",
config=types.GenerateContentConfig(
tools=[
file_search=(
file_search_store_names=[file_search_store.name]
)
]
)
)
print(response.text)
Parçalara ayırma yapılandırması
Bir dosyayı dosya arama deposuna aktardığınızda dosya otomatik olarak parçalara ayrılır, yerleştirilir, dizine eklenir ve dosya arama deponuza yüklenir. Parçalama stratejisi üzerinde daha fazla kontrol sahibi olmak istiyorsanız parça başına maksimum jeton sayısı ve maksimum çakışan jeton sayısı belirlemek için bir chunking_config ayarı belirtebilirsiniz.
# Upload and import and upload the file into the file search store with a custom chunking configuration
operation = client.file_search_stores.upload_to_file_search_store(
file_search_store_name=file_search_store.name,
file_name=sample_file.name,
config={
'chunking_config': {
'white_space_config': {
'max_tokens_per_chunk': 200,
'max_overlap_tokens': 20
}
}
}
)
Dosya arama mağazanızı kullanmak için generateContent yöntemine araç olarak iletin. Bu işlem, Yükleme ve İçe Aktarma örneklerinde gösterilmiştir.
İşleyiş şekli
Dosya Arama, kullanıcı istemiyle alakalı bilgileri bulmak için semantik arama adı verilen bir teknik kullanır. Geleneksel anahtar kelime tabanlı aramanın aksine, semantik arama sorgunuzun anlamını ve bağlamını anlar.
İçe aktardığınız dosyalar, metnin semantik anlamını yakalayan yerleştirmeler adı verilen sayısal gösterimlere dönüştürülür. Bu yerleştirmeler, özel bir dosya arama veritabanında saklanır. Sorgularınız da yerleştirmeye dönüştürülür. Ardından sistem, dosya arama deposunda en benzer ve alakalı belge parçalarını bulmak için dosya araması yapar.
Dosya Arama API'sini kullanma sürecinin dökümünü aşağıda bulabilirsiniz:
uploadToFileSearchStore
Dosya arama deposu oluşturma: Dosya arama deposu, dosyalarınızdaki işlenmiş verileri içerir. Bu, semantik aramanın üzerinde çalışacağı yerleştirmeler için kalıcı kapsayıcıdır.
Dosya yükleme ve dosya arama deposuna aktarma: Aynı anda dosya yükleyin ve sonuçları dosya arama deponuza aktarın. Bu işlem, ham dokümanınıza referans veren geçici bir
Filenesnesi oluşturur. Bu veriler daha sonra parçalara ayrılır, dosya arama yerleştirmelerine dönüştürülür ve dizine eklenir.FileNesne 48 saat sonra silinir. Dosya arama deposuna aktarılan veriler ise siz silmeyi seçene kadar süresiz olarak saklanır.Dosya Arama ile sorgu: Son olarak,
generateContentgörüşmesindeFileSearcharacını kullanırsınız. Araç yapılandırmasında, aramak istediğinizFileSearchStoreöğesini işaret eden birFileSearchRetrievalResourcebelirtirsiniz. Bu, modele yanıtını temellendirmek için alakalı bilgileri bulmak üzere söz konusu dosya arama deposunda anlamsal arama yapmasını söyler.
Bu şemada, Belgeler'den Yerleştirme modeli'ne (gemini-embedding-001 kullanılarak) giden noktalı çizgi, uploadToFileSearchStore API'yi (Dosya depolama'yı atlayarak) temsil eder.
Aksi takdirde, dosyaları ayrı ayrı oluşturup içe aktarmak için Files API'yi kullanmak, dizine ekleme sürecini Belgeler'den Dosya depolama'ya ve ardından Yerleştirme modeli'ne taşır.
Dosya arama mağazaları
Dosya arama deposu, doküman yerleştirmelerinizin bulunduğu bir kapsayıcıdır. File API aracılığıyla yüklenen ham dosyalar 48 saat sonra silinirken, dosya arama deposuna aktarılan veriler siz manuel olarak silene kadar süresiz olarak saklanır. Dokümanlarınızı düzenlemek için birden fazla dosya arama deposu oluşturabilirsiniz. FileSearchStore API, dosya arama depolarınızı yönetmek için oluşturma, listeleme, alma ve silme işlemlerini yapmanıza olanak tanır. Dosya arama mağazası adları küresel kapsamlıdır.
Dosya arama depolarınızı nasıl yönetebileceğinize dair bazı örnekleri aşağıda bulabilirsiniz:
# Create a file search store (including optional display_name for easier reference)
file_search_store = client.file_search_stores.create(config={'display_name': 'my-file_search-store-123'})
# List all your file search stores
for file_search_store in client.file_search_stores.list():
print(file_search_store)
# Get a specific file search store by name
my_file_search_store = client.file_search_stores.get(name='fileSearchStores/my-file_search-store-123')
# Delete a file search store
client.file_search_stores.delete(name='fileSearchStores/my-file_search-store-123', config={'force': True})
Dosya meta verileri
Dosyalarınızı filtrelemenize veya ek bağlam bilgisi sağlamanıza yardımcı olması için dosyalarınıza özel meta veriler ekleyebilirsiniz. Meta veriler, anahtar/değer çiftlerinden oluşan bir settir.
# Import the file into the file search store with custom metadata
op = client.file_search_stores.import_file(
file_search_store_name=file_search_store.name,
file_name=sample_file.name,
custom_metadata=[
{"key": "author", "string_value": "Robert Graves"},
{"key": "year", "numeric_value": 1934}
]
)
Bu özellik, bir dosya arama deposunda birden fazla dokümanınız olduğunda ve yalnızca bunların bir alt kümesinde arama yapmak istediğinizde kullanışlıdır.
# Use the metadata filter to search within a subset of documents
response = client.models.generate_content(
model="gemini-2.5-flash",
contents="""Tell me about the book 'I, Claudius'""",
config=types.GenerateContentConfig(
tools=[
types.Tool(
file_search=types.FileSearch(
file_search_store_names=[file_search_store.name],
metadata_filter = 'author=Robet Graves',
)
)
]
)
)
print(response.text)
metadata_filter için liste filtresi söz dizimini uygulama ile ilgili yönergeleri google.aip.dev/160 adresinde bulabilirsiniz.
Alıntılar
Dosya Arama'yı kullandığınızda modelin yanıtı, yüklenen dokümanlarınızın hangi bölümlerinin yanıtı oluşturmak için kullanıldığını belirten alıntılar içerebilir. Bu, doğruluk kontrolü ve doğrulama işlemlerine yardımcı olur.
Alıntı bilgilerine yanıtın grounding_metadata özelliği üzerinden erişebilirsiniz.
print(response.candidates[0].grounding_metadata)
Desteklenen modeller
Aşağıdaki modellerde Dosya Arama özelliği desteklenir:
Desteklenen dosya türleri
Dosya Arama, aşağıdaki bölümlerde listelenen çok çeşitli dosya biçimlerini destekler.
Uygulama dosyası türleri
application/dartapplication/ecmascriptapplication/jsonapplication/ms-javaapplication/mswordapplication/pdfapplication/sqlapplication/typescriptapplication/vnd.curlapplication/vnd.dartapplication/vnd.ibm.secure-containerapplication/vnd.jupyterapplication/vnd.ms-excelapplication/vnd.oasis.opendocument.textapplication/vnd.openxmlformats-officedocument.presentationml.presentationapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetapplication/vnd.openxmlformats-officedocument.wordprocessingml.documentapplication/vnd.openxmlformats-officedocument.wordprocessingml.templateapplication/x-cshapplication/x-hwpapplication/x-hwp-v5application/x-latexapplication/x-phpapplication/x-powershellapplication/x-shapplication/x-shellscriptapplication/x-texapplication/x-zshapplication/xmlapplication/zip
Metin dosyası türleri
text/1d-interleaved-parityfectext/REDtext/SGMLtext/cache-manifesttext/calendartext/cqltext/cql-extensiontext/cql-identifiertext/csstext/csvtext/csv-schematext/dnstext/encaprtptext/enrichedtext/exampletext/fhirpathtext/flexfectext/fwdredtext/gff3text/grammar-ref-listtext/hl7v2text/htmltext/javascripttext/jcr-cndtext/jsxtext/markdowntext/mizartext/n3text/parameterstext/parityfectext/phptext/plaintext/provenance-notationtext/prs.fallenstein.rsttext/prs.lines.tagtext/prs.prop.logictext/raptorfectext/rfc822-headerstext/rtftext/rtp-enc-aescm128text/rtploopbacktext/rtxtext/sgmltext/shaclctext/shextext/spdxtext/stringstext/t140text/tab-separated-valuestext/texmacstext/trofftext/tsvtext/tsxtext/turtletext/ulpfectext/uri-listtext/vcardtext/vnd.DMClientScripttext/vnd.IPTC.NITFtext/vnd.IPTC.NewsMLtext/vnd.atext/vnd.abctext/vnd.ascii-arttext/vnd.curltext/vnd.debian.copyrighttext/vnd.dvb.subtitletext/vnd.esmertec.theme-descriptortext/vnd.exchangeabletext/vnd.familysearch.gedcomtext/vnd.ficlab.flttext/vnd.flytext/vnd.fmi.flexstortext/vnd.gmltext/vnd.graphviztext/vnd.hanstext/vnd.hgltext/vnd.in3d.3dmltext/vnd.in3d.spottext/vnd.latex-ztext/vnd.motorola.reflextext/vnd.ms-mediapackagetext/vnd.net2phone.commcenter.commandtext/vnd.radisys.msml-basic-layouttext/vnd.senx.warpscripttext/vnd.sositext/vnd.sun.j2me.app-descriptortext/vnd.trolltech.linguisttext/vnd.wap.sitext/vnd.wap.sltext/vnd.wap.wmltext/vnd.wap.wmlscripttext/vtttext/wgsltext/x-asmtext/x-bibtextext/x-bootext/x-ctext/x-c++hdrtext/x-c++srctext/x-cassandratext/x-chdrtext/x-coffeescripttext/x-componenttext/x-cshtext/x-csharptext/x-csrctext/x-cudatext/x-dtext/x-difftext/x-dsrctext/x-emacs-lisptext/x-erlangtext/x-gff3text/x-gotext/x-haskelltext/x-javatext/x-java-propertiestext/x-java-sourcetext/x-kotlintext/x-lilypondtext/x-lisptext/x-literate-haskelltext/x-luatext/x-moctext/x-objcsrctext/x-pascaltext/x-pcs-gcdtext/x-perltext/x-perl-scripttext/x-pythontext/x-python-scripttext/x-r-markdowntext/x-rsrctext/x-rsttext/x-ruby-scripttext/x-rusttext/x-sasstext/x-scalatext/x-schemetext/x-script.pythontext/x-scsstext/x-setexttext/x-sfvtext/x-shtext/x-siestatext/x-sostext/x-sqltext/x-swifttext/x-tcltext/x-textext/x-vbasictext/x-vcalendartext/xmltext/xml-dtdtext/xml-external-parsed-entitytext/yaml
Hız sınırları
File Search API, hizmet kararlılığını sağlamak için aşağıdaki sınırlara sahiptir:
- Maksimum dosya boyutu / belge başına sınır: 100 MB
- Proje başına dosya arama depolama alanı: 10
- Proje dosyası arama depolarının toplam boyutu (kullanıcı katmanına göre):
- Ücretsiz: 1 GB
- Katman 1: 10 GB
- 2. katman: 100 GB
- 3. Katman: 1 TB
- Öneri: Optimal alma gecikmeleri sağlamak için her dosya arama deposunun boyutunu 20 GB'ın altında tutun.
Fiyatlandırma
- Geliştiricilerden, mevcut gömme fiyatlandırmasına (1 milyon jeton başına 0,15 ABD doları) göre dizine ekleme sırasında gömmeler için ücret alınır.
- Depolama alanı ücretsizdir.
- Sorgu zamanı yerleştirmeleri ücretsizdir.
- Alınan doküman jetonları normal bağlam jetonları olarak ücretlendirilir.