Ograniczone dekodowanie treści chunked
Odkoduj ograniczoną treść chunked z maksymalnie 65536 bajtów do wyniku o długości do 4096 bajtów.
def chunk_body(wire):
if type(wire) is not bytes or len(wire) > 65536:
raise ValueError("bounded bytes")
pos, body = 0, bytearray()
while True:
end = wire.find(b"\r\n", pos)
token = wire[pos:end] if end >= 0 else b""
if not 1 <= len(token) <= 8 or any(
c not in b"0123456789abcdefABCDEF" for c in token):
raise ValueError("plain hexadecimal size")
size, pos = int(token, 16), end + 2
if size == 0:
if wire[pos:] != b"\r\n":
raise ValueError("no trailers or extra bytes")
return bytes(body)
if len(body) + size > 4096:
raise ValueError("body limit")
if pos + size + 2 > len(wire):
raise ValueError("truncated chunk")
if wire[pos + size:pos + size + 2] != b"\r\n":
raise ValueError("chunk delimiter")
body.extend(wire[pos:pos + size])
pos += size + 2- Modele
- Dodaj endpoint zgodny z OpenAI lub Anthropic, podając bazowy URL i klucz API, jeśli jest wymagany. Sprawdź połączenie. Lokalny serwer modelu musi działać; zdalne narzędzia mogą przesyłać dane oddzielnie.
- Projekt
- Sprawdź wewnętrzne CRLF i blok zerowy, odrzucając ucięcia, rozszerzenia, pola końcowe i dodatkowe bajty.
- Sprawdź przed zastosowaniem
- Porównaj rzeczywiste zachowanie z oczekiwanym wynikiem. Jeśli sprawdzenie się nie powiedzie, wyjaśnij przyczynę przed kolejnymi zmianami.
def chunk_body(wire):
if type(wire) is not bytes or len(wire) > 65536:
raise ValueError("bounded bytes")
pos, body = 0, bytearray()
while True:
end = wire.find(b"\r\n", pos)
token = wire[pos:end] if end >= 0 else b""
if not 1 <= len(token) <= 8 or any(
c not in b"0123456789abcdefABCDEF" for c in token):
raise ValueError("plain hexadecimal size")
size, pos = int(token, 16), end + 2
if size == 0:
if wire[pos:] != b"\r\n":
raise ValueError("no trailers or extra bytes")
return bytes(body)
if len(body) + size > 4096:
raise ValueError("body limit")
if pos + size + 2 > len(wire):
raise ValueError("truncated chunk")
if wire[pos + size:pos + size + 2] != b"\r\n":
raise ValueError("chunk delimiter")
body.extend(wire[pos:pos + size])
pos += size + 2Jawnie określ format przyjmowany przez dekoder
Dekoder potrzebuje precyzyjnej odpowiedzi, gdzie kończy się prawidłowe wejście, a zaczyna odrzucenie. ChunkRavel to środowisko programowania z AI dla Windows do rozwijania tej granicy z uwzględnieniem kodu projektu. Opisz obsługiwany format wejścia, limity rozmiaru i oczekiwany wynik, a następnie poproś asystenta o sprawdzenie, jak istniejąca implementacja przechodzi przez bajty i zgłasza błędy.
Przykład ograniczonego dekodowania treści chunked to jedno z możliwych zadań. Przyjmuje celowo wąską formę, więc sprawdź nieobsługiwane rozszerzenia i pola końcowe wraz z uciętym wejściem i dodatkowymi bajtami. Poproś o zmiany zachowujące zadeklarowane limity, chyba że wymaganie jawnie je rozszerza. Prześledź zdekodowane wyjście również w kodzie wywołującym, ponieważ poprawny wynik bajtowy może zostać źle obsłużony przez komponent odbiorczy.
Aby skorzystać z opcji abliterowanej AI, wybierz dostępny model przez obsługiwany punkt końcowy zgodny z OpenAI lub Anthropic i podaj dane uwierzytelniające, gdy są wymagane. Model i serwer określają kontekst, narzędzia i obowiązujące ograniczenia. Przejrzyj różnice i uruchom prawidłowe oraz nieprawidłowe dane testowe w testach projektu przed przyjęciem zmiany dekodera. Osobno działający lokalny serwer modelu nie czyni każdego podłączonego narzędzia lub usługi lokalnymi.
Przegląd wąskiego kontraktu dekodera
- Czy dekoder powinien przyjmować każdą formę wejścia chunked?
Tylko jeśli tego wymaga aplikacja, a implementację do tego zaprojektowano i przetestowano. Przykład obsługuje ograniczoną formę. Jawnie określ rozszerzenia, pola końcowe i inne nieobsługiwane przypadki, zamiast traktować wąską demonstrację jako pełną obsługę protokołu.
- Jak testować uciętą treść?
Dostarcz dane ucięte na istotnych granicach, w tym wewnątrz tokenu rozmiaru, treści i separatora. Określ oczekiwane zachowanie odrzucenia. Uruchom je przez rzeczywisty punkt wejścia dekodera, aby badany wynik obejmował otaczającą obsługę wejścia.
- Dlaczego sprawdzać bajty pozostałe po końcowym fragmencie?
Aplikacja potrzebuje zdefiniowanych zasad dla niezużytego wejścia. Sprawdź, czy dodatkowe bajty należy odrzucić, czy obsłużyć w innej warstwie, a następnie przetestuj ten kontrakt. Przypadkowe ignorowanie ich może ukryć rozbieżność między dekoderem a kodem wywołującym.
- Czy domena związana z SQL sugeruje funkcje dekodowania baz danych?
Nie deklarujemy takiej funkcji. Dostarczony przykład projektu dotyczy dekodowania bajtów, a ChunkRavel to środowisko programowania z AI dla Windows. Wybierz rzeczywiste pliki projektu i środowisko wykonawcze zadania zamiast wnioskować o możliwościach produktu z domeny.
ChunkRavel · Zaktualizowano 2026-10-25