İçeriğe geç
mcpd
daemon yok
Kaynak

Genel bakış

Ajanınızın yanında çalıştırdığınız bir süreç; ajanınızın etrafına kurulduğu bir kütüphane değil. Çalıştırmayı adımlar arasında tutar ve her adımı kaydeder. Bu sayfa, bütünün biçimini tek okumada verir.

Tek bir süreç

mcpd tek bir süreçle iki iş yapar. Kalıcı bir çalıştırmayı adımları arasında tutar: imleci, yeniden denemeleri, zamanlayıcıları ve beklemeleri; işi her adımın içinde, istediğiniz dilde, sizin kodunuz yapar. Bir de ajanınızın yaptıklarını alır, saklar ve okuyabileceğiniz çalıştırmalar olarak size geri verir. SQLite kendisine bağlanmış tek bir ikili dosyadır. Ayağa kaldırılacak bir veritabanı, yanında çalıştırılacak bir collector ve hiçbir yerde hesap yoktur.

Daemon 4317 portunu dinler ve o tek porttan beş şey sunar:

  • /v1/traces, /v1/logs ve /v1/metrics üzerinde OTLP alımı; böylece var olan bir OpenTelemetry kurulumu için yeni kod gerekmez.
  • /v1/ingest üzerinde yerel alım; modelin OTLP'de yeri olmayan parçalarını, puanlar ve insan geri bildirimi dahil, bu taşır.
  • /v1/api altındaki okuma API'si; arayüz de SDK'lar da bunu kullanır. Elinizdekinin ardında ayrı bir özel API yoktur.
  • /v1/api/runs, /v1/api/events ve /v1/api/steps altındaki çalıştırma yüzeyi: tanımlar, çalıştırmalar, bir beklemeyi yanıtlayan olaylar ve bir worker'ın konuştuğu protokol. Bakınız İş akışları.
  • / adresindeki operatör arayüzü, ikili dosyanın içine gömülü.

Tek port bir kısayol değil, bir dağıtım kararıdır. Bir collector, bir veritabanı ve bir arayüz; çalıştırılacak üç şey, yükseltilecek üç şey ve bir trace'in arada kaybolabileceği üç yer demektir.

Sürüm çıktığında kurulumun tamamı

docker run -p 4317:4317 ghcr.io/mcpd/mcpd

Henüz bir sürüm yayımlanmadı.

Bu sitedeki komutların adını verdiği imaj, chart ve paketler planlanan dağıtımdır; hiçbiri yayımlanmadı. Bugün çalışan yol, kaynaktan derlemektir ve Rust ile Node gerekir:

Derleyip çalıştırma

git clone https://github.com/mcpd/mcpd && cd mcpd && make build && ./target/release/mcpd demo

Bilerek ne değildir

Buradaki değerin çoğu, mcpd'nin yapmayı reddettiği şeylerden gelir. Her ret, ajanınızı değiştirmek zorunda kalmanız için bir nedeni ortadan kaldırır.

  • Framework değil. mcpd modelinizi asla çalıştırmaz, sizin için seçmez, sağlayıcı istemcinizi sarmalamaz. Çalıştırmayı adımlar arasında tutar ve bir adımın içindeki her şeyi kodunuza bırakır. Kodunuz, mcpd'yi benimsedikten sonra da modeli önceki gibi çağırır.
  • İstek yolunda değil. Ajanınızla bir sağlayıcı arasında asla durmaz. Kullanıcılarınızın gördüğü hiçbir şey mcpd'nin ayakta olmasına bağlı değildir, çünkü gördükleri hiçbir şey onun içinden geçmez.
  • Servis değil. Daemon varsayılan olarak hiçbir yeri çağırmaz. Telemetri, lisans denetimi ve satıcı endpoint'i yoktur. Yapacağı tek giden trafik, sizin yapılandırdığınızdır: bir --forward-endpoint, bir monitörün webhook'u ya da bir yargıç modeli. Bunların hiçbirini ayarlamazsanız prompt'larınız, onu çalıştırdığınız makineden hiç çıkmaz.
  • Zorunlu bir bağımlılık değil. mcpd'yi altyapınızdan silerseniz duran tek şey kayıt olur.

Altı sinyal

mcpd altı tür şey saklar ve onları bir arada saklar. Span'ler, işin kendisidir. Loglar, bir çalıştırmanın ürettiği satırlardır. Metrikler zaman içindeki sayılardır. Puanlar, bir çalıştırma hakkında makinenin yargısıdır. Geri bildirim ise insanın yargısıdır. Yön notu ise bir modelin, bitmiş bir çalıştırma hakkında yazdığı tek cümledir.

Hepsini tek bir depoda tutmak işin bütün amacıdır. Her sinyal, ait olduğu trace kimliğini ve span kimliğini taşır; böylece “bu müşterinin şikâyet ettiği çalıştırmada model gerçekte ne söyledi ve bu ne kadara mal oldu” sorusu, dört ayrı araç ve gözle eşleştirilecek bir zaman damgası değil, tek bir sorgu olur.

  • Spans

    What ran, nested, with timings

  • Logs

    Lines the run emitted

  • Metrics

    Numbers, with exemplars back to a run

  • Scores

    Machine evaluation

  • Feedback

    What a person thought

  • Aspect notes

    A sentence a model wrote about the run

trace_id Store Search Export

Puanlar ile geri bildirim bilerek ayrı tutulur. Bir puanlayıcının 0.8'i ile bir insanın beğenmemesi farklı şeyleri ölçer; ikisinin ortalamasını almak hiçbir anlamı olmayan bir sayı üretir.

Neden framework değil de daemon

Framework'ün getirdiği gözlemlenebilirlik iyidir ve framework'e bağlı gelir. Görülebilmesi için ajanın onunla, çoğunlukla tek bir dilde yazılmış olması beklenir. Bu, yeni bir proje için makul, hâlihazırda var olan ve çalışan bir ajan için imkânsız bir ödünleşimdir. Framework iş akışları da aynı ödünleşim: her adım framework'ün dilinde yazıldığı ve onun süreci içinde çalıştığı sürece kalıcıdır.

Daemon ikisini de tersine çevirir. Bir iş akışının grafiği, daemon'un tuttuğu veridir; adım gövdeleri ise sizin sürecinizin tuttuğu koddur ve her dilin konuşabildiği bir HTTP protokolü üzerinden teker teker kiralanarak alınır. Daemon bir modeli, bir prompt'u ya da bir kimlik bilgisini hiç görmez. Bakınız İş akışları ve Worker'lar.

Daemon ödünleşimi tersine çevirir. mcpd, bir bağımlılık değil bir protokol olan OTLP'yi konuşur; bu yüzden her dilde ve her framework'le yazılmış ajanları, mcpd var olmadan önce yazılmış olanlar dahil kaydeder. Ajanınız zaten OpenTelemetry dışa aktarıyorsa OTEL_EXPORTER_OTLP_ENDPOINT değişkenini mcpd'ye yöneltmek entegrasyonun tamamıdır.

SDK'lar, OTLP'nin prompt, tamamlama, token sayısı ya da puan için bir sözcük dağarcığı olmadığı için vardır; oysa sizin aradığınız alanlar bunlardır. Birini kullanmak bir seçimdir, koşul değil. Altısı da aynı davranır: bir span kaydetmek sınırlı bir kuyruğa ekleyip döner, ağ işi arka plandaki bir worker'da olur ve ölçümleme yolunda hiçbir şey hata fırlatmaz. Gözlediği sistemi çökertebilen gözlemlenebilirlik, hiç olmamasından kötüdür.

Tek ikili dosya, iki dağıtım

Dizüstünüzde çalıştırdığınız konteyner, birinin kümesinde Deployment olarak çalışan konteynerin aynısıdır. Saklama, maskeleme, örnekleme ve API anahtarları aynı ikili dosyanın seçenekleridir; farklı bir derleme ya da bir lisans katmanı değil. Yalnızca sahip olamayacağınız bir sürümde bulunan özellik yoktur.

Varsayılanlar dizüstü için ayarlanmıştır; yani hiçbir anahtar yapılandırılmamışken alım da okuma da açıktır. mcpd bu durumdayken loopback dışı bir adresi dinliyorsa başlangıçta yüksek sesle uyarır. Yine de başlar, çünkü başlamamak hedeflediği kişi için beş dakikalık yolu bozardı; ama susmak sorumsuzluk olurdu.

Bundan sonra nereye

mcpd, Apache-2.0 lisanslıdır. Girişteki protokol, çıkıştaki biçim ve etrafındaki lisans açıktır; bu yüzden ayrılmak, gelmek kadar ucuzdur.