Cơ sở tri thức Nhà phát triển
Chat, phản hồi và tin nhắn
Ba cách để hỏi một mô hình một cái gì đó, trong ba định dạng khách hàng đã nói, tất cả chạy trên cùng một mô hình và thanh toán theo cùng một cách.
Trang này được dịch bằng máy để thuận tiện. Bản gốc tiếng Anh là phiên bản được áp dụng.
Chat hoàn thành
Định dạng trò chuyện OpenAI, và hầu hết các công cụ hỗ trợ. Gửi cuộc trò chuyện cho đến nay và nhận lại tin nhắn tiếp theo.
POST https://nymbot.ai/api/v1/chat/completions - Cần có API key
Chỉ model Và messages Một tham số lấy mẫu mà mô hình đã chọn không được giảm mà không có lỗi, vì vậy một yêu cầu cơ thể hoạt động trên các mô hình. supported_parametersNhững gì bị từ chối thay vì bị bỏ rơi là bất cứ điều gì mà mô hình không thể làm: hình ảnh cho một mô hình không thể nhìn thấy, công cụ cho một mô hình không thể gọi chúng.
| trường | Loại | Cần | Mô tả |
|---|---|---|---|
model | String | Đúng | nymbot/auto (hoặc auto) cho định tuyến của Nymbot trên số dư tiêu chuẩn, hoặc một id mô hình danh mục như: anthropic/claude-sonnet-5 trên số dư Pro. Tên ngắn và biệt danh của ứng dụng cũng được chấp nhận. Có thể kết thúc trong một đủ. |
messages | Array | Đúng | Trò chuyện, vai trò system, developer (được xử lý như hệ thống), user, assistant Và toolNội dung là một chuỗi hoặc danh sách các text Và image_url phần; hình ảnh chỉ trong tin nhắn của người dùng. input_audio Các phần file bị từ chối. |
stream | Boolean | Không | Gửi câu trả lời như đã viết. xem Streaming. |
stream_options | đối tượng | Không | {"include_usage": true} thêm một phần cuối cùng với số lượng token và chi phí. |
max_tokensmax_completion_tokens | integer | Không | Hầu hết các token để viết. Giảm xuống mức tối đa của mô hình nếu cao hơn. cũng đặt ra bao nhiêu được giữ từ số dư của bạn, vì vậy một số nhỏ hơn cần ít tín dụng hơn để bắt đầu. |
temperaturetop_p | Số | Không | Kiểm soát mẫu: temperature Từ 0 đến 2, top_p Từ 0 đến 1. |
stop | string hoặc array | Không | Văn bản kết thúc câu trả lời: một chuỗi hoặc tối đa 4 chuỗi, mỗi chuỗi tối đa 256 ký tự. nymbot/auto. |
seed | integer | Không | Để lấy mẫu lặp đi lặp lại, nơi mô hình hỗ trợ nó. |
presence_penaltyfrequency_penalty | Số | Không | Kiểm soát lặp đi lặp lại, mỗi từ -2 đến 2. |
response_format | đối tượng | Không | {"type": "json_object"} hoặc {"type": "json_schema", "json_schema": {…}}, nơi mô hình hỗ trợ nó. Không được sử dụng bởi nymbot/auto. |
toolstool_choiceparallel_tool_calls | Array, string hoặc object, boolean | Không | Chức năng gọi: See Công cụ Calla a web_search Công cụ Turn On web tìm kiếmTối đa 128 công cụ và 512 KB định nghĩa, được niêm phong ở tối đa 64 cấp độ sâu; nhiều hơn là một 400. |
reasoning_effortreasoning | String, đối tượng | Không | "minimal", "low", "medium" hoặc "high"hoặc {"effort": "high"}. "none" hoặc {"enabled": false} Tắt nó đi. xem lý luận. |
plugins | Array | Không | [{"id": "web", "max_results": 5}] luôn tìm kiếm web đầu tiên. lên đến 10 kết quả. |
n | integer | Không | Lời bài hát: Everything Other Returns 400. |
logit_biasusermetadata | Object, String và Object | Không | Chấp nhận và không gửi đi. logit_bias Bản đồ với tối đa 300 token id đến số từ -100 đến 100; user Có tối đa 256 ký tự; metadata chứa tối đa 16 giá trị chuỗi, khóa lên đến 64 ký tự và giá trị lên đến 512. |
Câu trả lời là bình thường chat.completionVới chi phí trong usage.cost
(Trong đô la) và trong nymbot đối tượng model is the resolved model id, so a short name comes back as the full one. If the model reasoned before answering, its reasoning is in message.reasoning_contenttách biệt với câu trả lời.
Trả lời
{
"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 được thực hiện từ những gì đã trở lại, vì các nhà cung cấp báo cáo nó khác nhau: tool_calls Khi người mẫu yêu cầu các công cụ, length khi câu trả lời sử dụng mọi token cho phép (hoặc mô hình đã dành tất cả lý luận và không viết câu trả lời), content_filter Khi nhà cung cấp từ chối, và stop
Ngược lại usage.completion_tokens_details.reasoning_tokens luôn là 0: token lý luận ẩn được đếm và tính phí, trong completion_tokens.
| Status | Khi nào |
|---|---|
400 | Không model hoặc messages (missing_required_parameter); một phần âm thanh hoặc tệp, hoặc hình ảnh cho một mô hình không thể nhìn thấy chúng (unsupported_content); hơn 20 hình ảnh (too_many_images(Thuyết điểm: Tác dụng của các loại thuốc không đúng cách hoặc không đúng cách)invalid_value); một liên kết hình ảnh không phải là công khai (invalid_image_url); công cụ trên một mô hình không thể gọi chúng (unsupported_tool); n khác hơn 1; a :thinking Tạo ra một mô hình không có lý do (model_not_found(hoặc nhà cung cấp đã từ chối yêu cầu)upstream_rejected). |
402 | Số dư mà mô hình chi tiêu không thể bao gồm cổ phần. |
403 | Trường hợp xấu nhất không phù hợp với nắp chìa khóa (key_limit_reached) thấp hơn max_tokens Hoặc nâng cap lên. |
404 | Không có mô hình với tên đó (model_not_found). |
429 | Tỷ lệ giới hạn của chìa khóa, hoặc của nhà cung cấp (upstream_rate_limited). |
502, 503 | Nhà cung cấp đã thất bại (upstream_error) hoặc bị quá tải (upstream_overloaded, với Retry-AfterKhông có gì được tính phí trừ khi nhà cung cấp tính phí cho nỗ lực. |
Các mã trạng thái mỗi cổ phiếu điểm cuối được liệt kê dưới Lỗi.
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);
Streaming
Với "stream": true câu trả lời đến dưới dạng các sự kiện được gửi bởi máy chủ trong khi mô hình viết nó. chat.completion.chunk Có a data: dòng, và dòng chảy kết thúc với data: [DONE]Lý trí đến trong
delta.reasoning_contentCâu trả lời trong delta.content.
Stream bất cứ điều gì có thể mất hơn khoảng 100 giây, chẳng hạn như một câu trả lời dài, một câu trả lời lớn
max_tokens Một yêu cầu không được phát trực tuyến không gửi bất cứ điều gì cho đến khi câu trả lời hoàn tất, và mạng giữa bạn và Nymbot có thể đóng một kết nối không hoạt động sau khoảng 100 giây; mô hình vẫn kết thúc và những gì nó đã viết được sạc, nhưng câu trả lời bị mất.
Stream
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]
- Các dòng bắt đầu với
:là bình luận sống động, được gửi mỗi 15 giây trong khi mô hình đang suy nghĩ. - Yêu cầu
"stream_options": {"include_usage": true}để có được phần cuối cùng ở trên, với một trốngchoices, token đếm, chi phí vànymbotđối tượng - Nếu bạn đóng kết nối sớm, mô hình không dừng lại: Nymbot đọc phần còn lại của dòng của nhà cung cấp, trong tối đa 25 giây, để có được số lượng token của nó, và bạn trả những gì nhà cung cấp báo cáo.
- Một lỗi trước khi chunk đầu tiên, chẳng hạn như
401hoặc402, trở lại như JSON thông thường với mã trạng thái của nó, không phải là một luồng. một lỗi sau khi luồng đã bắt đầu đến như một luồng cuối cùngdata: {"error": {…}}sự kiện, và dòng chảy kết thúc mà không có[DONE]. - Các yêu cầu với các công cụ, và các mô hình trên OpenAI's Responses vận chuyển, không chảy từ nhà cung cấp. Họ vẫn trả lời với một luồng hợp lệ, được gửi khi câu trả lời hoàn tất.
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);
}
Công cụ Call
Mô tả các chức năng trong tools và mô hình có thể yêu cầu một người được gọi thay vì trả lời. bạn chạy hàm, thêm kết quả của nó như một tool Thông điệp cùng một
tool_call_idNymbot không bao giờ chạy các chức năng của bạn; nó truyền yêu cầu của mô hình trở lại cho bạn.
tool_choice lấy "auto", "none",
"required" hoặc {"type": "function", "function": {"name": "…"}}Model list đánh dấu những mô hình nào có thể gọi công cụ (capabilities.toolsCác công cụ được từ chối với 400 unsupported_tool Có nymbot/auto và trên vài mô hình danh mục chạy trên vận chuyển Responses của OpenAI, mà Nymbot không thể thông qua các công cụ.
Với "stream": true, một yêu cầu với công cụ chạy trong một mảnh và sau đó được gửi như một chuỗi mảnh bình thường: vai trò, một mảnh mang theo mỗi cuộc gọi công cụ với chỉ mục, id, tên và đối số của nó, và mảnh kết thúc.
Câu trả lời, một phần
"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);
Hình ảnh trong yêu cầu
Mô hình với capabilities.vision Có thể đọc hình ảnh.Thêm một image_url
chia sẻ cho một thông điệp người dùng, với một công chúng https:// link hoặc a
data:image/…;base64, Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án:400 invalid_image_url3) Tùy chọn detail là
auto, low hoặc high.
Với nymbot/auto, một yêu cầu với một hình ảnh trong đó được định tuyến đến một mô hình tiêu chuẩn có thể nhìn thấy. capabilities.vision Từ chối hình ảnh với
400 unsupported_contentMột liên kết phải chỉ đến một máy chủ công cộng; Nymbot truyền hình ảnh cho nhà cung cấp của mô hình và không giữ nó.
Một hình ảnh được tính phí như các token đầu vào mà nhà cung cấp tính cho nó, giống như phần còn lại của yêu cầu.
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);
lý luận
Mô hình với capabilities.reasoning có thể suy nghĩ trước khi họ trả lời. yêu cầu nhiều hơn hoặc ít hơn với reasoning_effort ("minimal", "low",
"medium" hoặc "high") hoặc "reasoning": {"effort": "high"}Hoặc thêm :thinking đến tên mô hình, có nghĩa là nỗ lực cao. Trên một mô hình mà không có lý do cài đặt bị bỏ qua. nymbot/auto, :thinking Gửi yêu cầu đến đường lý luận tiêu chuẩn.
Trên các mô hình Anthropic, nỗ lực trở thành một ngân sách suy nghĩ khoảng 1.000, 2.000, 8.000 hoặc 16.000 token, không bao giờ nhiều hơn max_tokens Lời bài hát: Thinking Is Left When
tool_choice buộc một công cụ, và khi yêu cầu tiếp tục một vòng lặp công cụ (thông điệp cuối cùng của nó là một kết quả công cụ), bởi vì Anthropic cần suy nghĩ đã ký trước đó để tiếp tục nó.
Lý luận trở lại trong message.reasoning_contenthoặc
delta.reasoning_content khi phát trực tuyến, không bao giờ trộn vào câu trả lời. lý luận là đầu ra và được tính như vậy, bên trong completion_tokensMột số nhà cung cấp không trả lại văn bản lý luận, và nó vẫn được tính phí.
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);
Mô hình suffix
Một phụ đề trên tên mô hình thay đổi cách yêu cầu được xử lý, mà không có trường khác. Chúng hoạt động trên ID đầy đủ và tên ngắn như nhau, như trong anthropic/claude-sonnet-5:online.
| đủ | Hiệu ứng |
|---|---|
:online | Tìm kiếm web đầu tiên, như plugins: [{"id": "web"}]Này web tìm kiếm. |
:thinking | Nỗ lực lý luận cao; on nymbot/auto, đường lý luận.Với một mô hình không thể lý luận, 400 model_not_found với “no endpoints found”. |
:nitro, :floor, :exacto, :extended | Mỗi mô hình danh mục có một tuyến đường, vì vậy không có tuyến đường nhanh hơn, rẻ hơn hoặc dài hơn để lựa chọn; các phụ đề được cho phép để các tên mô hình sao chép từ các dịch vụ khác vẫn hoạt động. |
Bất kỳ bổ sung nào khác đều bị bỏ qua.Tên đầy đủ được thử trước, vì vậy một mô hình có ID thực sự chứa một colon vẫn hoạt động; nếu không, bổ sung được lấy ra khỏi cuối một lần cho đến khi một mô hình khớp.Tên mô hình có thể dài tối đa 200 ký tự với tối đa 4 bổ sung; một bổ sung dài hơn bị từ chối với 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 tìm kiếm
Bất kỳ mô hình trò chuyện nào cũng có thể trả lời từ web trực tiếp.Nymbot tìm kiếm thông điệp người dùng cuối cùng (hai ngàn ký tự đầu tiên của nó), đọc các trang tốt nhất và đưa chúng cho mô hình với câu hỏi, được đánh dấu là nội dung bên ngoài mà mô hình không nên lấy hướng dẫn từ.
- Luôn tìm kiếm:
"plugins": [{"id": "web", "max_results": 5}], hoặc a:onlinesuffix trên mô hình. - Tìm kiếm khi nó giúp:
"tools": [{"type": "web_search", "parameters": {"max_results": 5}}]Cũng được chấp nhận nhưweb_search_previewhoặcopenrouter:web_searchNymbot chỉ tìm kiếm khi câu hỏi dường như cần thông tin hiện tại, cùng một bài kiểm tra mà ứng dụng sử dụng.
max_results là 5 theo mặc định và tối đa là 10. các nguồn trở lại trong
nymbot.web_search.sourcesMỗi người với a title, snippet Và
urlVà như url_citation ghi chú trên thông điệp.
Mỗi tìm kiếm chạy chi phí $ 0,008, chuyển đổi thành sats, trên đầu các token, và nó là một phần của các trang mà nó đọc là token đầu vào, vì vậy một câu trả lời từ web chi phí nhiều hơn cùng một câu hỏi hỏi lạnh, đôi khi nhiều lần hơn.
Câu trả lời, một phần
"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);
Trả lời API
Định dạng mới hơn của OpenAI, được sử dụng bởi OpenAI Agents SDK và bởi Codex. Nó chạy trên các mô hình, hóa đơn và tính năng tương tự như Chat Completions.
POST https://nymbot.ai/api/v1/responses - Cần có API key
| trường | Loại | Cần | Mô tả |
|---|---|---|---|
model | String | Đúng | Đối với Chat hoàn thànhBổ sung suffix. |
input | string hoặc array | Đúng | Một chuỗi, hoặc danh sách các mục: tin nhắn (những vai trò user, assistant, system, developer) với input_text, input_image Và output_text Các bộ phận, và function_call Và function_call_output Các mặt hàng cho công cụ input_image lấy một image_url liên kết hoặc dữ liệu URL, không phải là một file id. reasoning Và web_search_call Các mặt hàng bị bỏ qua; item_reference bị từ chối. |
instructions | String | Không | Hướng dẫn hệ thống |
max_output_tokens | integer | Không | nhiều nhất để viết. |
temperaturetop_p | Số | Không | Kiểm soát mẫu, nơi mô hình lấy chúng. |
toolstool_choiceparallel_tool_calls | Array, string hoặc object, boolean | Không | Các công cụ chức năng, trong hình thức Trả lời ({"type": "function", "name": …, "parameters": …}) a web_search hoặc web_search_preview Công cụ Turn On web tìm kiếm khi nó giúp. các công cụ tích hợp khác bị từ chối. |
reasoning | đối tượng | Không | {"effort": "minimal" | "low" | "medium" | "high"}. xhigh Và max Ý nghĩa high; none xoay nó đi. |
text.formatresponse_format | đối tượng | Không | Xuất khẩu có cấu trúc, như một sơ đồ JSON hoặc json_object. |
metadata | đối tượng | Không | Trả về không thay đổi trong câu trả lời. ở tối đa 16 giá trị chuỗi, khóa lên đến 64 ký tự và giá trị lên đến 512. |
stream | Boolean | Không | Stream các sự kiện như được mô tả bên dưới. |
store | Boolean | Không | Không có gì được lưu trữ, và câu trả lời luôn nói "store": false. |
previous_response_idconversationbackground | String, Object và Boolean | Không | Không được hỗ trợ: 400 unsupported_parameterCác câu trả lời không được lưu trữ, vì vậy hãy gửi toàn bộ cuộc trò chuyện vào input Mỗi lần |
Trả lời
{
"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 }
}
Một yêu cầu công cụ xuất hiện trong output Như a function_call item với
call_id, name Và argumentsGửi kết quả trở lại như a
function_call_output item với cùng một call_idLý luận, khi mô hình trả về nó, là một reasoning item với reasoning_text nội dung, được liệt kê trước. status là incomplete Khi câu trả lời đạt
max_output_tokens hoặc nhà cung cấp từ chối, với
incomplete_details.reason Đặt 2 max_output_tokens hoặc
content_filterCâu trả lời cũng phản ánh các cài đặt của yêu cầu (nhiệt độ, công cụ, lựa chọn công cụ, v.v.) như OpenAI làm, và mang theo nymbot Chi phí đối tượng
Streamed, mỗi sự kiện là một event: line và a data: line với a
sequence_numberTrong trật tự này: response.created,
response.in_progress, response.output_item.added,
response.content_part.addedBất kỳ số lượng response.output_text.delta,
response.output_text.done, response.content_part.done,
response.output_item.doneVà cuối cùng response.completed với việc sử dụng và chi phí. một câu trả lời cắt ngắn kết thúc với response.incomplete thay vào đó, và một thất bại sau khi dòng chảy bắt đầu với response.failedLý luận dòng chảy như là mục của riêng mình với response.reasoning_text.delta Và .doneCác cuộc gọi công cụ đến sau thông điệp, mỗi cuộc gọi là một mục với response.function_call_arguments.delta
Và .done.
| Status | Khi nào |
|---|---|
400 | Không model hoặc input; previous_response_id, conversation, background hoặc một item_reference (unsupported_parameter); một công cụ hoặc loại nội dung không được hỗ trợ. |
402, 403, 404, 429, 502, 503 | Về việc hoàn thành chat. |
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);
Thông điệp Anthropic
Định dạng của Anthropic, cho Anthropic SDKs và Claude Code. Nó hoạt động với mọi mô hình trong danh mục, không chỉ Claude: yêu cầu được dịch, chạy qua cùng một đường ống, và dịch trở lại.
POST https://nymbot.ai/api/v1/messages - cần một phím API, như x-api-key hoặc Authorization: Bearer.
Các anthropic-version Và anthropic-beta Tên mô hình nhân loại được khớp với danh mục, vì vậy Claude Code và SDKs làm việc với các tên họ đã sử dụng:
- Một cái tên mà catalog biết, chẳng hạn như
claude-sonnet-5hoặcanthropic/claude-opus-5Nó được sử dụng như nó là. - Một ngày nào đó (
-20260514),-latest, một phiên bản tag như-v1, một ngày bracketed như[1m]và mộtanthropic/hoặcanthropic.Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn:claude-haiku-4-5Tìm thấyclaude-haiku-4.5). - Nếu điều đó vẫn không phù hợp, gia đình (Opus, Sonnet hoặc Haiku) được sử dụng, miễn là phiên bản của danh mục tương tự hoặc mới hơn so với phiên bản được yêu cầu.
- Một cái tên không phù hợp với bất cứ điều gì sẽ trở lại
404not_found_error.
| trường | Loại | Cần | Mô tả |
|---|---|---|---|
model | String | Đúng | Một catalogue model id, hoặc một tên mô hình Anthropic. |
max_tokens | integer | Đúng | nhiều nhất để viết. |
messages | Array | Đúng | user Và assistant Turns, với text, image (base64 hoặc nguồn URL) tool_use Và tool_result Các Block thinking Các khối từ các lượt trước được chấp nhận và bỏ đi. |
system | string hoặc array | Không | System prompt, như một chuỗi hoặc khối văn bản. |
temperaturetop_p | Số | Không | Kiểm soát mẫu, nơi mô hình lấy chúng. top_k được chấp nhận và bỏ rơi. |
stop_sequences | Lời bài hát Array Of Strings | Không | Văn bản kết thúc câu trả lời: Tối đa 4 chuỗi, mỗi chuỗi tối đa 256 ký tự. |
toolstool_choice | Array, đối tượng | Không | Công cụ với name, description Và input_schemaa a web_search Server Tool trở thành web tìm kiếmCác công cụ tích hợp khác của Anthropic (bash, text editor, sử dụng máy tính) bị từ chối với unsupported_tool. tool_choice lấy auto, any, tool hoặc nonevà disable_parallel_tool_use. |
thinking | đối tượng | Không | {"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} hoặc {"type": "disabled"}Ngân sách chọn một mức độ nỗ lực: dưới 2.048 tối thiểu, từ 2.048 thấp, từ 8.192 trung bình, từ 16.384 cao. output_config.efforthoặc cao. |
stream | Boolean | Không | Stream trong định dạng sự kiện của Anthropic. |
metadata | đối tượng | Không | Chấp nhận và bỏ qua. |
Trả lời
{
"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 Cũng có thể giữ tool_use Block và a thinking
Block, những người signature trống rỗng stop_reason là
end_turn, max_tokens, tool_use hoặc refusal, làm việc theo cùng một cách như finish_reason Có
Chat hoàn thành; stop_sequence luôn luôn
null, ngay cả khi một chuỗi dừng kết thúc câu trả lời. input_tokens Chỉ có nhập mới được tính; nhập bộ nhớ cache nằm trong hai trường bộ nhớ cache.
nymbot Object và the X-Nymbot-Cost-Sats người header
Streamed, các sự kiện là của Anthropic: message_start,
content_block_start, ping, content_block_delta
(text_delta, input_json_delta hoặc thinking_delta),
content_block_stop, message_delta với lý do dừng lại, việc sử dụng và nymbot Chi phí đối tượng, và message_stopa a ping cũng được gửi mỗi 15 giây trong khi mô hình đang hoạt động. cuộc gọi công cụ đến sau văn bản, mỗi
tool_use block với toàn bộ đầu vào của nó trong một input_json_delta.
Lỗi trên điểm cuối này sử dụng định dạng của Anthropic:
{"type": "error", "error": {"type": "not_found_error", "message": "…"}}Một sự cân bằng ngắn là 402 billing_errorMột nhà cung cấp quá tải
503 overloaded_errorMột sự thất bại sau khi dòng đã bắt đầu được gửi như một error Sự kiện
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);
Đếm token
Một ước tính về số lượng token đầu vào một yêu cầu tin nhắn sẽ sử dụng, vì vậy một khách hàng có thể kiểm tra trước khi nó gửi.
POST https://nymbot.ai/api/v1/messages/count_tokens - Cần một API key. miễn phí.
Cơ thể cũng giống như Thông điệpmà không max_tokensSố lượng là một ước tính: các ký tự của lời nhắc hệ thống, tin nhắn, cuộc gọi công cụ và định nghĩa công cụ được chia thành bốn, cộng với 1,600 cho mỗi hình ảnh. Nó không phải là tokenizer riêng của nhà cung cấp, vì vậy số lượng thực tế có thể khác nhau.
Trả lời
{ "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);
Danh sách mô hình
Mỗi mô hình và máy phát điện API chấp nhận, với chi phí của nó. danh sách được đọc từ cùng một danh mục trực tiếp như máy chọn của ứng dụng, vì vậy nó luôn là những gì máy chủ sẽ chạy.
GET https://nymbot.ai/api/v1/models - Không cần chìa khóa. Ẩn trong 5 phút.
GET /api/v1/models/{id} Trả lại 1 entry
| trường | Loại | Cần | Mô tả |
|---|---|---|---|
type | Lời bài hát: string (query) | Không | chat (Đối với sự thất bại), image, video, audio, embedding hoặc allMột số có thể được đưa ra, như image,video. |
Giá là những gì bạn trả, với lệ phí và lợi nhuận đã có trong, bằng đô la và trong sats với giá Bitcoin hiện tại. balance cho biết cân bằng mà mô hình chi tiêu.
nymbot_key là tên ngắn của mô hình trong ứng dụng. created luôn luôn là 0, vì danh mục không ghi lại khi một mô hình được thêm vào. per_request thay vì.
nymbot/auto luôn luôn là đầu tiên, giá như variable, với a
routes Nó liệt kê tầm nhìn và lý luận, nhưng không phải là công cụ.
GET /api/v1/models/{id} chấp nhận cùng tên và biệt danh như một yêu cầu, và trả về mục nhập cho mô hình mà họ quyết định.
Trả lời
{
"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"
}
]
}
Các loại khác:
- Hình ảnh entries có
capabilities(accepts_image_url,requires_image_url,edit(và một mức giáper_generation. - Video entries có
max_duration_secondsVàresolutionsVà một mức giáper_secondcho mỗi nghị quyết. - Âm thanh entries có
audio_typespeechhoặctranscriptionGiá cảper_1k_charshoặcper_minute. - Embedded entries có
dimensions,context_length,max_inputsvà một giá cho mỗi triệu token đầu vào.
Giá đánh dấu "estimated": true là ước tính của ứng dụng cho một máy phát điện có giá không được công bố. type Trở về 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);