Tudásbázis Fejlesztők
Chat, válaszok és üzenetek
Három módja annak, hogy kérjen valamit egy modelltől, a három formátumban az ügyfelek már beszélnek, mind ugyanazon a modellen futnak, és ugyanúgy számlázzák.
Ez az oldal a kényelem kedvéért gépi fordítással készült. Az eredeti angol nyelvű változat az érvényes.
Chat befejezés
Az OpenAI chat formátum, és szinte minden eszköz támogatja. Küldje el a beszélgetést eddig, és kapja meg a következő üzenetet.
POST https://nymbot.ai/api/v1/chat/completions Szüksége van egy API kulcsra.
Csak model és messages A kiválasztott modell nem veszi a mintavételi paramétert hiba nélkül, így az egyik kérés test működik a modellek között. supported_parametersAmit elutasítanak, ahelyett, hogy eldobnának, az egyáltalán nem lehet: képek egy modellről, aki nem látja, eszközök egy modell számára, aki nem hívhatja őket.
| mező | típus | Szükség | leírás |
|---|---|---|---|
model | String | Igen | nymbot/auto (vagy auto) a Nymbot szabványos mérlegre történő útválasztásához, vagy egy katalógusmodell-id-hez, például anthropic/claude-sonnet-5 a Pro-egyensúlyon. Az alkalmazás rövid nevei és aliasai is elfogadhatók. elegendő. |
messages | Arraira | Igen | A beszélgetés, a szerepek system, developer (a rendszert úgy kell kezelni, user, assistant és toolA tartalom egy sor vagy egy lista a text és image_url részek; képek csak a felhasználói üzenetekben. input_audio A fájlokat elutasítják. |
stream | Booleán | nem | A válaszokat úgy küldje el, ahogy meg van írva. lásd Streamálás. |
stream_options | Objektum | nem | {"include_usage": true} hozzáadja a végső darabot a token számokkal és a költségekkel. |
max_tokensmax_completion_tokens | Integrál | nem | A legtöbb token, amit le kell írni. Alacsonyabb a modell maximumára, ha magasabb. Azt is meghatározza, hogy mennyi marad a mérlegből, így egy kisebb számnak kevesebb hitelre van szüksége a kezdéshez. |
temperaturetop_p | szám | nem | A mintavétel ellenőrzése: temperature 0 és 2 között, top_p 0 és 1 között. |
stop | String vagy array | nem | A válasz befejező szövege: egy sor vagy legfeljebb 4 sor, mindegyik legfeljebb 256 karakter. nymbot/auto. |
seed | Integrál | nem | Az ismétlődő mintavételhez, ahol a modell támogatja. |
presence_penaltyfrequency_penalty | szám | nem | Ismétlődő ellenőrzések, mindegyik -2 és 2 között. |
response_format | Objektum | nem | {"type": "json_object"} vagy {"type": "json_schema", "json_schema": {…}}, ahol a modell támogatja. nem használják nymbot/auto. |
toolstool_choiceparallel_tool_calls | array, string vagy objektum, boolean | nem | Hívás funkció: lásd Eszköz hívásAz A web_search A szerszám a Web keresésLegfeljebb 128 eszköz és 512 KB definíció, legfeljebb 64 szinten mélyen; több 400. |
reasoning_effortreasoning | Szálak, tárgyak | nem | "minimal", "low", "medium" vagy "high"vagy {"effort": "high"}. "none" vagy {"enabled": false} Távolítsa el. lásd érvelés. |
plugins | Arraira | nem | [{"id": "web", "max_results": 5}] Mindig keresi az internetet először. legfeljebb 10 eredményt. |
n | Integrál | nem | 1. Minden más visszatér 400. |
logit_biasusermetadata | Szöveg, Szöveg, Objektum | nem | Elfogadták és nem küldték tovább. logit_bias térképek legfeljebb 300 token azonosítóval a -100 és 100 közötti számokra; user Legfeljebb 256 karakter. metadata Legfeljebb 16 karakterlánc értéket, legfeljebb 64 karaktert és legfeljebb 512 értéket tartalmaz. |
A válasz egy hétköznapi chat.completionA költségek mellett a usage.cost
dollárban) és a nymbot Az objektum. model a megoldott modell id, így egy rövid név a teljes névként jön vissza. Ha a modell a válaszadás előtt érvel, az érvelése a message.reasoning_contentA választól elválaszolva.
Válasz
{
"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 a visszajövetelből kiindulva, mivel a szolgáltatók másképp számolnak be: tool_calls Amikor a modell eszközöket kért, length amikor a válasz minden megengedett tokent használt (vagy a modell mindegyiket érveléssel töltötte, és nem írt semmilyen választ), content_filter ha a szolgáltató elutasítja, és stop
Ellenkező esetben usage.completion_tokens_details.reasoning_tokens mindig 0: a rejtett érvelési tokeneket számolják, és completion_tokens.
| státusz | Mikor |
|---|---|
400 | nem model vagy messages (missing_required_parameter); egy audió vagy fájl részét, vagy egy modell képét, amely nem láthatja őket (unsupported_content(több mint 20 kép)too_many_images); egy mintavételi paraméter a rossz típusú vagy a tartományon kívül (invalid_value); egy kép linkje, amely nem nyilvános (invalid_image_url); eszközök egy modell, amely nem hívja őket (unsupported_tool); n a) az 1; a :thinking egy olyan modellre vonatkozó suffix, amely nem indokolható (model_not_found(vagy a szolgáltató elutasította a kérelmet)upstream_rejected). |
402 | A modell által elköltött egyenleg nem fedezi a tartást. |
403 | A legrosszabb esetben nem illeszkedik a kulcs kapu (key_limit_reached• Alacsonyabb max_tokens Vagy emelje fel a fejét. |
404 | Nincs olyan modell, amelynek neve (model_not_found). |
429 | A kulcsszint korlátozása, vagy a szolgáltató (upstream_rate_limited). |
502, 503 | A szolgáltató sikertelen (upstream_error) vagy túlterhelt (upstream_overloadedAzokkal a Retry-AfterSemmi sem kerül felszámításra, hacsak a szolgáltató nem számlázta meg a kísérletet. |
Az egyes végpontrészvények állapotkódjait a hibák.
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);
Streamálás
Azokkal "stream": true A válasz a kiszolgáló által küldött eseményként érkezik, miközben a modell írja. chat.completion.chunk Az a data: vonal, és a folyó véget ér a data: [DONE]Az érvelés megérkezik
delta.reasoning_contentA válasz a delta.content.
Töltsön le bármit, ami több mint 100 másodpercet vesz igénybe, például egy hosszú választ, egy nagy
max_tokens Egy nem streamelt kérés addig nem küld semmit, amíg a válasz be nem fejeződik, és az Ön és a Nymbot közötti hálózat kb. 100 másodperc után bezárhat egy üres kapcsolatot; a modell még mindig befejeződik, és amit írt, feltöltődik, de a válasz elveszett.
áramlás
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]
- vonalak kezdve a
:Ezeket a megjegyzéseket minden 15 másodpercben elküldik, miközben a modell gondolkodik. - Kérdezd meg
"stream_options": {"include_usage": true}hogy az utolsó darabot a tetején, egy üreschoices, a token számít, a költség és anymbotAz objektum. - Ha korán bezárja a kapcsolatot, a modell nem áll meg: A Nymbot legfeljebb 25 másodpercig elolvassa a szolgáltató áramának többi részét, hogy megkapja a token számát, és kifizeti, amit a szolgáltató jelent.
- A hiba az első csomó előtt, például
401vagy402, visszatér a szokásos JSON-ként az állapotkódjával, nem pedig áramként.data: {"error": {…}}esemény, és a stream véget ér anélkül, hogy[DONE]. - Az eszközökkel és modellekkel kapcsolatos kérelmek az OpenAI Válaszok szállításánál nem a szolgáltatótól származnak, továbbra is érvényes áramlással válaszolnak, miután a válasz elkészült.
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);
}
Eszköz hívás
Funkciók leírása a tools és a modell megkérheti, hogy hívjanak, ahelyett, hogy válaszolna. Ön futtatja a funkciót, adja hozzá az eredményét tool Üzenet ugyanazzal a
tool_call_idA Nymbot soha nem futtatja a funkciókat; a modell kérését továbbítja Önnek.
tool_choice Vegyük "auto", "none",
"required" vagy {"type": "function", "function": {"name": "…"}}A modellek listája jelöli, hogy mely modellek hívhatják az eszközöket (capabilities.toolsAz eszközöket elutasítják 400 unsupported_tool Azon nymbot/auto és az OpenAI Responses szállításán futó néhány katalógusmodellre, amelyekre a Nymbot nem tud eszközöket átadni.
Azokkal "stream": true, az eszközökkel ellátott kérés egy darabban fut, majd normál darabsorozatként kerül elküldésre: a szerep, egy darab, amely minden eszközhívást indexével, azonosítójával, nevével és argumentumaival hordoz, és a befejező darab.
A válasz részben
"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);
Képek egy kérésben
Modellek a capabilities.vision Képek megtekinthetők. hozzáadása image_url
egy felhasználói üzenethez, vagy egy közönséghez https:// link vagy a
data:image/…;base64, URL. Legfeljebb 20 kép kérésre. SVG képek elutasítják, és így van egy link több mint 4096 karakter, vagy egy felhasználói névvel vagy jelszóval (400 invalid_image_urlEgy opcionális detail az
auto, low vagy high.
Azokkal nymbot/auto, egy képpel ellátott kérést egy olyan szabványos modellre irányítanak, amely láthatja. capabilities.vision Elutasítja a képeket
400 unsupported_contentA képek csak a felhasználói üzenetekben lehetnek.A linknek egy nyilvános hostra kell mutatnia; a Nymbot továbbítja a képet a modell szolgáltatójának, és nem tartja meg.
A képet a szolgáltató belépési tokenként számítja fel, mint a kérés többi részét.
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);
érvelés
Modellek a capabilities.reasoning tudnak gondolkodni, mielőtt válaszolnak. kérjen többé-kevésbé reasoning_effort ("minimal", "low",
"medium" vagy "high") vagy "reasoning": {"effort": "high"}vagy adjunk hozzá :thinking a modell nevéhez, ami nagy erőfeszítést jelent. Az indokolás nélküli modellben a beállítást figyelmen kívül hagyják. nymbot/auto, :thinking a kérést a standard érvelési útvonalra küldi.
Az Anthropic modelleken az erőfeszítés mintegy 1000, 2 000, 8 000 vagy 16 000 token gondolkodási költségvetéssé válik, soha nem több, mint max_tokens A gondolkodás elmarad, amikor
tool_choice erővel egy eszközt, és amikor a kérés folytatódik egy eszköztár (utolsó üzenete egy eszköz eredménye), mert az Anthropicnak szüksége van a korábban aláírt gondolkodásra, hogy újraindítsa.
Az érvelés visszatér message.reasoning_contentvagy
delta.reasoning_content amikor streaming, soha nem keveredik a válaszba. Az érvelés kimenet, és mint ilyen, belsejében completion_tokensNéhány szolgáltató egyáltalán nem adja vissza az érvelési szöveget, és még mindig díjat fizet.
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);
Elérhető modell
A modellnéven lévő szófizet megváltoztatja a kérés feldolgozásának módját, egy másik mező nélkül. A teljes azonosítók és a rövid nevek egyaránt működnek, mint a anthropic/claude-sonnet-5:online.
| Elég | hatása |
|---|---|
:online | Először a weboldalt keresi, mint plugins: [{"id": "web"}]Ez Web keresés. |
:thinking | Az érvelő erőfeszítés; a nymbot/autoaz érvelési útvonalon, egy olyan modellben, amely nem érvelhet, 400 model_not_found “ nincs találat ” |
:nitro, :floor, :exacto, :extended | Minden katalógusmodellnek van egy útvonala, így nincs gyorsabb, olcsóbb vagy hosszabb választani; az utónevek megengedettek, így a más szolgáltatásokból másolt modellnevek még mindig működnek. |
Bármely más melléknevét figyelmen kívül hagyják. Az egész nevet először megpróbálják kipróbálni, így egy modell, amelynek azonosítója valóban tartalmaz egy vastagbélrákot, még mindig működik; ennek hiányában a mellékneveket egyszerre veszik le a végén, amíg egy modell nem egyezik meg. 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);
Web keresés
Bármely csevegőmodell válaszolhat az élő webről.Nymbot keres az utolsó felhasználói üzenetet (az első 2000 karakterét), elolvassa a legjobb oldalakat, és megadja őket a modellnek a kérdéssel, amelyet külső tartalomként jelöltek meg, a modell nem vehet utasításokat.Két mód van:
- Mindig keresés:
"plugins": [{"id": "web", "max_results": 5}]Vagy a:onlineelegendő a modellhez. - Keresse meg, ha segít:
"tools": [{"type": "web_search", "parameters": {"max_results": 5}}]Azt is elfogadták, mintweb_search_previewvagyopenrouter:web_searchA Nymbot csak akkor keres, ha a kérdés úgy tűnik, hogy az aktuális információkat igényli, ugyanazt a tesztet használja az alkalmazás.
max_results 5 alapértelmezés szerint és legfeljebb 10. A források visszatérnek a
nymbot.web_search.sourcesMindegyik a title, snippet és
urlÉs mint url_citation Megjegyzések az üzenetben.
Minden keresés, hogy fut költsége $ 0,008, átalakítva Sats, a tokenek tetején, és ez része a tartás. az oldalak olvasott beviteli tokenek is, így a válasz az interneten kerül több, mint ugyanaz a kérdés kérte hideg, néha többször többet.
A válasz részben
"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);
Válasz Tűz
Az OpenAI legújabb formátumát az OpenAI Agents SDK és a Codex használja. ugyanazokon a modelleken, számlázási és funkciókon fut, mint a Chat Completions.
POST https://nymbot.ai/api/v1/responses Szüksége van egy API kulcsra.
| mező | típus | Szükség | leírás |
|---|---|---|---|
model | String | Igen | Ahogy a Chat befejezésBeleértve a suffixeket is. |
input | String vagy array | Igen | Egy sor, vagy az elemek listája: üzenetek (szerepek user, assistant, system, developer) a input_text, input_image és output_text Részek és function_call és function_call_output Elemek az eszközökhöz. input_image Vegyünk egy image_url link vagy adat URL, nem fájl-id. reasoning és web_search_call a tárgyak elhalványulnak; item_reference Az elutasított. |
instructions | String | nem | A rendszer utasításai. |
max_output_tokens | Integrál | nem | A legtöbb token írni. |
temperaturetop_p | szám | nem | Szemléltető vezérlők, ahol a modell veszi őket. |
toolstool_choiceparallel_tool_calls | array, string vagy objektum, boolean | nem | A funkció eszközök, a Válaszok formájában ({"type": "function", "name": …, "parameters": …}) a web_search vagy web_search_preview A szerszám a Web keresés Amikor ez segít, más beépített eszközöket elutasítanak. |
reasoning | Objektum | nem | {"effort": "minimal" | "low" | "medium" | "high"}. xhigh és max jelentése high; none Fordítsa le azt. |
text.formatresponse_format | Objektum | nem | strukturált kimenet, mint egy JSON-sémát vagy json_object. |
metadata | Objektum | nem | Válaszban változatlanul. legfeljebb 16 karakterlánc-értéket, legfeljebb 64 karaktert és legfeljebb 512 értéket tartalmazó kulcsot. |
stream | Booleán | nem | Stream események az alábbiakban leírtak szerint. |
store | Booleán | nem | Semmi sem tárolódik, és a válasz mindig azt mondja "store": false. |
previous_response_idconversationbackground | String, Objektum és Boolean | nem | Nem támogatott : 400 unsupported_parameterA válaszok nem kerülnek tárolásra, így az egész beszélgetést a input Minden alkalommal |
Válasz
{
"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 }
}
Az eszköz kérése megjelenik a output mint a function_call Cikkek a
call_id, name és argumentsAz eredményt küldje vissza a
function_call_output Ugyanazokkal a pontokkal call_idAz érvelés, amikor a modell visszaadja azt, egy reasoning Cikkek a reasoning_text A tartalom, az első felsorolás. status az incomplete Amikor a válasz megérkezik
max_output_tokens A szolgáltató megtagadta a
incomplete_details.reason Állítsa be max_output_tokens vagy
content_filterA válasz a kérés beállításait (hőmérséklet, eszközök, eszközválasztás stb.) is visszhangozza, ahogy az OpenAI teszi, és átveszi a nymbot Az objektum költsége.
Szórakozás > Minden esemény egy event: A vonal és a data: A vonal a
sequence_numberEbben a sorrendben: response.created,
response.in_progress, response.output_item.added,
response.content_part.addedBármely számú response.output_text.delta,
response.output_text.done, response.content_part.done,
response.output_item.doneÉs végül response.completed a felhasználás és a költség. egy válasz rövid véget ér response.incomplete helyett, és egy kudarc, miután a stream kezdődött a response.failedAz áramlást mint saját tárgyat a response.reasoning_text.delta és .doneAz eszközhívások az üzenet után jönnek, mindegyikük egy elemként response.function_call_arguments.delta
és .done.
| státusz | Mikor |
|---|---|
400 | nem model vagy input; previous_response_id, conversation, background Vagy egy item_reference (unsupported_parameter); nem támogatott eszköz vagy tartalomtípus. |
402, 403, 404, 429, 502, 503 | A chat befejezéséhez. |
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);
Antropológiai üzenetek
Az Anthropic SDK és a Claude Code esetében az Anthropic formátum működik a katalógus minden modelljével, nem csak Claude-val: a kérelmet lefordítják, ugyanazon a csővezetéken futtatják, és visszafordítják.
POST https://nymbot.ai/api/v1/messages - szükség van egy API kulcsra, mint x-api-key vagy Authorization: Bearer.
A anthropic-version és anthropic-beta Az antropikus modellnevek a katalógushoz illeszkednek, így a Claude Code és az SDK-k a már használt nevekkel működnek:
- Egy olyan név, amelyet a katalógus ismer, mint például
claude-sonnet-5vagyanthropic/claude-opus-5Úgy használják, ahogy van. - Egy másik dátum (
-20260514),-latestEgy olyan verzió, mint-v1Egy olyan fárasztó nap, mint[1m]és egyanthropic/vagyanthropic.az előtagok eltávolításra kerülnek, és a pontok és a csúszdák a változatban mindkét irányban kipróbálhatók (claude-haiku-4-5Találatokclaude-haiku-4.5). - Ha ez még mindig nem egyezik meg, akkor a családot (Opus, Sonnet vagy Haiku) használják, mindaddig, amíg a katalógus verziója ugyanaz vagy újabb, mint a kért verzió.
- Egy név, ami nem egyezik meg, visszatér
404not_found_error.
| mező | típus | Szükség | leírás |
|---|---|---|---|
model | String | Igen | Katalógusos modellazonosító vagy antropikus modellazonosító. |
max_tokens | Integrál | Igen | A legtöbb token írni. |
messages | Arraira | Igen | user és assistant A fordulat, a text, image (base64 vagy URL forrás) tool_use és tool_result A blokkok. thinking A korábbi fordulókból származó blokkokat elfogadják és eldobják. |
system | String vagy array | nem | Rendszer prompt, mint egy sor vagy szöveges blokkok. |
temperaturetop_p | szám | nem | Szemléltető vezérlők, ahol a modell veszi őket. top_k Elfogadták és elengedték. |
stop_sequences | A szálak array | nem | Legfeljebb 4 sor, mindegyik legfeljebb 256 karakter. |
toolstool_choice | tárgya, objektum | nem | Eszközök a name, description és input_schemaAz A web_search A szerver szerszám beállítva Web keresésAz Anthropic egyéb beépített eszközei (bash, szövegszerkesztő, számítógépes használat) nem használhatók unsupported_tool. tool_choice Vegyük auto, any, tool vagy noneés disable_parallel_tool_use. |
thinking | Objektum | nem | {"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} vagy {"type": "disabled"}A költségvetés erőfeszítés szintjét választja: 2048 minimális alatt, 2048 alacsonyról, 8192 közepesről, 16384 magasról. output_config.effortVagy akár magas. |
stream | Booleán | nem | Stream az Anthropic esemény formátumában. |
metadata | Objektum | nem | Elfogadják és figyelmen kívül hagyják. |
Válasz
{
"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 Azt is tarthatjuk tool_use Blokkok és a thinking
A blokk, amelynek signature Az üres. stop_reason az
end_turn, max_tokens, tool_use vagy refusalUgyanúgy dolgozott, mint finish_reason Azon
Chat befejezés; stop_sequence Mindig az
null, még akkor is, ha egy stop szekvencia befejezte a választ. input_tokens csak friss bemenetek számítanak; a gyorsítótámasztott bemenetek a két gyorsítótámasztó mezőben vannak.
nymbot Az objektum és a X-Nymbot-Cost-Sats A header.
Az események az Anthropic: message_start,
content_block_start, ping, content_block_delta
(text_delta, input_json_delta vagy thinking_delta),
content_block_stop, message_delta Az okok, a használat és a nymbot objektum költsége, és message_stopAz A ping 15 másodpercenként is elküldik, miközben a modell működik.Eszközhívások érkeznek a szöveg után, mindegyik
tool_use blokkolja az egész bemenetét egy input_json_delta.
Ebben a végpontban a hibák az Anthropic formátumát használják:
{"type": "error", "error": {"type": "not_found_error", "message": "…"}}A rövid egyensúly 402 billing_errorTúlterhelt szolgáltató
503 overloaded_errorAz áramlás megkezdése után bekövetkezett hiba egy error Az esemény.
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 számlálás
Becslés arról, hogy hány bemeneti tokent használ egy Üzenetek kérés, így az ügyfél ellenőrizheti, mielőtt elküldi.
POST https://nymbot.ai/api/v1/messages/count_tokens Szüksége van egy API kulcsra.
A test ugyanaz, mint a ÜzenetekAnélkül max_tokensA szám egy becslés: a karakterek a rendszer prompt, üzenetek, eszköz hívások és eszköz definíciók osztva négy, plusz 1600 minden képet. Ez nem a szolgáltató saját tokenizer, így a tényleges szám eltérhet. A kulcs, amely elérte a határt is használhatja.
Válasz
{ "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);
Modellek listázása
Minden modell és generátor elfogadja az API-t, amennyibe kerül.A listát ugyanabból az élő katalógusból olvassa el, mint az alkalmazás pickere, így mindig ez az, amit a szerver fut.
GET https://nymbot.ai/api/v1/models - nincs szükség kulcsra. elrejtve öt percig
GET /api/v1/models/{id} Visszatér egy bejárat.
| mező | típus | Szükség | leírás |
|---|---|---|---|
type | A kérés (query) | nem | chat (A meghibásodás image, video, audio, embedding vagy allTöbbféle lehet, mint például image,video. |
Az árak az, amit fizetsz, a díj és a margin már befizetett, dollárban és az aktuális Bitcoin áron. balance Azt mondja meg, hogy a modell milyen egyensúlyt költ.
nymbot_key a modell rövid neve az alkalmazásban. created mindig 0, mivel a katalógus nem rögzíti, amikor egy modellt hozzáadtak. per_request helyette.
nymbot/auto Mindig az első, mint az ár variableAz A
routes A lista az egyes szabványos útvonalak árait tartalmazza. felsorolja a látást és az érvelést, de nem az eszközöket.
GET /api/v1/models/{id} ugyanazokat a neveket és álnéveket fogadja el kérésként, és visszaküldi a modellre vonatkozó bejegyzést.
Válasz
{
"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"
}
]
}
A többi típus:
- kép A bejáratok
capabilities(accepts_image_url,requires_image_url,edit(és egy áratper_generation. - videó A bejáratok
max_duration_secondsésresolutionsÉs egy áratper_secondminden egyes határozatot. - Audió A bejáratok
audio_typespeechvagytranscriptionAz árper_1k_charsvagyper_minute. - Beágyazás A bejáratok
dimensions,context_length,max_inputsÉs egy millió token belépő ára.
Megjelölt árak "estimated": true az alkalmazás becslése egy olyan generátorra vonatkozóan, amelynek árát nem hozták nyilvánosságra. type Visszatérés 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);