2026-04-10 23:20:41 -04:00
---
layout: default
title: "Araç Hizmetleri: Dinamik Olarak Eklenebilen Ajan Araçları "
parent: "Turkish (Beta)"
---
2026-04-11 01:08:44 +00:00
# Araç Hizmetleri: Dinamik Olarak Eklenebilen Ajan Araçları
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
## Durum
Uygulandı
## Genel Bakı ş
Bu özellik, "araç hizmetleri" olarak adlandı rı lan, dinamik olarak eklenebilen ajan araçları için bir mekanizma tanı mlar. Mevcut, yerleşik araç türlerinin (`KnowledgeQueryImpl` , `McpToolImpl` , vb.) aksine, araç hizmetleri, aşağı daki yöntemlerle yeni araçları n eklenmesine olanak tanı r:
1. Yeni bir Pulsar tabanlı hizmetin dağı tı lması
2. Ajanı n hizmeti nası l çağı racağı nı belirten bir yapı landı rma açı klaması nı n eklenmesi
Bu, çekirdek ajan-yanı t çerçevesini değiştirmeden genişletilebilirlik sağlar.
## Terminoloji
| Terim | Tanı m |
|------|------------|
| **Yerleşik Araç** | `tools.py` içinde sabit kodlanmı ş uygulamalara sahip mevcut araç türleri |
| **Araç Hizmeti** | Bir hizmet açı klaması yla tanı mlanan ve bir ajan aracı olarak çağrı labilecek bir Pulsar hizmeti |
| **Araç** | Bir hizmet aracı nı referans alan ve ajana/LLM'ye sunulan yapı landı rı lmı ş bir örnek |
Bu, MCP araçları na benzer iki katmanlı bir modeldir:
MCP: MCP sunucusu araç arayüzünü tanı mlar → Araç yapı landı rması buna başvurur
Araç Hizmetleri: Araç hizmeti Pulsar arayüzünü tanı mlar → Araç yapı landı rması buna başvurur
## Arka Plan: Mevcut Araçlar
### Yerleşik Araç Uygulaması
Araçlar şu anda `trustgraph-flow/trustgraph/agent/react/tools.py` içinde, türlenmiş uygulamalarla tanı mlanmı ştı r:
```python
class KnowledgeQueryImpl:
async def invoke(self, question):
client = self.context("graph-rag-request")
return await client.rag(question, self.collection)
```
Her araç türü:
Çağı rdı ğı sabit kodlu bir Pulsar servisine sahiptir (örneğin, `graph-rag-request` )
İstemci üzerinde çağrı lacak kesin yöntemi bilir (örneğin, `client.rag()` )
Uygulamada tanı mlanmı ş türlü argümanlara sahiptir
### Araç Kaydı (service.py:105-214)
Araçlar, bir uygulamaya eşleyen `type` alanı yla yapı landı rmadan yüklenir:
```python
if impl_id == "knowledge-query":
impl = functools.partial(KnowledgeQueryImpl, collection=data.get("collection"))
elif impl_id == "text-completion":
impl = TextCompletionImpl
# ... etc
```
## Mimari
### İki Katmanlı Model
#### 1. Katman: Araç Hizmeti Tanı mlayı cı sı
Bir araç hizmeti, bir Pulsar hizmeti arayüzünü tanı mlar. Aşağı dakileri belirtir:
İstek/yanı t için kullanı lan Pulsar kuyrukları
Onu kullanan araçlardan gerektirdiği yapı landı rma parametreleri
```json
{
"id": "custom-rag",
"request-queue": "non-persistent://tg/request/custom-rag",
"response-queue": "non-persistent://tg/response/custom-rag",
"config-params": [
{"name": "collection", "required": true}
]
}
```
Herhangi bir yapı landı rma parametresine ihtiyaç duymayan bir araç hizmeti:
```json
{
"id": "calculator",
"request-queue": "non-persistent://tg/request/calc",
"response-queue": "non-persistent://tg/response/calc",
"config-params": []
}
```
#### 2. Seviye: Araç Açı klaması
Bir araç, bir araç hizmetine başvurur ve şunları sağlar:
Yapı landı rma parametre değerleri (hizmetin gereksinimlerini karşı lar)
Aracı nı n ajana yönelik meta verileri (ad, açı klama)
LLM için argüman tanı mları
```json
{
"type": "tool-service",
"name": "query-customers",
"description": "Query the customer knowledge base",
"service": "custom-rag",
"collection": "customers",
"arguments": [
{
"name": "question",
"type": "string",
"description": "The question to ask about customers"
}
]
}
```
Birden fazla aracı n, farklı yapı landı rmalarla aynı hizmete başvurabileceğini unutmayı n:
```json
{
"type": "tool-service",
"name": "query-products",
"description": "Query the product knowledge base",
"service": "custom-rag",
"collection": "products",
"arguments": [
{
"name": "question",
"type": "string",
"description": "The question to ask about products"
}
]
}
```
### İstek Formatı
Bir araç çağrı ldı ğı nda, araca yapı lan istek, aşağı daki bilgileri içerir:
`user` : Aracı nı n isteğinden (çoklu kiracı lı k)
`config` : Araç açı klaması ndan alı nan, JSON formatı nda kodlanmı ş yapı landı rma değerleri
`arguments` : LLM'den alı nan, JSON formatı nda kodlanmı ş argümanlar
```json
{
"user": "alice",
"config": "{\"collection\": \"customers\"}",
"arguments": "{\"question\": \"What are the top customer complaints?\"}"
}
```
Araç hizmeti, bunları `invoke` yönteminde ayrı ştı rı lmı ş sözlükler olarak alı r.
### Genel Araç Hizmeti Uygulaması
Bir `ToolServiceImpl` sı nı fı , yapı landı rmaya göre araç hizmetlerini çağı rı r:
```python
class ToolServiceImpl:
def __init__ (self, context, request_queue, response_queue, config_values, arguments, processor):
self.request_queue = request_queue
self.response_queue = response_queue
self.config_values = config_values # e.g., {"collection": "customers"}
# ...
async def invoke(self, **arguments):
client = await self._get_or_create_client()
response = await client.call(user, self.config_values, arguments)
if isinstance(response, str):
return response
else:
return json.dumps(response)
```
## Tasarı m Kararları
### İki Katmanlı Konfigürasyon Modeli
Araç hizmetleri, MCP araçları na benzer bir iki katmanlı model izler:
1. **Araç Hizmeti** : Pulsar hizmet arayüzünü (konu, gerekli yapı landı rma parametreleri) tanı mlar.
2. **Araç** : Bir araç hizmetine başvurur, yapı landı rma değerlerini sağlar, LLM argümanları nı tanı mlar.
Bu ayrı m şunları sağlar:
Farklı yapı landı rmalara sahip birden fazla aracı n aynı araç hizmetini kullanabilmesi
Hizmet arayüzü ve araç yapı landı rması arası ndaki net ayrı m
Hizmet tanı mları nı n yeniden kullanı labilirliği
### İstek Eşleme: Zarf ile Doğrudan İletim
Bir araç hizmetine yapı lan istek, şunları içeren yapı landı rı lmı ş bir zarf içerir:
`user` : Çoklu kiracı lı k için aracı dan gelen istekten aktarı lı r.
Yapı landı rma değerleri: Araç açı klaması ndan (örneğin, `collection` ).
`arguments` : LLM tarafı ndan sağlanan argümanlar, bir sözlük olarak iletilir.
Aracı yöneticisi, LLM'nin yanı tı nı `act.arguments` olarak bir sözlükte (`agent_manager.py:117-154` ) ayrı ştı rı r. Bu sözlük, istek zarfı nda bulunur.
### Şema İşleme: Türsüz
İstekler ve yanı tlar, tür tanı mlaması olmayan sözlükler kullanı r. Aracı lar seviyesinde herhangi bir şema doğrulaması yapı lmaz; araç hizmeti, girişlerini doğrulamaktan sorumludur. Bu, yeni hizmetler tanı mlamak için maksimum esneklik sağlar.
### İstemci Arayüzü: Doğrudan Pulsar Konuları
Araç hizmetleri, akı ş yapı landı rması gerektirmeden doğrudan Pulsar konuları nı kullanı r. Araç hizmeti tanı mı nda, tam kuyruk adları belirtilir:
```json
{
"id": "joke-service",
"request-queue": "non-persistent://tg/request/joke",
"response-queue": "non-persistent://tg/response/joke",
"config-params": [...]
}
```
Bu, hizmetlerin herhangi bir ad alanı nda barı ndı rı lması nı sağlar.
### Hata Yönetimi: Standart Hata Kuralı
Ara hizmet yanı tları , `error` alanı ile mevcut şema kuralı nı takip eder:
```python
@dataclass
class Error:
type: str = ""
message: str = ""
```
Yanı t yapı sı :
Başarı : `error` , `None` ise, yanı t sonuç içerir.
Hata: `error` , `type` ve `message` ile doldurulur.
Bu, mevcut hizmet şemaları nda kullanı lan kalı pla eşleşir (örneğin, `PromptResponse` , `QueryResponse` , `AgentResponse` ).
### İstek/Yanı t İlişkilendirmesi
İstekler ve yanı tlar, Pulsar mesaj özelliklerindeki bir `id` kullanı larak ilişkilendirilir:
İstek, özelliklerde `id` içerir: `properties={"id": id}`
Yanı t(lar), aynı `id` 'ı içerir: `properties={"id": id}`
Bu, kod tabanı nda kullanı lan mevcut kalı pla uyumludur (örneğin, `agent_service.py` , `llm_service.py` ).
### Akı ş Desteği
Araç hizmetleri, akı ş yanı tları döndürebilir:
Aynı `id` 'a sahip çoklu yanı t mesajı
Her yanı t, `end_of_stream: bool` alanı nı içerir
Son yanı t, `end_of_stream: True` 'a sahiptir
Bu, `AgentResponse` ve diğer akı ş hizmetlerinde kullanı lan kalı pla eşleşir.
### Yanı t İşleme: String Dönüşü
Tüm mevcut araçlar aynı kalı bı izler: **argümanları bir sözlük olarak alı n, gözlemi bir dize olarak döndürün** .
| Araç | Yanı t İşleme |
|------|------------------|
| `KnowledgeQueryImpl` | `client.rag()` 'i doğrudan döndürür (dize) |
| `TextCompletionImpl` | `client.question()` 'i doğrudan döndürür (dize) |
| `McpToolImpl` | Bir dize döndürür veya dize değilse `json.dumps(output)` döndürür |
| `StructuredQueryImpl` | Sonucu bir dizeye dönüştürür |
| `PromptImpl` | `client.prompt()` 'i doğrudan döndürür (dize) |
Araç hizmetleri aynı sözleşmeyi izler:
Hizmet, bir dize yanı tı (gözlem) döndürür
Yanı t bir dize değilse, `json.dumps()` aracı lı ğı yla dönüştürülür
Tanı mlayı cı da herhangi bir çı karma yapı landı rması gerekmez
Bu, tanı mlayı cı yı basit tutar ve aracı n uygun bir metin yanı tı döndürme sorumluluğunu hizmete bı rakı r.
## Yapı landı rma Kı lavuzu
Yeni bir araç hizmeti eklemek için, iki yapı landı rma öğesi gereklidir:
### 1. Araç Hizmeti Yapı landı rması
`tool-service` yapı landı rma anahtarı altı nda saklanı r. Pulsar kuyrukları nı ve mevcut yapı landı rma parametrelerini tanı mlar.
| Alan | Gerekli | Açı klama |
|-------|----------|-------------|
| `id` | Evet | Araç hizmeti için benzersiz tanı mlayı cı |
| `request-queue` | Evet | İstekler için tam Pulsar konusu (örneğin, `non-persistent://tg/request/joke` ) |
| `response-queue` | Evet | Yanı tlar için tam Pulsar konusu (örneğin, `non-persistent://tg/response/joke` ) |
| `config-params` | Hayı r | Hizmetin kabul ettiği yapı landı rma parametrelerinin dizisi |
Her yapı landı rma parametresi şunları belirtebilir:
`name` : Parametre adı (gerekli)
`required` : Parametrenin araçlar tarafı ndan sağlanması gerekip gerekmediği (varsayı lan: false)
Örnek:
```json
{
"id": "joke-service",
"request-queue": "non-persistent://tg/request/joke",
"response-queue": "non-persistent://tg/response/joke",
"config-params": [
{"name": "style", "required": false}
]
}
```
### 2. Araç Yapı landı rması
`tool` anahtarı nı n altı nda saklanı r. Aracı nı n kullanabileceği bir aracı tanı mlar.
| Alan | Gerekli | Açı klama |
|-------|----------|-------------|
| `type` | Evet | `"tool-service"` olmalı dı r |
| `name` | Evet | LLM'ye sunulan araç adı |
| `description` | Evet | Aracı n ne yaptı ğı na dair açı klama (LLM'ye gösterilir) |
| `service` | Evet | Çağrı lacak araç hizmetinin kimliği |
| `arguments` | Hayı r | LLM için argüman tanı mları dizisi |
| *(yapı landı rma parametreleri)* | Değişken | Hizmet tarafı ndan tanı mlanan herhangi bir yapı landı rma parametresi |
Her argüman aşağı daki gibi bir şeye sahip olabilir:
`name` : Argüman adı (gerekli)
`type` : Veri türü, örneğin `"string"` (gerekli)
`description` : LLM'ye gösterilen açı klama (gerekli)
Örnek:
```json
{
"type": "tool-service",
"name": "tell-joke",
"description": "Tell a joke on a given topic",
"service": "joke-service",
"style": "pun",
"arguments": [
{
"name": "topic",
"type": "string",
"description": "The topic for the joke (e.g., programming, animals, food)"
}
]
}
```
### Yapı landı rmayı Yükleme
Yapı landı rmaları yüklemek için `tg-put-config-item` 'ı kullanı n:
```bash
# Load tool-service config
tg-put-config-item tool-service/joke-service < joke-service.json
# Load tool config
tg-put-config-item tool/tell-joke < tell-joke.json
```
Aracı nı n ve yöneticinin, yeni yapı landı rmaları alabilmesi için yeniden başlatı lması gerekir.
## Uygulama Detayları
### Şema
`trustgraph-base/trustgraph/schema/services/tool_service.py` içindeki istek ve yanı t türleri:
```python
@dataclass
class ToolServiceRequest:
user: str = "" # User context for multi-tenancy
config: str = "" # JSON-encoded config values from tool descriptor
arguments: str = "" # JSON-encoded arguments from LLM
@dataclass
class ToolServiceResponse:
error: Error | None = None
response: str = "" # String response (the observation)
end_of_stream: bool = False
```
### Sunucu Tarafı : DynamicToolService
`trustgraph-base/trustgraph/base/dynamic_tool_service.py` içindeki temel sı nı f:
```python
class DynamicToolService(AsyncProcessor):
"""Base class for implementing tool services."""
def __init__ (self, **params):
topic = params.get("topic", default_topic)
# Constructs topics: non-persistent://tg/request/{topic}, non-persistent://tg/response/{topic}
# Sets up Consumer and Producer
async def invoke(self, user, config, arguments):
"""Override this method to implement the tool's logic."""
raise NotImplementedError()
```
### İstemci Tarafı : ToolServiceImpl
`trustgraph-flow/trustgraph/agent/react/tools.py` içindeki uygulama:
```python
class ToolServiceImpl:
def __init__ (self, context, request_queue, response_queue, config_values, arguments, processor):
# Uses the provided queue paths directly
# Creates ToolServiceClient on first use
async def invoke(self, **arguments):
client = await self._get_or_create_client()
response = await client.call(user, config_values, arguments)
return response if isinstance(response, str) else json.dumps(response)
```
### Dosyalar
| Dosya | Amaç |
|------|---------|
| `trustgraph-base/trustgraph/schema/services/tool_service.py` | İstek/yanı t şemaları |
| `trustgraph-base/trustgraph/base/tool_service_client.py` | Hizmetleri çağı rmak için istemci |
| `trustgraph-base/trustgraph/base/dynamic_tool_service.py` | Hizmet uygulaması nı n temel sı nı fı |
| `trustgraph-flow/trustgraph/agent/react/tools.py` | `ToolServiceImpl` sı nı fı |
| `trustgraph-flow/trustgraph/agent/react/service.py` | Yapı landı rma yükleme |
### Örnek: Şaka Hizmeti
`trustgraph-flow/trustgraph/tool_service/joke/` 'da bir örnek hizmet:
```python
class Processor(DynamicToolService):
async def invoke(self, user, config, arguments):
style = config.get("style", "pun")
topic = arguments.get("topic", "")
joke = pick_joke(topic, style)
return f"Hey {user}! Here's a {style} for you:\n\n{joke}"
```
Araç hizmeti yapı landı rması :
```json
{
"id": "joke-service",
"request-queue": "non-persistent://tg/request/joke",
"response-queue": "non-persistent://tg/response/joke",
"config-params": [{"name": "style", "required": false}]
}
```
Araç yapı landı rması :
```json
{
"type": "tool-service",
"name": "tell-joke",
"description": "Tell a joke on a given topic",
"service": "joke-service",
"style": "pun",
"arguments": [
{"name": "topic", "type": "string", "description": "The topic for the joke"}
]
}
```
### Geriye Dönük Uyumluluk
Mevcut, yerleşik araç türleri, herhangi bir değişiklik olmadan çalı şmaya devam etmektedir.
`tool-service` , mevcut türlerin (`knowledge-query` , `mcp-tool` , vb.) yanı sı ra yeni bir araç türüdür.
## Gelecek Planları
### Kendini Tanı mlayan Hizmetler
Gelecekteki bir geliştirmede, hizmetlerin kendi tanı mları nı yayı nlaması na izin verilebilir:
Hizmetler, başlatı ldı ğı nda, bilinen bir `tool-descriptors` konusuna yayı n yapar.
Aracı lar abone olur ve araçları dinamik olarak kaydeder.
Yapı landı rma değişiklikleri olmadan gerçek bir tak ve çalı ştı r imkanı sağlar.
Bu, ilk uygulamada kapsam dı şı ndadı r.
## Referanslar
Mevcut araç uygulaması : `trustgraph-flow/trustgraph/agent/react/tools.py`
Araç kaydı : `trustgraph-flow/trustgraph/agent/react/service.py:105-214`
Aracı şemaları : `trustgraph-base/trustgraph/schema/services/agent.py`