本页内容
XUSS AI API
托管于 XUSS 主机平台之上的兼容 OpenAI 的生产级 API。使用任意 OpenAI SDK、编辑器或聊天客户端并指向 XUSS —— 无供应商锁定,一个密钥,按 XUSS 余额用多少付多少。
- 基础 URL:
https://xuss.us/v1 - 鉴权:
Authorization: Bearer xsk-…(在面板中创建密钥) - 面板: https://xuss.us/panel/api
- 格式: OpenAI Chat Completions(流式、工具、视觉、JSON 模式)
快速开始
1. 创建 API 密钥,在面板中:API → API 密钥 → 创建密钥。复制它——只显示一次。密钥以 xsk- 开头。
2. 调用 API,任意语言——选择标签页:
curl https://xuss.us/v1/chat/completions \
-H "Authorization: Bearer xsk-YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "xuss/kitsune",
"messages": [{"role": "user", "content": "你好!"}]
}'from openai import OpenAI
client = OpenAI(base_url="https://xuss.us/v1", api_key="xsk-YOUR_KEY")
r = client.chat.completions.create(
model="xuss/kitsune",
messages=[{"role": "user", "content": "你好!"}],
)
print(r.choices[0].message.content)import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://xuss.us/v1", apiKey: "xsk-YOUR_KEY" });
const r = await client.chat.completions.create({
model: "xuss/kitsune",
messages: [{ role: "user", content: "你好!" }],
});
console.log(r.choices[0].message.content);package main
import (
"bytes"
"fmt"
"io"
"net/http"
)
func main() {
body := []byte(`{"model":"xuss/kitsune","messages":[{"role":"user","content":"你好!"}]}`)
req, _ := http.NewRequest("POST", "https://xuss.us/v1/chat/completions", bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer xsk-YOUR_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(string(out))
}<?php
$ch = curl_init('https://xuss.us/v1/chat/completions');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer xsk-YOUR_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'model' => 'xuss/kitsune',
'messages' => [['role' => 'user', 'content' => '你好!']],
]),
]);
$res = json_decode(curl_exec($ch), true);
echo $res['choices'][0]['message']['content'], PHP_EOL;就这样——按 token 从 XUSS 余额扣费,无需订阅。
鉴权
每个请求都需要 bearer 令牌:
Authorization: Bearer xsk-YOUR_KEY
Content-Type: application/json密钥在面板 → API中创建和吊销。规则:
- 密钥形如
xsk-后跟一长串随机字符。仅存储前几个字符用于展示;完整值在创建时只显示一次。 - 每个账户最多 10 个活动密钥。
- 每个密钥可带有可选的到期日期和可选的支出上限(美元)。当密钥过期或达到上限时,使用它的请求会以 401(
key_expired)或 402(key_spend_limit_reached)失败,直到你创建新密钥或提高上限。 - 在面板中创建密钥受 Cloudflare Turnstile(验证码)保护,因此无法用脚本生成密钥。
- 吊销密钥立即生效。
- 密钥继承你账户对 AI API 的访问权限。如果未为你的账户启用该 API,请求返回 403。
切勿在客户端代码或公开仓库中泄露密钥。若密钥泄露,请在面板中吊销并创建新密钥。
端点
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /v1/models | 列出你的密钥可用的模型,含价格与能力 |
| POST | /v1/chat/completions | 创建聊天补全(流式或非流式) |
| GET | /v1/tools | 列出 API 可代你运行的服务端工具 |
| GET | /v1/skills | 列出助手可加载的参考技能 |
均接受 Authorization: Bearer xsk-…。
模型
…
GET /v1/models 返回 API 中开放的模型,含上下文窗口、视觉支持与按 token 定价:
{
"object": "list",
"data": [
{
"id": "xuss/kitsune",
"object": "model",
"owned_by": "xuss",
"context_window": 1048576,
"vision": true,
"pricing": {
"prompt": 0.00000029,
"completion": 0.00000129,
"input_cache_read": 0.0000000099
}
}
]
}价格以 美元/ token 计。乘以 1,000,000 即得面板中显示的每百万价格。
模型路由。 在同一个模型 id 背后,XUSS 可能将请求路由到不同的上游容量,以保持服务快速可用。这对你不可见:你请求的model始终是响应中返回的模型,且模型知道自己的名字。/v1/models中的价格即向你计费的价格。
聊天补全
POST /v1/chat/completions
请求体
| 字段 | 类型 | 说明 |
|---|---|---|
model | string | 必填 —— 例如 xuss/kitsune |
messages | array | 必填 —— 见 Messages |
stream | boolean | true = Server-Sent Events |
temperature | number | 0–2,默认 0.2 |
max_tokens | integer | 限制输出长度 |
max_completion_tokens | integer | max_tokens 的别名 |
tools | array | 函数/工具定义 —— 见 工具 |
tool_choice | string/object | 透传给模型 |
response_format | object | JSON 模式用 {"type":"json_object"} |
top_p, stop, seed, presence_penalty, frequency_penalty, logit_bias, n, user, logprobs, top_logprobs | — | 透传 |
messages 遵循 OpenAI 结构(system、user、assistant、tool 角色;多模态内容数组)。
响应
{
"id": "chatcmpl-3f9c1a...",
"object": "chat.completion",
"created": 1791000000,
"model": "xuss/kitsune",
"choices": [
{
"index": 0,
"message": {"role": "assistant", "content": "你好!需要什么帮助?"},
"finish_reason": "stop",
"logprobs": null
}
],
"usage": {"prompt_tokens": 12, "completion_tokens": 7, "total_tokens": 19},
"system_fingerprint": "xuss"
}finish_reason 为 stop、length 或 tool_calls。
Messages
标准的 OpenAI 消息数组。最小单轮请求:
{"model": "xuss/kitsune", "messages": [{"role": "user", "content": "你好"}]}多轮对话 —— 每次都发送完整历史:
{
"model": "xuss/kitsune",
"messages": [
{"role": "system", "content": "你是一个简洁的助手。"},
{"role": "user", "content": "XUSS 是什么?"},
{"role": "assistant", "content": "XUSS 是一个主机平台。"},
{"role": "user", "content": "它有 AI API 吗?"}
]
}流式
设置 "stream": true 以接收 Server-Sent Events。每行是 data: {json};流以 data: [DONE] 结束。
分块如下所示:
data: {"id":"chatcmpl-…","object":"chat.completion.chunk","created":…,"model":"xuss/kitsune","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}],"system_fingerprint":"xuss"}
data: {"id":"chatcmpl-…","choices":[{"index":0,"delta":{"content":"机架 "},"finish_reason":null}]}
data: {"id":"chatcmpl-…","choices":[{"index":0,"delta":{"content":"低鸣"},"finish_reason":null}]}
data: {"id":"chatcmpl-…","choices":[],"usage":{"prompt_tokens":14,"completion_tokens":9,"total_tokens":23}}
data: [DONE]用任意语言读取流:
curl -N https://xuss.us/v1/chat/completions \
-H "Authorization: Bearer xsk-YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"xuss/kitsune","stream":true,
"messages":[{"role":"user","content":"写一首关于服务器的俳句"}]}'stream = client.chat.completions.create(
model="xuss/kitsune",
messages=[{"role": "user", "content": "写一首关于服务器的俳句"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content if chunk.choices else None
if delta:
print(delta, end="", flush=True)const stream = await client.chat.completions.create({
model: "xuss/kitsune",
messages: [{ role: "user", content: "写一首关于服务器的俳句" }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content || "");
}package main
import (
"bufio"
"bytes"
"fmt"
"net/http"
"strings"
)
func main() {
body := []byte(`{"model":"xuss/kitsune","stream":true,"messages":[{"role":"user","content":"写一首关于服务器的俳句"}]}`)
req, _ := http.NewRequest("POST", "https://xuss.us/v1/chat/completions", bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer xsk-YOUR_KEY")
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
sc := bufio.NewScanner(res.Body)
for sc.Scan() {
line := sc.Text()
if !strings.HasPrefix(line, "data: ") || strings.HasSuffix(line, "[DONE]") {
continue
}
fmt.Println(line[6:]) // parse JSON, read choices[0].delta.content
}
}<?php
$ch = curl_init('https://xuss.us/v1/chat/completions');
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => [
'Authorization: Bearer xsk-YOUR_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'model' => 'xuss/kitsune',
'stream' => true,
'messages' => [['role' => 'user', 'content' => '写一首关于服务器的俳句']],
]),
CURLOPT_WRITEFUNCTION => function ($ch, $chunk) {
foreach (explode("\n", $chunk) as $line) {
if (str_starts_with($line, 'data: ') && !str_contains($line, '[DONE]')) {
$j = json_decode(substr($line, 6), true);
echo $j['choices'][0]['delta']['content'] ?? '';
}
}
return strlen($chunk);
},
]);
curl_exec($ch);当模型支持推理时,流式分块可能在delta中额外带有reasoning_content字段。标准 SDK 会忽略它,你不必将其作为输出处理。
系统提示与身份
你的 system 消息会被尊重。模型也知道自己的显示名称,被问及是什么模型时只用该名称回答 —— 它绝不透露任何上游提供商或路由。
{
"model": "xuss/kitsune",
"messages": [
{"role": "system", "content": "你是一个简洁的 DevOps 助手。用要点回答。"},
{"role": "user", "content": "如何重启 systemd 服务?"}
]
}视觉(图像)
将图像作为 OpenAI image_url 内容部分传入(data URL 或公开 http(s) URL)。只有 /v1/models 中 "vision": true 的模型接受图像;向无视觉模型发送图像会返回一条文本说明,模型只依据文本作答。
r = client.chat.completions.create(
model="xuss/kitsune",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "这张图里有什么?"},
{"type": "image_url", "image_url": {"url": "data:image/png;base64,iVBORw0KGgo..."}},
],
}],
)限制:最多 8 个图像部分,每个最大 约 6 MB;图像不计入文本预算。
函数调用
传入 OpenAI 风格的 tools。当模型决定调用函数时,finish_reason 为 tool_calls,消息中包含 tool_calls。
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather for a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
r = client.chat.completions.create(
model="xuss/kitsune",
messages=[{"role": "user", "content": "塔什干天气?"}],
tools=tools,
)
call = r.choices[0].message.tool_calls[0]
print(call.function.name, call.function.arguments)然后将结果作为 tool 消息发回:
messages = [
{"role": "user", "content": "塔什干天气?"},
r.choices[0].message,
{"role": "tool", "tool_call_id": call.id, "content": '{"temp_c": 24, "sky": "clear"}'},
]
final = client.chat.completions.create(model="xuss/kitsune", messages=messages)服务端工具(网络 + 技能)
按请求启用。 传入 "xuss_tools": true(全部)或所需工具的数组。随后 XUSS 在服务端替你运行这些工具 —— 模型调用它们,服务端执行并继续,你在同一个响应中得到最终答案。无需客户端循环。
r = client.chat.completions.create(
model="xuss/kitsune",
xuss_tools=True, # 或 ["web_search", "read_skill"]
messages=[{"role": "user",
"content": "搜索网络了解最新 Python 版本并总结。"}],
)
print(r.choices[0].message.content){
"model": "xuss/kitsune",
"xuss_tools": true,
"messages": [{"role": "user", "content": "打开 https://example.com 并告诉我页面标题。"}]
}| 工具 | 作用 |
|---|---|
web_search | 网络搜索(SearXNG 元搜索):标题、URL 与摘要 |
fetch_url | 在服务端抓取 HTTP(S) URL 并返回其文本(HTML 转为文本) |
browser_render | 在真实无头浏览器中打开页面:HTTP 状态、标题、可见文本、控制台错误、失败请求、布局指标、可选 JS eval |
read_skill | 将下方某个参考技能(完整指南)加载到模型上下文 |
这些都是只读的:不访问文件、数据库、主机或你的账户。会改变内容的工具(文件管理、DNS、数据库等)仍由你亲自掌控,故意不开放。
- 非流式: 服务端运行工具循环(最多 6 轮)并返回最终答案;
usage(及计费)覆盖每一轮。 - 流式(
"stream": true):工具在服务端运行,随后最终答案照常以 SSE 流式返回。 - 如果你同时传入自己的
tools,模型可同时调用两者 —— XUSS 执行自己的工具,并把你的工具调用通过tool_calls交回给你执行(标准行为)。 - 运行时发现它们:
GET /v1/tools(定义)与GET /v1/skills(下方列表)。
可用技能
read_skill 会把其中任一技能的完整参考文档加载到上下文 —— 只需告诉模型要用哪个(例如“使用 product-design 技能”)。
| 技能 id | 涵盖 |
|---|---|
telegram-bots | 完整的 Telegram Bot API 10.3:每个方法/类型、aiogram 3 示例、支付/Stars、Webhook、高级表情/礼物、富消息与流式草稿 |
product-design | 看起来是刻意设计的网站/页面/图库/UI:设计令牌、反“模板感”规则、布局、照片壁纸图库 |
cybersecurity | 编写与审计安全代码:注入/XSS/CSRF/IDOR、密钥管理、机器人安全、事件响应 |
telegram-miniapps | Telegram WebApp:initData 鉴权、主题变量、MainButton/BackButton、Stars、部署 |
shop-bot | 完整的 Telegram 商店机器人:目录、购物车、订单、管理面板、配送、支付流程 |
payments | Click/Payme/Paylov/Uzum + Crypto Pay + Telegram Stars:发票、Webhook 校验、幂等性 |
php-web | PHP 站点与 WordPress:结构、PDO、鉴权/CSRF、模板、安全、部署 |
ai-integration | 在你的应用中集成 LLM:聊天/流式、RAG、提示工程、成本限制、API 密钥安全 |
python-backend | 生产级 Python:机器人、FastAPI/Flask、asyncio 规范、数据库访问、run 服务、错误处理 |
node-backend | Node/TypeScript 后端与机器人:Express/Fastify/Telegraf、环境、进程管理、错误 |
databases | MySQL/PostgreSQL/SQLite:模式设计、索引、迁移、事务、备份 |
rest-api | API 设计:鉴权、校验、分页、统一错误结构、限流、Webhook 签名 |
deployment-ops | 在此主机上部署项目:域名/DNS/SSL、反向代理、端口、cron、备份、日志 |
git-github | git 工作流、部署密钥、自动部署 Webhook、密钥卫生、回滚 |
scraping-automation | 合规的爬虫与监控:结构化来源、退避、去重、调度、告警 |
seo | 技术 SEO:标题、结构化数据、站点地图、hreflang、索引(Google 与 Yandex) |
media-pipeline | 图像/视频流水线:缩放、WebP、缩略图、压缩、ffmpeg 预览 |
i18n-localization | uz/ru/en + RTL:字符串字典、数字/日期/复数格式、机器人语言、hreflang |
testing-quality | 运行/验证/调试规范、单元测试、lint、说“完成”前的审查习惯 |
analytics-monitoring | 可用性检查、错误跟踪、每日统计、隐私友好的分析与告警 |
legal-templates | 隐私/条款/退款页面 + 同意 + 数据删除流程(实用基线) |
react-best-practices | React/Next.js 性能:请求瀑布、包体积、渲染、注水、重渲染 |
mobile-design | 原生移动 UX:平台模式、触摸心理、移动性能 |
senior-frontend | 资深前端工程:架构、组件、性能评审 |
senior-backend | 资深后端工程:API/数据库设计、扩展、代码评审 |
senior-security | 安全架构、威胁建模、密码学实现、审计 |
ui-design-system | 设计令牌、组件、交付;从品牌色生成令牌系统 |
tgbot-clone | 安全克隆 Telegram 机器人功能:探测、功能梳理、实现与测试 |
product-layers | 分层产品/UX 方法:需求 → 策略 → 概念模型 → 表面 |
find-skills | 为代理项目寻找并安装可复用技能 |
结构化输出(JSON 模式)
将 response_format 设为 {"type":"json_object"} 并指示模型输出 JSON。回复的 content 是一个 JSON 字符串。
r = client.chat.completions.create(
model="xuss/kitsune",
response_format={"type": "json_object"},
messages=[{"role": "user",
"content": "返回键为 a 和 b 的 JSON,a=1,b=2"}],
)
import json
print(json.loads(r.choices[0].message.content)) # {'a': 1, 'b': 2}务必防御式解析,并在提示中描述你想要的精确结构。
计费与 token 统计
- 费用从你的 XUSS 余额扣除(可在面板充值)。
- 按 token 以模型的 API 价格计费:输入(缓存未命中)、缓存命中(支持时更便宜)、输出。
- 每个请求的
usage报告prompt_tokens、completion_tokens和total_tokens。 - 面板 API 页面显示支出、请求数、token 数、按模型和按密钥的明细,以及最近调用日志,可选范围(今天、7/30/90 天、本月/上月、全部)。
- 余额不足时请求以 402 拒绝。
费用公式(每个请求):
cost = cache_miss_tokens × price_in
+ cache_hit_tokens × price_cache
+ completion_tokens × price_out(价格为每 token;除以 1,000,000 得每百万价格。)
限流与配额
| 范围 | 默认 |
|---|---|
| 每用户 | 300 请求 / 分钟 |
| 每 API 密钥 | 600 请求 / 分钟 |
超出限制返回 429,带有 Retry-After 语义(退避后重试)。请求体上限为 25 MB。
错误
错误遵循 OpenAI 错误格式:
{
"error": {
"message": "Model 'xuss/foo' not found",
"type": "invalid_request_error",
"param": "model",
"code": "model_not_found"
}
}| 状态 | type / code | 含义 |
|---|---|---|
| 400 | invalid_request_error | 请求无效(字段缺失/无效、请求体无法解析) |
| 401 | authentication_error · invalid_api_key, key_expired | API 密钥缺失、无效或已过期 |
| 402 | insufficient_quota · key_spend_limit_reached | 余额为空或密钥达到支出上限 |
| 403 | permission_error | 未为你的账户启用 API,或账户已禁用 |
| 404 | invalid_request_error · model_not_found | 未知模型 |
| 413 | invalid_request_error | 请求体过大(> 25 MB) |
| 422 | invalid_request_error | 请求负载无效(结构) |
| 429 | rate_limit_error · rate_limit_exceeded | 超出限流 —— 请放慢 |
| 500 / 502 | api_error · upstream_error | 上游临时故障 —— 退避重试 |
| 503 | api_error · service_unavailable | AI API 当前已禁用 |
当错误涉及特定请求字段时会设置 param。标准 SDK 直接读取 error.message(和 error.code)。
当流已开始后,临时故障也会以一条以“The model is temporarily unavailable…”开头的普通助手消息形式返回。
与兼容 OpenAI 的工具一起使用
任何支持自定义 OpenAI 基础 URL 的客户端都可用。设置:
- 基础 URL:
https://xuss.us/v1 - API 密钥: 你的
xsk-…密钥 - 模型: 例如
xuss/kitsune
示例:
# open-webui / LibreChat / Cursor / Cline / Continue / LangChain:
# set the OpenAI base URL to https://xuss.us/v1 and paste your key环境变量风格(许多工具支持):
export OPENAI_BASE_URL="https://xuss.us/v1"
export OPENAI_API_KEY="xsk-YOUR_KEY"LangChain(Python):
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="xuss/kitsune", base_url="https://xuss.us/v1",
api_key="xsk-YOUR_KEY")
print(llm.invoke("你好").content)高级参数
以下参数被接受并在支持时透传给模型:top_p、stop、seed、presence_penalty、frequency_penalty、logit_bias、user、n、parallel_tool_calls、tool_choice。
常见问题
需要单独订阅吗? 不需要。按 token 从 XUSS 余额付费。
使用哪些模型 id? 正好是 GET /v1/models 中的 id(例如 xuss/kitsune)。像“Kitsune”这样的显示名称显示在面板中。
可以发送图像吗? 可以,发送给标记为 "vision": true 的模型。
我的数据会用于训练吗? 不会 —— 请求被代理到模型以生成你的答案,不用于训练。
如果某个提供商缓慢或宕机会怎样? 请求会被透明地在备用容量上重试;你保持相同的模型 id 和价格。
如何轮换密钥? 创建新密钥,将应用切换过去,然后在面板中吊销旧密钥。
支持
- 面板:https://xuss.us/panel/api
- 从面板仪表板提交工单与 Telegram 支持
- 邮箱:support@xuss.us