2026-04-10 23:20:41 -04:00
---
layout: default
title: "Gömme İşlemleri Toplu İşleme Teknik Özellikleri"
parent: "Turkish (Beta)"
---
2026-04-06 14:50:34 -04:00
# Gömme İşlemleri Toplu İşleme Teknik Özellikleri
2026-04-10 23:20:41 -04:00
> **Beta Translation:** This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta.
2026-04-06 14:50:34 -04:00
## Genel Bakı ş
Bu teknik özellik, gömme hizmeti için, tek bir istekte birden fazla metni toplu olarak işleyebilmeyi desteklemek amacı yla yapı lan optimizasyonları açı klamaktadı r. Mevcut uygulama, her seferinde tek bir metni işlemektedir ve bu durum, gömme modellerinin toplu işlemler sı rası nda sağladı ğı önemli performans avantajları ndan yararlanı lmaması na neden olmaktadı r.
1. **Tek Metin İşleme Verimsizliği** : Mevcut uygulama, tek metinleri bir liste içinde kullanarak, FastEmbed'in toplu işleme yeteneklerini tam olarak kullanamamaktadı r.
2. **Metin Başı na İstek Yükü** : Her metin için ayrı bir Pulsar mesajı gönderilip alı nması gerekmektedir.
3. **Model Çı karı m Verimsizliği** : Gömme modellerinin sabit bir toplu işleme yükü vardı r; küçük toplu işlemler GPU/CPU kaynakları nı n israfı na yol açar.
4. **Çağı ran Tarafı nda Seri İşleme** : Önemli hizmetler, öğeler üzerinde döngü yaparak gömme işlemlerini tek tek gerçekleştirmektedir.
## Hedefler
**Toplu API Desteği**: Tek bir istekte birden fazla metni işleyebilmeyi destekleyin.
**Geriye Dönük Uyumluluk**: Tek metin isteklerine olan desteği koruyun.
**Önemli Verimlilik Artı şı **: Toplu işlemler için 5-10 kat verimlilik artı şı hedefleyin.
**Metin Başı na Azaltı lmı ş Gecikme**: Birden fazla metni gömme işlemi sı rası nda amortize gecikmeyi azaltı n.
**Bellek Verimliliği**: Aşı rı bellek tüketimi olmadan toplu işlemleri gerçekleştirin.
**Sağlayı cı dan Bağı msı zlı k**: FastEmbed, Ollama ve diğer sağlayı cı lar arası nda toplu işleme desteğini sağlayı n.
**Çağı ran Taraf Güncellemesi**: Toplu API'nin faydalı olduğu durumlarda tüm gömme işlemlerini kullanan hizmetleri güncelleyin.
## Arka Plan
### Mevcut Uygulama - Gömme Hizmeti
`trustgraph-flow/trustgraph/embeddings/fastembed/processor.py` içindeki gömme uygulaması nda önemli bir performans verimsizliği bulunmaktadı r:
```python
# fastembed/processor.py line 56
async def on_embeddings(self, text, model=None):
use_model = model or self.default_model
self._load_model(use_model)
vecs = self.embeddings.embed([text]) # Single text wrapped in list
return [v.tolist() for v in vecs]
```
**Sorunlar:**
1. **Batch Boyutu 1:** FastEmbed'in `embed()` yöntemi, toplu işleme için optimize edilmiştir, ancak bunu her zaman `[text]` - 1 boyutlu bir toplu işleme ile çağı rı yoruz.
2. **İstek Başı na Ek Yük:** Her gömme isteği aşağı daki ek yükleri içerir:
Pulsar mesajı serileştirme/deserileştirme
Ağ gidiş-dönüş gecikmesi
Model çı karı m başlatma ek yükü
Python asenkron planlama ek yükü
3. **Şema Sı nı rlaması :** `EmbeddingsRequest` şeması yalnı zca tek bir metni destekler:
```python
@dataclass
class EmbeddingsRequest:
text: str = "" # Single text only
```
### Mevcut Çağrı lar - Seri İşleme
#### 1. API Ağ Geçidi
**Dosya:** `trustgraph-flow/trustgraph/gateway/dispatch/embeddings.py`
Ağ geçidi, HTTP/WebSocket üzerinden tek metin gömme isteklerini kabul eder ve bunları gömme hizmetine yönlendirir. Şu anda toplu işlem için bir uç nokta bulunmamaktadı r.
```python
class EmbeddingsRequestor(ServiceRequestor):
# Handles single EmbeddingsRequest -> EmbeddingsResponse
request_schema=EmbeddingsRequest, # Single text only
response_schema=EmbeddingsResponse,
```
**Etki:** Harici müşteriler (web uygulamaları , betikler), N metni yerleştirmek için N adet HTTP isteği yapmalı dı r.
#### 2. Belge Gömme Hizmeti
**Dosya:** `trustgraph-flow/trustgraph/embeddings/document_embeddings/embeddings.py`
Belgeleri tek tek parçalar halinde işler:
```python
async def on_message(self, msg, consumer, flow):
v = msg.value()
# Single chunk per request
resp = await flow("embeddings-request").request(
EmbeddingsRequest(text=v.chunk)
)
vectors = resp.vectors
```
**Etki:** Her belge parçası için ayrı bir gömme (embedding) çağrı sı gereklidir. 100 parçadan oluşan bir belge = 100 gömme isteği.
#### 3. Grafik Gömme Hizmeti
**Dosya:** `trustgraph-flow/trustgraph/embeddings/graph_embeddings/embeddings.py`
Varlı klar üzerinde döngü yapar ve her birini sı rayla gömer:
```python
async def on_message(self, msg, consumer, flow):
for entity in v.entities:
# Serial embedding - one entity at a time
vectors = await flow("embeddings-request").embed(
text=entity.context
)
entities.append(EntityEmbeddings(
entity=entity.entity,
vectors=vectors,
chunk_id=entity.chunk_id,
))
```
**Etki:** 50 varlı k içeren bir mesaj, 50 adet ardı şı k gömme (embedding) isteği anlamı na gelir. Bu, bilgi grafiği oluşturma sı rası nda büyük bir darboğazdı r.
#### 4. Satı r Gömme Hizmeti
**Dosya:** `trustgraph-flow/trustgraph/embeddings/row_embeddings/embeddings.py`
Benzersiz metinler üzerinde döngü yapar ve her birini sı rayla gömer:
```python
async def on_message(self, msg, consumer, flow):
for text, (index_name, index_value) in texts_to_embed.items():
# Serial embedding - one text at a time
vectors = await flow("embeddings-request").embed(text=text)
embeddings_list.append(RowIndexEmbedding(
index_name=index_name,
index_value=index_value,
text=text,
vectors=vectors
))
```
**Etki:** 100 benzersiz indeksli değere sahip bir tabloyu işlemek = 100 ardı şı k gömme isteği.
#### 5. EmbeddingsClient (Temel İstemci)
**Dosya:** `trustgraph-base/trustgraph/base/embeddings_client.py`
Tüm iş akı şı işleyicileri tarafı ndan kullanı lan istemci, yalnı zca tek metin gömmesini destekler:
```python
class EmbeddingsClient(RequestResponse):
async def embed(self, text, timeout=30):
resp = await self.request(
EmbeddingsRequest(text=text), # Single text
timeout=timeout
)
return resp.vectors
```
**Etki:** Bu istemciyi kullanan tüm uygulamalar, yalnı zca tek metin işlemleriyle sı nı rlı dı r.
#### 6. Komut Satı rı Araçları
**Dosya:** `trustgraph-cli/trustgraph/cli/invoke_embeddings.py`
CLI aracı , tek bir metin argümanı alı r:
```python
def query(url, flow_id, text, token=None):
result = flow.embeddings(text=text) # Single text
vectors = result.get("vectors", [])
```
**Etki:** Kullanı cı lar, komut satı rı ndan toplu gömme işlemi yapamaz. Bir metin dosyası nı işlemek, N sayı da çağrı gerektirir.
#### 7. Python SDK
Python SDK, TrustGraph hizmetleriyle etkileşim kurmak için iki istemci sı nı fı sağlar. Her ikisi de yalnı zca tek metin gömme işlemini destekler.
**Dosya:** `trustgraph-base/trustgraph/api/flow.py`
```python
class FlowInstance:
def embeddings(self, text):
"""Get embeddings for a single text"""
input = {"text": text}
return self.request("service/embeddings", input)["vectors"]
```
**Dosya:** `trustgraph-base/trustgraph/api/socket_client.py`
```python
class SocketFlowInstance:
def embeddings(self, text: str, **kwargs: Any) -> Dict[str, Any]:
"""Get embeddings for a single text via WebSocket"""
request = {"text": text}
return self.client._send_request_sync(
"embeddings", self.flow_id, request, False
)
```
**Etki:** SDK'yı kullanan Python geliştiricilerinin, metinler üzerinde döngü yapması ve N adet API çağrı sı yapması gerekir. SDK kullanı cı ları için toplu gömme desteği mevcut değildir.
### Performans Etkisi
Tipik belge yükleme için (1000 metin parçası ):
**Mevcut:** 1000 ayrı istek, 1000 model çı karı m çağrı sı
**Toplu (batch_size=32):** 32 istek, 32 model çı karı m çağrı sı (%96,8 azalma)
Grafik gömme için (50 varlı ğa sahip mesaj):
**Mevcut:** 50 ardı şı k bekletme çağrı sı , ~5-10 saniye
**Toplu:** 1-2 toplu çağrı , ~0,5-1 saniye (5-10 kat iyileşme)
FastEmbed ve benzeri kütüphaneler, toplu boyutun donanı m sı nı rları na kadar ulaştı ğı durumlarda, yaklaşı k doğrusal bir verim ölçeklemesi sağlar (tipik olarak toplu boyutta 32-128 metin).
## Teknik Tasarı m
### Mimari
Gömme toplu işleme optimizasyonu, aşağı daki bileşenlerde değişiklikler gerektirir:
#### 1. **Şema Geliştirme**
`EmbeddingsRequest` 'ı , birden fazla metni destekleyecek şekilde genişletin
`EmbeddingsResponse` 'ı , birden fazla vektör kümesini döndürecek şekilde genişletin
Tek metin istekleriyle uyumluluğu koruyun
Modül: `trustgraph-base/trustgraph/schema/services/llm.py`
#### 2. **Temel Servis Geliştirme**
`EmbeddingsService` 'ı , toplu istekleri işleyebilecek şekilde güncelleyin
Toplu boyut yapı landı rması ekleyin
Toplu işleme duyarlı istek işleme uygulayı n
Modül: `trustgraph-base/trustgraph/base/embeddings_service.py`
#### 3. **Sağlayı cı İşlemcisi Güncellemeleri**
FastEmbed işlemcisini güncelleyin, böylece tam toplu iş yükünü `embed()` 'a iletebilir
Ollama işlemcisini güncelleyin, böylece toplu işlemleri işleyebilir (destekleniyorsa)
Toplu işlemeyi desteklemeyen sağlayı cı lar için yedek sı ralı işlemeyi ekleyin
Modüller:
`trustgraph-flow/trustgraph/embeddings/fastembed/processor.py`
`trustgraph-flow/trustgraph/embeddings/ollama/processor.py`
#### 4. **İstemci Geliştirme**
`EmbeddingsClient` 'a toplu gömme yöntemini ekleyin
Hem tek hem de toplu API'leri destekleyin
Büyük girdiler için otomatik toplu işlemeyi ekleyin
Modül: `trustgraph-base/trustgraph/base/embeddings_client.py`
#### 5. **Çağrı Güncellemeleri - Akı ş İşlemcileri**
`graph_embeddings` 'ı , varlı k bağlamları nı toplu hale getirecek şekilde güncelleyin
`row_embeddings` 'ı , indeks metinlerini toplu hale getirecek şekilde güncelleyin
Mesaj toplu işlemesi mümkünse, `document_embeddings` 'ı güncelleyin
Modüller:
`trustgraph-flow/trustgraph/embeddings/graph_embeddings/embeddings.py`
`trustgraph-flow/trustgraph/embeddings/row_embeddings/embeddings.py`
`trustgraph-flow/trustgraph/embeddings/document_embeddings/embeddings.py`
#### 6. **API Ağ Geçidi Geliştirme**
Toplu gömme uç noktası ekleyin
İstek gövdesinde metin dizisini destekleyin
Modül: `trustgraph-flow/trustgraph/gateway/dispatch/embeddings.py`
#### 7. **CLI Aracı Geliştirme**
Birden fazla metin veya dosya girişi desteği ekleyin
Toplu boyut parametresi ekleyin
Modül: `trustgraph-cli/trustgraph/cli/invoke_embeddings.py`
#### 8. **Python SDK Geliştirme**
`embeddings_batch()` yöntemini `FlowInstance` 'e ekleyin
`embeddings_batch()` yöntemini `SocketFlowInstance` 'e ekleyin
SDK kullanı cı ları için hem tek hem de toplu API'leri destekleyin
Modüller:
`trustgraph-base/trustgraph/api/flow.py`
`trustgraph-base/trustgraph/api/socket_client.py`
### Veri Modelleri
#### EmbeddingsRequest
```python
@dataclass
class EmbeddingsRequest:
texts: list[str] = field(default_factory=list)
```
Kullanı m:
Tek metin: `EmbeddingsRequest(texts=["hello world"])`
Toplu işlem: `EmbeddingsRequest(texts=["text1", "text2", "text3"])`
#### EmbeddingsResponse
```python
@dataclass
class EmbeddingsResponse:
error: Error | None = None
vectors: list[list[list[float]]] = field(default_factory=list)
```
Yanı t yapı sı :
`vectors[i]` , `texts[i]` için vektör kümesini içerir.
Her vektör kümesi `list[list[float]]` 'dı r (modeller, her metin için birden fazla vektör döndürebilir).
Örnek: 3 metin → `vectors` , 3 giriş içerir ve her giriş, o metnin gömülme değerlerini içerir.
### API'ler
#### EmbeddingsClient
```python
class EmbeddingsClient(RequestResponse):
async def embed(
self,
texts: list[str],
timeout: float = 300,
) -> list[list[list[float]]]:
"""
Embed one or more texts in a single request.
Args:
texts: List of texts to embed
timeout: Timeout for the operation
Returns:
List of vector sets, one per input text
"""
resp = await self.request(
EmbeddingsRequest(texts=texts),
timeout=timeout
)
if resp.error:
raise RuntimeError(resp.error.message)
return resp.vectors
```
#### API Gateway Gömülü Veri (Embeddings) Uç Noktası
Tek bir veya toplu gömülü veri desteğini sağlayan güncellenmiş uç nokta:
```
POST /api/v1/embeddings
Content-Type: application/json
{
"texts": ["text1", "text2", "text3"],
"flow_id": "default"
}
Response:
{
"vectors": [
[[0.1, 0.2, ...]],
[[0.3, 0.4, ...]],
[[0.5, 0.6, ...]]
]
}
```
### Uygulama Detayları
#### Aşama 1: Şema Değişiklikleri
**EmbeddingsRequest:**
```python
@dataclass
class EmbeddingsRequest:
texts: list[str] = field(default_factory=list)
```
**Gömme Yanı tı :**
```python
@dataclass
class EmbeddingsResponse:
error: Error | None = None
vectors: list[list[list[float]]] = field(default_factory=list)
```
**Güncellenmiş EmbeddingsService.on_request:**
```python
async def on_request(self, msg, consumer, flow):
request = msg.value()
id = msg.properties()["id"]
model = flow("model")
vectors = await self.on_embeddings(request.texts, model=model)
response = EmbeddingsResponse(error=None, vectors=vectors)
await flow("response").send(response, properties={"id": id})
```
#### 2. Aşama: FastEmbed İşlemci Güncellemesi
**Mevcut (Verimsiz):**
```python
async def on_embeddings(self, text, model=None):
use_model = model or self.default_model
self._load_model(use_model)
vecs = self.embeddings.embed([text]) # Batch of 1
return [v.tolist() for v in vecs]
```
**Güncellendi:**
```python
async def on_embeddings(self, texts: list[str], model=None):
"""Embed texts - processes all texts in single model call"""
if not texts:
return []
use_model = model or self.default_model
self._load_model(use_model)
# FastEmbed handles the full batch efficiently
all_vecs = list(self.embeddings.embed(texts))
# Return list of vector sets, one per input text
return [[v.tolist()] for v in all_vecs]
```
#### 3. Aşama: Grafik Gömme Hizmeti Güncellemesi
**Mevcut (Sı ralı ):**
```python
async def on_message(self, msg, consumer, flow):
entities = []
for entity in v.entities:
vectors = await flow("embeddings-request").embed(text=entity.context)
entities.append(EntityEmbeddings(...))
```
**Güncellendi (Toplu İşlem):**
```python
async def on_message(self, msg, consumer, flow):
# Collect all contexts
contexts = [entity.context for entity in v.entities]
# Single batch embedding call
all_vectors = await flow("embeddings-request").embed(texts=contexts)
# Pair results with entities
entities = [
EntityEmbeddings(
entity=entity.entity,
vectors=vectors[0], # First vector from the set
chunk_id=entity.chunk_id,
)
for entity, vectors in zip(v.entities, all_vectors)
]
```
#### 4. Aşama: Satı r Gömme Hizmeti Güncellemesi
**Mevcut (Sı ralı ):**
```python
for text, (index_name, index_value) in texts_to_embed.items():
vectors = await flow("embeddings-request").embed(text=text)
embeddings_list.append(RowIndexEmbedding(...))
```
**Güncellendi (Toplu İşlem):**
```python
# Collect texts and metadata
texts = list(texts_to_embed.keys())
metadata = list(texts_to_embed.values())
# Single batch embedding call
all_vectors = await flow("embeddings-request").embed(texts=texts)
# Pair results
embeddings_list = [
RowIndexEmbedding(
index_name=meta[0],
index_value=meta[1],
text=text,
vectors=vectors[0] # First vector from the set
)
for text, meta, vectors in zip(texts, metadata, all_vectors)
]
```
#### 5. Aşama: Komut Satı rı Arama Aracı Geliştirme
**Güncellenmiş Komut Satı rı :**
```python
def main():
parser = argparse.ArgumentParser(...)
parser.add_argument(
'text',
nargs='*', # Zero or more texts
help='Text(s) to convert to embedding vectors',
)
parser.add_argument(
'-f', '--file',
help='File containing texts (one per line)',
)
parser.add_argument(
'--batch-size',
type=int,
default=32,
help='Batch size for processing (default: 32)',
)
```
Kullanı m:
```bash
# Single text (existing)
tg-invoke-embeddings "hello world"
# Multiple texts
tg-invoke-embeddings "text one" "text two" "text three"
# From file
tg-invoke-embeddings -f texts.txt --batch-size 64
```
#### 6. Aşama: Python SDK Geliştirme
**FlowInstance (HTTP istemcisi):**
```python
class FlowInstance:
def embeddings(self, texts: list[str]) -> list[list[list[float]]]:
"""
Get embeddings for one or more texts.
Args:
texts: List of texts to embed
Returns:
List of vector sets, one per input text
"""
input = {"texts": texts}
return self.request("service/embeddings", input)["vectors"]
```
**SocketFlowInstance (WebSocket istemcisi):**
```python
class SocketFlowInstance:
def embeddings(self, texts: list[str], **kwargs: Any) -> list[list[list[float]]]:
"""
Get embeddings for one or more texts via WebSocket.
Args:
texts: List of texts to embed
Returns:
List of vector sets, one per input text
"""
request = {"texts": texts}
response = self.client._send_request_sync(
"embeddings", self.flow_id, request, False
)
return response["vectors"]
```
**SDK Kullanı m Örnekleri:**
```python
# Single text
vectors = flow.embeddings(["hello world"])
print(f"Dimensions: {len(vectors[0][0])}")
# Batch embedding
texts = ["text one", "text two", "text three"]
all_vectors = flow.embeddings(texts)
# Process results
for text, vecs in zip(texts, all_vectors):
print(f"{text}: {len(vecs[0])} dimensions")
```
## Güvenlik Hususları
**İstek Boyutu Sı nı rları **: Kaynak tükenmesini önlemek için maksimum toplu işlem boyutunu zorlayı n.
**Zaman Aşı mı İşleme**: Toplu işlem boyutu için zaman aşı mı nı uygun şekilde ayarlayı n.
**Bellek Sı nı rları **: Büyük toplu işlemler için bellek kullanı mı nı izleyin.
**Giriş Doğrulama**: İşleme yapmadan önce toplu işlemdeki tüm metinleri doğrulayı n.
## Performans Hususları
### Beklenen İyileştirmeler
**Verim:**
Tek metin: ~10-50 metin/saniye (modele bağlı olarak)
Toplu işlem (boyut 32): ~200-500 metin/saniye (5-10 kat iyileşme)
**Metin Başı na Gecikme:**
Tek metin: metin başı na 50-200 ms
Toplu işlem (boyut 32): metin başı na 5-20 ms (ortalama)
**Hizmete Özel İyileştirmeler:**
| Hizmet | Mevcut | Toplu | İyileşme |
|---------|---------|---------|-------------|
| Grafik Gömme (50 varlı k) | 5-10 saniye | 0,5-1 saniye | 5-10 kat |
| Satı r Gömme (100 metin) | 10-20 saniye | 1-2 saniye | 5-10 kat |
| Belge Alma (1000 parça) | 100-200 saniye | 10-30 saniye | 5-10 kat |
### Yapı landı rma Parametreleri
```python
# Recommended defaults
DEFAULT_BATCH_SIZE = 32
MAX_BATCH_SIZE = 128
BATCH_TIMEOUT_MULTIPLIER = 2.0
```
## Test Stratejisi
### Birim Testleri
Tek metin gömülmesi (geriye dönük uyumluluk)
Boş toplu iş işleme
Maksimum toplu iş boyutu zorlaması
Kı smi toplu iş hataları için hata işleme
### Entegrasyon Testleri
Pulsar üzerinden uçtan uca toplu iş gömülmesi
Grafik gömme hizmeti toplu iş işleme
Satı r gömme hizmeti toplu iş işleme
API ağ geçidi toplu iş uç noktası
### Performans Testleri
Tek ve toplu iş verimini karşı laştı rma
Farklı toplu iş boyutları altı ndaki bellek kullanı mı
Gecikme dağı lı mı analizi
## Geçiş Planı
Bu, önemli değişikliklere neden olan bir sürümdür. Tüm fazlar birlikte uygulanı r.
### 1. Aşama: Şema Değişiklikleri
EmbeddingsRequest'teki `text: str` 'ı `texts: list[str]` ile değiştirin
EmbeddingsResponse'taki `vectors` türünü `list[list[list[float]]]` olarak değiştirin
### 2. Aşama: İşlemci Güncellemeleri
FastEmbed ve Ollama işlemcilerindeki `on_embeddings` imzası nı güncelleyin
Tam toplu işi tek bir model çağrı sı nda işleyin
### 3. Aşama: İstemci Güncellemeleri
`EmbeddingsClient.embed()` 'ı `texts: list[str]` 'i kabul edecek şekilde güncelleyin
### 4. Aşama: Çağı ran Güncellemeleri
graph_embeddings'i toplu iş varlı k bağlamları nı kullanacak şekilde güncelleyin
row_embeddings'i toplu iş indeks metinlerini kullanacak şekilde güncelleyin
document_embeddings'i yeni şemayı kullanacak şekilde güncelleyin
CLI aracı nı güncelleyin
### 5. Aşama: API Ağ Geçidi
Yeni şema için gömme uç noktası nı güncelleyin
### 6. Aşama: Python SDK
`FlowInstance.embeddings()` imzası nı güncelleyin
`SocketFlowInstance.embeddings()` imzası nı güncelleyin
## Açı k Sorular
**Büyük Toplu İşlerin Akı şı **: Çok büyük toplu işler (>100 metin) için sonuçları akı ş olarak desteklemeli miyiz?
**Sağlayı cı ya Özel Sı nı rlar**: Farklı maksimum toplu iş boyutları na sahip sağlayı cı ları nası l ele almalı yı z?
**Kı smi Hata İşleme**: Bir toplu işteki bir metin başarı sı z olursa, tüm toplu işi mi başarı sı z etmeliyiz yoksa kı smi sonuçları mı döndürmeliyiz?
**Belge Gömme Toplu İşleme**: Çoklu Chunk mesajları arası nda toplu işlemeyi mi yapmalı yı z yoksa her mesaj için ayrı ayrı işlemeyi mi korumalı yı z?
## Referanslar
[FastEmbed Belgeleri ](https://github.com/qdrant/fastembed )
[Ollama Gömme API'si ](https://github.com/ollama/ollama )
[EmbeddingsService Uygulaması ](trustgraph-base/trustgraph/base/embeddings_service.py )
[GraphRAG Performans Optimizasyonu ](graphrag-performance-optimization.md )