2026-04-10 23:20:41 -04:00
---
layout: default
title: "Akı şlı LLM Yanı tları Teknik Özellikleri"
parent: "Turkish (Beta)"
---
2026-04-11 01:08:44 +00:00
# Akı şlı LLM Yanı tları 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-11 01:08:44 +00:00
## Genel Bakı ş
Bu özellik, TrustGraph'ta LLM yanı tları için akı ş desteğinin uygulanması nı tanı mlar. Akı ş, üretilen token'ları n LLM tarafı ndan üretildikleri anda gerçek zamanlı olarak iletilmesini sağlar, böylece tamamlanmı ş bir yanı tı n oluşturulması nı beklemez.
Bu uygulama aşağı daki kullanı m senaryoları nı destekler:
1. **Gerçek Zamanlı Kullanı cı Arayüzleri** : Token'ları , oluşturuldukları anda kullanı cı arayüzüne aktarı n ve böylece anı nda görsel geri bildirim sağlayı n.
2. **İlk Token'a Ulaşma Süresinin Azaltı lması ** : Kullanı cı lar, tam oluşturma beklemeden çı ktı yı hemen görmeye başlar.
3. **Uzun Yanı tları n İşlenmesi** : Aksi takdirde zaman aşı mı na uğrayabilecek veya bellek sı nı rları nı aşabilecek çok uzun çı ktı ları işleyin.
4. **Etkileşimli Uygulamalar** : Duyarlı sohbet ve ajan arayüzlerini etkinleştirin.
## Hedefler
**Geriye Dönük Uyumluluk**: Mevcut, akı ş kullanmayan istemciler, herhangi bir değişiklik yapı lmadan çalı şmaya devam etmelidir.
**Tutarlı API Tasarı mı ** : Akı şlı ve akı şsı z kullanı m, minimum farklı lı klarla aynı şema kalı pları nı kullanı r.
**Sağlayı cı Esnekliği** : Akı ş mevcut olduğunda akı şı destekleyin, aksi takdirde zarif bir şekilde geri dönün.
**Aşamalı Dağı tı m** : Riski azaltmak için kademeli uygulama.
**Uçtan Uca Destek**: LLM sağlayı cı sı ndan Pulsar, Gateway API ve Python API aracı lı ğı yla istemci uygulamaları na kadar akı ş desteği.
## Arka Plan
### Mevcut Mimari
Mevcut LLM metin tamamlama akı şı aşağı daki gibi çalı şı r:
1. İstemci, `TextCompletionRequest` ile `system` ve `prompt` alanları nı gönderir.
2. LLM hizmeti, isteği işler ve tamamlanmı ş bir oluşturmayı bekler.
3. Tamamlanmı ş `response` dizesiyle tek bir `TextCompletionResponse` döndürülür.
Mevcut şema (`trustgraph-base/trustgraph/schema/services/llm.py` ):
```python
class TextCompletionRequest(Record):
system = String()
prompt = String()
class TextCompletionResponse(Record):
error = Error()
response = String()
in_token = Integer()
out_token = Integer()
model = String()
```
### Mevcut Sı nı rlamalar
**Gecikme**: Kullanı cı lar, herhangi bir çı ktı görmeden önce, tamamlanmı ş bir üretimi beklemelidir.
**Zaman Aşı mı Riski**: Uzun üretmeler, istemci zaman aşı mı eşiklerini aşabilir.
**Kötü Kullanı cı Deneyimi**: Üretim sı rası nda geri bildirim olmaması , yavaşlı k algı sı yaratı r.
**Kaynak Kullanı mı **: Tam yanı tlar bellekte tamponlanmalı dı r.
Bu özellik, art arda yanı t verme özelliğini etkinleştirerek bu sı nı rlamalara çözüm getirir ve aynı zamanda tam geriye dönük uyumluluğu korur.
## Teknik Tasarı m
### Aşama 1: Altyapı
Aşama 1, şemaları , API'leri ve komut satı rı araçları nı değiştirerek akı ş için temel altyapı yı oluşturur.
#### Şema Değişiklikleri
##### LLM Şeması (`trustgraph-base/trustgraph/schema/services/llm.py`)
**İstek Değişiklikleri:**
```python
class TextCompletionRequest(Record):
system = String()
prompt = String()
streaming = Boolean() # NEW: Default false for backward compatibility
```
`streaming` : `true` olduğunda, akı şlı yanı t gönderimi talep eder.
Varsayı lan: `false` (mevcut davranı ş korunmuştur).
**Yanı t Değişiklikleri:**
```python
class TextCompletionResponse(Record):
error = Error()
response = String()
in_token = Integer()
out_token = Integer()
model = String()
end_of_stream = Boolean() # NEW: Indicates final message
```
`end_of_stream` : `true` olduğunda, bunun son (veya tek) yanı t olduğunu gösterir.
Akı ş olmayan istekler için: `end_of_stream=true` ile tek bir yanı t.
Akı ş istekleri için: `end_of_stream=false` ile birden fazla yanı t (son yanı t hariç).
hariç.
##### İstek Şeması (`trustgraph-base/trustgraph/schema/services/prompt.py`)
İstek hizmeti, metin tamamlama işlemini kapsar, bu nedenle aynı kalı bı yansı tı r:
**İstek Değişiklikleri:**
```python
class PromptRequest(Record):
id = String()
terms = Map(String())
streaming = Boolean() # NEW: Default false
```
**Değişiklikler:**
```python
class PromptResponse(Record):
error = Error()
text = String()
object = String()
end_of_stream = Boolean() # NEW: Indicates final message
```
#### Ağ Geçidi API Değişiklikleri
Ağ Geçidi API'sinin, HTTP/WebSocket istemcilerine akı ş yeteneklerini sunması gerekir.
**REST API Güncellemeleri:**
`POST /api/v1/text-completion` : İstek gövdesinde `streaming` parametresini kabul et
Yanı t davranı şı , akı ş bayrağı na bağlı dı r:
`streaming=false` : Tek JSON yanı tı (mevcut davranı ş)
`streaming=true` : Sunucu Tarafı ndan Gönderilen Olaylar (SSE) akı şı veya WebSocket mesajları
**Yanı t Formatı (Akı ş):**
Her akı ş parçası , aynı şema yapı sı nı izler:
```json
{
"response": "partial text...",
"end_of_stream": false,
"model": "model-name"
}
```
Son bölüm:
```json
{
"response": "final text chunk",
"end_of_stream": true,
"in_token": 150,
"out_token": 500,
"model": "model-name"
}
```
#### Python API Değişiklikleri
Python istemci API'si, geriye dönük uyumluluğu korurken hem akı şlı hem de akı şsı z modları desteklemelidir.
**LlmClient Güncellemeleri** (`trustgraph-base/trustgraph/clients/llm_client.py` ):
```python
class LlmClient(BaseClient):
def request(self, system, prompt, timeout=300, streaming=False):
"""
Non-streaming request (backward compatible).
Returns complete response string.
"""
# Existing behavior when streaming=False
async def request_stream(self, system, prompt, timeout=300):
"""
Streaming request.
Yields response chunks as they arrive.
"""
# New async generator method
```
**PromptClient Güncellemeleri** (`trustgraph-base/trustgraph/base/prompt_client.py` ):
`streaming` parametresi ve asenkron üreteç varyantı yla benzer yapı .
#### CLI Aracı Değişiklikleri
**tg-invoke-llm** (`trustgraph-cli/trustgraph/cli/invoke_llm.py` ):
```
tg-invoke-llm [system] [prompt] [--no-streaming] [-u URL] [-f flow-id]
```
Daha iyi etkileşimli kullanı cı deneyimi için, akı ş varsayı lan olarak etkindir.
`--no-streaming` bayrağı , akı şı devre dı şı bı rakı r.
Akı ş açı kken: Token'ları geldikleri gibi standart çı ktı ya yazdı rı n.
Akı ş kapalı yken: Tam yanı tı bekleyin, ardı ndan çı ktı verin.
**tg-invoke-prompt** (`trustgraph-cli/trustgraph/cli/invoke_prompt.py` ):
```
tg-invoke-prompt [template-id] [var=value...] [--no-streaming] [-u URL] [-f flow-id]
```
`tg-invoke-llm` ile aynı kalı p.
#### LLM Hizmeti Temel Sı nı fı ndaki Değişiklikler
**LlmService** (`trustgraph-base/trustgraph/base/llm_service.py` ):
```python
class LlmService(FlowProcessor):
async def on_request(self, msg, consumer, flow):
request = msg.value()
streaming = getattr(request, 'streaming', False)
if streaming and self.supports_streaming():
async for chunk in self.generate_content_stream(...):
await self.send_response(chunk, end_of_stream=False)
await self.send_response(final_chunk, end_of_stream=True)
else:
response = await self.generate_content(...)
await self.send_response(response, end_of_stream=True)
def supports_streaming(self):
"""Override in subclass to indicate streaming support."""
return False
async def generate_content_stream(self, system, prompt, model, temperature):
"""Override in subclass to implement streaming."""
raise NotImplementedError()
```
--
### 2. Aşama: VertexAI Prova Çalı şması
2. Aşama, altyapı yı doğrulamak ve uçtan uca testleri sağlamak için tek bir sağlayı cı da (VertexAI) akı şı uygulamaktadı r.
#### VertexAI Uygulaması
**Modül:** `trustgraph-vertexai/trustgraph/model/text_completion/vertexai/llm.py`
**Değişiklikler:**
1. `supports_streaming()` 'ı `True` değerini döndürecek şekilde geçersiz kı lı n.
2. `generate_content_stream()` asenkron oluşturucusunu uygulayı n.
3. Hem Gemini hem de Claude modellerini (VertexAI Anthropic API aracı lı ğı yla) işleyin.
**Gemini Akı şı :**
```python
async def generate_content_stream(self, system, prompt, model, temperature):
model_instance = self.get_model(model, temperature)
response = model_instance.generate_content(
[system, prompt],
stream=True # Enable streaming
)
for chunk in response:
yield LlmChunk(
text=chunk.text,
in_token=None, # Available only in final chunk
out_token=None,
)
# Final chunk includes token counts from response.usage_metadata
```
**Claude (VertexAI Anthropic) Akı şı :**
```python
async def generate_content_stream(self, system, prompt, model, temperature):
with self.anthropic_client.messages.stream(...) as stream:
for text in stream.text_stream:
yield LlmChunk(text=text)
# Token counts from stream.get_final_message()
```
#### Test Etme
Akı ş yanı tı birleştirme için birim testleri
VertexAI (Gemini ve Claude) ile entegrasyon testleri
Uçtan uca testler: CLI -> Ağ Geçidi -> Pulsar -> VertexAI -> geri
Geriye dönük uyumluluk testleri: Akı ş olmayan istekler hala çalı şı yor
--
### 3. Aşama: Tüm LLM Sağlayı cı ları
3. Aşama, akı ş desteğini sistemdeki tüm LLM sağlayı cı ları na genişletir.
#### Sağlayı cı Uygulama Durumu
Her sağlayı cı aşağı daki seçeneklerden birini uygulamalı dı r:
1. **Tam Akı ş Desteği** : `generate_content_stream()` 'ı uygulayı n
2. **Uyumluluk Modu** : `end_of_stream` bayrağı nı doğru şekilde işleyin
(tek bir yanı t döndürün `end_of_stream=true` ile birlikte)
| Sağlayı cı | Paket | Akı ş Desteği |
|----------|---------|-------------------|
| OpenAI | trustgraph-flow | Tam (yerel akı ş API'si) |
| Claude/Anthropic | trustgraph-flow | Tam (yerel akı ş API'si) |
| Ollama | trustgraph-flow | Tam (yerel akı ş API'si) |
| Cohere | trustgraph-flow | Tam (yerel akı ş API'si) |
| Mistral | trustgraph-flow | Tam (yerel akı ş API'si) |
| Azure OpenAI | trustgraph-flow | Tam (yerel akı ş API'si) |
| Google AI Studio | trustgraph-flow | Tam (yerel akı ş API'si) |
| VertexAI | trustgraph-vertexai | Tam (2. Aşama) |
| Bedrock | trustgraph-bedrock | Tam (yerel akı ş API'si) |
| LM Studio | trustgraph-flow | Tam (OpenAI ile uyumlu) |
| LlamaFile | trustgraph-flow | Tam (OpenAI ile uyumlu) |
| vLLM | trustgraph-flow | Tam (OpenAI ile uyumlu) |
| TGI | trustgraph-flow | Belirlenecek |
| Azure | trustgraph-flow | Belirlenecek |
#### Uygulama Modeli
OpenAI ile uyumlu sağlayı cı lar (OpenAI, LM Studio, LlamaFile, vLLM) için:
```python
async def generate_content_stream(self, system, prompt, model, temperature):
response = await self.client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": system},
{"role": "user", "content": prompt}
],
temperature=temperature,
stream=True
)
async for chunk in response:
if chunk.choices[0].delta.content:
yield LlmChunk(text=chunk.choices[0].delta.content)
```
--
### 4. Aşama: Ajan API'si
4. Aşama, akı şı Ajan API'sine genişletmektedir. Bu, Ajan API'sinin doğası gereği zaten çok mesajlı olması nedeniyle daha karmaşı ktı r (düşünce → eylem → gözlem
→ tekrar → son yanı t).
#### Mevcut Ajan Şeması
```python
class AgentStep(Record):
thought = String()
action = String()
arguments = Map(String())
observation = String()
user = String()
class AgentRequest(Record):
question = String()
state = String()
group = Array(String())
history = Array(AgentStep())
user = String()
class AgentResponse(Record):
answer = String()
error = Error()
thought = String()
observation = String()
```
#### Önerilen Ajan Şema Değişiklikleri
**Değişiklik İstekleri:**
```python
class AgentRequest(Record):
question = String()
state = String()
group = Array(String())
history = Array(AgentStep())
user = String()
streaming = Boolean() # NEW: Default false
```
**Cevap Değişiklikleri:**
Ajan, akı l yürütme döngüsü sı rası nda çeşitli türde çı ktı lar üretir:
Düşünceler (akı l yürütme)
Eylemler (araç çağrı ları )
Gözlemler (araç sonuçları )
Cevap (sonuç yanı tı )
Hatalar
`chunk_type` , gönderilen içeriğin türünü tanı mladı ğı için, ayrı
`answer` , `error` , `thought` ve `observation` alanları tek bir alana dönüştürülebilir.
Tek bir `content` alanı :
```python
class AgentResponse(Record):
chunk_type = String() # "thought", "action", "observation", "answer", "error"
content = String() # The actual content (interpretation depends on chunk_type)
end_of_message = Boolean() # Current thought/action/observation/answer is complete
end_of_dialog = Boolean() # Entire agent dialog is complete
```
**Alan Anlamı :**
`chunk_type` : `content` alanı nda bulunan içeriğin türünü belirtir.
`"thought"` : Aracı n muhakemesi/düşüncesi.
`"action"` : Çağrı lan araç/eylem.
`"observation"` : Araç çalı ştı rması ndan elde edilen sonuç.
`"answer"` : Kullanı cı nı n sorusuna verilen nihai cevap.
`"error"` : Hata mesajı .
`content` : `chunk_type` 'e göre yorumlanan, gerçek akı ş içeriği.
`end_of_message` : `true` olduğunda, mevcut parça türü tamamlanmı ştı r.
Örnek: Mevcut düşünce için tüm belirteçler gönderilmiştir.
İstemcilerin bir sonraki aşamaya ne zaman geçmeleri gerektiğini bilmesini sağlar.
`end_of_dialog` : `true` olduğunda, tüm aracı etkileşimi tamamlanmı ştı r.
Bu, akı ştaki son mesajdı r.
#### Aracı Akı ş Davranı şı
`streaming=true` olduğunda:
1. **Düşünce akı şı :**
`chunk_type="thought"` ve `end_of_message=false` ile birden fazla parça.
Son düşünce parçası `end_of_message=true` 'a sahiptir.
2. **Eylem bildirimi:**
`chunk_type="action"` ve `end_of_message=true` ile tek bir parça.
3. **Gözlem:**
`chunk_type="observation"` ile parçalar, son parça `end_of_message=true` 'e sahiptir.
4. Aracı muhakeme ederken 1-3 adı mları nı tekrarlayı n.
5. **Son cevap:**
`content` içindeki son yanı tla `chunk_type="answer"` .
Son parça `end_of_message=true` ve `end_of_dialog=true` 'e sahiptir.
**Örnek Akı ş Sı rası :**
```
{chunk_type: "thought", content: "I need to", end_of_message: false, end_of_dialog: false}
{chunk_type: "thought", content: " search for...", end_of_message: true, end_of_dialog: false}
{chunk_type: "action", content: "search", end_of_message: true, end_of_dialog: false}
{chunk_type: "observation", content: "Found: ...", end_of_message: true, end_of_dialog: false}
{chunk_type: "thought", content: "Based on this", end_of_message: false, end_of_dialog: false}
{chunk_type: "thought", content: " I can answer...", end_of_message: true, end_of_dialog: false}
{chunk_type: "answer", content: "The answer is...", end_of_message: true, end_of_dialog: true}
```
`streaming=false` olduğunda:
Mevcut davranı ş korunmuştur
Tam bir cevap içeren tek bir yanı t
`end_of_message=true` , `end_of_dialog=true`
#### Ağ Geçidi ve Python API'si
Ağ Geçidi: Ajan akı şı için yeni SSE/WebSocket uç noktası
Python API'si: Yeni `agent_stream()` asenkron oluşturucu metodu
--
## Güvenlik Hususları
**Yeni bir saldı rı yüzeyi yok**: Akı ş, aynı kimlik doğrulama/yetkilendirme mekanizmaları nı kullanı r
**Hı z sı nı rlaması **: Gerekirse, her jeton veya her parça için hı z sı nı rları uygulayı n
**Bağlantı yönetimi**: İstemci bağlantı sı nı n kesilmesi durumunda akı şları düzgün bir şekilde sonlandı rı n
**Zaman aşı mı yönetimi**: Akı ş istekleri için uygun zaman aşı mı işleme gereklidir
## Performans Hususları
**Bellek**: Akı ş, tepe bellek kullanı mı nı azaltı r (tam yanı t tamponlama yok)
**Gecikme**: İlk jetona ulaşma süresi önemli ölçüde azaltı lmı ştı r
**Bağlantı ek yükü**: SSE/WebSocket bağlantı ları nı n devamlı lı k ek yükü vardı r
**Pulsar verim**: Tek büyük mesaj yerine çok sayı da küçük mesaj
dengesi
## Test Stratejisi
### Birim Testleri
Yeni alanlarla şema serileştirme/deserileştirme
Geriye dönük uyumluluk (eksik alanlar için varsayı lan değerler kullanı lı r)
Parça birleştirme mantı ğı
### Entegrasyon Testleri
Her LLM sağlayı cı sı nı n akı ş uygulaması
Ağ Geçidi API akı ş uç noktaları
Python istemci akı ş metotları
### Uçtan Uca Testler
CLI aracı nı n akı ş çı ktı sı
Tam akı ş: İstemci → Ağ Geçidi → Pulsar → LLM → geri
Karı şı k akı ş/akı ş dı şı iş yükleri
### Geriye Dönük Uyumluluk Testleri
Mevcut istemciler değişiklik yapı lmadan çalı şı r
Akı ş dı şı istekler aynı şekilde davranı r
## Geçiş Planı
### 1. Aşama: Altyapı
Şema değişikliklerini dağı tı n (geriye dönük uyumlu)
Ağ Geçidi API güncellemelerini dağı tı n
Python API güncellemelerini dağı tı n
CLI aracı güncellemelerini yayı nlayı n
### 2. Aşama: VertexAI
VertexAI akı ş uygulaması nı dağı tı n
Test iş yükleriyle doğrulayı n
### 3. Aşama: Tüm Sağlayı cı lar
Sağlayı cı güncellemelerini aşamalı olarak yayı nlayı n
Sorunlar için izleyin
### 4. Aşama: Ajan API'si
Ajan şema değişikliklerini dağı tı n
Ajan akı ş uygulaması nı dağı tı n
Belgeleri güncelleyin
## Zaman Çizelgesi
| Aşama | Açı klama | Bağı mlı lı klar |
|-------|-------------|--------------|
| 1. Aşama | Altyapı | Yok |
| 2. Aşama | VertexAI PoC | 1. Aşama |
| 3. Aşama | Tüm Sağlayı cı lar | 2. Aşama |
| 4. Aşama | Ajan API'si | 3. Aşama |
## Tasarı m Kararları
Aşağı daki sorular, belirtim sı rası nda çözülmüştür:
1. **Akı ştaki Jeton Sayı ları ** : Jeton sayı ları , toplamlar değil, artı şlardı r.
Tüketiciler, gerekirse bunları toplayabilir. Bu, çoğu sağlayı cı nı n kullanı m
raporlama şekliyle eşleşir ve uygulamayı basitleştirir.
2. **Akı şlardaki Hata İşleme** : Bir hata oluşursa, `error` alanı
doldurulur ve diğer alanlara ihtiyaç duyulmaz. Bir hata her zaman son
iletişimdir; hata sonrası nda başka mesajlara izin verilmez veya beklenmez.
LLM/İstem akı şları için `end_of_stream=true` . Ajan akı şları için,
`chunk_type="error"` ile `end_of_dialog=true` .
3. **Kı smi Yanı t Kurtarma** : Mesajlaşma protokolü (Pulsar) dayanı klı dı r,
bu nedenle mesaj düzeyinde yeniden deneme gerekli değildir. Bir istem, akı şı
takip edemezse veya bağlantı sı kesilirse, isteği baştan yeniden denemesi gerekir.
4. **İstem Hizmeti Akı şı ** : Akı ş yalnı zca metin (`text` ) yanı tları için
desteklenir, yapı landı rı lmı ş (`object` ) yanı tlar için değil. İstem hizmeti,
çı ktı nı n JSON mu yoksa metin tabanlı mı olacağı nı , istem şablonuna göre
önceden bilir. Bir akı ş isteği, JSON çı ktı lı bir istem için yapı lı rsa,
hizmet şunlardan birini yapmalı dı r:
Tam JSON'ı tek bir yanı tla `end_of_stream=true` ile döndürün veya
Akı ş isteğini bir hata ile reddedin
## Açı k Sorular
Şu anda yok.
## Referanslar
Mevcut LLM şeması : `trustgraph-base/trustgraph/schema/services/llm.py`
Mevcut istem şeması : `trustgraph-base/trustgraph/schema/services/prompt.py`
Mevcut ajan şeması : `trustgraph-base/trustgraph/schema/services/agent.py`
LLM hizmeti tabanı : `trustgraph-base/trustgraph/base/llm_service.py`
VertexAI sağlayı cı sı : `trustgraph-vertexai/trustgraph/model/text_completion/vertexai/llm.py`
Ağ Geçidi API'si: `trustgraph-base/trustgraph/api/`
CLI araçları : `trustgraph-cli/trustgraph/cli/`