Örnekleme ve kök dizinler
Makine çevirisi
Bu sayfa İngilizce dokümantasyondan otomatik olarak çevrildi; esas alınması gereken sürüm İngilizce sayfadır. Yanlış görünen bir şey varsa, nasıl bildireceğinizi Çeviriler sayfası açıklar.
Bir işleyici, bağlı istemciden iki şey daha isteyebilir: istemcinin kendi modelinden bir tamamlama (örnekleme (sampling)) ve istemcinin çalışma alanı klasörleri (kök dizinler (roots)).
İkisi de SDK'nın konuştuğu her protokol sürümünde hâlâ çalışır. Ancak tasarımınızı bunların üzerine kurmadan önce uyarıyı okuyun:
2026-07-28 spesifikasyonuyla kullanım dışı bırakıldı
Örnekleme ve kök dizinler 2026-07-28 itibarıyla kullanım dışı bırakıldı (SEP-2577). Tamamen işlevsel olmaya devam ederler ve kaldırılmaya aday hâle gelmeden önce en az on iki ay boyunca spesifikasyonda kalırlar; yine de yeni uygulamalar bunların üzerine kurulmamalıdır. Önerilen geçiş yolları: örnekleme yerine doğrudan LLM sağlayıcınızın API'siyle entegre olun; kök dizinler yerine dizinleri araç parametreleri, kaynak URI'leri veya sunucu yapılandırması üzerinden geçirin. SDK genelindeki liste Kullanım dışı özellikler sayfasında.
Örnekleme: istemcinin modelini ödünç alma
Bir çözümleyici Sample(...) döndürür ve araç tamamlamayı alır; bu, Bağımlılıklar sayfasında Elicit'i çalıştıran bağımlılık mekanizmasının aynısıdır:
from typing import Annotated
from mcp.server import MCPServer
from mcp.server.mcpserver import Resolve, Sample
from mcp.types import CreateMessageResult, SamplingMessage, TextContent
mcp = MCPServer("Bookshop")
def draft_blurb(title: str) -> Sample:
prompt = f"Write a one-sentence blurb for the book {title!r}."
return Sample(
[SamplingMessage(role="user", content=TextContent(type="text", text=prompt))],
max_tokens=60,
)
@mcp.tool()
async def blurb(title: str, draft: Annotated[CreateMessageResult, Resolve(draft_blurb)]) -> str:
"""Draft a blurb for a book."""
return draft.content.text if draft.content.type == "text" else "No blurb."
Sample(messages, max_tokens=...),sampling/createMessageparametrelerini yansıtır. Enjekte edilen değer istemcininCreateMessageResult'ıdır;toolsveyatool_choicegeçirirseniz bunun yerine birCreateMessageResultWithToolsolur.- İstemcinin
samplingyeteneğini bildirmiş olması gerekir (toolsveyatool_choicegeçiriyorsanızsampling.tools). Bildirmediyse çağrı, istemcinin işleyemeyeceği bir istek göndermek yerine-32021protokol hatasıyla başarısız olur. Geri kanalı (back-channel) olmayan 2026 öncesi bir oturum, gönderecek bir yer olmadığından her zamanki geri-kanal-yok hatasıyla başarısız olur. 2026-07-28'de istek, çok turlu (multi-round-trip) akışın içinde iletilir (Çok turlu istekler);2025-11-25'te ise istemciye gönderilen bağımsız bir istektir. Kod her iki durumda da aynıdır, ancak çok turlu kurala dikkat edin: istek, yeniden deneme turları boyunca birebir aynı şekilde oluşmalıdır. Bu yüzden onu yalnızca aracın argümanlarından ve diğer kararlı verilerden oluşturun.include_context'e dokunmayın:"none"dışındaki değerlerin kendisi de kullanım dışı bırakıldı (SEP-2596) ve neredeyse hiçbir istemcinin bildirmediği bir yetenek gerektirir.
Kök dizinler: bu nereye gitmeli?
Kök dizinler, istemcinin sunucunun üzerinde çalışabileceğini söylediği klasörlerdir. Bilgilendirme amaçlı bir yönlendirmedir, erişim denetimi mekanizması değil. Bir çözümleyici ListRoots() döndürür:
from typing import Annotated
from mcp.server import MCPServer
from mcp.server.mcpserver import ListRoots, Resolve
from mcp.types import ListRootsResult
mcp = MCPServer("Bookshop")
def workspace_roots() -> ListRoots:
return ListRoots()
@mcp.tool()
async def catalog_folder(roots: Annotated[ListRootsResult, Resolve(workspace_roots)]) -> str:
"""Pick the folder the catalog export should go to."""
if not roots.roots:
return "No workspace folders shared."
return str(roots.roots[0].uri)
- Enjekte edilen
ListRootsResult, birRootlistesi taşır: her biri birfile://URI'si ve isteğe bağlı bir görünen ad. - Denetim örneklemeyle aynıdır: bildirilmiş bir
rootsyeteneği yoksa çağrı, isteği göndermek yerine-32021ile başarısız olur.
Bağlantının diğer ucunda istemci, her iki isteği de zaten sahip olduğu callback'lerle yanıtlar: İstemci callback'leri sayfasında anlatılan sampling_callback ve list_roots_callback.
2025 neslinden bağlantılarda
ctx.session.create_message(...) ve ctx.session.list_roots(), oturumu doğrudan yöneten kod için hâlâ mevcuttur. Yalnızca bir geri kanalın bulunduğu yerde (2025 neslinden, durumsuz olmayan bağlantılarda) çalışırlar ve çağrıldıklarında kullanım dışı bırakma uyarısı verirler. Desteklenen biçim yukarıdaki çözümleyici işaretçileridir: iletim yolunu anlaşılan sürüme göre seçerler ve uyarı vermezler.
Özet
- Bir çözümleyiciden
Sample(...)veyaListRoots()döndürün; araçCreateMessageResult'ı veyaListRootsResult'ı diğer bağımlılıklar gibi alır. - İstemcinin eşleşen yeteneği bildirmesi gerekir; aksi hâlde çağrı, bir istek gönderilmek yerine
-32021ile başarısız olur. - İki özellik de
2026-07-28'de kullanım dışı bırakıldı: şimdilik tamamen işlevsel, ancak yeni tasarımlar için yanlış tercih. Örnekleme yerine sağlayıcı API'lerini, kök dizinler yerine açık parametreleri tercih edin.
Yavaş bir aracın ne kadar ilerlediğini bildirme: İlerleme.