Forbered et Python-projekt på serversiden
Denne guide kalder endpointet i GenderAPI.io V2 https://api.genderapi.io/api/v2/gender med API-nøglen i Bearer-headeren. Brug Python 3.10 eller nyere, og download genderapi_v2.py til dit projekt. Eksemplet bruger urllib.request og json fra Pythons standardbibliotek; der kræves ingen pip-pakke.
Angiv GENDERAPI_API_KEY i serverens miljø. YOUR_API_KEY i det følgende eksempel er ikke en gyldig nøgle. Læg ikke rigtige loginoplysninger i filer under versionsstyring, delte notebooks eller applikationer på klientsiden. At importere modulet eller køre det uden demo-indstillinger sender ingen forespørgsel.
python3 --version
export GENDERAPI_API_KEY="YOUR_API_KEY"Send en eksplicit forespørgsel, der kun bruger datasættet
Gem følgende kode som single.py ved siden af den downloadede fil, og kør python3 single.py. Hjælpemodulet sender type: name, value: Alice og options.ai_mode: off som JSON. Forudsigelsen står i data, mens oplysningerne om forespørgslen og opkrævningen står i meta.
Et gennemført kald koster 1 kredit, også ved et ukendt resultat, og eksempelnavnet garanterer ikke en forudsigelse. make_item accepterer name, email eller username og kræver en eksplicit AI-tilstand. Tilføj kun country, hvis du har en relevant kontekst.
Før noget sendes, kræver hjælpemodulet en hexadecimal API-nøgle på 24 tegn. Det kontrollerer nøglens format, ikke om nøglen findes. Modulet afviser desuden gennemførte svar fra IP-prøveadgangen som en uventet adgangstilstand. Den kontrol sker, efter at svaret er modtaget, og kan ikke tilbageføre en kredit fra prøveadgangen, der allerede er brugt.
from genderapi_v2 import GenderAPIError, make_item, predict
try:
response = predict(make_item("name", "Alice", ai_mode="off"))
except GenderAPIError as error:
# Record a reference; do not log the whole error response.
print("Request failed:", error.request_id)
raise SystemExit(1)
else:
result = response["data"]
print(result["result_status"], result["gender"])
print(result["confidence"], result["confidence_kind"])
print(response["meta"]["usage"])Gem resultatet sammen med evidensen
En udledt sammenhæng er ikke det køn, en person selv har oplyst. Gem det oprindelige input, den returnerede evidens og det, personen selv har oplyst, hver for sig. Et ukendt resultat er et gyldigt resultat og bør ikke blive til en gættet kategori i din applikation.
| Felt | Sådan bruger du det |
|---|---|
data.gender / data.result_status | Brug kun male eller female, når status er identified. Bevar den native JSON-værdi null, når resultatet er ukendt. |
data.name / data.match | Kontrollér det returnerede navn og den valgte kandidat. Et match på en delstreng beviser ikke, at inputtet tilhører en person med det navn. |
data.confidence / data.confidence_kind | Konfidensen ligger på en skala fra 0 til 1 eller er null. observed_frequency bygger på lagrede frekvenser, mens model_reported er en værdi angivet af AI. Vurdér tærskelværdier separat for hver type. |
data.source / data.sample_count | Skeln mellem dataset, ai og none. AI-resultater har ingen lagret stikprøvestørrelse. En stikprøvestørrelse er ikke en målt nøjagtighed. |
meta.access.mode | Kontrollér i en integration med konto, at api_key returneres. Manglende eller ukendte nøgler kan i stedet bruge den delte IP-prøveadgang. |
meta.usage | Læs charged_credits og billing_status. Et gennemført ukendt resultat koster kreditter. Et mistet svar beviser ikke, at forespørgslen var gratis. |
Behandl en blandet batch, og bevar id'et for hver række
GenderAPI.io V2 behandler blandede batches via POST https://api.genderapi.io/api/v2/gender/batch: op til 50 elementer med en kontonøgle eller 10 med IP-prøveadgangen. Disse eksempler kræver en kontonøgle. Giv hvert element et stabilt, unikt id og en eksplicit AI-tilstand. En batch kan kombinere navne, e-mailadresser og brugernavne, og hvert element kan have en valgfri country-kontekst.
Læs hvert element i data og oversigten i meta.summary. Et HTTP 200-svar kan indeholde fejl i enkelte elementer, og en batch, hvor alle elementer er mislykkedes, kan returnere et Problem-svar på øverste niveau med resultaterne. Gennemførte ukendte resultater tælles med i succeeded. Med index og id knytter du hvert resultat til den rigtige oprindelige række.
Del større opgaver op i grupper på højst 50 elementer, og send dem i begyndelsen én ad gangen. Gem hvert svar og det tilhørende forbrug, før du går videre til næste gruppe. Stop ved en transportfejl, en fejl i adgangen til kontoen eller en ubekræftet opkrævning, og find først ud af, hvad der skete med den aktuelle gruppe. Send først parallelt, når du har kontrolleret din kontos grænser. Den maksimale batchstørrelse garanterer ikke en bestemt behandlingskapacitet.
from genderapi_v2 import GenderAPIError, make_item, predict_batch
items = [
make_item("name", "Alice", ai_mode="off", item_id="row-1"),
make_item("email", "alex@example.com", ai_mode="off", item_id="row-2"),
make_item("username", "sample_handle", ai_mode="off", item_id="row-3"),
]
try:
response = predict_batch(items)
except GenderAPIError as error:
# Retained error.response can include batch results and billing.
print("Batch needs review:", error.request_id)
raise SystemExit(1)
else:
for item in response["data"]:
if "error" in item:
print(item["id"], "failed", item["error"]["code"])
else:
result = item["data"]
print(item["id"], result["result_status"], result["gender"])
print(response["meta"]["summary"])
print(response["meta"]["usage"])
if response["meta"]["summary"]["failed"]:
raise SystemExit(2)Beslut, hvornår AI skal bruges
forceToGenderize er valgfrit for navne, e-mailadresser og brugernavne. Når det er slået til, skal du udelade ai_mode eller bruge fallback. off og always kan ikke kombineres med denne indstilling og returnerer 422. En positiv startsaldo er nok til at starte en forespørgsel, også selvom den endelige opkrævning gør saldoen negativ.
Kaldenavnstilstanden kan returnere et køn sammen med name: null. Den kan også give et ukendt resultat. Hverken den almindelige automatiske AI-fallback eller fortolkningen af kaldenavne garanterer et korrekt svar eller en værdi, der ikke er null.
Hjælpemodulet til Python kræver altid ai_mode. Brug make_item('username', 'prenses', ai_mode='fallback', force_to_genderize=True) til fortolkning af kaldenavne. Modulet omsætter force_to_genderize til JSON-feltet forceToGenderize.
| Indstilling i forespørgslen | Adfærd | Kreditter for en gennemført forespørgsel |
|---|---|---|
| options.ai_mode: off | Bruger kun datasættet. | 1, også for et ukendt resultat |
| options.ai_mode: fallback | Slår først op i datasættet og bruger derefter almindelig AI, hvis der ikke returneres et køn. Det er standarden for enkeltforespørgsler. | 1 i alt, inklusive automatisk AI-fallback |
| options.ai_mode: always | Bruger AI direkte. | 2 |
| forceToGenderize: true | Slår først op i datasættet og lader derefter AI fortolke et personligt kaldenavn eller alias, også uden et egentligt fornavn. | 1 for et resultat fra datasættet, 2 i alt, hvis AI bruges |
Beslut, hvad du gør efter en fejl
Eksemplerne sender hver handling én gang. De gentager den aldrig automatisk: At sende igen er en ny handling, som kan blive opkrævet. En timeout eller en forbindelsesfejl betyder, at klienten ikke har modtaget et fuldstændigt svar. Det beviser ikke, at serveren har stoppet behandlingen, eller at der ikke er opkrævet kreditter.
Gem det returnerede request_id og opkrævningens status sammen med posten for din opgave. Fejlobjektet bevarer svaret til kontrolleret analyse, men kan indeholde det oprindelige input: Skriv ikke hele objektet, svaret og API-nøglen i almindelige logfiler.
| Situation | Beslutning i applikationen |
|---|---|
| Gennemført ukendt resultat | Bevar null, reason og usage. Det er et afsluttet og opkrævet resultat, ikke en mislykket række, der automatisk skal forsøges igen. |
| Valideringsfejl 422 | Ret det input, der nævnes i felterne i Problem Details, før du sender en ny forespørgsel. |
| 401 / 403 | Kontrollér adgangen til kontoen eller den tilgængelige saldo. At sende den samme forespørgsel igen løser ikke årsagen. |
| 429 | Respektér headeren Retry-After, hvis den findes. Kontrollér fejlen og opkrævningens status, og planlæg derefter det næste forsøg bevidst. |
| Netværksfejl, timeout eller ulæseligt svar | Registrér, at resultatet og opkrævningen ikke er bekræftet. Undersøg situationen, før du sender igen. Klienten kan ikke fortryde en behandling, som serveren allerede har afsluttet. |
| billing_status: unconfirmed | charged_credits og remaining_credits kan være null. Kontakt support før et nyt forsøg, og oplys request_id. Erstat ikke null med nul kreditter. |
| Fejl i nogle elementer i en batch | Gem først de afsluttede elementer. Kontrollér de mislykkede elementer og den tilhørende opkrævning, og send kun de fejl igen, der er egnede til det, ikke hele batchen. |
Kend eksemplets netværksadfærd
urllibs timeout på 10 sekunder gælder for blokerende socket-handlinger og er ikke en garanteret grænse for forespørgslens samlede varighed. Eksemplet slår HTTP-omdirigeringer fra, behandler gennemførte JSON-svar og bevarer HTTP Problem-svar. Det gentager aldrig forespørgsler automatisk.
De lokale test bruger simulerede transportsvar for gennemførte kald, ukendte resultater, delvist gennemførte batches, adgang til kontoen og fejl. De kontrollerer eksemplets logik, men måler ikke API'ets tilgængelighed i produktion, forudsigelsens nøjagtighed eller svartiderne. Hver eksplicit demokommando nedenfor sender sin egen forespørgsel, som bliver opkrævet.
python3 genderapi_v2.py --demo single
# Run separately to submit another billable sample batch:
python3 genderapi_v2.py --demo batchOfte stillede spørgsmål
Hvorfor viser Python None i stedet for null?
Pythons JSON-dekoder omsætter null til None. Bevar den ukendte værdi, og erstat den ikke med et standardkøn eller en konfidensværdi på nul, når du gemmer eller eksporterer resultatet.
Koster et ukendt resultat kreditter?
Ja. Et almindeligt gennemført opslag koster 1 kredit, også når gender er null. Den almindelige automatiske AI-fallback er inkluderet i den kredit. Tilstanden always koster 2 kreditter, og forceToGenderize koster 1 kredit, hvis resultatet kommer fra datasættet, eller 2, hvis AI bruges.
Gentager eksemplet en mislykket forespørgsel?
Nej. Hver ny forespørgsel er en separat handling. Kontrollér fejlen, resultaterne for de enkelte elementer og opkrævningens status, før du beslutter at sende igen. Et manglende svar beviser ikke, at det forrige forsøg var gratis.
Skal jeg installere en pakke?
Nej. Download eksemplet direkte fra denne guide hos GenderAPI.io. Det har ingen runtime-afhængigheder af eksterne pakker og er ikke et separat SDK udgivet via pip eller npm. Gennemgå det, og tilpas det til din applikation. For API'ets kontrakt er dokumentationen til GenderAPI.io V2 gældende.
Kilder
API-dokumentationen definerer forespørgsler og svar. Runtimens dokumentation beskriver de anvendte HTTP-værktøjer.