Žinių bazė kūrėjai
Pokalbiai, atsakymai ir žinutės
Trys būdai, kaip paprašyti modelio kažko, trijų formatų klientai jau kalba, visi veikia tų pačių modelių ir sąskaitomis tuo pačiu būdu.
Patogumui šis puslapis išverstas mašininiu būdu. Tinkama versija anglų kalba.
Pokalbių užbaigimas
OpenAI pokalbių formatas ir beveik kiekvienas įrankis palaiko. siųsti pokalbį iki šiol ir gauti kitą pranešimą atgal.
POST https://nymbot.ai/api/v1/chat/completions Reikalingas API raktas.
tik model ir messages pasirinkto modelio imties parametras nėra nuleistas be klaidos, todėl vienas užklausos kūnas veikia įvairiuose modeliuose. supported_parametersTai, kas atmesta, o ne išmesta, yra tai, ko modelis negali padaryti: modelio, kuris negali matyti, nuotraukos, modelio, kuris negali juos skambinti, įrankiai.
| Lauko | Tipas | Reikalingas | Aprašymas |
|---|---|---|---|
model | Stringų | Taip | nymbot/auto (arba auto) "Nymbot" maršrutizavimui į standartinį balansą arba katalogo modelio ID, pvz., anthropic/claude-sonnet-5 ant Pro balanso. Taip pat priimami programos trumpi pavadinimai ir slapyvardžiai. gali baigtis Pakanka. |
messages | artritas | Taip | Pokalbis - vaidmenys system, developer (taikoma kaip sistema) user, assistant ir toolTurinys yra eilutė arba sąrašas text ir image_url dalys; vaizdai tik naudotojo pranešimuose. input_audio ir failų dalys atmetamos. |
stream | Boolė | ne | Atsakymą siųskite taip, kaip parašyta. Streikuoti. |
stream_options | Objektas | ne | {"include_usage": true} prideda galutinį gabalėlį su žetonų skaičiavimais ir kaina. |
max_tokensmax_completion_tokens | Integracijos | ne | Dauguma žetonų, kuriuos reikia parašyti. Sumažintas iki modelio maksimumo, jei jis yra didesnis. Taip pat nustato, kiek laikoma iš jūsų balanso, todėl mažesniam skaičiui reikia mažiau kredito pradėti. |
temperaturetop_p | Numeris | ne | Kontrolės pavyzdžiai: temperature nuo 0 iki 2, top_p nuo 0 iki 1. |
stop | String arba array | ne | Atsakymą užbaigiantis tekstas: eilutė arba ne daugiau kaip 4 eilutės, kurių kiekviena turi ne daugiau kaip 256 simbolius. nymbot/auto. |
seed | Integracijos | ne | Pakartotiniam mėginių ėmimui, kai modelis jį palaiko. |
presence_penaltyfrequency_penalty | Numeris | ne | Pakartotinės kontrolės, kiekviena nuo -2 iki 2. |
response_format | Objektas | ne | {"type": "json_object"} arba {"type": "json_schema", "json_schema": {…}}, kur modelis jį palaiko. nenaudojamas nymbot/auto. |
toolstool_choiceparallel_tool_calls | Array, stringa arba objektas, Boolean | ne | Skambučio funkcija. žiūrėti Įrankių skambučiai• A web_search Įrankis virsta Internetinė paieškaNe daugiau kaip 128 įrankių ir 512 KB apibrėžimų, įterptų ne daugiau kaip 64 lygių gylis; daugiau yra 400. |
reasoning_effortreasoning | Šarūnas, objektas | ne | "minimal", "low", "medium" arba "high"arba {"effort": "high"}. "none" arba {"enabled": false} Išjunkite jį. žiūrėti Argumentavimas. |
plugins | artritas | ne | [{"id": "web", "max_results": 5}] Visada ieškokite internete pirmiausia. iki 10 rezultatų. |
n | Integracijos | ne | Vienintelis būdas: viskas grįžta 400. |
logit_biasusermetadata | objektas, stringa, objektas | ne | Priimtas ir neišsiųstas. logit_bias žemėlapiai ne daugiau kaip 300 žetonų ID skaičiais nuo -100 iki 100; user turi ne daugiau kaip 256 simbolius; metadata gali turėti ne daugiau kaip 16 eilutės reikšmių, raktų iki 64 simbolių ir reikšmių iki 512. |
Atsakymas yra įprastas chat.completionBe to, su sąnaudomis usage.cost
JAV doleriais) ir nymbot Objektų model yra išspręstas modelio id, todėl trumpas vardas grįžta kaip pilnas. message.reasoning_contentAtskirai nuo atsakymo.
Atsakymas
{
"id": "chatcmpl-5f1c0a9e27d84b3c",
"object": "chat.completion",
"created": 1790726400,
"model": "anthropic/claude-sonnet-5",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "A Lightning invoice is a one-time payment request..."
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 1240,
"completion_tokens": 380,
"total_tokens": 1620,
"prompt_tokens_details": { "cached_tokens": 0 },
"completion_tokens_details": { "reasoning_tokens": 0 },
"cost": 0.01895
},
"nymbot": {
"balance": "pro",
"charged_credits": 0.162,
"charged_sats": 16.2,
"balance_credits": 412.425,
"balance_sats": 41242.5
}
}
finish_reason yra parengta iš to, kas sugrįžo, nes teikėjai praneša kitaip: tool_calls Kai modelis prašo įrankių, length kai atsakymas naudojo kiekvieną leistiną žetoną (arba modelis praleido juos visus mąstydamas ir nenurodė jokio atsakymo), content_filter kai paslaugų teikėjas atsisako, ir stop
ir kitaip. usage.completion_tokens_details.reasoning_tokens visada yra 0: paslėpti argumentų žetonai skaičiuojami ir apmokestinami completion_tokens.
| statusą | Kada |
|---|---|
400 | ne model arba messages (missing_required_parameter); garso ar failų dalis, arba modelio vaizdai, kurie negali juos matyti (unsupported_contentdaugiau nei 20 nuotraukų (too_many_images); mėginių ėmimo parametras neteisingo tipo arba nepakankamo diapazono (invalid_value); vaizdo nuoroda, kuri nėra vieša (invalid_image_url); įrankiai ant modelio, kuris negali juos vadinti (unsupported_tool); n ne daugiau kaip 1; a :thinking Pavyzdys, dėl kurio negalima pagrįsti (model_not_found(arba paslaugų teikėjas atsisakė pateikti prašymą)upstream_rejected). |
402 | Modelio išleistas balansas negali padengti turto. |
403 | Blogiausias atvejis neatitinka rakto dangtelio (key_limit_reached• žemesnė max_tokens Arba pakelkite galvą. |
404 | Nėra tokio pavadinimo (model_not_found). |
429 | Paslaugų teikėjas arba paslaugų teikėjas (upstream_rate_limited). |
502, 503 | Paslaugų teikėjas nesugebėjo (upstream_error) arba yra perkrautas (upstream_overloadedsu Retry-AfterNėra nieko apmokestinama, nebent teikėjas sąskaitą už bandymą. |
Statuso kodai kiekvienos galinės akcijos yra išvardytos klaidų.
cURL
curl https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"messages": [
{"role": "system", "content": "Answer in one short paragraph."},
{"role": "user", "content": "What is a Lightning invoice?"}
],
"max_tokens": 400
}'
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
reply = client.chat.completions.create(
model="anthropic/claude-sonnet-5",
messages=[
{"role": "system", "content": "Answer in one short paragraph."},
{"role": "user", "content": "What is a Lightning invoice?"},
],
max_tokens=400,
)
print(reply.choices[0].message.content)
print(reply.usage.cost)
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const reply = await client.chat.completions.create({
model: "anthropic/claude-sonnet-5",
messages: [
{ role: "system", content: "Answer in one short paragraph." },
{ role: "user", content: "What is a Lightning invoice?" },
],
max_tokens: 400,
});
console.log(reply.choices[0].message.content);
console.log(reply.usage.cost);
Streikuoti
su "stream": true atsakymas atvyksta kaip serverio siunčiami įvykiai, o modelis jį rašo. chat.completion.chunk Yra a data: linija, o srautas baigiasi su data: [DONE]Priežastys ateina į
delta.reasoning_contentAtsakymas į delta.content.
Siųskite bet ką, kas gali užtrukti ilgiau nei apie 100 sekundžių, pvz., ilgą atsakymą, didelį
max_tokens arba motyvavimo modelis. Prašymas, kuris nėra transliuojamas, nesiunčia nieko, kol atsakymas yra baigtas, o tinklas tarp jūsų ir Nymbot gali uždaryti tuščią ryšį po maždaug 100 sekundžių; modelis vis dar baigiasi ir tai, ką jis parašė, įkraunamas, bet atsakymas prarandamas.
srautas
data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[{"index":0,"delta":{"content":"A Lightning invoice"},"finish_reason":null}]}
: keep-alive
data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[],"usage":{"prompt_tokens":1240,"completion_tokens":380,"total_tokens":1620,"cost":0.01895},"nymbot":{"balance":"pro","charged_credits":0.162,"charged_sats":16.2,"balance_credits":412.425,"balance_sats":41242.5}}
data: [DONE]
- Linijos prasideda nuo
:yra nuolatiniai komentarai, siunčiami kas 15 sekundžių, kol modelis galvoja. - Paklauskite
"stream_options": {"include_usage": true}gauti paskutinį gabalėlį aukščiau, su tuščiachoices, žetonai skaičiuoja, kaina irnymbotObjektų - Jei uždarysite ryšį anksti, modelis nebus sustabdytas: "Nymbot" perskaito likusį teikėjo srautą iki 25 sekundžių, kad gautų savo žetonų skaičių, ir jūs mokate tai, ką teikia teikėjas.
- klaidą prieš pirmąjį gabalėlį, pavyzdžiui,
401arba402, grįžta kaip įprastas JSON su savo būsenos kodu, o ne kaip srautas.data: {"error": {…}}įvykis, ir srautas baigiasi be[DONE]. - Užklausos su įrankiais ir modeliais "OpenAI" Atsakymų transportu nešviečia iš teikėjo.
cURL
curl -N https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "nymbot/auto",
"stream": true,
"stream_options": {"include_usage": true},
"messages": [{"role": "user", "content": "Write a haiku about sats."}]
}'
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
stream = client.chat.completions.create(
model="nymbot/auto",
stream=True,
stream_options={"include_usage": True},
messages=[{"role": "user", "content": "Write a haiku about sats."}],
)
for chunk in stream:
if chunk.choices:
print(chunk.choices[0].delta.content or "", end="", flush=True)
elif chunk.usage:
print("\ncost:", chunk.usage.cost)
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const stream = await client.chat.completions.create({
model: "nymbot/auto",
stream: true,
stream_options: { include_usage: true },
messages: [{ role: "user", content: "Write a haiku about sats." }],
});
for await (const chunk of stream) {
if (chunk.choices.length) process.stdout.write(chunk.choices[0].delta.content || "");
else if (chunk.usage) console.log("\ncost:", chunk.usage.cost);
}
Įrankių skambučiai
Apibūdina funkcijas tools ir modelis gali paprašyti skambinti, o ne atsakyti. Jūs paleidžiate funkciją, pridėkite jos rezultatą kaip tool Žinutė su tuo pačiu
tool_call_idNymbot niekada nevykdo jūsų funkcijų; jis perduoda modelio prašymą atgal jums.
tool_choice Turiu "auto", "none",
"required" arba {"type": "function", "function": {"name": "…"}}Modelių sąrašas pažymi, kurie modeliai gali skambinti įrankiais (capabilities.toolsĮrankiai yra atmesti 400 unsupported_tool yra nymbot/auto ir dėl nedaugelio katalogų modelių, kurie veikia "OpenAI" atsakymų transportu, kuriam "Nymbot" negali perduoti įrankių.
su "stream": true, užklausa su įrankiais veikia viename gabale ir tada siunčiama kaip įprasta gabalėlių seka: vaidmuo, vienas gabalėlis, kuriame kiekvienas įrankio skambutis yra su jo indeksu, id, pavadinimu ir argumentais, ir galutinis gabalėlis.
Atsakymas iš dalies
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_7d2e",
"type": "function",
"function": { "name": "get_invoice_status", "arguments": "{\"invoice_id\":\"a41f\"}" }
}
]
},
"finish_reason": "tool_calls"
}
]
cURL
curl https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"messages": [{"role": "user", "content": "Has invoice a41f been paid?"}],
"tools": [{
"type": "function",
"function": {
"name": "get_invoice_status",
"description": "Look up whether an invoice is paid.",
"parameters": {
"type": "object",
"properties": {"invoice_id": {"type": "string"}},
"required": ["invoice_id"]
}
}
}]
}'
Python
import json, os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
tools = [{
"type": "function",
"function": {
"name": "get_invoice_status",
"description": "Look up whether an invoice is paid.",
"parameters": {
"type": "object",
"properties": {"invoice_id": {"type": "string"}},
"required": ["invoice_id"],
},
},
}]
messages = [{"role": "user", "content": "Has invoice a41f been paid?"}]
reply = client.chat.completions.create(model="anthropic/claude-sonnet-5", messages=messages, tools=tools)
call = reply.choices[0].message.tool_calls[0]
args = json.loads(call.function.arguments)
messages.append(reply.choices[0].message)
messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps({"paid": True})})
final = client.chat.completions.create(model="anthropic/claude-sonnet-5", messages=messages, tools=tools)
print(final.choices[0].message.content)
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const tools = [{
type: "function",
function: {
name: "get_invoice_status",
description: "Look up whether an invoice is paid.",
parameters: {
type: "object",
properties: { invoice_id: { type: "string" } },
required: ["invoice_id"],
},
},
}];
const messages = [{ role: "user", content: "Has invoice a41f been paid?" }];
const reply = await client.chat.completions.create({ model: "anthropic/claude-sonnet-5", messages, tools });
const call = reply.choices[0].message.tool_calls[0];
const args = JSON.parse(call.function.arguments);
messages.push(reply.choices[0].message);
messages.push({ role: "tool", tool_call_id: call.id, content: JSON.stringify({ paid: true }) });
const final = await client.chat.completions.create({ model: "anthropic/claude-sonnet-5", messages, tools });
console.log(final.choices[0].message.content);
Nuotraukos pagal prašymą
Modeliai su capabilities.vision Galima perskaityti nuotraukas. pridėti image_url
dalį naudotojo pranešimui, su bet kuria auditorija https:// LINK arba A
data:image/…;base64, URL. Iki 20 nuotraukų už prašymą. SVG nuotraukos yra atmestos, todėl nuoroda yra daugiau nei 4 096 simbolių arba viena su vartotojo vardu ar slaptažodžiu (400 invalid_image_url• Pasirinktinai detail yra
auto, low arba high.
su nymbot/auto, užklausa su paveikslėliu nukreipiama į standartinį modelį, kurį galima matyti. capabilities.vision Atsisakyti nuotraukų su
400 unsupported_contentNuotraukos gali būti tik naudotojo pranešimuose. nuoroda turi nurodyti į viešą hostą; Nymbot perduoda vaizdą modelio teikėjui ir jo nesilaiko.
Vaizdas yra apmokestinamas kaip teikėjo skaičiuojami įvesties žetonai, kaip ir likusi užklausa.
cURL
curl https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "What is in this picture?"},
{"type": "image_url", "image_url": {"url": "https://example.com/receipt.jpg"}}
]
}]
}'
Python
import base64, os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
with open("receipt.jpg", "rb") as f:
data_url = "data:image/jpeg;base64," + base64.b64encode(f.read()).decode()
reply = client.chat.completions.create(
model="anthropic/claude-sonnet-5",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "What is in this picture?"},
{"type": "image_url", "image_url": {"url": data_url}},
],
}],
)
print(reply.choices[0].message.content)
JavaScript
import { readFile } from "node:fs/promises";
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const dataUrl = "data:image/jpeg;base64," + (await readFile("receipt.jpg")).toString("base64");
const reply = await client.chat.completions.create({
model: "anthropic/claude-sonnet-5",
messages: [{
role: "user",
content: [
{ type: "text", text: "What is in this picture?" },
{ type: "image_url", image_url: { url: dataUrl } },
],
}],
});
console.log(reply.choices[0].message.content);
Priežastys
Modeliai su capabilities.reasoning Galite pagalvoti prieš atsakydami, paprašykite daugiau ar mažiau. reasoning_effort ("minimal", "low",
"medium" arba "high") arba "reasoning": {"effort": "high"}arba pridėti :thinking į modelio pavadinimą, o tai reiškia didelę pastangą. Modelyje be motyvacijos nustatymas ignoruojamas. nymbot/auto, :thinking siunčia prašymą į standartinį motyvavimo maršrutą.
Antropiniuose modeliuose pastangos tampa mąstymo biudžetu apie 1000, 2 000, 8 000 ar 16 000 žetonų, niekada daugiau nei max_tokens Mąstymas yra paliktas, kai
tool_choice priverčia įrankį, o kai užklausa tęsiasi įrankio grandinę (paskutinis pranešimas yra įrankio rezultatas), nes Anthropic reikia anksčiau pasirašytos minties, kad ją atnaujintų.
Priežastys grįžta į message.reasoning_contentarba
delta.reasoning_content kai transliuojama, niekada nesumaišoma į atsakymą. Priežastys yra išvestis ir yra apmokestinamos kaip tokios, viduje completion_tokensKai kurie teikėjai negrąžina argumentų teksto, ir jis vis dar apmokestinamas.
cURL
curl https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"reasoning_effort": "high",
"messages": [{"role": "user", "content": "Is 2^61 - 1 prime? Show why."}]
}'
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
reply = client.chat.completions.create(
model="anthropic/claude-sonnet-5",
reasoning_effort="high",
messages=[{"role": "user", "content": "Is 2^61 - 1 prime? Show why."}],
)
message = reply.choices[0].message
print(getattr(message, "reasoning_content", None))
print(message.content)
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const reply = await client.chat.completions.create({
model: "anthropic/claude-sonnet-5",
reasoning_effort: "high",
messages: [{ role: "user", content: "Is 2^61 - 1 prime? Show why." }],
});
console.log(reply.choices[0].message.reasoning_content);
console.log(reply.choices[0].message.content);
Modelių suffiksai
Modelio vardo priedėlis keičia prašymo tvarkymą, be kito lauko. anthropic/claude-sonnet-5:online.
| Pakanka | Efektas |
|---|---|
:online | Ieškoti internete pirmiausia, kaip plugins: [{"id": "web"}]Štai Internetinė paieška. |
:thinking | Aukštos racionalios pastangos; ant nymbot/autoPagal modelį, kuris negali pagrįsti, 400 model_not_found su “jokių galutinių taškų rasti”. |
:nitro, :floor, :exacto, :extended | Kiekvienas katalogo modelis turi vieną maršrutą, todėl nėra greitesnio, pigesnio ar ilgesnio pasirinkimo; priedai leidžiami, todėl modelio pavadinimai, nukopijuoti iš kitų paslaugų, vis dar veikia. |
Bet kuris kitas priedėlis yra ignoruojamas. Visas vardas išbandomas pirmiausia, todėl modelis, kurio ID iš tikrųjų yra kolonėlis, vis dar veikia; jei to nepadarys, priedai pašalinami iš pabaigos vieną po kito, kol modelis atitiks. 400 invalid_value.
cURL
curl https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5:thinking",
"messages": [{"role": "user", "content": "Plan a three-day trip to Lisbon."}]
}'
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
reply = client.chat.completions.create(
model="anthropic/claude-sonnet-5:thinking",
messages=[{"role": "user", "content": "Plan a three-day trip to Lisbon."}],
)
print(reply.choices[0].message.content)
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const reply = await client.chat.completions.create({
model: "anthropic/claude-sonnet-5:thinking",
messages: [{ role: "user", content: "Plan a three-day trip to Lisbon." }],
});
console.log(reply.choices[0].message.content);
Internetinė paieška
Nymbot ieško paskutinio vartotojo pranešimo (pirmųjų 2000 simbolių), skaito geriausius puslapius ir perduoda juos modeliui su klausimu, pažymėtu kaip išorinis turinys, iš kurio modelis neturėtų imtis instrukcijų.
- Visada ieškokite:
"plugins": [{"id": "web", "max_results": 5}]arba a:onlinePakanka įvesti modelį. - Ieškoti, kai tai padeda:
"tools": [{"type": "web_search", "parameters": {"max_results": 5}}]Taip pat priimtas kaipweb_search_previewarbaopenrouter:web_searchNymbot ieško tik tada, kai atrodo, kad klausimui reikia dabartinės informacijos, tas pats testas, kurį naudoja programa.
max_results yra 5 pagal numatytuosius nustatymus ir ne daugiau kaip 10. šaltiniai grįžta į
nymbot.web_search.sourcesKiekvienas su a title, snippet ir
urlir kaip url_citation Užrašai ant žinutės.
Kiekviena paieška, kuri veikia, kainuoja $ 0,008, konvertuojama į sats, virš žetonų, ir tai yra laikymo dalis.Slaptai, kuriuos ji skaito, taip pat yra įvesties žetonai, todėl atsakymas iš žiniatinklio kainuoja daugiau nei tas pats klausimas, kurį paklausė šaltis, kartais kelis kartus daugiau.
Atsakymas iš dalies
"nymbot": {
"balance": "pro",
"charged_credits": 0.431,
"charged_sats": 43.1,
"balance_credits": 411.994,
"balance_sats": 41199.4,
"web_search": {
"sources": [
{ "title": "Lightning Network - Wikipedia", "snippet": "The Lightning Network is a payment protocol...", "url": "https://en.wikipedia.org/wiki/Lightning_Network" }
]
}
}
cURL
curl https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"plugins": [{"id": "web", "max_results": 5}],
"messages": [{"role": "user", "content": "What changed in the latest Bitcoin Core release?"}]
}'
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
reply = client.chat.completions.create(
model="anthropic/claude-sonnet-5",
messages=[{"role": "user", "content": "What changed in the latest Bitcoin Core release?"}],
extra_body={"plugins": [{"id": "web", "max_results": 5}]},
)
print(reply.choices[0].message.content)
for source in reply.model_extra["nymbot"]["web_search"]["sources"]:
print(source["url"])
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const reply = await client.chat.completions.create({
model: "anthropic/claude-sonnet-5",
plugins: [{ id: "web", max_results: 5 }],
messages: [{ role: "user", content: "What changed in the latest Bitcoin Core release?" }],
});
console.log(reply.choices[0].message.content);
for (const source of reply.nymbot.web_search.sources) console.log(source.url);
Atsakymas į ugnį
„OpenAI“ naujesnis formatas, naudojamas „OpenAI Agents SDK“ ir „Codex“. „OpenAI“ veikia pagal tuos pačius modelius, sąskaitas ir funkcijas kaip ir „Chat Completions“.
POST https://nymbot.ai/api/v1/responses Reikalingas API raktas.
| Lauko | Tipas | Reikalingas | Aprašymas |
|---|---|---|---|
model | Stringų | Taip | Kaip už Pokalbių užbaigimasĮtraukti ir suffiksai. |
input | String arba array | Taip | eilutė arba elementų sąrašas: žinutės (rolės user, assistant, system, developer) su input_text, input_image ir output_text dalys ir function_call ir function_call_output Prekės pagal įrankius. input_image Paimkite vieną image_url nuoroda arba duomenų URL, o ne failų ID. reasoning ir web_search_call daiktai yra nuplauti; item_reference Jis buvo atmestas. |
instructions | Stringų | ne | Sistemos instrukcijos . |
max_output_tokens | Integracijos | ne | Daugiausia žetonų rašyti. |
temperaturetop_p | Numeris | ne | Pavyzdžių ėmimo kontrolės, kur modelis juos paima. |
toolstool_choiceparallel_tool_calls | Array, stringa arba objektas, Boolean | ne | Funkcijos įrankiai, formos Atsakymai ({"type": "function", "name": …, "parameters": …}) a web_search arba web_search_preview Įrankis virsta Internetinė paieška kai tai padeda. Kiti įmontuoti įrankiai yra atmesti. |
reasoning | Objektas | ne | {"effort": "minimal" | "low" | "medium" | "high"}. xhigh ir max reiškia high; none Išjunkite jį išjungti. |
text.formatresponse_format | Objektas | ne | Struktūrizuota išvestis, kaip JSON schema arba json_object. |
metadata | Objektas | ne | Grąžinama nekeičiant atsakymo. ne daugiau kaip 16 eilutės reikšmių, raktų iki 64 simbolių ir reikšmių iki 512. |
stream | Boolė | ne | Stream įvykius, kaip aprašyta žemiau. |
store | Boolė | ne | Niekas nėra saugomas, o atsakymas visada sako "store": false. |
previous_response_idconversationbackground | String, Objektas ir Boolean | ne | Nepalaikoma : 400 unsupported_parameterAtsakymai nėra saugomi, todėl siųskite visą pokalbį į input Kiekvieną kartą |
Atsakymas
{
"id": "resp_8c1e4b0f9a2d4e61",
"object": "response",
"created_at": 1790726400,
"status": "completed",
"model": "anthropic/claude-sonnet-5",
"output": [
{
"type": "message",
"id": "msg_2b7f",
"role": "assistant",
"status": "completed",
"content": [{ "type": "output_text", "text": "A Lightning invoice is...", "annotations": [] }]
}
],
"output_text": "A Lightning invoice is...",
"usage": {
"input_tokens": 1240,
"input_tokens_details": { "cached_tokens": 0 },
"output_tokens": 380,
"output_tokens_details": { "reasoning_tokens": 0 },
"total_tokens": 1620
},
"incomplete_details": null,
"error": null,
"instructions": null,
"store": false,
"previous_response_id": null,
"metadata": {},
"nymbot": { "balance": "pro", "charged_credits": 0.162, "charged_sats": 16.2, "balance_credits": 412.425, "balance_sats": 41242.5 }
}
Įrankio užklausos rodomos output Kaip a function_call Taškas su
call_id, name ir argumentsSiųsti rezultatą atgal kaip a
function_call_output Taškas su tuo pačiu call_idPriežastis, kai modelis ją grąžina, yra reasoning Taškas su reasoning_text Turinys, išvardytas pirmiausia status yra incomplete Kai atsakymas pasiekia
max_output_tokens Pirkėjas atsisakė, su
incomplete_details.reason Įdėti 2 max_output_tokens arba
content_filterAtsakymas taip pat atspindi užklausos nustatymus (temperatūrą, įrankius, įrankių pasirinkimą ir tt), kaip tai daro OpenAI, ir atlieka nymbot Kainuoja objektas
Žaidimas, kiekvienas įvykis yra event: Linijos ir a data: Linijos su a
sequence_numberPagal šią tvarką: response.created,
response.in_progress, response.output_item.added,
response.content_part.addedBet koks skaičius response.output_text.delta,
response.output_text.done, response.content_part.done,
response.output_item.doneIr pagaliau response.completed su naudojimu ir kaina. atsakymas supjaustyti trumpas galus su response.incomplete vietoj, ir nesėkmė po to, kai srautas prasidėjo su response.failedPagrįsti srautus kaip savo objektą su response.reasoning_text.delta ir .doneĮrankių skambučiai ateina po pranešimo, kiekvienas kaip elementas su response.function_call_arguments.delta
ir .done.
| statusą | Kada |
|---|---|
400 | ne model arba input; previous_response_id, conversation, background Arba vieną item_reference (unsupported_parameter• Nepalaikomas įrankis arba turinio tipas. |
402, 403, 404, 429, 502, 503 | Dėl pokalbių užbaigimo. |
cURL
curl https://nymbot.ai/api/v1/responses \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"instructions": "Answer in one short paragraph.",
"input": "What is a Lightning invoice?"
}'
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
response = client.responses.create(
model="anthropic/claude-sonnet-5",
instructions="Answer in one short paragraph.",
input="What is a Lightning invoice?",
)
print(response.output_text)
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const response = await client.responses.create({
model: "anthropic/claude-sonnet-5",
instructions: "Answer in one short paragraph.",
input: "What is a Lightning invoice?",
});
console.log(response.output_text);
Antropinės žinutės
Jis veikia su visais katalogo modeliais, ne tik Claude: užklausa išverčiama, paleidžiama per tą patį vamzdį ir išverčiama atgal.
POST https://nymbot.ai/api/v1/messages - reikia API raktą, kaip x-api-key arba Authorization: Bearer.
Tų anthropic-version ir anthropic-beta Antropiniai modelio pavadinimai atitinka katalogą, todėl Claude Code ir SDK dirba su jau naudojamais pavadinimais:
- Vardas, kurį žino katalogas, pavyzdžiui,
claude-sonnet-5arbaanthropic/claude-opus-5Jis naudojamas taip, kaip yra. - Atsižvelgiant į datą (
-20260514),-latestVersijos, tokios kaip-v1Pavyzdžiui, tokį brangų laikrodį, kaip[1m]ir ananthropic/arbaanthropic.Pavyzdžiui, įprastai naudojamos abiejų tipų plokštės, o įprastai naudojamos abiem tipams (claude-haiku-4-5Radoclaude-haiku-4.5). - Jei tai vis dar nesutampa, naudojama šeima (Opus, Sonnet arba Haiku), jei katalogo versija yra tokia pati arba naujesnė nei prašoma.
- Vardas, kuris neatitinka nieko grįžta
404not_found_error.
| Lauko | Tipas | Reikalingas | Aprašymas |
|---|---|---|---|
model | Stringų | Taip | Katalogo modelio ID arba Antropinio modelio pavadinimas. |
max_tokens | Integracijos | Taip | Daugiausia žetonų rašyti. |
messages | artritas | Taip | user ir assistant Vėliau, su text, image (base64 arba URL šaltinis) tool_use ir tool_result Blokų thinking Blokai iš ankstesnių posūkių yra priimami ir išmesti. |
system | String arba array | ne | Sistemos žingsnis, kaip eilutė ar teksto blokai. |
temperaturetop_p | Numeris | ne | Pavyzdžių ėmimo kontrolės, kur modelis juos paima. top_k Jis priimtas ir nuleistas. |
stop_sequences | Stringų rinkinys | ne | Tekstas, kuris baigiasi atsakymu. Ne daugiau kaip 4 eilutės, kurių kiekvienas turi ne daugiau kaip 256 simbolių. |
toolstool_choice | Objektas, objektas | ne | Įrankiai su name, description ir input_schema• A web_search Serverio įrankis įjungtas Internetinė paieškaKitų „Anthropic“ įdiegtų įrankių (bash, teksto redagavimo, kompiuterio naudojimo) naudojimas yra atsisakyta unsupported_tool. tool_choice Turiu auto, any, tool arba noneir disable_parallel_tool_use. |
thinking | Objektas | ne | {"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} arba {"type": "disabled"}Biudžetas pasirenka pastangų lygį: žemiau 2 048 minimalaus, nuo 2 048 mažo, nuo 8 192 vidutinio, nuo 16 384 aukšto. output_config.effortArba ir aukštai. |
stream | Boolė | ne | Srautas Anthropic renginių formatu. |
metadata | Objektas | ne | Priimtas ir ignoruojamas. |
Atsakymas
{
"id": "msg_01c7a2f93e5b4d08",
"type": "message",
"role": "assistant",
"model": "anthropic/claude-sonnet-5",
"content": [{ "type": "text", "text": "A Lightning invoice is..." }],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 1240,
"output_tokens": 380,
"cache_read_input_tokens": 0,
"cache_creation_input_tokens": 0
},
"nymbot": { "balance": "pro", "charged_credits": 0.162, "charged_sats": 16.2, "balance_credits": 412.425, "balance_sats": 41242.5 }
}
content Taip pat galima laikyti tool_use Blokai ir a thinking
Blokai, kurių signature Jis tuščias stop_reason yra
end_turn, max_tokens, tool_use arba refusalDirbo taip pat, kaip finish_reason yra
Pokalbių užbaigimas; stop_sequence Visada yra
null, net kai sustojimo seka baigė atsakymą. input_tokens skaičiuojamas tik šviežias įvestis; talpyklos įvestis yra dviejuose talpyklos laukuose.
nymbot Objektas ir X-Nymbot-Cost-Sats ir header.
Streamed, įvykiai yra Anthropic's message_start,
content_block_start, ping, content_block_delta
(text_delta, input_json_delta arba thinking_delta),
content_block_stop, message_delta Dėl priežasties, naudojimo ir nymbot Kainų objektas ir message_stop• A ping taip pat siunčiamas kas 15 sekundžių, kol modelis veikia. Įrankių skambučiai atvyksta po teksto, kiekvienas kaip
tool_use blokas su visais jo įrašais viename input_json_delta.
Klaidos šiame galiniame taške naudoja Anthropic formatą:
{"type": "error", "error": {"type": "not_found_error", "message": "…"}}Trumpas balansas yra 402 billing_errorPerpildytas tiekėjas
503 overloaded_errorNesėkmė po to, kai prasidėjo srautas, siunčiama kaip error Įvykiai .
cURL
curl https://nymbot.ai/api/v1/messages \
-H "x-api-key: $NYMBOT_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-5",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "What is a Lightning invoice?"}]
}'
Python
import os
import anthropic
client = anthropic.Anthropic(base_url="https://nymbot.ai/api", api_key=os.environ["NYMBOT_API_KEY"])
message = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
messages=[{"role": "user", "content": "What is a Lightning invoice?"}],
)
print(message.content[0].text)
JavaScript
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({ baseURL: "https://nymbot.ai/api", apiKey: process.env.NYMBOT_API_KEY });
const message = await client.messages.create({
model: "claude-sonnet-5",
max_tokens: 1024,
messages: [{ role: "user", content: "What is a Lightning invoice?" }],
});
console.log(message.content[0].text);
Tokenų skaičiavimas
Apskaičiuota, kiek įvesties žetonų naudotų pranešimų užklausą, kad klientas galėtų patikrinti prieš siunčiant.
POST https://nymbot.ai/api/v1/messages/count_tokens - Reikia API raktą. nemokamai
Kūnas yra toks pat kaip ir Žinutėsir be max_tokens; modelio pavadinimas turi būti išspręstas. Skaičiavimas yra apskaičiavimas: sistemos skambučio, pranešimų, įrankių skambučių ir įrankių apibrėžimų simboliai yra padalinti keturiais, plius 1,600 kiekvienam paveikslėliui. Tai nėra paties teikėjo tokenizatorius, todėl tikrasis skaičius gali skirtis. raktas, kuris pasiekė savo ribą, vis dar gali jį naudoti.
Atsakymas
{ "input_tokens": 318 }
cURL
curl https://nymbot.ai/api/v1/messages/count_tokens \
-H "x-api-key: $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-5",
"messages": [{"role": "user", "content": "What is a Lightning invoice?"}]
}'
Python
import os
import anthropic
client = anthropic.Anthropic(base_url="https://nymbot.ai/api", api_key=os.environ["NYMBOT_API_KEY"])
count = client.messages.count_tokens(
model="claude-sonnet-5",
messages=[{"role": "user", "content": "What is a Lightning invoice?"}],
)
print(count.input_tokens)
JavaScript
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({ baseURL: "https://nymbot.ai/api", apiKey: process.env.NYMBOT_API_KEY });
const count = await client.messages.countTokens({
model: "claude-sonnet-5",
messages: [{ role: "user", content: "What is a Lightning invoice?" }],
});
console.log(count.input_tokens);
Modelių sąrašas
Kiekvienas modelis ir generatorius, kurį priima API, su tuo, ką jis kainuoja.
GET https://nymbot.ai/api/v1/models — nereikia rakto. Paslėptas penkias minutes.
GET /api/v1/models/{id} Grąžina vieną įėjimą.
| Lauko | Tipas | Reikalingas | Aprašymas |
|---|---|---|---|
type | Žymės: String Query | ne | chat (Tai yra nesėkmė) image, video, audio, embedding arba allKai kurie iš jų gali būti naudojami, kaip image,video. |
Kainos yra tai, ką mokate, o mokestis ir marža jau yra doleriais ir kainuoja dabartine Bitcoin kaina. balance Tai rodo, kokį balansą modelis išleidžia.
nymbot_key yra modelio trumpas pavadinimas programoje. created visada yra 0, nes katalogas neįrašo, kada buvo įtrauktas modelis. per_request vietoj to.
nymbot/auto visada yra pirmas, kainuoja kaip variableTačiau su a
routes sąrašas, kuriame pateikiami kiekvieno standartinio maršruto tarifai.Jame išvardijama vizija ir samprotavimai, bet ne įrankiai.
GET /api/v1/models/{id} priima tuos pačius pavadinimus ir slapyvardžius kaip užklausą ir grąžina modelio įrašą, kuriam jie nusprendžia.
Atsakymas
{
"object": "list",
"data": [
{
"id": "anthropic/claude-sonnet-5",
"object": "model",
"type": "chat",
"owned_by": "anthropic",
"name": "Claude Sonnet 5",
"created": 0,
"context_length": 1000000,
"max_output_tokens": 64000,
"architecture": { "input_modalities": ["text", "image"], "output_modalities": ["text"] },
"supported_parameters": ["max_tokens", "temperature", "tools", "tool_choice", "reasoning", "response_format", "stop"],
"capabilities": { "vision": true, "video": false, "tools": true, "reasoning": true, "web_search": true },
"balance": "pro",
"pricing": {
"type": "per_token",
"currency": "USD",
"input_per_1M_tokens": 4.725,
"output_per_1M_tokens": 23.625,
"cache_read_per_1M_tokens": 0.4725,
"sats_input_per_1M_tokens": 4038,
"sats_output_per_1M_tokens": 20192
},
"description": "...",
"nymbot_key": "claude-sonnet"
}
]
}
Kiti tipai :
- Vaizdas Įėjimai turi
capabilities(accepts_image_url,requires_image_url,edit) ir kainaper_generation. - Vaizdo Įėjimai turi
max_duration_secondsirresolutionsir kainaper_secondDėl kiekvieno sprendimo. - AUDIO Įėjimai turi
audio_typespeecharbatranscriptionKainosper_1k_charsarbaper_minute. - Įterpimas Įėjimai turi
dimensions,context_length,max_inputsKaina už milijoną žetonų.
Kainos pažymėtos "estimated": true yra programos apskaičiuotas generatorius, kurio kaina nėra skelbiama. type Sugrįžta 400.
cURL
curl "https://nymbot.ai/api/v1/models?type=chat"
Python
import requests
models = requests.get("https://nymbot.ai/api/v1/models", params={"type": "chat"}).json()["data"]
for m in models:
print(m["id"], m["balance"], m["pricing"].get("input_per_1M_tokens"))
JavaScript
const res = await fetch("https://nymbot.ai/api/v1/models?type=chat");
const { data } = await res.json();
for (const m of data) console.log(m.id, m.balance, m.pricing.input_per_1M_tokens);