Przejdź do treści

KRET LANGUAGE ACADEMY · DOKUMENTACJA ZE ŹRÓDEŁ

Kontrakt narzędzia i negatywne testy

ADVANCED40 min
Postęp nauki 0 / 3
Zaloguj się na konto użytkownika, aby zachować postęp.

Czego się nauczysz

  • Prześledź źródła i wyjaśnij opisany kontrakt.
  • W ToolContractErrors znajdź niezgodną sygnaturę. Opracuj korektę deklaracji i oddziel ją od nadal niedostępnego wykonania AI.
Wymagania wstępne
  • Ukończ Podstawy i wcześniejszy poziom tej ścieżki.

Wyjaśnienie krok po kroku

Typy argumentów oraz wyniku narzędzia muszą pasować do funkcji KretS. Test odmowy jest poprawny, gdy otrzymujesz oczekiwany kod błędu. Nie zmieniaj deklaracji tak, aby przypadkiem uruchomić niezatwierdzone połączenie z modelem.

Praca z kodem źródłowym

Kontrakt narzędzia i polityka danych — błędy

Narzędzie, którego zadeklarowana sygnatura (`amount String`) nie zgadza się z funkcją KretS (`amount: Int`), oraz nieznana polityka danych modelu — obie deklaracje są odrzucane przy kompilacji.

kretai "1.0"

// Model lokalny: serwer modeli na tym komputerze (protokół chat/completions — llama.cpp server, Ollama, LM Studio).
// Polityka „local-only”: brama wymusza, żeby połączenie kończyło się na adresie pętli zwrotnej — dane nie opuszczają komputera.
model local.small {
    provider "local"
    name "qwen2.5:7b"
    endpoint "http://127.0.0.1:11434"
    dataPolicy "local-only"
    maxOutputTokens 1024
    timeout 2min
}

tool counter.read {
    description "Odczytuje wartość licznika o podanej nazwie."
    handler "Tools.readCounter"
    parameter name String "Nazwa licznika, np. orders"
    returns "Int64"
    permissions {
        kretdb.open
        kretdb.read
    }
    sideEffects "none"
}

tool counter.add {
    description "Zwiększa licznik o podaną wartość i zwraca nowy stan."
    handler "Tools.addCounter"
    parameter name String "Nazwa licznika"
    parameter amount Int64 "O ile zwiększyć"
    returns "Int64"
    permissions {
        kretdb.open
        kretdb.read
        kretdb.write
    }
    sideEffects "write"
    requiresConfirmation true
}

// Agent tylko do odczytu.
agent reader {
    model local.small
    system "Odpowiadasz krótko i tylko na podstawie danych z narzędzi."
    tools counter.read
    permissions {
        kretdb.open
        kretdb.read
    }
    limits {
        maxSteps 4
        maxToolCalls 8
        timeout 2min
    }
}

// Agent, który może zmieniać dane — każde wywołanie narzędzia zapisującego wymaga potwierdzenia.
agent assistant {
    model local.small
    system "Pomagasz prowadzić liczniki. Zanim coś zmienisz, sprawdź obecny stan."
    tools counter.read counter.add
    delegates reader
    permissions {
        kretdb.open
        kretdb.read
        kretdb.write
    }
    limits {
        maxSteps 8
        maxToolCalls 16
        timeout 5min
        maxTokens 200000
    }
}
Czytanie kodu linia po linii

Objaśnienia struktury nie są walidacją semantyczną. Szczegółowy kontrakt opisują referencje i README przykładu.

  1. kretai "1.0"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  2. Pusta linia oddziela fragmenty źródła.
  3. // Model lokalny: serwer modeli na tym komputerze (protokół chat/completions — llama.cpp server, Ollama, LM Studio).Komentarz autora; nie jest wykonywany.
  4. // Polityka „local-only”: brama wymusza, żeby połączenie kończyło się na adresie pętli zwrotnej — dane nie opuszczają komputera.Komentarz autora; nie jest wykonywany.
  5. model local.small {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  6. provider "local"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  7. name "qwen2.5:7b"Pole tożsamości lub wersji w otaczającym bloku; zachowaj jego kontekst.
  8. endpoint "http://127.0.0.1:11434"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  9. dataPolicy "local-only"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  10. maxOutputTokens 1024Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  11. timeout 2minOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  12. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  13. Pusta linia oddziela fragmenty źródła.
  14. tool counter.read {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  15. description "Odczytuje wartość licznika o podanej nazwie."Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  16. handler "Tools.readCounter"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  17. parameter name String "Nazwa licznika, np. orders"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  18. returns "Int64"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  19. permissions {Początek nazwanego bloku; jego pola odczytaj w powiązanej referencji.
  20. kretdb.openOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  21. kretdb.readOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  22. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  23. sideEffects "none"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  24. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  25. Pusta linia oddziela fragmenty źródła.
  26. tool counter.add {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  27. description "Zwiększa licznik o podaną wartość i zwraca nowy stan."Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  28. handler "Tools.addCounter"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  29. parameter name String "Nazwa licznika"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  30. parameter amount Int64 "O ile zwiększyć"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  31. returns "Int64"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  32. permissions {Początek nazwanego bloku; jego pola odczytaj w powiązanej referencji.
  33. kretdb.openOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  34. kretdb.readOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  35. kretdb.writeOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  36. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  37. sideEffects "write"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  38. requiresConfirmation trueOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  39. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  40. Pusta linia oddziela fragmenty źródła.
  41. // Agent tylko do odczytu.Komentarz autora; nie jest wykonywany.
  42. agent reader {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  43. model local.smallOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  44. system "Odpowiadasz krótko i tylko na podstawie danych z narzędzi."Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  45. tools counter.readOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  46. permissions {Początek nazwanego bloku; jego pola odczytaj w powiązanej referencji.
  47. kretdb.openOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  48. kretdb.readOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  49. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  50. limits {Początek nazwanego bloku; jego pola odczytaj w powiązanej referencji.
  51. maxSteps 4Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  52. maxToolCalls 8Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  53. timeout 2minOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  54. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  55. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  56. Pusta linia oddziela fragmenty źródła.
  57. // Agent, który może zmieniać dane — każde wywołanie narzędzia zapisującego wymaga potwierdzenia.Komentarz autora; nie jest wykonywany.
  58. agent assistant {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  59. model local.smallOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  60. system "Pomagasz prowadzić liczniki. Zanim coś zmienisz, sprawdź obecny stan."Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  61. tools counter.read counter.addOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  62. delegates readerOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  63. permissions {Początek nazwanego bloku; jego pola odczytaj w powiązanej referencji.
  64. kretdb.openOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  65. kretdb.readOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  66. kretdb.writeOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  67. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  68. limits {Początek nazwanego bloku; jego pola odczytaj w powiązanej referencji.
  69. maxSteps 8Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  70. maxToolCalls 16Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  71. timeout 5minOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  72. maxTokens 200000Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  73. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  74. }Zamknięcie struktury otwartej we wcześniejszych liniach.

Oczekiwany wynik: Pierwszy krok — sukces; dwa kolejne — kod 1 z diagnostyką `KCS-KAI-…`.

Typowy błąd: Nadanie agentowi uprawnień szerszych niż przyznał host — agent nigdy nie ma własnych uprawnień, a narzędzie działa z uprawnieniami ze swojej deklaracji.

Instrukcja, wersje i zapisane wyniki →

Materiały źródłowe do tego tematu

Przeczytaj powiązane rozdziały. Kod i kontrakty zachowano z importu; historia źródeł jest dostępna przy każdym rozdziale.

KretAI — zgodność i wersje / compatibility and versions

KretAI — zgodność i wersje / compatibility and versions

Polski

  • KretAI 1.1: model lokalny (test na serwerze modeli, KCS dla kretai.*).
  • KretAI 1.2: modele zdalne (decyzja FB-05, Vault).
  • KretAI 1.x: narzędzia w osobnym procesie, strumieniowanie.
  • Stary walidator JSON Kret.Formats.AiContractValidator (rc.1) — LEGACY.
Otwórz cały rozdział ze źródłem →
KretAI — kody diagnostyczne / diagnostic codes

KretAI — kody diagnostyczne / diagnostic codes

Kod / codePolski
KCS-KAI-0301brak lokalnego serwera modeli (po przejściu bramki uprawnień)
KCS-KAI-0302brak przyznania kretai.use/kretai.model.use
KCS-KAI-*błędy deklaracji: sygnatura narzędzia, uprawnienia, polityka danych, delegacja, limity

Format: kret-diagnostics/1 (kod, plik, wiersz, kolumna, zakres) / (code, file, line, column, range).

Otwórz cały rozdział ze źródłem →
KretAI — bezpieczeństwo / security

KretAI — bezpieczeństwo / security

Polski

  • Agent nie ma własnych uprawnień; narzędzie nie rozszerzy uprawnień agenta.
  • Argumenty od modelu = dane niezaufane.
  • Model zewnętrzny: 6 warunków naraz; przekierowania HTTP wyłączone.
  • Audyt bez treści rozmowy i sekretów.
  • Prawdziwe modele: NOT_RUN bez zgody właściciela.
Otwórz cały rozdział ze źródłem →
KretAI — rozwiązywanie problemów / troubleshooting

KretAI — rozwiązywanie problemów / troubleshooting

Problem (PL)Rozwiązanie (PL)
KCS-KAI-0302oczekiwane bez --grant kretai.use,kretai.model.use,…
KCS-KAI-0301brak lokalnego serwera modeli — oczekiwane w tej rundzie
Otwórz cały rozdział ze źródłem →
KretAI — samouczek ADVANCED

KretAI — samouczek ADVANCED

Status 1.0: `FROZEN_SUPPORTED_SUBSET` — zamrożony dokładnie opisany zakres; reszta poza kontraktem 1.0. Gramatyka/wersja: kretai-1.0. Status języka nie nadaje uprawnień KCS ani prawa do działania w Production.

Cel: integracja z Core i innymi językami, KretDB, bezpieczny dostęp do API, pluginy, stan, testy, diagnostyka, uprawnienia.

Narzędzia: kret = <SDK>\Compiler\kret.exe (SDK 1.0.0-rc.3+kret.local.3), kretui-host = <SDK>\UiHost\kretui-host.exe. {DATA}/{OUT} = nowe, puste katalogi.

1. Kontrakt narzędzia i polityka danych — błędy (KRETAI-A01-ToolContractErrors)

Projekt: ../../Examples/ADVANCED_ToolContractErrors/ · klasyfikacja VALIDATION_ONLY · Playground LOCAL_VALIDATE

Kroki (katalog roboczy: katalog przykładu):

  1. kret check . --json — w wyniku: "succeeded": true
  2. kret check wrong-signature --json — oczekiwany błąd — w wyniku: KCS-KAI
  3. kret check bad-data-policy --json — oczekiwany błąd — w wyniku: "succeeded": false

Wynik tej rundy: PASS — zob. EXPECTED_OUTPUT.txt.

Otwórz cały rozdział ze źródłem →

Ćwiczenie i sprawdzenie wiedzy

W ToolContractErrors znajdź niezgodną sygnaturę. Opracuj korektę deklaracji i oddziel ją od nadal niedostępnego wykonania AI.

Szkic nie jest wysyłany na serwer i znika po opuszczeniu lekcji. Przed wyjściem możesz go skopiować.
Podpowiedzi
  • KretAI (w SDK `KretAi`) deklaruje modele, narzędzia (funkcje KretS) i agentów. Zamrożone są deklaracje, walidacja oraz bramki uprawnień i polityki danych. **Wykonanie z prawdziwym modelem nie należy do kontraktu 1.0** (KretAI 1.1+, NOT_RUN). W Core KretAI jest DISABLED.
  • Odczytaj ograniczenia i oczekiwane błędy z dostarczonego samouczka; check i run są oddzielnymi krokami.
Omówienie rozwiązania

Odpowiedź oprzyj na pokazanym kodzie i rozdziale źródłowym. Typy argumentów oraz wyniku narzędzia muszą pasować do funkcji KretS. Test odmowy jest poprawny, gdy otrzymujesz oczekiwany kod błędu. Nie zmieniaj deklaracji tak, aby przypadkiem uruchomić niezatwierdzone połączenie z modelem.

Które podsumowanie jest zgodne z lekcją?

To quiz o opisanym kontrakcie. Nie kompiluje kodu, nie potwierdza wykonania programu i nie przyznaje nagród.

Podsumowanie i następny krok

Typy argumentów oraz wyniku narzędzia muszą pasować do funkcji KretS. Test odmowy jest poprawny, gdy otrzymujesz oczekiwany kod błędu. Nie zmieniaj deklaracji tak, aby przypadkiem uruchomić niezatwierdzone połączenie z modelem.

Zaloguj się na konto użytkownika, aby zapisywać postęp i zakładki. Konta obsługi mogą czytać bez zapisu postępu. Logowanie →

Wybierz, co możemy zapamiętać w tej przeglądarce. Możesz zmienić decyzję w każdej chwili.

Polityka prywatności