Ai00 API 文档
本页介绍 Ai00 Server v0.7.1 当前提供的推理与管理接口。如果你第一次调用 Ai00,可以先完成下面的最小聊天请求;需要查找字段时,再展开对应接口的请求主体和响应结构。
- 默认地址:
http://localhost:65530 - Swagger UI:http://localhost:65530/api-docs
- OpenAPI JSON:http://localhost:65530/api-docs/openapi.json
- 上游路由源码:crates/ai00-server/src/api
发送第一个聊天请求
开始之前,请先按照 Ai00 轻松使用 启动服务并加载一个 RWKV 模型。可以先查询当前模型:
curl http://localhost:65530/api/oai/v1/models如果响应的 data 中出现模型名称,说明服务和模型已经准备完成。接着发送一条最小聊天请求:
curl http://localhost:65530/api/oai/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"messages": [
{ "role": "user", "content": "请用一句话介绍 RWKV" }
],
"max_tokens": 128,
"stream": false
}'$body = @{
messages = @(
@{ role = "user"; content = "请用一句话介绍 RWKV" }
)
max_tokens = 128
stream = $false
} | ConvertTo-Json -Depth 4
Invoke-RestMethod `
-Uri "http://localhost:65530/api/oai/v1/chat/completions" `
-Method Post `
-ContentType "application/json" `
-Body $body成功响应的 choices[0].message.content 是模型生成的回答。如果请求无法连接,请先确认 Ai00 的监听地址、端口和 TLS 配置;如果接口可以访问但不能生成,请检查模型是否已经加载,以及终端中是否出现显存或模型格式错误。
上面的请求只使用了最必要的字段。names、template、采样器和 State 等配置可以在确认基础调用成功后逐步添加。
按任务选择接口
大多数应用只会使用聊天补全或文本续写。State、候选排序和管理接口用于更具体的集成场景,不需要在第一次调用时全部实现。
OpenAI 风格与推理接口
| 方法与路径 | 说明 |
|---|---|
POST /api/oai/v1/chat/completions | 聊天补全,支持普通和 SSE 流式响应 |
POST /api/oai/v1/completions | 单条或批量文本续写 |
POST /api/oai/v1/chooses | 按困惑度为候选文本排序 |
POST /api/oai/v1/states | 从输入文本生成 RWKV State |
POST /api/oai/v1/embeds | 可选外部 Embedding 模型;仅启用 embed feature 时存在 |
GET /api/oai/v1/models | 返回当前模型名称 |
/api/oai/v1/embeds 使用独立的文本 Embedding 模型,并不是从当前加载的 RWKV 模型中提取向量。只需要聊天或续写时,可以忽略这个接口。
运行时与管理接口
| 方法与路径 | 说明 |
|---|---|
GET /api/adapters | 列出可用 GPU / WebGPU Adapter |
GET /api/models/info | 当前模型、量化、LoRA、State 等运行时信息 |
GET /api/models/list | 列出模型目录中的模型 |
GET /api/models/state | 每半秒推送运行时信息的 SSE |
POST /api/auth/exchange | 使用 app_id / app_secret 换取管理员 JWT |
POST /admin/models/load | 加载模型、LoRA 和初始 State |
POST /admin/models/save | 将当前模型保存为 prefab |
GET /admin/models/unload | 卸载当前运行时 |
POST /admin/files/unzip | 解压服务器文件 |
POST /admin/files/dir、/admin/files/ls | 列出服务器目录 |
POST /admin/files/config/load | 读取配置文件 |
POST /admin/files/config/save | 写入配置文件 |
聊天补全
聊天补全适合多轮对话,也是普通应用最常用的接口。每次请求应把当前对话所需的消息放入 messages;Ai00 会按照 template 将它们拼接后交给 RWKV 模型。
/api/oai/v1/chat/completions请求主体application/json
messagesMessage | array<Message>可选收起子字段
roleSystem | User | Assistant | Observation必填contentstring必填namesobject<Role, string>可选templateobject可选收起子字段
recordstring可选{role}: {content}prefixstring可选{assistant}:sepstring可选\\n\\nstateuuid | StateValue | StateFile可选max_tokensinteger可选256stopstring | array<string>可选\\n\\nstreamboolean可选falsebiasobject<token_id, number>可选bnf_schemastring | null可选samplerNucleus | Mirostat | Typical | null可选top_pnumber可选0.5top_kinteger可选128temperaturenumber可选1.0非流式响应200application/json
objectstring始终返回modelstring始终返回choicesarray<ChatChoice>始终返回usageTokenCounter始终返回流式响应200text/event-stream
objectstring始终返回choices[].deltaobject始终返回choices[].finish_reasonstop | length | content_filter | null始终返回文本续写
文本续写直接接在 prompt 后生成内容,不会自动组织 system、user、assistant 等聊天角色。它适合补全文本、批量续写,或由你的应用自行拼接提示词的场景。
/api/oai/v1/completions请求主体application/json
promptstring | array<string>可选stateuuid | StateValue | StateFile可选max_tokensinteger可选256stopstring | array<string>可选\\n\\nstreamboolean可选falsebiasobject<token_id, number>可选bnf_schemastring | null可选samplerNucleus | Mirostat | Typical | null可选top_p / top_k / temperaturenumber可选非流式响应200application/json
objectstring始终返回choicesarray<CompletionChoice>始终返回usageTokenCounter始终返回候选排序
如果你的应用已经准备了多个候选答案,可以使用这个接口计算每个候选项的困惑度,并让 Ai00 按匹配程度排序。困惑度越低,表示候选文本越符合当前模型对输入内容的预测。
/api/oai/v1/chooses请求主体application/json
inputstring | array<string>可选choicesarray<string>可选calibrateboolean可选falsestateuuid | StateValue | StateFile可选成功响应200application/json
data[].indexinteger始终返回data[].rankinteger始终返回data[].choicestring始终返回data[].perplexitynumber始终返回生成 State
RWKV State 可以理解为模型阅读一段文本后的内部状态。这个接口适合预先处理固定背景、角色设定或较长的公共前缀,再在后续请求中复用结果。返回的 State 数据可能很大,请不要把完整响应直接写入普通业务日志。
/api/oai/v1/states请求主体application/json
inputstring | array<string>可选stateuuid | StateValue | StateFile可选成功响应200application/json
data[].dataarray<number>始终返回data[].shape[integer, integer, integer, integer]始终返回usageTokenCounter始终返回外部 Embedding 模型
这个接口不使用当前加载的 RWKV 模型。只有在 Ai00 构建时启用了 embed feature,并且另外加载了文本 Embedding 模型时,路由才可用。
/api/oai/v1/embeds请求主体application/json
inputstring可选max_tokensinteger可选510prefixstring可选query:成功响应200application/json
modelstring始终返回data[].chunksarray<ChunkData>始终返回可用性feature-gated
routeconditionalmodelconditional模型信息
在发送生成请求前,可以先调用这个接口确认 Ai00 当前加载的是哪个模型。它也适合作为应用启动时的简单连通性检查。
/api/oai/v1/models成功响应200application/json
dataarray<ModelChoice>始终返回data[].objectstring始终返回data[].idstring始终返回采样器格式
普通调用可以直接使用请求顶层的 top_p、top_k 和 temperature。只有需要完整控制采样方法时,才传入 sampler 对象;一旦提供 sampler,其中的配置会覆盖顶层采样参数。
Nucleus
{
"type": "Nucleus",
"top_p": 0.5,
"top_k": 128,
"temperature": 1,
"presence_penalty": 0.3,
"frequency_penalty": 0.3,
"penalty_decay": 0.99654026
}Mirostat
{
"type": "Mirostat",
"tau": 3,
"rate": 0.1
}Typical
{
"type": "Typical",
"tau": 0.5,
"top_k": 128,
"temperature": 1,
"presence_penalty": 0.3,
"frequency_penalty": 0.3,
"penalty_decay": 0.99654026
}管理员鉴权
推理接口用于生成内容,管理接口则可以加载模型、修改配置或操作服务器文件。两类接口应使用不同的访问控制策略。
/admin/* 会读取、写入或重新加载服务器文件。生产环境应关闭 force_pass,通过 /api/auth/exchange 获取管理员 JWT,并把管理端点限制在可信网络内。
先在 Config.toml 中配置管理应用的 app_id 和 app_secret,再调用下面的接口换取 JWT。不要把 app_secret 写入浏览器端代码或公开仓库。
/api/auth/exchange请求主体application/json
app_idstring必填app_secretstring必填响应200 / 400 / 403application/json
tokenstring | null始终返回codeinteger始终返回messagestring | null始终返回换取令牌后,推荐通过 Authorization: Bearer <token> 请求头调用管理接口。查询参数 admin_token=<token> 也能提交令牌,但它更容易出现在代理和访问日志中,不建议在生产环境使用。
加载模型、LoRA 与 State
这个管理接口会销毁当前运行时,并按照请求内容重新加载模型。第一次调试时建议只填写 model_path 和必要的精度参数;确认模型能够加载后,再逐步加入 LoRA、State 和量化设置。
/admin/models/load请求主体application/json
model_pathstring可选loraarray<Lora>可选收起子字段
pathstring必填alphanumber可选1.0statearray<State>可选收起子字段
pathstring必填namestring | null可选iduuid可选defaultboolean可选falsequantinteger可选0quant_typeInt8 | NF4可选precisionFp16 | Fp32可选Fp16token_chunk_sizeinteger可选128max_batchinteger可选8tokenizer_pathstring可选bnfobject可选adapterAuto | Economical | Manual(index)可选Auto成功响应200运行时加载成功;响应主体为空。
路径错误404模型、LoRA 或 State 路径越出允许目录;响应主体为空。
加载失败500模型加载失败;响应主体为空。
如果不确定应该选择哪张显卡,先把 adapter 设置为 "Auto"。经济模式写作 "Economical";手动选择通常写作 { "Manual": 0 },其中数字来自 GET /api/adapters 返回的显卡索引。
其他管理端点
下面列出 WebUI 和自动化部署可能使用的管理接口。普通聊天客户端不需要调用这些端点。
| 端点 | 请求与响应 |
|---|---|
POST /admin/models/save | { "path": "model.prefab" };成功返回空 200 |
GET /admin/models/unload | 无请求主体;卸载完成后返回空 200 |
GET /api/models/info | 返回 reload、model、states 完整运行时信息 |
GET /api/models/state | SSE,每半秒发送一次运行时信息 |
GET /api/adapters | 返回字符串数组,例如 ["NVIDIA ...", "AMD ..."] |
GET /api/models/list | 返回允许模型目录中的模型信息 |
文件管理端点接收服务器路径,适合 WebUI 自身使用,不建议作为通用公网 API。调用 /admin/files/unzip、dir/ls、config/load 或 config/save 前,应同时使用 JWT、反向代理访问控制和独立的模型目录权限。
响应与类型约定
下面这些规则在多个接口中重复出现。开发客户端时可以集中实现,避免为每个端点编写不同的解析逻辑:
- Ai00 的 token 统计字段是
prompt、completion、total。 finish_reason可能是stop、length、content_filter或null。stop、prompt、input使用 Ai00 的Array<T>类型,通常同时接受单值和数组。state可以是 UUID,也可以传完整 State 数据或 State 文件描述对象。- 流式聊天使用
chat.completion.chunk;流式续写使用text_completion.chunk。
历史与兼容接口
以下路径和字段仅用于维护历史客户端,不应作为新集成的实现依据。标记为“已移除”的接口在当前版本中不可用。
兼容路径
| 历史或兼容路径 | 已确认版本状态 | 当前接口 |
|---|---|---|
POST /api/oai/chat/completions | v0.7.1 仍兼容 | POST /api/oai/v1/chat/completions |
POST /api/oai/completions | v0.7.1 仍兼容 | POST /api/oai/v1/completions |
POST /api/oai/chooses | v0.7.1 仍兼容 | POST /api/oai/v1/chooses |
POST /api/oai/states | v0.7.1 仍兼容 | POST /api/oai/v1/states |
POST /api/oai/embeds | v0.7.1 仍兼容 | POST /api/oai/v1/embeds |
GET /api/oai/models | v0.7.1 仍兼容 | GET /api/oai/v1/models |
已移除接口
| 历史接口 | 使用版本 | 当前替代方式 |
|---|---|---|
POST /api/oai/embeddings、POST /api/oai/v1/embeddings | v0.4.9–v0.5.14;v0.6.0 移除 | POST /api/oai/v1/embeds |
POST /admin/models/state/load | v0.5.0–v0.5.14;v0.6.0 移除 | 在 POST /admin/models/load 的 state 字段中加载 |
兼容请求字段
| 历史字段 | v0.7.1 当前字段 | 适用请求 |
|---|---|---|
logit_bias | bias | 聊天补全、文本续写 |
sampler_override | sampler | 聊天补全、文本续写 |
learning_rate | rate | Mirostat 采样器 |