Phase 14: Agent Engineering

Çalışma Zamanı Geri Dönüşleme Çubukları

Gerçek komut çıkışı tahmin görmeyen ajanlar. Bir geri bildirim koşucusu stdout, stderr, çıkış kodu ve zamanlamaları bir yapılandırılmış kayda kaydediyor.

Type: Build

Languages: Python (stdlib)

Prerequisites: Phase 14 · 32 (Minimal Workbench), Phase 14 · 35 (Init Script)

Time: ~50 minutes

Öğrenme Hedefleri

  • Uygulama zamanının geri bildirimlerini gözlemsellik telemetri ile ayırt edin.
  • Shell komutlarını sarıp yapılandırılmış kayıtları koruyan bir geri bildirim koyucu oluşturun.
  • Büyük çıkışları belirleyici olarak kesin böylece döngü token bütçesinde kalır.
  • İzleme eksik olduğunda döngüyü ilerletmeyi reddet.

Sorun

Ajan "Şimdi testler yürütüyorum" diyor. "Sonraki mesaj "Tüm testler geçer". Gerçek şu ki hiçbir test yürütülmedi. Ajan çıkışını hayal etti, ya da komutu çalıştırdı ve sonuçları hiç okumadı, ya da sonuçları okudu ve sessizce başarısızlık çizgisini kesti.

Bir geri bildirim koşucu bu boşluğu giderir. Her komut koşucuyu geçer. Her kayıt komutu, yakalanan stdout ve stderr, çıkış kodu, duvar saati süresi ve tek satırlı bir ajan notunu taşır. Ajan bir sonraki dönüşte kaydı okuyor. Doğrulama kapısı görev sonunda kayıtları okuyor.

Anlaşım

flowchart LR
  Agent[Agent Loop] --> Runner[run_with_feedback.py]
  Runner --> Shell[subprocess]
  Shell --> Capture[stdout / stderr / exit / duration]
  Capture --> Record[feedback_record.jsonl]
  Record --> Agent
  Record --> Gate[Verification Gate]

İsteğe bağlı kayıtta ne yazıyor?

FieldWhy it matters
commandExact argv, no shell expansion surprises
stdout_tailLast N lines, deterministic truncation
stderr_tailLast N lines, separate from stdout
exit_codeThe unambiguous success signal
duration_msSurfaces slow probes and runaway processes
started_atTimestamp for replay
agent_noteOne line the agent writes about what it expected

Kesim deterministiktir .

50 MB'lik bir kayıt, döngüyü yok eder....truncated N lines...Bu nedenle, aynı çıkış her zaman aynı kayıt üretir.

Geri bildirimler ve telemetri

Telemetri (Fase 14 · 23, OTel GenAI sözleşmeleri) insan operatörleri için zaman boyunca çalışmalar gözden geçirir. Geri bildirim bu çalışmanın bir sonraki dönüşü için.

İzlemeyi reddetmek

Eğer koşucunun çıkışını yakalamadan önce hatalar yapması halinde kayıtlar exit_code: nullve error: <reason>Ajan döngüsü , bir nullÇıkış yok, ilerleme yok.

Yapın

code/main.pyUygulamaları:

  • run_with_feedback(command, agent_note)- Bu bir şey .subprocess.run, stdout/stderr/exit/duration'u yakalar, deterministik olarak kısaltır, feedback_record.jsonl- Evet .
  • JSONL'i Python listesine akıtıyan küçük bir yüklemeci.
  • Üç komut (başarı, başarısızlık, yavaş) çalıştıran ve her komut için son kayıt yazdırır.

Çek şunu:

python3 code/main.py

Çıktı: üç geri bildirim kaydı eklenmiştir feedback_record.jsonlDosyayı tekrar çalıştırmak için arkaya koyun.

Doğada üretim biçimleri

Üç model koşuyu gemiye kadar sertleştirir.

Redact at write, not at read.Stdout veya stderr'e dokunan herhangi bir kayıt gizli sızdırılabilir.^Bearer - Evet .password=- Evet .api[_-]?key=- Evet .AKIA[0-9A-Z]{16}(AWS),xox[baprs]-(Slack) Okuyucu zamanında düzenleme bir tabanca; diskteki dosya saldırganın ulaştığı şeydir.

Rotation policy, not a single file.Kaptanfeedback_record.jsonlDosya başına 1 MB; aşırı akışta .1- Evet ..2, bırak .5...Agent'in döngüsü sadece mevcut dosyayı okuyor, bu yüzden çalıştırma süresi maliyeti sınırlıdır. CI artefakt depolama tam dönümlü bir set alır.

Parent-command id for retry chains.Her kayıttacommand_idYeniden denemekparent_command_idBu bağlantı olmadan, tekrar denemeler bağımsız başarılara benziyor ve denetim başarısızlık geçmişini gizliyor.

Kullan

Üretim biçimleri:

  • Claude Code Bash tool.Bu araç zaten stdout, stderr, exit ve durumu yakalar. Bu dersdeki koşucun herhangi bir ajan ürünü için çerçeve-agnostik eşdeğeridir.
  • LangGraph nodes.Çeviriye herhangi bir kabuk düğümünü sarın böylece kayıt grafik durumunun dışında kalır.
  • CI logs.JSONL'i CI esrar mağazanıza sokun; inceleyiciler seansı tekrarlamadan herhangi bir komutu tekrar oynatabilirler.

Koşucu, her çerçeve göçüne hayatta kalan ince bir sarıktır çünkü rekor şeklini elinde tutuyor.

Gönder

outputs/skill-feedback-runner.mdprojeye özel bir proje oluşturur run_with_feedback.pyDoğru kesim bütçesi, JSONL yazıcısı çalışma masasına kablo yapılmış ve ajanın her dönüşte okuduğu bir yükleme cihazı.

Egzersizler

  1. Bir eklecwdher kayıt alanı, böylece aynı komut farklı dizinlerden çalıştırılır ayırt edilebilir.
  2. Bir ekleredactionDüzgün çizgiler çizilen adım ^Bearer veya password=- Bir cihaz kaydı üzerinde test.
  3. Toplamlık feedback_record.jsonl ile dönerek 1 MB'de büyüklükte.1- Evet ..2Değişiklik politikasını savun.
  4. Bir ekleparent_command_idBu yüzden tekrar deneyin zincirler görünür: hangi komut, sonraki komut tükettiği giriş üretti.
  5. JSONL'i en son sıfır dışı çıkışı vuran küçük bir TUI'ye sokun.

Anahtar Terimler

TermWhat people sayWhat it actually means
Feedback record"Run log"Structured JSONL entry with command, output, exit, duration
Tail truncation"Trim the log"Deterministic head+tail capture so records fit in token budget
Refuse-on-null"Block on missing data"The loop must not advance when exit_code is null
Agent note"Expectation tag"The one-line prediction the agent writes before reading the result
Telemetry split"Two log files"Feedback for the next turn, telemetry for the operator

Daha Fazla Okumak

This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.

Browse the complete course catalog or open this lesson on GitHub.