from hashlib import sha256
class Bloom:
def __init__(self, width):
if type(width) is not int or not 1 <= width <= 8192:
raise ValueError("width.range")
self.width, self.bits = width, 0
def positions(self, key):
if not isinstance(key, bytes) or len(key) > 1024:
raise ValueError("key.bytes")
digest = sha256(key).digest()
return [int.from_bytes(digest[i:i+4], "big") % self.width
for i in (0, 4, 8, 12)]
def add(self, key):
for position in self.positions(key):
self.bits |= 1 << position
def maybe_contains(self, key):
return all(self.bits & (1 << p) for p in self.positions(key))
✳Bewaar sleutels van maximaal 1024 bytes in een Bloom-filter met één tot 8192 bits.
✓ WijzigingenControleer vóór het toepassen ↗
Illustratie van de werkruimte
Project
Test dubbele invoeging en ingevoegde sleutels en toon dat een positief resultaat fout kan zijn en geen lidmaatschap bewijst.
Controleer vóór het toepassen
Vergelijk het werkelijke gedrag met het verwachte resultaat. Onderzoek een mislukte controle voordat je verdergaat met wijzigingen.
Modellen
Stel een OpenAI-compatibel of Anthropic-endpoint in met de basis-URL en zo nodig een API-sleutel. Test de verbinding. Een lokale modelserver moet actief zijn; externe hulpmiddelen kunnen apart gegevens versturen.
from hashlib import sha256
class Bloom:
def __init__(self, width):
if type(width) is not int or not 1 <= width <= 8192:
raise ValueError("width.range")
self.width, self.bits = width, 0
def positions(self, key):
if not isinstance(key, bytes) or len(key) > 1024:
raise ValueError("key.bytes")
digest = sha256(key).digest()
return [int.from_bytes(digest[i:i+4], "big") % self.width
for i in (0, 4, 8, 12)]
def add(self, key):
for position in self.positions(key):
self.bits |= 1 << position
def maybe_contains(self, key):
return all(self.bits & (1 << p) for p in self.positions(key))
AI-werkruimte voor code
Voorkom dat onzekere resultaten zekere beslissingen worden
Een snelle voorlopige controle kan een fout worden als een aanroeper het antwoord als definitief beschouwt. BloomFjord is een AI-programmeeromgeving voor Windows om die grens met een verbonden model te beoordelen. Voeg de datastructuur en afnemende code aan het projectgesprek toe en vermeld welk bewijs de toepassing nodig heeft voordat zij handelt.
Vraag de assistent als concrete taak een Bloom-lidmaatschapsfilter te onderzoeken dat vóór een gezaghebbende opzoeking wordt gebruikt. Beschrijf wat de aanroeper na een mogelijke overeenkomst en na een zekere afwezigheid moet doen. Vraag een voorstel dat het onderscheid in namen, vertakkingen en tests behoudt, in plaats van op een opmerking naast een dubbelzinnige booleaanse waarde te vertrouwen.
Beoordeel de integratie met gecontroleerde testgevallen. Neem toegevoegde en afwezige sleutels op en controleer dat een mogelijke overeenkomst nog steeds het vereiste bevestigingspad volgt. Onderzoek validatie en configuratieaannames voordat je wijzigingen aan breedte of hashing accepteert. Voer de projecttests uit om het benodigde gedrag vast te stellen in plaats van het filter als garantie voor exact lidmaatschap te behandelen.
BloomFjord ondersteunt OpenAI-compatibele of Anthropic-endpointverbindingen. Een geablitereerd AI-model is selecteerbaar als je provider dat aanbiedt; context, toolondersteuning en beperkingen worden door die configuratie bepaald. De omgeving laat je het voorstel bespreken en onderzoeken terwijl de toepassingsafspraken je uiteindelijke beslissing sturen.
Een voorlopige lidmaatschapscontrole integreren
Wat moet na een mogelijke overeenkomst gebeuren?
Volg het gezaghebbende bevestigingspad van de toepassing als exact lidmaatschap belangrijk is. Vraag de assistent die vertakking in de aanroeper te tonen. Een probabilistisch resultaat mag niet stilzwijgend toestemming worden om verificatie over te slaan of een record als bevestigd te behandelen.
Kan een test met een afwezige sleutel bewijzen dat er geen foutpositieven zijn?
Nee. Die controleert dat testgeval, niet elke mogelijke sleutel. Gebruik tests om integratiegedrag te verifiëren en de gedocumenteerde onzekerheid te behouden. Wijzig API-namen of aanroeplogica niet op een manier die suggereert dat het filter exact lidmaatschap levert.
Waarom sleutelcodering samen met het filter beoordelen?
Toevoegingen en opzoekingen moeten dezelfde logische sleutel consistent weergeven. Voeg de code toe die toepassingswaarden naar bytes omzet en onderzoek verschillen in normalisatie of serialisatie voordat je de lidmaatschapsimplementatie zelf wijzigt.
Moet de filterbreedte veranderen tijdens een reparatie van de aanroeper?
Houd configuratiewijzigingen apart tenzij ze nodig zijn voor het gemelde probleem. Ze kunnen filtergedrag en middelengebruik veranderen. Vraag om uitleg en passende controles in plaats van een nieuwe breedte als bijkomstige verbetering te accepteren.